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); }