From: Greg Beaver Date: Sun, 15 Feb 2009 19:22:42 +0000 (+0000) Subject: fix getting/setting of all 16/32 values in zip X-Git-Tag: RELEASE_1_3_5~116 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9221abd00e2e8c8108ea138ea6d9fe16b6d16820;p=php fix getting/setting of all 16/32 values in zip --- diff --git a/ext/phar/zip.c b/ext/phar/zip.c index b03b246dc6..c12f53b5b9 100644 --- a/ext/phar/zip.c +++ b/ext/phar/zip.c @@ -19,12 +19,19 @@ #include "phar_internal.h" #ifdef WORDS_BIGENDIAN -# define PHAR_GET_32(buffer) (((((unsigned char*)(buffer))[3]) << 24) \ - | ((((unsigned char*)(buffer))[2]) << 16) \ - | ((((unsigned char*)(buffer))[1]) << 8) \ - | (((unsigned char*)(buffer))[0])) -# define PHAR_GET_16(buffer) (((((unsigned char*)(buffer))[1]) << 8) \ - | (((unsigned char*)(buffer))[0])) +static inline php_uint32 phar_fix_32(php_uint32 buffer) +{ + return ((((unsigned char *)&buffer)[3]) << 24) | + ((((unsigned char *)&buffer)[2]) << 16) | + ((((unsigned char *)&buffer)[1]) << 8) | + (((unsigned char *)&buffer)[0]); +} +static inline php_uint16 phar_fix_16(php_uint16 buffer) +{ + return ((((unsigned char *)&buffer)[1]) << 8) | ((unsigned char *)&buffer)[0]; +} +# define PHAR_GET_32(buffer) phar_fix_32((php_uint32)(buffer)) +# define PHAR_GET_16(buffer) phar_fix_16((php_uint16)(buffer)) # define PHAR_SET_32(buffer) PHAR_GET_32(buffer) # define PHAR_SET_16(buffer) PHAR_GET_16(buffer) #else @@ -687,7 +694,6 @@ static int phar_zip_changed_apply(void *data, void *arg TSRMLS_DC) /* {{{ */ php_uint32 newcrc32; off_t offset; int not_really_modified = 0; - entry = (phar_entry_info *)data; p = (struct _phar_zip_pass*) arg;