From e7ef4f5294a13a65af0595f67d13bd7b284dd447 Mon Sep 17 00:00:00 2001 From: Tomasz Kojm Date: Tue, 30 May 2006 15:19:48 +0000 Subject: [PATCH] fix alignment problem on SPARC git-svn: trunk@2002 --- clamav-devel/ChangeLog | 4 ++++ clamav-devel/libclamav/unzip.c | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clamav-devel/ChangeLog b/clamav-devel/ChangeLog index a393b20fc..92b305f89 100644 --- a/clamav-devel/ChangeLog +++ b/clamav-devel/ChangeLog @@ -1,3 +1,7 @@ +Tue May 30 17:18:15 CEST 2006 (tk) +---------------------------------- + * libclamav/unzip.c: fix alignment problem on SPARC reported by Andy Fiddaman + Tue May 30 15:45:24 CEST 2006 (tk) ---------------------------------- * libclamav/others.h: add missing brackets to some endian macros, spotted diff --git a/clamav-devel/libclamav/unzip.c b/clamav-devel/libclamav/unzip.c index e3890dfba..7700a84df 100644 --- a/clamav-devel/libclamav/unzip.c +++ b/clamav-devel/libclamav/unzip.c @@ -175,6 +175,7 @@ int __zip_parse_root_directory(int fd, struct zip_disk_trailer *trailer, zip_dir uint32_t u_rootsize = EC32(trailer->z_rootsize); uint32_t u_rootseek = EC32(trailer->z_rootseek) + start; uint16_t u_extras, u_comment, u_namlen, u_flags; + char *pt; if(fstat(fd, &sb) == -1) { @@ -256,8 +257,12 @@ int __zip_parse_root_directory(int fd, struct zip_disk_trailer *trailer, zip_dir break; } - hdr->d_reclen = (uint16_t) (sizeof(zip_dir_hdr) + u_namlen + 1); + pt = (char *) hdr + sizeof(zip_dir_hdr) + u_namlen + 1; + pt += ((long) pt) & 1; + pt += ((long) pt) & 2; + hdr->d_reclen = (uint16_t) (pt - (char *) hdr); p_reclen = &hdr->d_reclen; + hdr = (zip_dir_hdr *) ((char *) hdr + hdr->d_reclen); }