Index: third_party/zlib/inftrees.c |
diff --git a/third_party/zlib/inftrees.c b/third_party/zlib/inftrees.c |
index 44d89cf24e1c2aa20c3b4f0e68bff0d15ae3a5d7..11e9c52accbe8e2cf4e502f88ce89ccfa4f992e5 100644 |
--- a/third_party/zlib/inftrees.c |
+++ b/third_party/zlib/inftrees.c |
@@ -1,5 +1,5 @@ |
/* inftrees.c -- generate Huffman trees for efficient decoding |
- * Copyright (C) 1995-2013 Mark Adler |
+ * Copyright (C) 1995-2010 Mark Adler |
* For conditions of distribution and use, see copyright notice in zlib.h |
*/ |
@@ -9,7 +9,7 @@ |
#define MAXBITS 15 |
const char inflate_copyright[] = |
- " inflate 1.2.8 Copyright 1995-2013 Mark Adler "; |
+ " inflate 1.2.5 Copyright 1995-2010 Mark Adler "; |
/* |
If you use the zlib library in a product, an acknowledgment is welcome |
in the documentation of your product. If for some reason you cannot |
@@ -62,7 +62,7 @@ |
35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; |
static const unsigned short lext[31] = { /* Length codes 257..285 extra */ |
16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, |
- 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78}; |
+ 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195}; |
static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ |
1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, |
257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, |
@@ -208,8 +208,8 @@ |
mask = used - 1; /* mask for comparing low */ |
/* check available table space */ |
- if ((type == LENS && used > ENOUGH_LENS) || |
- (type == DISTS && used > ENOUGH_DISTS)) |
+ if ((type == LENS && used >= ENOUGH_LENS) || |
+ (type == DISTS && used >= ENOUGH_DISTS)) |
return 1; |
/* process all codes and make table entries */ |
@@ -277,8 +277,8 @@ |
/* check for enough space */ |
used += 1U << curr; |
- if ((type == LENS && used > ENOUGH_LENS) || |
- (type == DISTS && used > ENOUGH_DISTS)) |
+ if ((type == LENS && used >= ENOUGH_LENS) || |
+ (type == DISTS && used >= ENOUGH_DISTS)) |
return 1; |
/* point entry in root table to sub-table */ |
@@ -289,14 +289,38 @@ |
} |
} |
- /* fill in remaining table entry if code is incomplete (guaranteed to have |
- at most one remaining entry, since if the code is incomplete, the |
- maximum code length that was allowed to get this far is one bit) */ |
- if (huff != 0) { |
- here.op = (unsigned char)64; /* invalid code marker */ |
- here.bits = (unsigned char)(len - drop); |
- here.val = (unsigned short)0; |
- next[huff] = here; |
+ /* |
+ Fill in rest of table for incomplete codes. This loop is similar to the |
+ loop above in incrementing huff for table indices. It is assumed that |
+ len is equal to curr + drop, so there is no loop needed to increment |
+ through high index bits. When the current sub-table is filled, the loop |
+ drops back to the root table to fill in any remaining entries there. |
+ */ |
+ here.op = (unsigned char)64; /* invalid code marker */ |
+ here.bits = (unsigned char)(len - drop); |
+ here.val = (unsigned short)0; |
+ while (huff != 0) { |
+ /* when done with sub-table, drop back to root table */ |
+ if (drop != 0 && (huff & mask) != low) { |
+ drop = 0; |
+ len = root; |
+ next = *table; |
+ here.bits = (unsigned char)len; |
+ } |
+ |
+ /* put invalid code marker in table */ |
+ next[huff >> drop] = here; |
+ |
+ /* backwards increment the len-bit code huff */ |
+ incr = 1U << (len - 1); |
+ while (huff & incr) |
+ incr >>= 1; |
+ if (incr != 0) { |
+ huff &= incr - 1; |
+ huff += incr; |
+ } |
+ else |
+ huff = 0; |
} |
/* set return parameters */ |