From: Michihiro NAKAJIMA Date: Tue, 14 Feb 2012 22:15:50 +0000 (+0900) Subject: Fix issue 241:CAB decompression not 64bit compatible. X-Git-Tag: v3.0.4~2^2~88 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a1e0ee90fddc7ec48d99778fa8d8f54d21e099fb;p=thirdparty%2Flibarchive.git Fix issue 241:CAB decompression not 64bit compatible. --- diff --git a/libarchive/archive_read_disk_windows.c b/libarchive/archive_read_disk_windows.c index aeffbe82a..61889eaff 100644 --- a/libarchive/archive_read_disk_windows.c +++ b/libarchive/archive_read_disk_windows.c @@ -397,7 +397,6 @@ archive_read_disk_new(void) a->lookup_gname = trivial_lookup_gname; a->enable_copyfile = 1; a->traverse_mount_points = 1; - a->entry_wd_fd = -1; return (&a->archive); } diff --git a/libarchive/archive_read_support_format_cab.c b/libarchive/archive_read_support_format_cab.c index d663e2e3c..b634ed394 100644 --- a/libarchive/archive_read_support_format_cab.c +++ b/libarchive/archive_read_support_format_cab.c @@ -2182,11 +2182,11 @@ lzx_translation(struct lzx_stream *strm, void *p, size_t size, uint32_t offset) end = b + size - 10; while (b < end && (b = memchr(b, 0xE8, end - b)) != NULL) { size_t i = b - (unsigned char *)p; - long cp, displacement, value; + int32_t cp, displacement, value; cp = offset + i; value = archive_le32dec(&b[1]); - if (value >= -cp && value < (long)ds->translation_size) { + if (value >= -cp && value < (int32_t)ds->translation_size) { if (value >= 0) displacement = value - cp; else @@ -2477,7 +2477,10 @@ lzx_read_blocks(struct lzx_stream *strm, int last) */ /* Skip padding to align following field on * 16-bit boundary. */ - lzx_br_consume_unalined_bits(br); + if (br->cache_avail == 32 || br->cache_avail == 16) + lzx_br_consume(br, 16); + else + lzx_br_consume_unalined_bits(br); /* Preparation to read repeated offsets R0,R1 and R2. */ ds->rbytes_avail = 0; ds->state = ST_RD_R0;