xref: /reactos/dll/win32/dbghelp/inflate.c (revision 682f85ad)
1 #ifdef DBGHELP_STATIC_LIB
2 #include "compat.h"
3 #include "zlib.h"
4 #else
5 /* inflate.c -- zlib decompression
6  *
7  * Copyright (C) 1995-2017 Jean-loup Gailly and Mark Adler
8  *
9  * This software is provided 'as-is', without any express or implied
10  * warranty.  In no event will the authors be held liable for any damages
11  * arising from the use of this software.
12  *
13  * Permission is granted to anyone to use this software for any purpose,
14  * including commercial applications, and to alter it and redistribute it
15  * freely, subject to the following restrictions:
16  *
17  * 1. The origin of this software must not be misrepresented; you must not
18  *    claim that you wrote the original software. If you use this software
19  *    in a product, an acknowledgment in the product documentation would be
20  *    appreciated but is not required.
21  * 2. Altered source versions must be plainly marked as such, and must not be
22  *    misrepresented as being the original software.
23  * 3. This notice may not be removed or altered from any source distribution.
24  *
25  * Jean-loup Gailly        Mark Adler
26  * jloup@gzip.org          madler@alumni.caltech.edu
27  */
28 
29 #include <stdarg.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <limits.h>
33 #include "winternl.h"
34 #include "zlib.h"
35 #endif /* DBGHELP_STATIC_LIB */
36 
37 #define DEF_WBITS MAX_WBITS
38 #define zmemcpy memcpy
39 #define zmemzero(dest, len) memset(dest, 0, len)
40 
41 #define Assert(cond,msg)
42 #define Trace(x)
43 #define Tracev(x)
44 #define Tracevv(x)
45 #define Tracecv(c,x)
46 
47 #define GUNZIP
48 
49 #define ZALLOC(strm, items, size) \
50            (*((strm)->zalloc))((strm)->opaque, (items), (size))
51 #define ZFREE(strm, addr)  (*((strm)->zfree))((strm)->opaque, (voidpf)(addr))
52 #define TRY_FREE(s, p) {if (p) ZFREE(s, p);}
53 
54 /* Reverse the bytes in a 32-bit value */
55 #define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
56                     (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
57 
58 #define BASE 65521U     /* largest prime smaller than 65536 */
59 #define NMAX 5552
60 /* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */
61 
62 #define DO1(buf,i)  {adler += (buf)[i]; sum2 += adler;}
63 #define DO2(buf,i)  DO1(buf,i); DO1(buf,i+1);
64 #define DO4(buf,i)  DO2(buf,i); DO2(buf,i+2);
65 #define DO8(buf,i)  DO4(buf,i); DO4(buf,i+4);
66 #define DO16(buf)   DO8(buf,0); DO8(buf,8);
67 
68 #define MOD(a) a %= BASE
69 #define MOD28(a) a %= BASE
70 #define MOD63(a) a %= BASE
71 
72 static uLong adler32( uLong adler, const Bytef *buf, uInt len )
73 {
74     unsigned long sum2;
75     unsigned n;
76 
77     /* split Adler-32 into component sums */
78     sum2 = (adler >> 16) & 0xffff;
79     adler &= 0xffff;
80 
81     /* in case user likes doing a byte at a time, keep it fast */
82     if (len == 1) {
83         adler += buf[0];
84         if (adler >= BASE)
85             adler -= BASE;
86         sum2 += adler;
87         if (sum2 >= BASE)
88             sum2 -= BASE;
89         return adler | (sum2 << 16);
90     }
91 
92     /* initial Adler-32 value (deferred check for len == 1 speed) */
93     if (buf == Z_NULL)
94         return 1L;
95 
96     /* in case short lengths are provided, keep it somewhat fast */
97     if (len < 16) {
98         while (len--) {
99             adler += *buf++;
100             sum2 += adler;
101         }
102         if (adler >= BASE)
103             adler -= BASE;
104         MOD28(sum2);            /* only added so many BASE's */
105         return adler | (sum2 << 16);
106     }
107 
108     /* do length NMAX blocks -- requires just one modulo operation */
109     while (len >= NMAX) {
110         len -= NMAX;
111         n = NMAX / 16;          /* NMAX is divisible by 16 */
112         do {
113             DO16(buf);          /* 16 sums unrolled */
114             buf += 16;
115         } while (--n);
116         MOD(adler);
117         MOD(sum2);
118     }
119 
120     /* do remaining bytes (less than NMAX, still just one modulo) */
121     if (len) {                  /* avoid modulos if none remaining */
122         while (len >= 16) {
123             len -= 16;
124             DO16(buf);
125             buf += 16;
126         }
127         while (len--) {
128             adler += *buf++;
129             sum2 += adler;
130         }
131         MOD(adler);
132         MOD(sum2);
133     }
134 
135     /* return recombined sums */
136     return adler | (sum2 << 16);
137 }
138 
139 typedef struct {
140     unsigned char op;           /* operation, extra bits, table bits */
141     unsigned char bits;         /* bits in this part of the code */
142     unsigned short val;         /* offset in table or code value */
143 } code;
144 
145 #define ENOUGH_LENS 852
146 #define ENOUGH_DISTS 592
147 #define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS)
148 
149 /* Type of code to build for inflate_table() */
150 typedef enum {
151     CODES,
152     LENS,
153     DISTS
154 } codetype;
155 
156 /* Possible inflate modes between inflate() calls */
157 typedef enum {
158     HEAD = 16180,   /* i: waiting for magic header */
159     FLAGS,      /* i: waiting for method and flags (gzip) */
160     TIME,       /* i: waiting for modification time (gzip) */
161     OS,         /* i: waiting for extra flags and operating system (gzip) */
162     EXLEN,      /* i: waiting for extra length (gzip) */
163     EXTRA,      /* i: waiting for extra bytes (gzip) */
164     NAME,       /* i: waiting for end of file name (gzip) */
165     COMMENT,    /* i: waiting for end of comment (gzip) */
166     HCRC,       /* i: waiting for header crc (gzip) */
167     DICTID,     /* i: waiting for dictionary check value */
168     DICT,       /* waiting for inflateSetDictionary() call */
169         TYPE,       /* i: waiting for type bits, including last-flag bit */
170         TYPEDO,     /* i: same, but skip check to exit inflate on new block */
171         STORED,     /* i: waiting for stored size (length and complement) */
172         COPY_,      /* i/o: same as COPY below, but only first time in */
173         COPY,       /* i/o: waiting for input or output to copy stored block */
174         TABLE,      /* i: waiting for dynamic block table lengths */
175         LENLENS,    /* i: waiting for code length code lengths */
176         CODELENS,   /* i: waiting for length/lit and distance code lengths */
177             LEN_,       /* i: same as LEN below, but only first time in */
178             LEN,        /* i: waiting for length/lit/eob code */
179             LENEXT,     /* i: waiting for length extra bits */
180             DIST,       /* i: waiting for distance code */
181             DISTEXT,    /* i: waiting for distance extra bits */
182             MATCH,      /* o: waiting for output space to copy string */
183             LIT,        /* o: waiting for output space to write literal */
184     CHECK,      /* i: waiting for 32-bit check value */
185     LENGTH,     /* i: waiting for 32-bit length (gzip) */
186     DONE,       /* finished check, done -- remain here until reset */
187     BAD,        /* got a data error -- remain here until reset */
188     MEM,        /* got an inflate() memory error -- remain here until reset */
189     SYNC        /* looking for synchronization bytes to restart inflate() */
190 } inflate_mode;
191 
192 /* State maintained between inflate() calls -- approximately 7K bytes, not
193    including the allocated sliding window, which is up to 32K bytes. */
194 struct inflate_state {
195     z_streamp strm;             /* pointer back to this zlib stream */
196     inflate_mode mode;          /* current inflate mode */
197     int last;                   /* true if processing last block */
198     int wrap;                   /* bit 0 true for zlib, bit 1 true for gzip,
199                                    bit 2 true to validate check value */
200     int havedict;               /* true if dictionary provided */
201     int flags;                  /* gzip header method and flags (0 if zlib) */
202     unsigned dmax;              /* zlib header max distance (INFLATE_STRICT) */
203     unsigned long check;        /* protected copy of check value */
204     unsigned long total;        /* protected copy of output count */
205     gz_headerp head;            /* where to save gzip header information */
206         /* sliding window */
207     unsigned wbits;             /* log base 2 of requested window size */
208     unsigned wsize;             /* window size or zero if not using window */
209     unsigned whave;             /* valid bytes in the window */
210     unsigned wnext;             /* window write index */
211     unsigned char FAR *window;  /* allocated sliding window, if needed */
212         /* bit accumulator */
213     unsigned long hold;         /* input bit accumulator */
214     unsigned bits;              /* number of bits in "in" */
215         /* for string and stored block copying */
216     unsigned length;            /* literal or length of data to copy */
217     unsigned offset;            /* distance back to copy string from */
218         /* for table and code decoding */
219     unsigned extra;             /* extra bits needed */
220         /* fixed and dynamic code tables */
221     code const FAR *lencode;    /* starting table for length/literal codes */
222     code const FAR *distcode;   /* starting table for distance codes */
223     unsigned lenbits;           /* index bits for lencode */
224     unsigned distbits;          /* index bits for distcode */
225         /* dynamic table building */
226     unsigned ncode;             /* number of code length code lengths */
227     unsigned nlen;              /* number of length code lengths */
228     unsigned ndist;             /* number of distance code lengths */
229     unsigned have;              /* number of code lengths in lens[] */
230     code FAR *next;             /* next available space in codes[] */
231     unsigned short lens[320];   /* temporary storage for code lengths */
232     unsigned short work[288];   /* work area for code table building */
233     code codes[ENOUGH];         /* space for code tables */
234     int sane;                   /* if false, allow invalid distance too far */
235     int back;                   /* bits back of last unprocessed length/lit */
236     unsigned was;               /* initial length of match */
237 };
238 
239 /*
240    Decode literal, length, and distance codes and write out the resulting
241    literal and match bytes until either not enough input or output is
242    available, an end-of-block is encountered, or a data error is encountered.
243    When large enough input and output buffers are supplied to inflate(), for
244    example, a 16K input buffer and a 64K output buffer, more than 95% of the
245    inflate execution time is spent in this routine.
246 
247    Entry assumptions:
248 
249         state->mode == LEN
250         strm->avail_in >= 6
251         strm->avail_out >= 258
252         start >= strm->avail_out
253         state->bits < 8
254 
255    On return, state->mode is one of:
256 
257         LEN -- ran out of enough output space or enough available input
258         TYPE -- reached end of block code, inflate() to interpret next block
259         BAD -- error in block data
260 
261    Notes:
262 
263     - The maximum input bits used by a length/distance pair is 15 bits for the
264       length code, 5 bits for the length extra, 15 bits for the distance code,
265       and 13 bits for the distance extra.  This totals 48 bits, or six bytes.
266       Therefore if strm->avail_in >= 6, then there is enough input to avoid
267       checking for available input while decoding.
268 
269     - The maximum bytes that a single length/distance pair can output is 258
270       bytes, which is the maximum length that can be coded.  inflate_fast()
271       requires strm->avail_out >= 258 for each loop to avoid checking for
272       output space.
273  */
274 static void inflate_fast( z_streamp strm, unsigned start )
275 {
276     struct inflate_state FAR *state;
277     z_const unsigned char FAR *in;      /* local strm->next_in */
278     z_const unsigned char FAR *last;    /* have enough input while in < last */
279     unsigned char FAR *out;     /* local strm->next_out */
280     unsigned char FAR *beg;     /* inflate()'s initial strm->next_out */
281     unsigned char FAR *end;     /* while out < end, enough space available */
282 #ifdef INFLATE_STRICT
283     unsigned dmax;              /* maximum distance from zlib header */
284 #endif
285     unsigned wsize;             /* window size or zero if not using window */
286     unsigned whave;             /* valid bytes in the window */
287     unsigned wnext;             /* window write index */
288     unsigned char FAR *window;  /* allocated sliding window, if wsize != 0 */
289     unsigned long hold;         /* local strm->hold */
290     unsigned bits;              /* local strm->bits */
291     code const FAR *lcode;      /* local strm->lencode */
292     code const FAR *dcode;      /* local strm->distcode */
293     unsigned lmask;             /* mask for first level of length codes */
294     unsigned dmask;             /* mask for first level of distance codes */
295     code here;                  /* retrieved table entry */
296     unsigned op;                /* code bits, operation, extra bits, or */
297                                 /*  window position, window bytes to copy */
298     unsigned len;               /* match length, unused bytes */
299     unsigned dist;              /* match distance */
300     unsigned char FAR *from;    /* where to copy match from */
301 
302     /* copy state to local variables */
303     state = (struct inflate_state FAR *)strm->state;
304     in = strm->next_in;
305     last = in + (strm->avail_in - 5);
306     out = strm->next_out;
307     beg = out - (start - strm->avail_out);
308     end = out + (strm->avail_out - 257);
309 #ifdef INFLATE_STRICT
310     dmax = state->dmax;
311 #endif
312     wsize = state->wsize;
313     whave = state->whave;
314     wnext = state->wnext;
315     window = state->window;
316     hold = state->hold;
317     bits = state->bits;
318     lcode = state->lencode;
319     dcode = state->distcode;
320     lmask = (1U << state->lenbits) - 1;
321     dmask = (1U << state->distbits) - 1;
322 
323     /* decode literals and length/distances until end-of-block or not enough
324        input data or output space */
325     do {
326         if (bits < 15) {
327             hold += (unsigned long)(*in++) << bits;
328             bits += 8;
329             hold += (unsigned long)(*in++) << bits;
330             bits += 8;
331         }
332         here = lcode[hold & lmask];
333       dolen:
334         op = (unsigned)(here.bits);
335         hold >>= op;
336         bits -= op;
337         op = (unsigned)(here.op);
338         if (op == 0) {                          /* literal */
339             Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
340                     "inflate:         literal '%c'\n" :
341                     "inflate:         literal 0x%02x\n", here.val));
342             *out++ = (unsigned char)(here.val);
343         }
344         else if (op & 16) {                     /* length base */
345             len = (unsigned)(here.val);
346             op &= 15;                           /* number of extra bits */
347             if (op) {
348                 if (bits < op) {
349                     hold += (unsigned long)(*in++) << bits;
350                     bits += 8;
351                 }
352                 len += (unsigned)hold & ((1U << op) - 1);
353                 hold >>= op;
354                 bits -= op;
355             }
356             Tracevv((stderr, "inflate:         length %u\n", len));
357             if (bits < 15) {
358                 hold += (unsigned long)(*in++) << bits;
359                 bits += 8;
360                 hold += (unsigned long)(*in++) << bits;
361                 bits += 8;
362             }
363             here = dcode[hold & dmask];
364           dodist:
365             op = (unsigned)(here.bits);
366             hold >>= op;
367             bits -= op;
368             op = (unsigned)(here.op);
369             if (op & 16) {                      /* distance base */
370                 dist = (unsigned)(here.val);
371                 op &= 15;                       /* number of extra bits */
372                 if (bits < op) {
373                     hold += (unsigned long)(*in++) << bits;
374                     bits += 8;
375                     if (bits < op) {
376                         hold += (unsigned long)(*in++) << bits;
377                         bits += 8;
378                     }
379                 }
380                 dist += (unsigned)hold & ((1U << op) - 1);
381 #ifdef INFLATE_STRICT
382                 if (dist > dmax) {
383                     strm->msg = (char *)"invalid distance too far back";
384                     state->mode = BAD;
385                     break;
386                 }
387 #endif
388                 hold >>= op;
389                 bits -= op;
390                 Tracevv((stderr, "inflate:         distance %u\n", dist));
391                 op = (unsigned)(out - beg);     /* max distance in output */
392                 if (dist > op) {                /* see if copy from window */
393                     op = dist - op;             /* distance back in window */
394                     if (op > whave) {
395                         if (state->sane) {
396                             strm->msg =
397                                 (char *)"invalid distance too far back";
398                             state->mode = BAD;
399                             break;
400                         }
401 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
402                         if (len <= op - whave) {
403                             do {
404                                 *out++ = 0;
405                             } while (--len);
406                             continue;
407                         }
408                         len -= op - whave;
409                         do {
410                             *out++ = 0;
411                         } while (--op > whave);
412                         if (op == 0) {
413                             from = out - dist;
414                             do {
415                                 *out++ = *from++;
416                             } while (--len);
417                             continue;
418                         }
419 #endif
420                     }
421                     from = window;
422                     if (wnext == 0) {           /* very common case */
423                         from += wsize - op;
424                         if (op < len) {         /* some from window */
425                             len -= op;
426                             do {
427                                 *out++ = *from++;
428                             } while (--op);
429                             from = out - dist;  /* rest from output */
430                         }
431                     }
432                     else if (wnext < op) {      /* wrap around window */
433                         from += wsize + wnext - op;
434                         op -= wnext;
435                         if (op < len) {         /* some from end of window */
436                             len -= op;
437                             do {
438                                 *out++ = *from++;
439                             } while (--op);
440                             from = window;
441                             if (wnext < len) {  /* some from start of window */
442                                 op = wnext;
443                                 len -= op;
444                                 do {
445                                     *out++ = *from++;
446                                 } while (--op);
447                                 from = out - dist;      /* rest from output */
448                             }
449                         }
450                     }
451                     else {                      /* contiguous in window */
452                         from += wnext - op;
453                         if (op < len) {         /* some from window */
454                             len -= op;
455                             do {
456                                 *out++ = *from++;
457                             } while (--op);
458                             from = out - dist;  /* rest from output */
459                         }
460                     }
461                     while (len > 2) {
462                         *out++ = *from++;
463                         *out++ = *from++;
464                         *out++ = *from++;
465                         len -= 3;
466                     }
467                     if (len) {
468                         *out++ = *from++;
469                         if (len > 1)
470                             *out++ = *from++;
471                     }
472                 }
473                 else {
474                     from = out - dist;          /* copy direct from output */
475                     do {                        /* minimum length is three */
476                         *out++ = *from++;
477                         *out++ = *from++;
478                         *out++ = *from++;
479                         len -= 3;
480                     } while (len > 2);
481                     if (len) {
482                         *out++ = *from++;
483                         if (len > 1)
484                             *out++ = *from++;
485                     }
486                 }
487             }
488             else if ((op & 64) == 0) {          /* 2nd level distance code */
489                 here = dcode[here.val + (hold & ((1U << op) - 1))];
490                 goto dodist;
491             }
492             else {
493                 strm->msg = (char *)"invalid distance code";
494                 state->mode = BAD;
495                 break;
496             }
497         }
498         else if ((op & 64) == 0) {              /* 2nd level length code */
499             here = lcode[here.val + (hold & ((1U << op) - 1))];
500             goto dolen;
501         }
502         else if (op & 32) {                     /* end-of-block */
503             Tracevv((stderr, "inflate:         end of block\n"));
504             state->mode = TYPE;
505             break;
506         }
507         else {
508             strm->msg = (char *)"invalid literal/length code";
509             state->mode = BAD;
510             break;
511         }
512     } while (in < last && out < end);
513 
514     /* return unused bytes (on entry, bits < 8, so in won't go too far back) */
515     len = bits >> 3;
516     in -= len;
517     bits -= len << 3;
518     hold &= (1U << bits) - 1;
519 
520     /* update state and return */
521     strm->next_in = in;
522     strm->next_out = out;
523     strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last));
524     strm->avail_out = (unsigned)(out < end ?
525                                  257 + (end - out) : 257 - (out - end));
526     state->hold = hold;
527     state->bits = bits;
528     return;
529 }
530 
531 #define MAXBITS 15
532 
533 static int inflate_table( codetype type, unsigned short FAR *lens, unsigned codes, code FAR * FAR *table,
534                           unsigned FAR *bits, unsigned short FAR *work )
535 {
536     unsigned len;               /* a code's length in bits */
537     unsigned sym;               /* index of code symbols */
538     unsigned min, max;          /* minimum and maximum code lengths */
539     unsigned root;              /* number of index bits for root table */
540     unsigned curr;              /* number of index bits for current table */
541     unsigned drop;              /* code bits to drop for sub-table */
542     int left;                   /* number of prefix codes available */
543     unsigned used;              /* code entries in table used */
544     unsigned huff;              /* Huffman code */
545     unsigned incr;              /* for incrementing code, index */
546     unsigned fill;              /* index for replicating entries */
547     unsigned low;               /* low bits for current root entry */
548     unsigned mask;              /* mask for low root bits */
549     code here;                  /* table entry for duplication */
550     code FAR *next;             /* next available space in table */
551     const unsigned short FAR *base;     /* base value table to use */
552     const unsigned short FAR *extra;    /* extra bits table to use */
553     unsigned match;             /* use base and extra for symbol >= match */
554     unsigned short count[MAXBITS+1];    /* number of codes of each length */
555     unsigned short offs[MAXBITS+1];     /* offsets in table for each length */
556     static const unsigned short lbase[31] = { /* Length codes 257..285 base */
557         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
558         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
559     static const unsigned short lext[31] = { /* Length codes 257..285 extra */
560         16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18,
561         19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 77, 202};
562     static const unsigned short dbase[32] = { /* Distance codes 0..29 base */
563         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
564         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
565         8193, 12289, 16385, 24577, 0, 0};
566     static const unsigned short dext[32] = { /* Distance codes 0..29 extra */
567         16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22,
568         23, 23, 24, 24, 25, 25, 26, 26, 27, 27,
569         28, 28, 29, 29, 64, 64};
570 
571     /*
572        Process a set of code lengths to create a canonical Huffman code.  The
573        code lengths are lens[0..codes-1].  Each length corresponds to the
574        symbols 0..codes-1.  The Huffman code is generated by first sorting the
575        symbols by length from short to long, and retaining the symbol order
576        for codes with equal lengths.  Then the code starts with all zero bits
577        for the first code of the shortest length, and the codes are integer
578        increments for the same length, and zeros are appended as the length
579        increases.  For the deflate format, these bits are stored backwards
580        from their more natural integer increment ordering, and so when the
581        decoding tables are built in the large loop below, the integer codes
582        are incremented backwards.
583 
584        This routine assumes, but does not check, that all of the entries in
585        lens[] are in the range 0..MAXBITS.  The caller must assure this.
586        1..MAXBITS is interpreted as that code length.  zero means that that
587        symbol does not occur in this code.
588 
589        The codes are sorted by computing a count of codes for each length,
590        creating from that a table of starting indices for each length in the
591        sorted table, and then entering the symbols in order in the sorted
592        table.  The sorted table is work[], with that space being provided by
593        the caller.
594 
595        The length counts are used for other purposes as well, i.e. finding
596        the minimum and maximum length codes, determining if there are any
597        codes at all, checking for a valid set of lengths, and looking ahead
598        at length counts to determine sub-table sizes when building the
599        decoding tables.
600      */
601 
602     /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */
603     for (len = 0; len <= MAXBITS; len++)
604         count[len] = 0;
605     for (sym = 0; sym < codes; sym++)
606         count[lens[sym]]++;
607 
608     /* bound code lengths, force root to be within code lengths */
609     root = *bits;
610     for (max = MAXBITS; max >= 1; max--)
611         if (count[max] != 0) break;
612     if (root > max) root = max;
613     if (max == 0) {                     /* no symbols to code at all */
614         here.op = (unsigned char)64;    /* invalid code marker */
615         here.bits = (unsigned char)1;
616         here.val = (unsigned short)0;
617         *(*table)++ = here;             /* make a table to force an error */
618         *(*table)++ = here;
619         *bits = 1;
620         return 0;     /* no symbols, but wait for decoding to report error */
621     }
622     for (min = 1; min < max; min++)
623         if (count[min] != 0) break;
624     if (root < min) root = min;
625 
626     /* check for an over-subscribed or incomplete set of lengths */
627     left = 1;
628     for (len = 1; len <= MAXBITS; len++) {
629         left <<= 1;
630         left -= count[len];
631         if (left < 0) return -1;        /* over-subscribed */
632     }
633     if (left > 0 && (type == CODES || max != 1))
634         return -1;                      /* incomplete set */
635 
636     /* generate offsets into symbol table for each length for sorting */
637     offs[1] = 0;
638     for (len = 1; len < MAXBITS; len++)
639         offs[len + 1] = offs[len] + count[len];
640 
641     /* sort symbols by length, by symbol order within each length */
642     for (sym = 0; sym < codes; sym++)
643         if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym;
644 
645     /*
646        Create and fill in decoding tables.  In this loop, the table being
647        filled is at next and has curr index bits.  The code being used is huff
648        with length len.  That code is converted to an index by dropping drop
649        bits off of the bottom.  For codes where len is less than drop + curr,
650        those top drop + curr - len bits are incremented through all values to
651        fill the table with replicated entries.
652 
653        root is the number of index bits for the root table.  When len exceeds
654        root, sub-tables are created pointed to by the root entry with an index
655        of the low root bits of huff.  This is saved in low to check for when a
656        new sub-table should be started.  drop is zero when the root table is
657        being filled, and drop is root when sub-tables are being filled.
658 
659        When a new sub-table is needed, it is necessary to look ahead in the
660        code lengths to determine what size sub-table is needed.  The length
661        counts are used for this, and so count[] is decremented as codes are
662        entered in the tables.
663 
664        used keeps track of how many table entries have been allocated from the
665        provided *table space.  It is checked for LENS and DIST tables against
666        the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in
667        the initial root table size constants.  See the comments in inftrees.h
668        for more information.
669 
670        sym increments through all symbols, and the loop terminates when
671        all codes of length max, i.e. all codes, have been processed.  This
672        routine permits incomplete codes, so another loop after this one fills
673        in the rest of the decoding tables with invalid code markers.
674      */
675 
676     /* set up for code type */
677     switch (type) {
678     case CODES:
679         base = extra = work;    /* dummy value--not used */
680         match = 20;
681         break;
682     case LENS:
683         base = lbase;
684         extra = lext;
685         match = 257;
686         break;
687     default:    /* DISTS */
688         base = dbase;
689         extra = dext;
690         match = 0;
691     }
692 
693     /* initialize state for loop */
694     huff = 0;                   /* starting code */
695     sym = 0;                    /* starting code symbol */
696     len = min;                  /* starting code length */
697     next = *table;              /* current table to fill in */
698     curr = root;                /* current table index bits */
699     drop = 0;                   /* current bits to drop from code for index */
700     low = (unsigned)(-1);       /* trigger new sub-table when len > root */
701     used = 1U << root;          /* use root table entries */
702     mask = used - 1;            /* mask for comparing low */
703 
704     /* check available table space */
705     if ((type == LENS && used > ENOUGH_LENS) ||
706         (type == DISTS && used > ENOUGH_DISTS))
707         return 1;
708 
709     /* process all codes and make table entries */
710     for (;;) {
711         /* create table entry */
712         here.bits = (unsigned char)(len - drop);
713         if (work[sym] + 1U < match) {
714             here.op = (unsigned char)0;
715             here.val = work[sym];
716         }
717         else if (work[sym] >= match) {
718             here.op = (unsigned char)(extra[work[sym] - match]);
719             here.val = base[work[sym] - match];
720         }
721         else {
722             here.op = (unsigned char)(32 + 64);         /* end of block */
723             here.val = 0;
724         }
725 
726         /* replicate for those indices with low len bits equal to huff */
727         incr = 1U << (len - drop);
728         fill = 1U << curr;
729         min = fill;                 /* save offset to next table */
730         do {
731             fill -= incr;
732             next[(huff >> drop) + fill] = here;
733         } while (fill != 0);
734 
735         /* backwards increment the len-bit code huff */
736         incr = 1U << (len - 1);
737         while (huff & incr)
738             incr >>= 1;
739         if (incr != 0) {
740             huff &= incr - 1;
741             huff += incr;
742         }
743         else
744             huff = 0;
745 
746         /* go to next symbol, update count, len */
747         sym++;
748         if (--(count[len]) == 0) {
749             if (len == max) break;
750             len = lens[work[sym]];
751         }
752 
753         /* create new sub-table if needed */
754         if (len > root && (huff & mask) != low) {
755             /* if first time, transition to sub-tables */
756             if (drop == 0)
757                 drop = root;
758 
759             /* increment past last table */
760             next += min;            /* here min is 1 << curr */
761 
762             /* determine length of next table */
763             curr = len - drop;
764             left = (int)(1 << curr);
765             while (curr + drop < max) {
766                 left -= count[curr + drop];
767                 if (left <= 0) break;
768                 curr++;
769                 left <<= 1;
770             }
771 
772             /* check for enough space */
773             used += 1U << curr;
774             if ((type == LENS && used > ENOUGH_LENS) ||
775                 (type == DISTS && used > ENOUGH_DISTS))
776                 return 1;
777 
778             /* point entry in root table to sub-table */
779             low = huff & mask;
780             (*table)[low].op = (unsigned char)curr;
781             (*table)[low].bits = (unsigned char)root;
782             (*table)[low].val = (unsigned short)(next - *table);
783         }
784     }
785 
786     /* fill in remaining table entry if code is incomplete (guaranteed to have
787        at most one remaining entry, since if the code is incomplete, the
788        maximum code length that was allowed to get this far is one bit) */
789     if (huff != 0) {
790         here.op = (unsigned char)64;            /* invalid code marker */
791         here.bits = (unsigned char)(len - drop);
792         here.val = (unsigned short)0;
793         next[huff] = here;
794     }
795 
796     /* set return parameters */
797     *table += used;
798     *bits = root;
799     return 0;
800 }
801 
802 static int inflateStateCheck( z_streamp strm )
803 {
804     struct inflate_state FAR *state;
805     if (strm == Z_NULL ||
806         strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
807         return 1;
808     state = (struct inflate_state FAR *)strm->state;
809     if (state == Z_NULL || state->strm != strm ||
810         state->mode < HEAD || state->mode > SYNC)
811         return 1;
812     return 0;
813 }
814 
815 static int inflateResetKeep( z_streamp strm )
816 {
817     struct inflate_state FAR *state;
818 
819     if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
820     state = (struct inflate_state FAR *)strm->state;
821     strm->total_in = strm->total_out = state->total = 0;
822     strm->msg = Z_NULL;
823     if (state->wrap)        /* to support ill-conceived Java test suite */
824         strm->adler = state->wrap & 1;
825     state->mode = HEAD;
826     state->last = 0;
827     state->havedict = 0;
828     state->dmax = 32768U;
829     state->head = Z_NULL;
830     state->hold = 0;
831     state->bits = 0;
832     state->lencode = state->distcode = state->next = state->codes;
833     state->sane = 1;
834     state->back = -1;
835     Tracev((stderr, "inflate: reset\n"));
836     return Z_OK;
837 }
838 
839 static int inflateReset( z_streamp strm )
840 {
841     struct inflate_state FAR *state;
842 
843     if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
844     state = (struct inflate_state FAR *)strm->state;
845     state->wsize = 0;
846     state->whave = 0;
847     state->wnext = 0;
848     return inflateResetKeep(strm);
849 }
850 
851 static int inflateReset2( z_streamp strm, int windowBits )
852 {
853     int wrap;
854     struct inflate_state FAR *state;
855 
856     /* get the state */
857     if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
858     state = (struct inflate_state FAR *)strm->state;
859 
860     /* extract wrap request from windowBits parameter */
861     if (windowBits < 0) {
862         wrap = 0;
863         windowBits = -windowBits;
864     }
865     else {
866         wrap = (windowBits >> 4) + 5;
867 #ifdef GUNZIP
868         if (windowBits < 48)
869             windowBits &= 15;
870 #endif
871     }
872 
873     /* set number of window bits, free window if different */
874     if (windowBits && (windowBits < 8 || windowBits > 15))
875         return Z_STREAM_ERROR;
876     if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
877         ZFREE(strm, state->window);
878         state->window = Z_NULL;
879     }
880 
881     /* update state and reset the rest of it */
882     state->wrap = wrap;
883     state->wbits = (unsigned)windowBits;
884     return inflateReset(strm);
885 }
886 
887 int inflateInit2( z_streamp strm, int windowBits )
888 {
889     int ret;
890     struct inflate_state FAR *state;
891 
892     strm->msg = Z_NULL;                 /* in case we return an error */
893     state = (struct inflate_state FAR *)
894             ZALLOC(strm, 1, sizeof(struct inflate_state));
895     if (state == Z_NULL) return Z_MEM_ERROR;
896     Tracev((stderr, "inflate: allocated\n"));
897     strm->state = (struct internal_state FAR *)state;
898     state->strm = strm;
899     state->window = Z_NULL;
900     state->mode = HEAD;     /* to pass state test in inflateReset2() */
901     ret = inflateReset2(strm, windowBits);
902     if (ret != Z_OK) {
903         ZFREE(strm, state);
904         strm->state = Z_NULL;
905     }
906     return ret;
907 }
908 
909 int inflateInit( z_streamp strm )
910 {
911     return inflateInit2(strm, DEF_WBITS);
912 }
913 
914 /*
915    Return state with length and distance decoding tables and index sizes set to
916    fixed code decoding.  Normally this returns fixed tables from inffixed.h.
917    If BUILDFIXED is defined, then instead this routine builds the tables the
918    first time it's called, and returns those tables the first time and
919    thereafter.  This reduces the size of the code by about 2K bytes, in
920    exchange for a little execution time.  However, BUILDFIXED should not be
921    used for threaded applications, since the rewriting of the tables and virgin
922    may not be thread-safe.
923  */
924 static void fixedtables( struct inflate_state FAR *state )
925 {
926     static const code lenfix[512] = {
927         {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48},
928         {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128},
929         {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59},
930         {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176},
931         {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20},
932         {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100},
933         {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8},
934         {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216},
935         {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76},
936         {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114},
937         {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},
938         {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148},
939         {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42},
940         {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86},
941         {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15},
942         {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236},
943         {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62},
944         {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142},
945         {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31},
946         {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162},
947         {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25},
948         {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105},
949         {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4},
950         {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202},
951         {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69},
952         {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125},
953         {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13},
954         {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195},
955         {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35},
956         {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91},
957         {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19},
958         {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246},
959         {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55},
960         {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135},
961         {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99},
962         {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190},
963         {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16},
964         {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96},
965         {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6},
966         {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209},
967         {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},
968         {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116},
969         {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4},
970         {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153},
971         {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44},
972         {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82},
973         {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11},
974         {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229},
975         {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58},
976         {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138},
977         {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51},
978         {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173},
979         {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30},
980         {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110},
981         {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0},
982         {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195},
983         {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65},
984         {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121},
985         {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},
986         {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258},
987         {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37},
988         {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93},
989         {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23},
990         {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251},
991         {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51},
992         {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131},
993         {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67},
994         {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183},
995         {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23},
996         {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103},
997         {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9},
998         {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223},
999         {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79},
1000         {0,9,255}
1001     };
1002 
1003     static const code distfix[32] = {
1004         {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025},
1005         {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193},
1006         {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385},
1007         {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577},
1008         {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073},
1009         {22,5,193},{64,5,0}
1010     };
1011 
1012     state->lencode = lenfix;
1013     state->lenbits = 9;
1014     state->distcode = distfix;
1015     state->distbits = 5;
1016 }
1017 
1018 /*
1019    Update the window with the last wsize (normally 32K) bytes written before
1020    returning.  If window does not exist yet, create it.  This is only called
1021    when a window is already in use, or when output has been written during this
1022    inflate call, but the end of the deflate stream has not been reached yet.
1023    It is also called to create a window for dictionary data when a dictionary
1024    is loaded.
1025 
1026    Providing output buffers larger than 32K to inflate() should provide a speed
1027    advantage, since only the last 32K of output is copied to the sliding window
1028    upon return from inflate(), and since all distances after the first 32K of
1029    output will fall in the output data, making match copies simpler and faster.
1030    The advantage may be dependent on the size of the processor's data caches.
1031  */
1032 static int updatewindow( z_streamp strm, const Bytef *end, unsigned copy )
1033 {
1034     struct inflate_state FAR *state;
1035     unsigned dist;
1036 
1037     state = (struct inflate_state FAR *)strm->state;
1038 
1039     /* if it hasn't been done already, allocate space for the window */
1040     if (state->window == Z_NULL) {
1041         state->window = (unsigned char FAR *)
1042                         ZALLOC(strm, 1U << state->wbits,
1043                                sizeof(unsigned char));
1044         if (state->window == Z_NULL) return 1;
1045     }
1046 
1047     /* if window not in use yet, initialize */
1048     if (state->wsize == 0) {
1049         state->wsize = 1U << state->wbits;
1050         state->wnext = 0;
1051         state->whave = 0;
1052     }
1053 
1054     /* copy state->wsize or less output bytes into the circular window */
1055     if (copy >= state->wsize) {
1056         zmemcpy(state->window, end - state->wsize, state->wsize);
1057         state->wnext = 0;
1058         state->whave = state->wsize;
1059     }
1060     else {
1061         dist = state->wsize - state->wnext;
1062         if (dist > copy) dist = copy;
1063         zmemcpy(state->window + state->wnext, end - copy, dist);
1064         copy -= dist;
1065         if (copy) {
1066             zmemcpy(state->window, end - copy, copy);
1067             state->wnext = copy;
1068             state->whave = state->wsize;
1069         }
1070         else {
1071             state->wnext += dist;
1072             if (state->wnext == state->wsize) state->wnext = 0;
1073             if (state->whave < state->wsize) state->whave += dist;
1074         }
1075     }
1076     return 0;
1077 }
1078 
1079 /* Macros for inflate(): */
1080 
1081 #define crc32(crc,buf,len) RtlComputeCrc32(crc,buf,len)
1082 
1083 /* check function to use adler32() for zlib or crc32() for gzip */
1084 #ifdef GUNZIP
1085 #  define UPDATE(check, buf, len) \
1086     (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
1087 #else
1088 #  define UPDATE(check, buf, len) adler32(check, buf, len)
1089 #endif
1090 
1091 /* check macros for header crc */
1092 #ifdef GUNZIP
1093 #  define CRC2(check, word) \
1094     do { \
1095         hbuf[0] = (unsigned char)(word); \
1096         hbuf[1] = (unsigned char)((word) >> 8); \
1097         check = crc32(check, hbuf, 2); \
1098     } while (0)
1099 
1100 #  define CRC4(check, word) \
1101     do { \
1102         hbuf[0] = (unsigned char)(word); \
1103         hbuf[1] = (unsigned char)((word) >> 8); \
1104         hbuf[2] = (unsigned char)((word) >> 16); \
1105         hbuf[3] = (unsigned char)((word) >> 24); \
1106         check = crc32(check, hbuf, 4); \
1107     } while (0)
1108 #endif
1109 
1110 /* Load registers with state in inflate() for speed */
1111 #define LOAD() \
1112     do { \
1113         put = strm->next_out; \
1114         left = strm->avail_out; \
1115         next = strm->next_in; \
1116         have = strm->avail_in; \
1117         hold = state->hold; \
1118         bits = state->bits; \
1119     } while (0)
1120 
1121 /* Restore state from registers in inflate() */
1122 #define RESTORE() \
1123     do { \
1124         strm->next_out = put; \
1125         strm->avail_out = left; \
1126         strm->next_in = next; \
1127         strm->avail_in = have; \
1128         state->hold = hold; \
1129         state->bits = bits; \
1130     } while (0)
1131 
1132 /* Clear the input bit accumulator */
1133 #define INITBITS() \
1134     do { \
1135         hold = 0; \
1136         bits = 0; \
1137     } while (0)
1138 
1139 /* Get a byte of input into the bit accumulator, or return from inflate()
1140    if there is no input available. */
1141 #define PULLBYTE() \
1142     do { \
1143         if (have == 0) goto inf_leave; \
1144         have--; \
1145         hold += (unsigned long)(*next++) << bits; \
1146         bits += 8; \
1147     } while (0)
1148 
1149 /* Assure that there are at least n bits in the bit accumulator.  If there is
1150    not enough available input to do that, then return from inflate(). */
1151 #define NEEDBITS(n) \
1152     do { \
1153         while (bits < (unsigned)(n)) \
1154             PULLBYTE(); \
1155     } while (0)
1156 
1157 /* Return the low n bits of the bit accumulator (n < 16) */
1158 #define BITS(n) \
1159     ((unsigned)hold & ((1U << (n)) - 1))
1160 
1161 /* Remove n bits from the bit accumulator */
1162 #define DROPBITS(n) \
1163     do { \
1164         hold >>= (n); \
1165         bits -= (unsigned)(n); \
1166     } while (0)
1167 
1168 /* Remove zero to seven bits as needed to go to a byte boundary */
1169 #define BYTEBITS() \
1170     do { \
1171         hold >>= bits & 7; \
1172         bits -= bits & 7; \
1173     } while (0)
1174 
1175 /*
1176    inflate() uses a state machine to process as much input data and generate as
1177    much output data as possible before returning.  The state machine is
1178    structured roughly as follows:
1179 
1180     for (;;) switch (state) {
1181     ...
1182     case STATEn:
1183         if (not enough input data or output space to make progress)
1184             return;
1185         ... make progress ...
1186         state = STATEm;
1187         break;
1188     ...
1189     }
1190 
1191    so when inflate() is called again, the same case is attempted again, and
1192    if the appropriate resources are provided, the machine proceeds to the
1193    next state.  The NEEDBITS() macro is usually the way the state evaluates
1194    whether it can proceed or should return.  NEEDBITS() does the return if
1195    the requested bits are not available.  The typical use of the BITS macros
1196    is:
1197 
1198         NEEDBITS(n);
1199         ... do something with BITS(n) ...
1200         DROPBITS(n);
1201 
1202    where NEEDBITS(n) either returns from inflate() if there isn't enough
1203    input left to load n bits into the accumulator, or it continues.  BITS(n)
1204    gives the low n bits in the accumulator.  When done, DROPBITS(n) drops
1205    the low n bits off the accumulator.  INITBITS() clears the accumulator
1206    and sets the number of available bits to zero.  BYTEBITS() discards just
1207    enough bits to put the accumulator on a byte boundary.  After BYTEBITS()
1208    and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
1209 
1210    NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
1211    if there is no input available.  The decoding of variable length codes uses
1212    PULLBYTE() directly in order to pull just enough bytes to decode the next
1213    code, and no more.
1214 
1215    Some states loop until they get enough input, making sure that enough
1216    state information is maintained to continue the loop where it left off
1217    if NEEDBITS() returns in the loop.  For example, want, need, and keep
1218    would all have to actually be part of the saved state in case NEEDBITS()
1219    returns:
1220 
1221     case STATEw:
1222         while (want < need) {
1223             NEEDBITS(n);
1224             keep[want++] = BITS(n);
1225             DROPBITS(n);
1226         }
1227         state = STATEx;
1228     case STATEx:
1229 
1230    As shown above, if the next state is also the next case, then the break
1231    is omitted.
1232 
1233    A state may also return if there is not enough output space available to
1234    complete that state.  Those states are copying stored data, writing a
1235    literal byte, and copying a matching string.
1236 
1237    When returning, a "goto inf_leave" is used to update the total counters,
1238    update the check value, and determine whether any progress has been made
1239    during that inflate() call in order to return the proper return code.
1240    Progress is defined as a change in either strm->avail_in or strm->avail_out.
1241    When there is a window, goto inf_leave will update the window with the last
1242    output written.  If a goto inf_leave occurs in the middle of decompression
1243    and there is no window currently, goto inf_leave will create one and copy
1244    output to the window for the next call of inflate().
1245 
1246    In this implementation, the flush parameter of inflate() only affects the
1247    return code (per zlib.h).  inflate() always writes as much as possible to
1248    strm->next_out, given the space available and the provided input--the effect
1249    documented in zlib.h of Z_SYNC_FLUSH.  Furthermore, inflate() always defers
1250    the allocation of and copying into a sliding window until necessary, which
1251    provides the effect documented in zlib.h for Z_FINISH when the entire input
1252    stream available.  So the only thing the flush parameter actually does is:
1253    when flush is set to Z_FINISH, inflate() cannot return Z_OK.  Instead it
1254    will return Z_BUF_ERROR if it has not reached the end of the stream.
1255  */
1256 
1257 int inflate( z_streamp strm, int flush )
1258 {
1259     struct inflate_state FAR *state;
1260     z_const unsigned char FAR *next;    /* next input */
1261     unsigned char FAR *put;     /* next output */
1262     unsigned have, left;        /* available input and output */
1263     unsigned long hold;         /* bit buffer */
1264     unsigned bits;              /* bits in bit buffer */
1265     unsigned in, out;           /* save starting available input and output */
1266     unsigned copy;              /* number of stored or match bytes to copy */
1267     unsigned char FAR *from;    /* where to copy match bytes from */
1268     code here;                  /* current decoding table entry */
1269     code last;                  /* parent table entry */
1270     unsigned len;               /* length to copy for repeats, bits to drop */
1271     int ret;                    /* return code */
1272 #ifdef GUNZIP
1273     unsigned char hbuf[4];      /* buffer for gzip header crc calculation */
1274 #endif
1275     static const unsigned short order[19] = /* permutation of code lengths */
1276         {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
1277 
1278     if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
1279         (strm->next_in == Z_NULL && strm->avail_in != 0))
1280         return Z_STREAM_ERROR;
1281 
1282     state = (struct inflate_state FAR *)strm->state;
1283     if (state->mode == TYPE) state->mode = TYPEDO;      /* skip check */
1284     LOAD();
1285     in = have;
1286     out = left;
1287     ret = Z_OK;
1288     for (;;)
1289         switch (state->mode) {
1290         case HEAD:
1291             if (state->wrap == 0) {
1292                 state->mode = TYPEDO;
1293                 break;
1294             }
1295             NEEDBITS(16);
1296 #ifdef GUNZIP
1297             if ((state->wrap & 2) && hold == 0x8b1f) {  /* gzip header */
1298                 if (state->wbits == 0)
1299                     state->wbits = 15;
1300                 state->check = crc32(0L, Z_NULL, 0);
1301                 CRC2(state->check, hold);
1302                 INITBITS();
1303                 state->mode = FLAGS;
1304                 break;
1305             }
1306             state->flags = 0;           /* expect zlib header */
1307             if (state->head != Z_NULL)
1308                 state->head->done = -1;
1309             if (!(state->wrap & 1) ||   /* check if zlib header allowed */
1310 #else
1311             if (
1312 #endif
1313                 ((BITS(8) << 8) + (hold >> 8)) % 31) {
1314                 strm->msg = (char *)"incorrect header check";
1315                 state->mode = BAD;
1316                 break;
1317             }
1318             if (BITS(4) != Z_DEFLATED) {
1319                 strm->msg = (char *)"unknown compression method";
1320                 state->mode = BAD;
1321                 break;
1322             }
1323             DROPBITS(4);
1324             len = BITS(4) + 8;
1325             if (state->wbits == 0)
1326                 state->wbits = len;
1327             if (len > 15 || len > state->wbits) {
1328                 strm->msg = (char *)"invalid window size";
1329                 state->mode = BAD;
1330                 break;
1331             }
1332             state->dmax = 1U << len;
1333             Tracev((stderr, "inflate:   zlib header ok\n"));
1334             strm->adler = state->check = adler32(0L, Z_NULL, 0);
1335             state->mode = hold & 0x200 ? DICTID : TYPE;
1336             INITBITS();
1337             break;
1338 #ifdef GUNZIP
1339         case FLAGS:
1340             NEEDBITS(16);
1341             state->flags = (int)(hold);
1342             if ((state->flags & 0xff) != Z_DEFLATED) {
1343                 strm->msg = (char *)"unknown compression method";
1344                 state->mode = BAD;
1345                 break;
1346             }
1347             if (state->flags & 0xe000) {
1348                 strm->msg = (char *)"unknown header flags set";
1349                 state->mode = BAD;
1350                 break;
1351             }
1352             if (state->head != Z_NULL)
1353                 state->head->text = (int)((hold >> 8) & 1);
1354             if ((state->flags & 0x0200) && (state->wrap & 4))
1355                 CRC2(state->check, hold);
1356             INITBITS();
1357             state->mode = TIME;
1358         case TIME:
1359             NEEDBITS(32);
1360             if (state->head != Z_NULL)
1361                 state->head->time = hold;
1362             if ((state->flags & 0x0200) && (state->wrap & 4))
1363                 CRC4(state->check, hold);
1364             INITBITS();
1365             state->mode = OS;
1366         case OS:
1367             NEEDBITS(16);
1368             if (state->head != Z_NULL) {
1369                 state->head->xflags = (int)(hold & 0xff);
1370                 state->head->os = (int)(hold >> 8);
1371             }
1372             if ((state->flags & 0x0200) && (state->wrap & 4))
1373                 CRC2(state->check, hold);
1374             INITBITS();
1375             state->mode = EXLEN;
1376         case EXLEN:
1377             if (state->flags & 0x0400) {
1378                 NEEDBITS(16);
1379                 state->length = (unsigned)(hold);
1380                 if (state->head != Z_NULL)
1381                     state->head->extra_len = (unsigned)hold;
1382                 if ((state->flags & 0x0200) && (state->wrap & 4))
1383                     CRC2(state->check, hold);
1384                 INITBITS();
1385             }
1386             else if (state->head != Z_NULL)
1387                 state->head->extra = Z_NULL;
1388             state->mode = EXTRA;
1389         case EXTRA:
1390             if (state->flags & 0x0400) {
1391                 copy = state->length;
1392                 if (copy > have) copy = have;
1393                 if (copy) {
1394                     if (state->head != Z_NULL &&
1395                         state->head->extra != Z_NULL) {
1396                         len = state->head->extra_len - state->length;
1397                         zmemcpy(state->head->extra + len, next,
1398                                 len + copy > state->head->extra_max ?
1399                                 state->head->extra_max - len : copy);
1400                     }
1401                     if ((state->flags & 0x0200) && (state->wrap & 4))
1402                         state->check = crc32(state->check, next, copy);
1403                     have -= copy;
1404                     next += copy;
1405                     state->length -= copy;
1406                 }
1407                 if (state->length) goto inf_leave;
1408             }
1409             state->length = 0;
1410             state->mode = NAME;
1411         case NAME:
1412             if (state->flags & 0x0800) {
1413                 if (have == 0) goto inf_leave;
1414                 copy = 0;
1415                 do {
1416                     len = (unsigned)(next[copy++]);
1417                     if (state->head != Z_NULL &&
1418                             state->head->name != Z_NULL &&
1419                             state->length < state->head->name_max)
1420                         state->head->name[state->length++] = (Bytef)len;
1421                 } while (len && copy < have);
1422                 if ((state->flags & 0x0200) && (state->wrap & 4))
1423                     state->check = crc32(state->check, next, copy);
1424                 have -= copy;
1425                 next += copy;
1426                 if (len) goto inf_leave;
1427             }
1428             else if (state->head != Z_NULL)
1429                 state->head->name = Z_NULL;
1430             state->length = 0;
1431             state->mode = COMMENT;
1432         case COMMENT:
1433             if (state->flags & 0x1000) {
1434                 if (have == 0) goto inf_leave;
1435                 copy = 0;
1436                 do {
1437                     len = (unsigned)(next[copy++]);
1438                     if (state->head != Z_NULL &&
1439                             state->head->comment != Z_NULL &&
1440                             state->length < state->head->comm_max)
1441                         state->head->comment[state->length++] = (Bytef)len;
1442                 } while (len && copy < have);
1443                 if ((state->flags & 0x0200) && (state->wrap & 4))
1444                     state->check = crc32(state->check, next, copy);
1445                 have -= copy;
1446                 next += copy;
1447                 if (len) goto inf_leave;
1448             }
1449             else if (state->head != Z_NULL)
1450                 state->head->comment = Z_NULL;
1451             state->mode = HCRC;
1452         case HCRC:
1453             if (state->flags & 0x0200) {
1454                 NEEDBITS(16);
1455                 if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
1456                     strm->msg = (char *)"header crc mismatch";
1457                     state->mode = BAD;
1458                     break;
1459                 }
1460                 INITBITS();
1461             }
1462             if (state->head != Z_NULL) {
1463                 state->head->hcrc = (int)((state->flags >> 9) & 1);
1464                 state->head->done = 1;
1465             }
1466             strm->adler = state->check = crc32(0L, Z_NULL, 0);
1467             state->mode = TYPE;
1468             break;
1469 #endif
1470         case DICTID:
1471             NEEDBITS(32);
1472             strm->adler = state->check = ZSWAP32(hold);
1473             INITBITS();
1474             state->mode = DICT;
1475         case DICT:
1476             if (state->havedict == 0) {
1477                 RESTORE();
1478                 return Z_NEED_DICT;
1479             }
1480             strm->adler = state->check = adler32(0L, Z_NULL, 0);
1481             state->mode = TYPE;
1482         case TYPE:
1483             if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
1484         case TYPEDO:
1485             if (state->last) {
1486                 BYTEBITS();
1487                 state->mode = CHECK;
1488                 break;
1489             }
1490             NEEDBITS(3);
1491             state->last = BITS(1);
1492             DROPBITS(1);
1493             switch (BITS(2)) {
1494             case 0:                             /* stored block */
1495                 Tracev((stderr, "inflate:     stored block%s\n",
1496                         state->last ? " (last)" : ""));
1497                 state->mode = STORED;
1498                 break;
1499             case 1:                             /* fixed block */
1500                 fixedtables(state);
1501                 Tracev((stderr, "inflate:     fixed codes block%s\n",
1502                         state->last ? " (last)" : ""));
1503                 state->mode = LEN_;             /* decode codes */
1504                 if (flush == Z_TREES) {
1505                     DROPBITS(2);
1506                     goto inf_leave;
1507                 }
1508                 break;
1509             case 2:                             /* dynamic block */
1510                 Tracev((stderr, "inflate:     dynamic codes block%s\n",
1511                         state->last ? " (last)" : ""));
1512                 state->mode = TABLE;
1513                 break;
1514             case 3:
1515                 strm->msg = (char *)"invalid block type";
1516                 state->mode = BAD;
1517             }
1518             DROPBITS(2);
1519             break;
1520         case STORED:
1521             BYTEBITS();                         /* go to byte boundary */
1522             NEEDBITS(32);
1523             if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
1524                 strm->msg = (char *)"invalid stored block lengths";
1525                 state->mode = BAD;
1526                 break;
1527             }
1528             state->length = (unsigned)hold & 0xffff;
1529             Tracev((stderr, "inflate:       stored length %u\n",
1530                     state->length));
1531             INITBITS();
1532             state->mode = COPY_;
1533             if (flush == Z_TREES) goto inf_leave;
1534         case COPY_:
1535             state->mode = COPY;
1536         case COPY:
1537             copy = state->length;
1538             if (copy) {
1539                 if (copy > have) copy = have;
1540                 if (copy > left) copy = left;
1541                 if (copy == 0) goto inf_leave;
1542                 zmemcpy(put, next, copy);
1543                 have -= copy;
1544                 next += copy;
1545                 left -= copy;
1546                 put += copy;
1547                 state->length -= copy;
1548                 break;
1549             }
1550             Tracev((stderr, "inflate:       stored end\n"));
1551             state->mode = TYPE;
1552             break;
1553         case TABLE:
1554             NEEDBITS(14);
1555             state->nlen = BITS(5) + 257;
1556             DROPBITS(5);
1557             state->ndist = BITS(5) + 1;
1558             DROPBITS(5);
1559             state->ncode = BITS(4) + 4;
1560             DROPBITS(4);
1561 #ifndef PKZIP_BUG_WORKAROUND
1562             if (state->nlen > 286 || state->ndist > 30) {
1563                 strm->msg = (char *)"too many length or distance symbols";
1564                 state->mode = BAD;
1565                 break;
1566             }
1567 #endif
1568             Tracev((stderr, "inflate:       table sizes ok\n"));
1569             state->have = 0;
1570             state->mode = LENLENS;
1571         case LENLENS:
1572             while (state->have < state->ncode) {
1573                 NEEDBITS(3);
1574                 state->lens[order[state->have++]] = (unsigned short)BITS(3);
1575                 DROPBITS(3);
1576             }
1577             while (state->have < 19)
1578                 state->lens[order[state->have++]] = 0;
1579             state->next = state->codes;
1580             state->lencode = (const code FAR *)(state->next);
1581             state->lenbits = 7;
1582             ret = inflate_table(CODES, state->lens, 19, &(state->next),
1583                                 &(state->lenbits), state->work);
1584             if (ret) {
1585                 strm->msg = (char *)"invalid code lengths set";
1586                 state->mode = BAD;
1587                 break;
1588             }
1589             Tracev((stderr, "inflate:       code lengths ok\n"));
1590             state->have = 0;
1591             state->mode = CODELENS;
1592         case CODELENS:
1593             while (state->have < state->nlen + state->ndist) {
1594                 for (;;) {
1595                     here = state->lencode[BITS(state->lenbits)];
1596                     if ((unsigned)(here.bits) <= bits) break;
1597                     PULLBYTE();
1598                 }
1599                 if (here.val < 16) {
1600                     DROPBITS(here.bits);
1601                     state->lens[state->have++] = here.val;
1602                 }
1603                 else {
1604                     if (here.val == 16) {
1605                         NEEDBITS(here.bits + 2);
1606                         DROPBITS(here.bits);
1607                         if (state->have == 0) {
1608                             strm->msg = (char *)"invalid bit length repeat";
1609                             state->mode = BAD;
1610                             break;
1611                         }
1612                         len = state->lens[state->have - 1];
1613                         copy = 3 + BITS(2);
1614                         DROPBITS(2);
1615                     }
1616                     else if (here.val == 17) {
1617                         NEEDBITS(here.bits + 3);
1618                         DROPBITS(here.bits);
1619                         len = 0;
1620                         copy = 3 + BITS(3);
1621                         DROPBITS(3);
1622                     }
1623                     else {
1624                         NEEDBITS(here.bits + 7);
1625                         DROPBITS(here.bits);
1626                         len = 0;
1627                         copy = 11 + BITS(7);
1628                         DROPBITS(7);
1629                     }
1630                     if (state->have + copy > state->nlen + state->ndist) {
1631                         strm->msg = (char *)"invalid bit length repeat";
1632                         state->mode = BAD;
1633                         break;
1634                     }
1635                     while (copy--)
1636                         state->lens[state->have++] = (unsigned short)len;
1637                 }
1638             }
1639 
1640             /* handle error breaks in while */
1641             if (state->mode == BAD) break;
1642 
1643             /* check for end-of-block code (better have one) */
1644             if (state->lens[256] == 0) {
1645                 strm->msg = (char *)"invalid code -- missing end-of-block";
1646                 state->mode = BAD;
1647                 break;
1648             }
1649 
1650             /* build code tables -- note: do not change the lenbits or distbits
1651                values here (9 and 6) without reading the comments in inftrees.h
1652                concerning the ENOUGH constants, which depend on those values */
1653             state->next = state->codes;
1654             state->lencode = (const code FAR *)(state->next);
1655             state->lenbits = 9;
1656             ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1657                                 &(state->lenbits), state->work);
1658             if (ret) {
1659                 strm->msg = (char *)"invalid literal/lengths set";
1660                 state->mode = BAD;
1661                 break;
1662             }
1663             state->distcode = (const code FAR *)(state->next);
1664             state->distbits = 6;
1665             ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1666                             &(state->next), &(state->distbits), state->work);
1667             if (ret) {
1668                 strm->msg = (char *)"invalid distances set";
1669                 state->mode = BAD;
1670                 break;
1671             }
1672             Tracev((stderr, "inflate:       codes ok\n"));
1673             state->mode = LEN_;
1674             if (flush == Z_TREES) goto inf_leave;
1675         case LEN_:
1676             state->mode = LEN;
1677         case LEN:
1678             if (have >= 6 && left >= 258) {
1679                 RESTORE();
1680                 inflate_fast(strm, out);
1681                 LOAD();
1682                 if (state->mode == TYPE)
1683                     state->back = -1;
1684                 break;
1685             }
1686             state->back = 0;
1687             for (;;) {
1688                 here = state->lencode[BITS(state->lenbits)];
1689                 if ((unsigned)(here.bits) <= bits) break;
1690                 PULLBYTE();
1691             }
1692             if (here.op && (here.op & 0xf0) == 0) {
1693                 last = here;
1694                 for (;;) {
1695                     here = state->lencode[last.val +
1696                             (BITS(last.bits + last.op) >> last.bits)];
1697                     if ((unsigned)(last.bits + here.bits) <= bits) break;
1698                     PULLBYTE();
1699                 }
1700                 DROPBITS(last.bits);
1701                 state->back += last.bits;
1702             }
1703             DROPBITS(here.bits);
1704             state->back += here.bits;
1705             state->length = (unsigned)here.val;
1706             if ((int)(here.op) == 0) {
1707                 Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
1708                         "inflate:         literal '%c'\n" :
1709                         "inflate:         literal 0x%02x\n", here.val));
1710                 state->mode = LIT;
1711                 break;
1712             }
1713             if (here.op & 32) {
1714                 Tracevv((stderr, "inflate:         end of block\n"));
1715                 state->back = -1;
1716                 state->mode = TYPE;
1717                 break;
1718             }
1719             if (here.op & 64) {
1720                 strm->msg = (char *)"invalid literal/length code";
1721                 state->mode = BAD;
1722                 break;
1723             }
1724             state->extra = (unsigned)(here.op) & 15;
1725             state->mode = LENEXT;
1726         case LENEXT:
1727             if (state->extra) {
1728                 NEEDBITS(state->extra);
1729                 state->length += BITS(state->extra);
1730                 DROPBITS(state->extra);
1731                 state->back += state->extra;
1732             }
1733             Tracevv((stderr, "inflate:         length %u\n", state->length));
1734             state->was = state->length;
1735             state->mode = DIST;
1736         case DIST:
1737             for (;;) {
1738                 here = state->distcode[BITS(state->distbits)];
1739                 if ((unsigned)(here.bits) <= bits) break;
1740                 PULLBYTE();
1741             }
1742             if ((here.op & 0xf0) == 0) {
1743                 last = here;
1744                 for (;;) {
1745                     here = state->distcode[last.val +
1746                             (BITS(last.bits + last.op) >> last.bits)];
1747                     if ((unsigned)(last.bits + here.bits) <= bits) break;
1748                     PULLBYTE();
1749                 }
1750                 DROPBITS(last.bits);
1751                 state->back += last.bits;
1752             }
1753             DROPBITS(here.bits);
1754             state->back += here.bits;
1755             if (here.op & 64) {
1756                 strm->msg = (char *)"invalid distance code";
1757                 state->mode = BAD;
1758                 break;
1759             }
1760             state->offset = (unsigned)here.val;
1761             state->extra = (unsigned)(here.op) & 15;
1762             state->mode = DISTEXT;
1763         case DISTEXT:
1764             if (state->extra) {
1765                 NEEDBITS(state->extra);
1766                 state->offset += BITS(state->extra);
1767                 DROPBITS(state->extra);
1768                 state->back += state->extra;
1769             }
1770 #ifdef INFLATE_STRICT
1771             if (state->offset > state->dmax) {
1772                 strm->msg = (char *)"invalid distance too far back";
1773                 state->mode = BAD;
1774                 break;
1775             }
1776 #endif
1777             Tracevv((stderr, "inflate:         distance %u\n", state->offset));
1778             state->mode = MATCH;
1779         case MATCH:
1780             if (left == 0) goto inf_leave;
1781             copy = out - left;
1782             if (state->offset > copy) {         /* copy from window */
1783                 copy = state->offset - copy;
1784                 if (copy > state->whave) {
1785                     if (state->sane) {
1786                         strm->msg = (char *)"invalid distance too far back";
1787                         state->mode = BAD;
1788                         break;
1789                     }
1790 #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1791                     Trace((stderr, "inflate.c too far\n"));
1792                     copy -= state->whave;
1793                     if (copy > state->length) copy = state->length;
1794                     if (copy > left) copy = left;
1795                     left -= copy;
1796                     state->length -= copy;
1797                     do {
1798                         *put++ = 0;
1799                     } while (--copy);
1800                     if (state->length == 0) state->mode = LEN;
1801                     break;
1802 #endif
1803                 }
1804                 if (copy > state->wnext) {
1805                     copy -= state->wnext;
1806                     from = state->window + (state->wsize - copy);
1807                 }
1808                 else
1809                     from = state->window + (state->wnext - copy);
1810                 if (copy > state->length) copy = state->length;
1811             }
1812             else {                              /* copy from output */
1813                 from = put - state->offset;
1814                 copy = state->length;
1815             }
1816             if (copy > left) copy = left;
1817             left -= copy;
1818             state->length -= copy;
1819             do {
1820                 *put++ = *from++;
1821             } while (--copy);
1822             if (state->length == 0) state->mode = LEN;
1823             break;
1824         case LIT:
1825             if (left == 0) goto inf_leave;
1826             *put++ = (unsigned char)(state->length);
1827             left--;
1828             state->mode = LEN;
1829             break;
1830         case CHECK:
1831             if (state->wrap) {
1832                 NEEDBITS(32);
1833                 out -= left;
1834                 strm->total_out += out;
1835                 state->total += out;
1836                 if ((state->wrap & 4) && out)
1837                     strm->adler = state->check =
1838                         UPDATE(state->check, put - out, out);
1839                 out = left;
1840                 if ((state->wrap & 4) && (
1841 #ifdef GUNZIP
1842                      state->flags ? hold :
1843 #endif
1844                      ZSWAP32(hold)) != state->check) {
1845                     strm->msg = (char *)"incorrect data check";
1846                     state->mode = BAD;
1847                     break;
1848                 }
1849                 INITBITS();
1850                 Tracev((stderr, "inflate:   check matches trailer\n"));
1851             }
1852 #ifdef GUNZIP
1853             state->mode = LENGTH;
1854         case LENGTH:
1855             if (state->wrap && state->flags) {
1856                 NEEDBITS(32);
1857                 if (hold != (state->total & 0xffffffffUL)) {
1858                     strm->msg = (char *)"incorrect length check";
1859                     state->mode = BAD;
1860                     break;
1861                 }
1862                 INITBITS();
1863                 Tracev((stderr, "inflate:   length matches trailer\n"));
1864             }
1865 #endif
1866             state->mode = DONE;
1867         case DONE:
1868             ret = Z_STREAM_END;
1869             goto inf_leave;
1870         case BAD:
1871             ret = Z_DATA_ERROR;
1872             goto inf_leave;
1873         case MEM:
1874             return Z_MEM_ERROR;
1875         case SYNC:
1876         default:
1877             return Z_STREAM_ERROR;
1878         }
1879 
1880     /*
1881        Return from inflate(), updating the total counts and the check value.
1882        If there was no progress during the inflate() call, return a buffer
1883        error.  Call updatewindow() to create and/or update the window state.
1884        Note: a memory error from inflate() is non-recoverable.
1885      */
1886   inf_leave:
1887     RESTORE();
1888     if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
1889             (state->mode < CHECK || flush != Z_FINISH)))
1890         if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
1891             state->mode = MEM;
1892             return Z_MEM_ERROR;
1893         }
1894     in -= strm->avail_in;
1895     out -= strm->avail_out;
1896     strm->total_in += in;
1897     strm->total_out += out;
1898     state->total += out;
1899     if ((state->wrap & 4) && out)
1900         strm->adler = state->check =
1901             UPDATE(state->check, strm->next_out - out, out);
1902     strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1903                       (state->mode == TYPE ? 128 : 0) +
1904                       (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
1905     if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1906         ret = Z_BUF_ERROR;
1907     return ret;
1908 }
1909 
1910 int inflateEnd(z_streamp strm)
1911 {
1912     struct inflate_state FAR *state;
1913     if (inflateStateCheck(strm))
1914         return Z_STREAM_ERROR;
1915     state = (struct inflate_state FAR *)strm->state;
1916     if (state->window != Z_NULL) ZFREE(strm, state->window);
1917     ZFREE(strm, strm->state);
1918     strm->state = Z_NULL;
1919     Tracev((stderr, "inflate: end\n"));
1920     return Z_OK;
1921 }
1922