| 1 | cycrow | 1 | /* inftrees.c -- generate Huffman trees for efficient decoding
 | 
        
           |  |  | 2 |  * Copyright (C) 1995-2010 Mark Adler
 | 
        
           |  |  | 3 |  * For conditions of distribution and use, see copyright notice in zlib.h
 | 
        
           |  |  | 4 |  */
 | 
        
           |  |  | 5 |   | 
        
           |  |  | 6 | #include "zutil.h"
 | 
        
           |  |  | 7 | #include "inftrees.h"
 | 
        
           |  |  | 8 |   | 
        
           |  |  | 9 | #define MAXBITS 15
 | 
        
           |  |  | 10 |   | 
        
           |  |  | 11 | const char inflate_copyright[] =
 | 
        
           |  |  | 12 |    " inflate 1.2.5 Copyright 1995-2010 Mark Adler ";
 | 
        
           |  |  | 13 | /*
 | 
        
           |  |  | 14 |   If you use the zlib library in a product, an acknowledgment is welcome
 | 
        
           |  |  | 15 |   in the documentation of your product. If for some reason you cannot
 | 
        
           |  |  | 16 |   include such an acknowledgment, I would appreciate that you keep this
 | 
        
           |  |  | 17 |   copyright string in the executable of your product.
 | 
        
           |  |  | 18 |  */
 | 
        
           |  |  | 19 |   | 
        
           |  |  | 20 | /*
 | 
        
           |  |  | 21 |    Build a set of tables to decode the provided canonical Huffman code.
 | 
        
           |  |  | 22 |    The code lengths are lens[0..codes-1].  The result starts at *table,
 | 
        
           |  |  | 23 |    whose indices are 0..2^bits-1.  work is a writable array of at least
 | 
        
           |  |  | 24 |    lens shorts, which is used as a work area.  type is the type of code
 | 
        
           |  |  | 25 |    to be generated, CODES, LENS, or DISTS.  On return, zero is success,
 | 
        
           |  |  | 26 |    -1 is an invalid code, and +1 means that ENOUGH isn't enough.  table
 | 
        
           |  |  | 27 |    on return points to the next available entry's address.  bits is the
 | 
        
           |  |  | 28 |    requested root table index bits, and on return it is the actual root
 | 
        
           |  |  | 29 |    table index bits.  It will differ if the request is greater than the
 | 
        
           |  |  | 30 |    longest code or if it is less than the shortest code.
 | 
        
           |  |  | 31 |  */
 | 
        
           |  |  | 32 | int ZLIB_INTERNAL inflate_table(type, lens, codes, table, bits, work)
 | 
        
           |  |  | 33 | codetype type;
 | 
        
           |  |  | 34 | unsigned short FAR *lens;
 | 
        
           |  |  | 35 | unsigned codes;
 | 
        
           |  |  | 36 | code FAR * FAR *table;
 | 
        
           |  |  | 37 | unsigned FAR *bits;
 | 
        
           |  |  | 38 | unsigned short FAR *work;
 | 
        
           |  |  | 39 | {
 | 
        
           |  |  | 40 |     unsigned len;               /* a code's length in bits */
 | 
        
           |  |  | 41 |     unsigned sym;               /* index of code symbols */
 | 
        
           |  |  | 42 |     unsigned min, max;          /* minimum and maximum code lengths */
 | 
        
           |  |  | 43 |     unsigned root;              /* number of index bits for root table */
 | 
        
           |  |  | 44 |     unsigned curr;              /* number of index bits for current table */
 | 
        
           |  |  | 45 |     unsigned drop;              /* code bits to drop for sub-table */
 | 
        
           |  |  | 46 |     int left;                   /* number of prefix codes available */
 | 
        
           |  |  | 47 |     unsigned used;              /* code entries in table used */
 | 
        
           |  |  | 48 |     unsigned huff;              /* Huffman code */
 | 
        
           |  |  | 49 |     unsigned incr;              /* for incrementing code, index */
 | 
        
           |  |  | 50 |     unsigned fill;              /* index for replicating entries */
 | 
        
           |  |  | 51 |     unsigned low;               /* low bits for current root entry */
 | 
        
           |  |  | 52 |     unsigned mask;              /* mask for low root bits */
 | 
        
           |  |  | 53 |     code here;                  /* table entry for duplication */
 | 
        
           |  |  | 54 |     code FAR *next;             /* next available space in table */
 | 
        
           |  |  | 55 |     const unsigned short FAR *base;     /* base value table to use */
 | 
        
           |  |  | 56 |     const unsigned short FAR *extra;    /* extra bits table to use */
 | 
        
           |  |  | 57 |     int end;                    /* use base and extra for symbol > end */
 | 
        
           |  |  | 58 |     unsigned short count[MAXBITS+1];    /* number of codes of each length */
 | 
        
           |  |  | 59 |     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
 | 
        
           |  |  | 60 |     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
 | 
        
           |  |  | 61 |         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
 | 
        
           |  |  | 62 |         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
 | 
        
           |  |  | 63 |     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
 | 
        
           |  |  | 64 |         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
 | 
        
           |  |  | 65 |         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 73, 195};
 | 
        
           |  |  | 66 |     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
 | 
        
           |  |  | 67 |         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
 | 
        
           |  |  | 68 |         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
 | 
        
           |  |  | 69 |         8193, 12289, 16385, 24577, 0, 0};
 | 
        
           |  |  | 70 |     static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
 | 
        
           |  |  | 71 |         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
 | 
        
           |  |  | 72 |         23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
 | 
        
           |  |  | 73 |         28, 28, 29, 29, 64, 64};
 | 
        
           |  |  | 74 |   | 
        
           |  |  | 75 |     /*
 | 
        
           |  |  | 76 |        Process a set of code lengths to create a canonical Huffman code.  The
 | 
        
           |  |  | 77 |        code lengths are lens[0..codes-1].  Each length corresponds to the
 | 
        
           |  |  | 78 |        symbols 0..codes-1.  The Huffman code is generated by first sorting the
 | 
        
           |  |  | 79 |        symbols by length from short to long, and retaining the symbol order
 | 
        
           |  |  | 80 |        for codes with equal lengths.  Then the code starts with all zero bits
 | 
        
           |  |  | 81 |        for the first code of the shortest length, and the codes are integer
 | 
        
           |  |  | 82 |        increments for the same length, and zeros are appended as the length
 | 
        
           |  |  | 83 |        increases.  For the deflate format, these bits are stored backwards
 | 
        
           |  |  | 84 |        from their more natural integer increment ordering, and so when the
 | 
        
           |  |  | 85 |        decoding tables are built in the large loop below, the integer codes
 | 
        
           |  |  | 86 |        are incremented backwards.
 | 
        
           |  |  | 87 |   | 
        
           |  |  | 88 |        This routine assumes, but does not check, that all of the entries in
 | 
        
           |  |  | 89 |        lens[] are in the range 0..MAXBITS.  The caller must assure this.
 | 
        
           |  |  | 90 |        1..MAXBITS is interpreted as that code length.  zero means that that
 | 
        
           |  |  | 91 |        symbol does not occur in this code.
 | 
        
           |  |  | 92 |   | 
        
           |  |  | 93 |        The codes are sorted by computing a count of codes for each length,
 | 
        
           |  |  | 94 |        creating from that a table of starting indices for each length in the
 | 
        
           |  |  | 95 |        sorted table, and then entering the symbols in order in the sorted
 | 
        
           |  |  | 96 |        table.  The sorted table is work[], with that space being provided by
 | 
        
           |  |  | 97 |        the caller.
 | 
        
           |  |  | 98 |   | 
        
           |  |  | 99 |        The length counts are used for other purposes as well, i.e. finding
 | 
        
           |  |  | 100 |        the minimum and maximum length codes, determining if there are any
 | 
        
           |  |  | 101 |        codes at all, checking for a valid set of lengths, and looking ahead
 | 
        
           |  |  | 102 |        at length counts to determine sub-table sizes when building the
 | 
        
           |  |  | 103 |        decoding tables.
 | 
        
           |  |  | 104 |      */
 | 
        
           |  |  | 105 |   | 
        
           |  |  | 106 |     /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
 | 
        
           |  |  | 107 |     for (len = 0; len <= MAXBITS; len++)
 | 
        
           |  |  | 108 |         count[len] = 0;
 | 
        
           |  |  | 109 |     for (sym = 0; sym < codes; sym++)
 | 
        
           |  |  | 110 |         count[lens[sym]]++;
 | 
        
           |  |  | 111 |   | 
        
           |  |  | 112 |     /* bound code lengths, force root to be within code lengths */
 | 
        
           |  |  | 113 |     root = *bits;
 | 
        
           |  |  | 114 |     for (max = MAXBITS; max >= 1; max--)
 | 
        
           |  |  | 115 |         if (count[max] != 0) break;
 | 
        
           |  |  | 116 |     if (root > max) root = max;
 | 
        
           |  |  | 117 |     if (max == 0) {                     /* no symbols to code at all */
 | 
        
           |  |  | 118 |         here.op = (unsigned char)64;    /* invalid code marker */
 | 
        
           |  |  | 119 |         here.bits = (unsigned char)1;
 | 
        
           |  |  | 120 |         here.val = (unsigned short)0;
 | 
        
           |  |  | 121 |         *(*table)++ = here;             /* make a table to force an error */
 | 
        
           |  |  | 122 |         *(*table)++ = here;
 | 
        
           |  |  | 123 |         *bits = 1;
 | 
        
           |  |  | 124 |         return 0;     /* no symbols, but wait for decoding to report error */
 | 
        
           |  |  | 125 |     }
 | 
        
           |  |  | 126 |     for (min = 1; min < max; min++)
 | 
        
           |  |  | 127 |         if (count[min] != 0) break;
 | 
        
           |  |  | 128 |     if (root < min) root = min;
 | 
        
           |  |  | 129 |   | 
        
           |  |  | 130 |     /* check for an over-subscribed or incomplete set of lengths */
 | 
        
           |  |  | 131 |     left = 1;
 | 
        
           |  |  | 132 |     for (len = 1; len <= MAXBITS; len++) {
 | 
        
           |  |  | 133 |         left <<= 1;
 | 
        
           |  |  | 134 |         left -= count[len];
 | 
        
           |  |  | 135 |         if (left < 0) return -1;        /* over-subscribed */
 | 
        
           |  |  | 136 |     }
 | 
        
           |  |  | 137 |     if (left > 0 && (type == CODES || max != 1))
 | 
        
           |  |  | 138 |         return -1;                      /* incomplete set */
 | 
        
           |  |  | 139 |   | 
        
           |  |  | 140 |     /* generate offsets into symbol table for each length for sorting */
 | 
        
           |  |  | 141 |     offs[1] = 0;
 | 
        
           |  |  | 142 |     for (len = 1; len < MAXBITS; len++)
 | 
        
           |  |  | 143 |         offs[len + 1] = offs[len] + count[len];
 | 
        
           |  |  | 144 |   | 
        
           |  |  | 145 |     /* sort symbols by length, by symbol order within each length */
 | 
        
           |  |  | 146 |     for (sym = 0; sym < codes; sym++)
 | 
        
           |  |  | 147 |         if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
 | 
        
           |  |  | 148 |   | 
        
           |  |  | 149 |     /*
 | 
        
           |  |  | 150 |        Create and fill in decoding tables.  In this loop, the table being
 | 
        
           |  |  | 151 |        filled is at next and has curr index bits.  The code being used is huff
 | 
        
           |  |  | 152 |        with length len.  That code is converted to an index by dropping drop
 | 
        
           |  |  | 153 |        bits off of the bottom.  For codes where len is less than drop + curr,
 | 
        
           |  |  | 154 |        those top drop + curr - len bits are incremented through all values to
 | 
        
           |  |  | 155 |        fill the table with replicated entries.
 | 
        
           |  |  | 156 |   | 
        
           |  |  | 157 |        root is the number of index bits for the root table.  When len exceeds
 | 
        
           |  |  | 158 |        root, sub-tables are created pointed to by the root entry with an index
 | 
        
           |  |  | 159 |        of the low root bits of huff.  This is saved in low to check for when a
 | 
        
           |  |  | 160 |        new sub-table should be started.  drop is zero when the root table is
 | 
        
           |  |  | 161 |        being filled, and drop is root when sub-tables are being filled.
 | 
        
           |  |  | 162 |   | 
        
           |  |  | 163 |        When a new sub-table is needed, it is necessary to look ahead in the
 | 
        
           |  |  | 164 |        code lengths to determine what size sub-table is needed.  The length
 | 
        
           |  |  | 165 |        counts are used for this, and so count[] is decremented as codes are
 | 
        
           |  |  | 166 |        entered in the tables.
 | 
        
           |  |  | 167 |   | 
        
           |  |  | 168 |        used keeps track of how many table entries have been allocated from the
 | 
        
           |  |  | 169 |        provided *table space.  It is checked for LENS and DIST tables against
 | 
        
           |  |  | 170 |        the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
 | 
        
           |  |  | 171 |        the initial root table size constants.  See the comments in inftrees.h
 | 
        
           |  |  | 172 |        for more information.
 | 
        
           |  |  | 173 |   | 
        
           |  |  | 174 |        sym increments through all symbols, and the loop terminates when
 | 
        
           |  |  | 175 |        all codes of length max, i.e. all codes, have been processed.  This
 | 
        
           |  |  | 176 |        routine permits incomplete codes, so another loop after this one fills
 | 
        
           |  |  | 177 |        in the rest of the decoding tables with invalid code markers.
 | 
        
           |  |  | 178 |      */
 | 
        
           |  |  | 179 |   | 
        
           |  |  | 180 |     /* set up for code type */
 | 
        
           |  |  | 181 |     switch (type) {
 | 
        
           |  |  | 182 |     case CODES:
 | 
        
           |  |  | 183 |         base = extra = work;    /* dummy value--not used */
 | 
        
           |  |  | 184 |         end = 19;
 | 
        
           |  |  | 185 |         break;
 | 
        
           |  |  | 186 |     case LENS:
 | 
        
           |  |  | 187 |         base = lbase;
 | 
        
           |  |  | 188 |         base -= 257;
 | 
        
           |  |  | 189 |         extra = lext;
 | 
        
           |  |  | 190 |         extra -= 257;
 | 
        
           |  |  | 191 |         end = 256;
 | 
        
           |  |  | 192 |         break;
 | 
        
           |  |  | 193 |     default:            /* DISTS */
 | 
        
           |  |  | 194 |         base = dbase;
 | 
        
           |  |  | 195 |         extra = dext;
 | 
        
           |  |  | 196 |         end = -1;
 | 
        
           |  |  | 197 |     }
 | 
        
           |  |  | 198 |   | 
        
           |  |  | 199 |     /* initialize state for loop */
 | 
        
           |  |  | 200 |     huff = 0;                   /* starting code */
 | 
        
           |  |  | 201 |     sym = 0;                    /* starting code symbol */
 | 
        
           |  |  | 202 |     len = min;                  /* starting code length */
 | 
        
           |  |  | 203 |     next = *table;              /* current table to fill in */
 | 
        
           |  |  | 204 |     curr = root;                /* current table index bits */
 | 
        
           |  |  | 205 |     drop = 0;                   /* current bits to drop from code for index */
 | 
        
           |  |  | 206 |     low = (unsigned)(-1);       /* trigger new sub-table when len > root */
 | 
        
           |  |  | 207 |     used = 1U << root;          /* use root table entries */
 | 
        
           |  |  | 208 |     mask = used - 1;            /* mask for comparing low */
 | 
        
           |  |  | 209 |   | 
        
           |  |  | 210 |     /* check available table space */
 | 
        
           |  |  | 211 |     if ((type == LENS && used >= ENOUGH_LENS) ||
 | 
        
           |  |  | 212 |         (type == DISTS && used >= ENOUGH_DISTS))
 | 
        
           |  |  | 213 |         return 1;
 | 
        
           |  |  | 214 |   | 
        
           |  |  | 215 |     /* process all codes and make table entries */
 | 
        
           |  |  | 216 |     for (;;) {
 | 
        
           |  |  | 217 |         /* create table entry */
 | 
        
           |  |  | 218 |         here.bits = (unsigned char)(len - drop);
 | 
        
           |  |  | 219 |         if ((int)(work[sym]) < end) {
 | 
        
           |  |  | 220 |             here.op = (unsigned char)0;
 | 
        
           |  |  | 221 |             here.val = work[sym];
 | 
        
           |  |  | 222 |         }
 | 
        
           |  |  | 223 |         else if ((int)(work[sym]) > end) {
 | 
        
           |  |  | 224 |             here.op = (unsigned char)(extra[work[sym]]);
 | 
        
           |  |  | 225 |             here.val = base[work[sym]];
 | 
        
           |  |  | 226 |         }
 | 
        
           |  |  | 227 |         else {
 | 
        
           |  |  | 228 |             here.op = (unsigned char)(32 + 64);         /* end of block */
 | 
        
           |  |  | 229 |             here.val = 0;
 | 
        
           |  |  | 230 |         }
 | 
        
           |  |  | 231 |   | 
        
           |  |  | 232 |         /* replicate for those indices with low len bits equal to huff */
 | 
        
           |  |  | 233 |         incr = 1U << (len - drop);
 | 
        
           |  |  | 234 |         fill = 1U << curr;
 | 
        
           |  |  | 235 |         min = fill;                 /* save offset to next table */
 | 
        
           |  |  | 236 |         do {
 | 
        
           |  |  | 237 |             fill -= incr;
 | 
        
           |  |  | 238 |             next[(huff >> drop) + fill] = here;
 | 
        
           |  |  | 239 |         } while (fill != 0);
 | 
        
           |  |  | 240 |   | 
        
           |  |  | 241 |         /* backwards increment the len-bit code huff */
 | 
        
           |  |  | 242 |         incr = 1U << (len - 1);
 | 
        
           |  |  | 243 |         while (huff & incr)
 | 
        
           |  |  | 244 |             incr >>= 1;
 | 
        
           |  |  | 245 |         if (incr != 0) {
 | 
        
           |  |  | 246 |             huff &= incr - 1;
 | 
        
           |  |  | 247 |             huff += incr;
 | 
        
           |  |  | 248 |         }
 | 
        
           |  |  | 249 |         else
 | 
        
           |  |  | 250 |             huff = 0;
 | 
        
           |  |  | 251 |   | 
        
           |  |  | 252 |         /* go to next symbol, update count, len */
 | 
        
           |  |  | 253 |         sym++;
 | 
        
           |  |  | 254 |         if (--(count[len]) == 0) {
 | 
        
           |  |  | 255 |             if (len == max) break;
 | 
        
           |  |  | 256 |             len = lens[work[sym]];
 | 
        
           |  |  | 257 |         }
 | 
        
           |  |  | 258 |   | 
        
           |  |  | 259 |         /* create new sub-table if needed */
 | 
        
           |  |  | 260 |         if (len > root && (huff & mask) != low) {
 | 
        
           |  |  | 261 |             /* if first time, transition to sub-tables */
 | 
        
           |  |  | 262 |             if (drop == 0)
 | 
        
           |  |  | 263 |                 drop = root;
 | 
        
           |  |  | 264 |   | 
        
           |  |  | 265 |             /* increment past last table */
 | 
        
           |  |  | 266 |             next += min;            /* here min is 1 << curr */
 | 
        
           |  |  | 267 |   | 
        
           |  |  | 268 |             /* determine length of next table */
 | 
        
           |  |  | 269 |             curr = len - drop;
 | 
        
           |  |  | 270 |             left = (int)(1 << curr);
 | 
        
           |  |  | 271 |             while (curr + drop < max) {
 | 
        
           |  |  | 272 |                 left -= count[curr + drop];
 | 
        
           |  |  | 273 |                 if (left <= 0) break;
 | 
        
           |  |  | 274 |                 curr++;
 | 
        
           |  |  | 275 |                 left <<= 1;
 | 
        
           |  |  | 276 |             }
 | 
        
           |  |  | 277 |   | 
        
           |  |  | 278 |             /* check for enough space */
 | 
        
           |  |  | 279 |             used += 1U << curr;
 | 
        
           |  |  | 280 |             if ((type == LENS && used >= ENOUGH_LENS) ||
 | 
        
           |  |  | 281 |                 (type == DISTS && used >= ENOUGH_DISTS))
 | 
        
           |  |  | 282 |                 return 1;
 | 
        
           |  |  | 283 |   | 
        
           |  |  | 284 |             /* point entry in root table to sub-table */
 | 
        
           |  |  | 285 |             low = huff & mask;
 | 
        
           |  |  | 286 |             (*table)[low].op = (unsigned char)curr;
 | 
        
           |  |  | 287 |             (*table)[low].bits = (unsigned char)root;
 | 
        
           |  |  | 288 |             (*table)[low].val = (unsigned short)(next - *table);
 | 
        
           |  |  | 289 |         }
 | 
        
           |  |  | 290 |     }
 | 
        
           |  |  | 291 |   | 
        
           |  |  | 292 |     /*
 | 
        
           |  |  | 293 |        Fill in rest of table for incomplete codes.  This loop is similar to the
 | 
        
           |  |  | 294 |        loop above in incrementing huff for table indices.  It is assumed that
 | 
        
           |  |  | 295 |        len is equal to curr + drop, so there is no loop needed to increment
 | 
        
           |  |  | 296 |        through high index bits.  When the current sub-table is filled, the loop
 | 
        
           |  |  | 297 |        drops back to the root table to fill in any remaining entries there.
 | 
        
           |  |  | 298 |      */
 | 
        
           |  |  | 299 |     here.op = (unsigned char)64;                /* invalid code marker */
 | 
        
           |  |  | 300 |     here.bits = (unsigned char)(len - drop);
 | 
        
           |  |  | 301 |     here.val = (unsigned short)0;
 | 
        
           |  |  | 302 |     while (huff != 0) {
 | 
        
           |  |  | 303 |         /* when done with sub-table, drop back to root table */
 | 
        
           |  |  | 304 |         if (drop != 0 && (huff & mask) != low) {
 | 
        
           |  |  | 305 |             drop = 0;
 | 
        
           |  |  | 306 |             len = root;
 | 
        
           |  |  | 307 |             next = *table;
 | 
        
           |  |  | 308 |             here.bits = (unsigned char)len;
 | 
        
           |  |  | 309 |         }
 | 
        
           |  |  | 310 |   | 
        
           |  |  | 311 |         /* put invalid code marker in table */
 | 
        
           |  |  | 312 |         next[huff >> drop] = here;
 | 
        
           |  |  | 313 |   | 
        
           |  |  | 314 |         /* backwards increment the len-bit code huff */
 | 
        
           |  |  | 315 |         incr = 1U << (len - 1);
 | 
        
           |  |  | 316 |         while (huff & incr)
 | 
        
           |  |  | 317 |             incr >>= 1;
 | 
        
           |  |  | 318 |         if (incr != 0) {
 | 
        
           |  |  | 319 |             huff &= incr - 1;
 | 
        
           |  |  | 320 |             huff += incr;
 | 
        
           |  |  | 321 |         }
 | 
        
           |  |  | 322 |         else
 | 
        
           |  |  | 323 |             huff = 0;
 | 
        
           |  |  | 324 |     }
 | 
        
           |  |  | 325 |   | 
        
           |  |  | 326 |     /* set return parameters */
 | 
        
           |  |  | 327 |     *table += used;
 | 
        
           |  |  | 328 |     *bits = root;
 | 
        
           |  |  | 329 |     return 0;
 | 
        
           |  |  | 330 | }
 |