File Coverage

deps/libgit2/deps/zlib/inflate.c
Criterion Covered Total %
statement 312 585 53.3
branch 175 398 43.9
condition n/a
subroutine n/a
pod n/a
total 487 983 49.5


line stmt bran cond sub pod time code
1             /* inflate.c -- zlib decompression
2             * Copyright (C) 1995-2022 Mark Adler
3             * For conditions of distribution and use, see copyright notice in zlib.h
4             */
5              
6             /*
7             * Change history:
8             *
9             * 1.2.beta0 24 Nov 2002
10             * - First version -- complete rewrite of inflate to simplify code, avoid
11             * creation of window when not needed, minimize use of window when it is
12             * needed, make inffast.c even faster, implement gzip decoding, and to
13             * improve code readability and style over the previous zlib inflate code
14             *
15             * 1.2.beta1 25 Nov 2002
16             * - Use pointers for available input and output checking in inffast.c
17             * - Remove input and output counters in inffast.c
18             * - Change inffast.c entry and loop from avail_in >= 7 to >= 6
19             * - Remove unnecessary second byte pull from length extra in inffast.c
20             * - Unroll direct copy to three copies per loop in inffast.c
21             *
22             * 1.2.beta2 4 Dec 2002
23             * - Change external routine names to reduce potential conflicts
24             * - Correct filename to inffixed.h for fixed tables in inflate.c
25             * - Make hbuf[] unsigned char to match parameter type in inflate.c
26             * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset)
27             * to avoid negation problem on Alphas (64 bit) in inflate.c
28             *
29             * 1.2.beta3 22 Dec 2002
30             * - Add comments on state->bits assertion in inffast.c
31             * - Add comments on op field in inftrees.h
32             * - Fix bug in reuse of allocated window after inflateReset()
33             * - Remove bit fields--back to byte structure for speed
34             * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths
35             * - Change post-increments to pre-increments in inflate_fast(), PPC biased?
36             * - Add compile time option, POSTINC, to use post-increments instead (Intel?)
37             * - Make MATCH copy in inflate() much faster for when inflate_fast() not used
38             * - Use local copies of stream next and avail values, as well as local bit
39             * buffer and bit count in inflate()--for speed when inflate_fast() not used
40             *
41             * 1.2.beta4 1 Jan 2003
42             * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings
43             * - Move a comment on output buffer sizes from inffast.c to inflate.c
44             * - Add comments in inffast.c to introduce the inflate_fast() routine
45             * - Rearrange window copies in inflate_fast() for speed and simplification
46             * - Unroll last copy for window match in inflate_fast()
47             * - Use local copies of window variables in inflate_fast() for speed
48             * - Pull out common wnext == 0 case for speed in inflate_fast()
49             * - Make op and len in inflate_fast() unsigned for consistency
50             * - Add FAR to lcode and dcode declarations in inflate_fast()
51             * - Simplified bad distance check in inflate_fast()
52             * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new
53             * source file infback.c to provide a call-back interface to inflate for
54             * programs like gzip and unzip -- uses window as output buffer to avoid
55             * window copying
56             *
57             * 1.2.beta5 1 Jan 2003
58             * - Improved inflateBack() interface to allow the caller to provide initial
59             * input in strm.
60             * - Fixed stored blocks bug in inflateBack()
61             *
62             * 1.2.beta6 4 Jan 2003
63             * - Added comments in inffast.c on effectiveness of POSTINC
64             * - Typecasting all around to reduce compiler warnings
65             * - Changed loops from while (1) or do {} while (1) to for (;;), again to
66             * make compilers happy
67             * - Changed type of window in inflateBackInit() to unsigned char *
68             *
69             * 1.2.beta7 27 Jan 2003
70             * - Changed many types to unsigned or unsigned short to avoid warnings
71             * - Added inflateCopy() function
72             *
73             * 1.2.0 9 Mar 2003
74             * - Changed inflateBack() interface to provide separate opaque descriptors
75             * for the in() and out() functions
76             * - Changed inflateBack() argument and in_func typedef to swap the length
77             * and buffer address return values for the input function
78             * - Check next_in and next_out for Z_NULL on entry to inflate()
79             *
80             * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
81             */
82              
83             #include "zutil.h"
84             #include "inftrees.h"
85             #include "inflate.h"
86             #include "inffast.h"
87              
88             #ifdef MAKEFIXED
89             # ifndef BUILDFIXED
90             # define BUILDFIXED
91             # endif
92             #endif
93              
94             /* function prototypes */
95             local int inflateStateCheck OF((z_streamp strm));
96             local void fixedtables OF((struct inflate_state FAR *state));
97             local int updatewindow OF((z_streamp strm, const unsigned char FAR *end,
98             unsigned copy));
99             #ifdef BUILDFIXED
100             void makefixed OF((void));
101             #endif
102             local unsigned syncsearch OF((unsigned FAR *have, const unsigned char FAR *buf,
103             unsigned len));
104              
105 6336           local int inflateStateCheck(strm)
106             z_streamp strm;
107             {
108             struct inflate_state FAR *state;
109 6336 50         if (strm == Z_NULL ||
    50          
110 6336 50         strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0)
111 0           return 1;
112 6336           state = (struct inflate_state FAR *)strm->state;
113 6336 50         if (state == Z_NULL || state->strm != strm ||
    50          
    50          
114 6336 50         state->mode < HEAD || state->mode > SYNC)
115 0           return 1;
116 6336           return 0;
117             }
118              
119 1178           int ZEXPORT inflateResetKeep(strm)
120             z_streamp strm;
121             {
122             struct inflate_state FAR *state;
123              
124 1178 50         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
125 1178           state = (struct inflate_state FAR *)strm->state;
126 1178           strm->total_in = strm->total_out = state->total = 0;
127 1178           strm->msg = Z_NULL;
128 1178 50         if (state->wrap) /* to support ill-conceived Java test suite */
129 1178           strm->adler = state->wrap & 1;
130 1178           state->mode = HEAD;
131 1178           state->last = 0;
132 1178           state->havedict = 0;
133 1178           state->flags = -1;
134 1178           state->dmax = 32768U;
135 1178           state->head = Z_NULL;
136 1178           state->hold = 0;
137 1178           state->bits = 0;
138 1178           state->lencode = state->distcode = state->next = state->codes;
139 1178           state->sane = 1;
140 1178           state->back = -1;
141             Tracev((stderr, "inflate: reset\n"));
142 1178           return Z_OK;
143             }
144              
145 1178           int ZEXPORT inflateReset(strm)
146             z_streamp strm;
147             {
148             struct inflate_state FAR *state;
149              
150 1178 50         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
151 1178           state = (struct inflate_state FAR *)strm->state;
152 1178           state->wsize = 0;
153 1178           state->whave = 0;
154 1178           state->wnext = 0;
155 1178           return inflateResetKeep(strm);
156             }
157              
158 1178           int ZEXPORT inflateReset2(strm, windowBits)
159             z_streamp strm;
160             int windowBits;
161             {
162             int wrap;
163             struct inflate_state FAR *state;
164              
165             /* get the state */
166 1178 50         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
167 1178           state = (struct inflate_state FAR *)strm->state;
168              
169             /* extract wrap request from windowBits parameter */
170 1178 50         if (windowBits < 0) {
171 0           wrap = 0;
172 0           windowBits = -windowBits;
173             }
174             else {
175 1178           wrap = (windowBits >> 4) + 5;
176             #ifdef GUNZIP
177             if (windowBits < 48)
178             windowBits &= 15;
179             #endif
180             }
181              
182             /* set number of window bits, free window if different */
183 1178 50         if (windowBits && (windowBits < 8 || windowBits > 15))
    50          
    50          
184 0           return Z_STREAM_ERROR;
185 1178 50         if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) {
    0          
186 0           ZFREE(strm, state->window);
187 0           state->window = Z_NULL;
188             }
189              
190             /* update state and reset the rest of it */
191 1178           state->wrap = wrap;
192 1178           state->wbits = (unsigned)windowBits;
193 1178           return inflateReset(strm);
194             }
195              
196 1178           int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
197             z_streamp strm;
198             int windowBits;
199             const char *version;
200             int stream_size;
201             {
202             int ret;
203             struct inflate_state FAR *state;
204              
205 1178 50         if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
    50          
    50          
206             stream_size != (int)(sizeof(z_stream)))
207 0           return Z_VERSION_ERROR;
208 1178 50         if (strm == Z_NULL) return Z_STREAM_ERROR;
209 1178           strm->msg = Z_NULL; /* in case we return an error */
210 1178 50         if (strm->zalloc == (alloc_func)0) {
211             #ifdef Z_SOLO
212             return Z_STREAM_ERROR;
213             #else
214 1178           strm->zalloc = zcalloc;
215 1178           strm->opaque = (voidpf)0;
216             #endif
217             }
218 1178 50         if (strm->zfree == (free_func)0)
219             #ifdef Z_SOLO
220             return Z_STREAM_ERROR;
221             #else
222 1178           strm->zfree = zcfree;
223             #endif
224 1178           state = (struct inflate_state FAR *)
225 1178           ZALLOC(strm, 1, sizeof(struct inflate_state));
226 1178 50         if (state == Z_NULL) return Z_MEM_ERROR;
227             Tracev((stderr, "inflate: allocated\n"));
228 1178           strm->state = (struct internal_state FAR *)state;
229 1178           state->strm = strm;
230 1178           state->window = Z_NULL;
231 1178           state->mode = HEAD; /* to pass state test in inflateReset2() */
232 1178           ret = inflateReset2(strm, windowBits);
233 1178 50         if (ret != Z_OK) {
234 0           ZFREE(strm, state);
235 0           strm->state = Z_NULL;
236             }
237 1178           return ret;
238             }
239              
240 1178           int ZEXPORT inflateInit_(strm, version, stream_size)
241             z_streamp strm;
242             const char *version;
243             int stream_size;
244             {
245 1178           return inflateInit2_(strm, DEF_WBITS, version, stream_size);
246             }
247              
248 0           int ZEXPORT inflatePrime(strm, bits, value)
249             z_streamp strm;
250             int bits;
251             int value;
252             {
253             struct inflate_state FAR *state;
254              
255 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
256 0           state = (struct inflate_state FAR *)strm->state;
257 0 0         if (bits < 0) {
258 0           state->hold = 0;
259 0           state->bits = 0;
260 0           return Z_OK;
261             }
262 0 0         if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR;
    0          
263 0           value &= (1L << bits) - 1;
264 0           state->hold += (unsigned)value << state->bits;
265 0           state->bits += (uInt)bits;
266 0           return Z_OK;
267             }
268              
269             /*
270             Return state with length and distance decoding tables and index sizes set to
271             fixed code decoding. Normally this returns fixed tables from inffixed.h.
272             If BUILDFIXED is defined, then instead this routine builds the tables the
273             first time it's called, and returns those tables the first time and
274             thereafter. This reduces the size of the code by about 2K bytes, in
275             exchange for a little execution time. However, BUILDFIXED should not be
276             used for threaded applications, since the rewriting of the tables and virgin
277             may not be thread-safe.
278             */
279 765           local void fixedtables(state)
280             struct inflate_state FAR *state;
281             {
282             #ifdef BUILDFIXED
283             static int virgin = 1;
284             static code *lenfix, *distfix;
285             static code fixed[544];
286              
287             /* build fixed huffman tables if first call (may not be thread safe) */
288             if (virgin) {
289             unsigned sym, bits;
290             static code *next;
291              
292             /* literal/length table */
293             sym = 0;
294             while (sym < 144) state->lens[sym++] = 8;
295             while (sym < 256) state->lens[sym++] = 9;
296             while (sym < 280) state->lens[sym++] = 7;
297             while (sym < 288) state->lens[sym++] = 8;
298             next = fixed;
299             lenfix = next;
300             bits = 9;
301             inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
302              
303             /* distance table */
304             sym = 0;
305             while (sym < 32) state->lens[sym++] = 5;
306             distfix = next;
307             bits = 5;
308             inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
309              
310             /* do this just once */
311             virgin = 0;
312             }
313             #else /* !BUILDFIXED */
314             # include "inffixed.h"
315             #endif /* BUILDFIXED */
316 765           state->lencode = lenfix;
317 765           state->lenbits = 9;
318 765           state->distcode = distfix;
319 765           state->distbits = 5;
320 765           }
321              
322             #ifdef MAKEFIXED
323             #include
324              
325             /*
326             Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also
327             defines BUILDFIXED, so the tables are built on the fly. makefixed() writes
328             those tables to stdout, which would be piped to inffixed.h. A small program
329             can simply call makefixed to do this:
330              
331             void makefixed(void);
332              
333             int main(void)
334             {
335             makefixed();
336             return 0;
337             }
338              
339             Then that can be linked with zlib built with MAKEFIXED defined and run:
340              
341             a.out > inffixed.h
342             */
343             void makefixed()
344             {
345             unsigned low, size;
346             struct inflate_state state;
347              
348             fixedtables(&state);
349             puts(" /* inffixed.h -- table for decoding fixed codes");
350             puts(" * Generated automatically by makefixed().");
351             puts(" */");
352             puts("");
353             puts(" /* WARNING: this file should *not* be used by applications.");
354             puts(" It is part of the implementation of this library and is");
355             puts(" subject to change. Applications should only use zlib.h.");
356             puts(" */");
357             puts("");
358             size = 1U << 9;
359             printf(" static const code lenfix[%u] = {", size);
360             low = 0;
361             for (;;) {
362             if ((low % 7) == 0) printf("\n ");
363             printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op,
364             state.lencode[low].bits, state.lencode[low].val);
365             if (++low == size) break;
366             putchar(',');
367             }
368             puts("\n };");
369             size = 1U << 5;
370             printf("\n static const code distfix[%u] = {", size);
371             low = 0;
372             for (;;) {
373             if ((low % 6) == 0) printf("\n ");
374             printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
375             state.distcode[low].val);
376             if (++low == size) break;
377             putchar(',');
378             }
379             puts("\n };");
380             }
381             #endif /* MAKEFIXED */
382              
383             /*
384             Update the window with the last wsize (normally 32K) bytes written before
385             returning. If window does not exist yet, create it. This is only called
386             when a window is already in use, or when output has been written during this
387             inflate call, but the end of the deflate stream has not been reached yet.
388             It is also called to create a window for dictionary data when a dictionary
389             is loaded.
390              
391             Providing output buffers larger than 32K to inflate() should provide a speed
392             advantage, since only the last 32K of output is copied to the sliding window
393             upon return from inflate(), and since all distances after the first 32K of
394             output will fall in the output data, making match copies simpler and faster.
395             The advantage may be dependent on the size of the processor's data caches.
396             */
397 996           local int updatewindow(strm, end, copy)
398             z_streamp strm;
399             const Bytef *end;
400             unsigned copy;
401             {
402             struct inflate_state FAR *state;
403             unsigned dist;
404              
405 996           state = (struct inflate_state FAR *)strm->state;
406              
407             /* if it hasn't been done already, allocate space for the window */
408 996 100         if (state->window == Z_NULL) {
409 550           state->window = (unsigned char FAR *)
410 550           ZALLOC(strm, 1U << state->wbits,
411             sizeof(unsigned char));
412 550 50         if (state->window == Z_NULL) return 1;
413             }
414              
415             /* if window not in use yet, initialize */
416 996 100         if (state->wsize == 0) {
417 550           state->wsize = 1U << state->wbits;
418 550           state->wnext = 0;
419 550           state->whave = 0;
420             }
421              
422             /* copy state->wsize or less output bytes into the circular window */
423 996 50         if (copy >= state->wsize) {
424 0           zmemcpy(state->window, end - state->wsize, state->wsize);
425 0           state->wnext = 0;
426 0           state->whave = state->wsize;
427             }
428             else {
429 996           dist = state->wsize - state->wnext;
430 996 50         if (dist > copy) dist = copy;
431 996           zmemcpy(state->window + state->wnext, end - copy, dist);
432 996           copy -= dist;
433 996 50         if (copy) {
434 0           zmemcpy(state->window, end - copy, copy);
435 0           state->wnext = copy;
436 0           state->whave = state->wsize;
437             }
438             else {
439 996           state->wnext += dist;
440 996 50         if (state->wnext == state->wsize) state->wnext = 0;
441 996 50         if (state->whave < state->wsize) state->whave += dist;
442             }
443             }
444 996           return 0;
445             }
446              
447             /* Macros for inflate(): */
448              
449             /* check function to use adler32() for zlib or crc32() for gzip */
450             #ifdef GUNZIP
451             # define UPDATE_CHECK(check, buf, len) \
452             (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
453             #else
454             # define UPDATE_CHECK(check, buf, len) adler32(check, buf, len)
455             #endif
456              
457             /* check macros for header crc */
458             #ifdef GUNZIP
459             # define CRC2(check, word) \
460             do { \
461             hbuf[0] = (unsigned char)(word); \
462             hbuf[1] = (unsigned char)((word) >> 8); \
463             check = crc32(check, hbuf, 2); \
464             } while (0)
465              
466             # define CRC4(check, word) \
467             do { \
468             hbuf[0] = (unsigned char)(word); \
469             hbuf[1] = (unsigned char)((word) >> 8); \
470             hbuf[2] = (unsigned char)((word) >> 16); \
471             hbuf[3] = (unsigned char)((word) >> 24); \
472             check = crc32(check, hbuf, 4); \
473             } while (0)
474             #endif
475              
476             /* Load registers with state in inflate() for speed */
477             #define LOAD() \
478             do { \
479             put = strm->next_out; \
480             left = strm->avail_out; \
481             next = strm->next_in; \
482             have = strm->avail_in; \
483             hold = state->hold; \
484             bits = state->bits; \
485             } while (0)
486              
487             /* Restore state from registers in inflate() */
488             #define RESTORE() \
489             do { \
490             strm->next_out = put; \
491             strm->avail_out = left; \
492             strm->next_in = next; \
493             strm->avail_in = have; \
494             state->hold = hold; \
495             state->bits = bits; \
496             } while (0)
497              
498             /* Clear the input bit accumulator */
499             #define INITBITS() \
500             do { \
501             hold = 0; \
502             bits = 0; \
503             } while (0)
504              
505             /* Get a byte of input into the bit accumulator, or return from inflate()
506             if there is no input available. */
507             #define PULLBYTE() \
508             do { \
509             if (have == 0) goto inf_leave; \
510             have--; \
511             hold += (unsigned long)(*next++) << bits; \
512             bits += 8; \
513             } while (0)
514              
515             /* Assure that there are at least n bits in the bit accumulator. If there is
516             not enough available input to do that, then return from inflate(). */
517             #define NEEDBITS(n) \
518             do { \
519             while (bits < (unsigned)(n)) \
520             PULLBYTE(); \
521             } while (0)
522              
523             /* Return the low n bits of the bit accumulator (n < 16) */
524             #define BITS(n) \
525             ((unsigned)hold & ((1U << (n)) - 1))
526              
527             /* Remove n bits from the bit accumulator */
528             #define DROPBITS(n) \
529             do { \
530             hold >>= (n); \
531             bits -= (unsigned)(n); \
532             } while (0)
533              
534             /* Remove zero to seven bits as needed to go to a byte boundary */
535             #define BYTEBITS() \
536             do { \
537             hold >>= bits & 7; \
538             bits -= bits & 7; \
539             } while (0)
540              
541             /*
542             inflate() uses a state machine to process as much input data and generate as
543             much output data as possible before returning. The state machine is
544             structured roughly as follows:
545              
546             for (;;) switch (state) {
547             ...
548             case STATEn:
549             if (not enough input data or output space to make progress)
550             return;
551             ... make progress ...
552             state = STATEm;
553             break;
554             ...
555             }
556              
557             so when inflate() is called again, the same case is attempted again, and
558             if the appropriate resources are provided, the machine proceeds to the
559             next state. The NEEDBITS() macro is usually the way the state evaluates
560             whether it can proceed or should return. NEEDBITS() does the return if
561             the requested bits are not available. The typical use of the BITS macros
562             is:
563              
564             NEEDBITS(n);
565             ... do something with BITS(n) ...
566             DROPBITS(n);
567              
568             where NEEDBITS(n) either returns from inflate() if there isn't enough
569             input left to load n bits into the accumulator, or it continues. BITS(n)
570             gives the low n bits in the accumulator. When done, DROPBITS(n) drops
571             the low n bits off the accumulator. INITBITS() clears the accumulator
572             and sets the number of available bits to zero. BYTEBITS() discards just
573             enough bits to put the accumulator on a byte boundary. After BYTEBITS()
574             and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
575              
576             NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
577             if there is no input available. The decoding of variable length codes uses
578             PULLBYTE() directly in order to pull just enough bytes to decode the next
579             code, and no more.
580              
581             Some states loop until they get enough input, making sure that enough
582             state information is maintained to continue the loop where it left off
583             if NEEDBITS() returns in the loop. For example, want, need, and keep
584             would all have to actually be part of the saved state in case NEEDBITS()
585             returns:
586              
587             case STATEw:
588             while (want < need) {
589             NEEDBITS(n);
590             keep[want++] = BITS(n);
591             DROPBITS(n);
592             }
593             state = STATEx;
594             case STATEx:
595              
596             As shown above, if the next state is also the next case, then the break
597             is omitted.
598              
599             A state may also return if there is not enough output space available to
600             complete that state. Those states are copying stored data, writing a
601             literal byte, and copying a matching string.
602              
603             When returning, a "goto inf_leave" is used to update the total counters,
604             update the check value, and determine whether any progress has been made
605             during that inflate() call in order to return the proper return code.
606             Progress is defined as a change in either strm->avail_in or strm->avail_out.
607             When there is a window, goto inf_leave will update the window with the last
608             output written. If a goto inf_leave occurs in the middle of decompression
609             and there is no window currently, goto inf_leave will create one and copy
610             output to the window for the next call of inflate().
611              
612             In this implementation, the flush parameter of inflate() only affects the
613             return code (per zlib.h). inflate() always writes as much as possible to
614             strm->next_out, given the space available and the provided input--the effect
615             documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
616             the allocation of and copying into a sliding window until necessary, which
617             provides the effect documented in zlib.h for Z_FINISH when the entire input
618             stream available. So the only thing the flush parameter actually does is:
619             when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
620             will return Z_BUF_ERROR if it has not reached the end of the stream.
621             */
622              
623 1624           int ZEXPORT inflate(strm, flush)
624             z_streamp strm;
625             int flush;
626             {
627             struct inflate_state FAR *state;
628             z_const unsigned char FAR *next; /* next input */
629             unsigned char FAR *put; /* next output */
630             unsigned have, left; /* available input and output */
631             unsigned long hold; /* bit buffer */
632             unsigned bits; /* bits in bit buffer */
633             unsigned in, out; /* save starting available input and output */
634             unsigned copy; /* number of stored or match bytes to copy */
635             unsigned char FAR *from; /* where to copy match bytes from */
636             code here; /* current decoding table entry */
637             code last; /* parent table entry */
638             unsigned len; /* length to copy for repeats, bits to drop */
639             int ret; /* return code */
640             #ifdef GUNZIP
641             unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
642             #endif
643             static const unsigned short order[19] = /* permutation of code lengths */
644             {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
645              
646 1624 50         if (inflateStateCheck(strm) || strm->next_out == Z_NULL ||
    50          
    50          
647 0 0         (strm->next_in == Z_NULL && strm->avail_in != 0))
648 0           return Z_STREAM_ERROR;
649              
650 1624           state = (struct inflate_state FAR *)strm->state;
651 1624 50         if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
652 1624           LOAD();
653 1624           in = have;
654 1624           out = left;
655 1624           ret = Z_OK;
656             for (;;)
657 172413           switch (state->mode) {
658             case HEAD:
659 1178 50         if (state->wrap == 0) {
660 0           state->mode = TYPEDO;
661 0           break;
662             }
663 3534 50         NEEDBITS(16);
    100          
664             #ifdef GUNZIP
665             if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
666             if (state->wbits == 0)
667             state->wbits = 15;
668             state->check = crc32(0L, Z_NULL, 0);
669             CRC2(state->check, hold);
670             INITBITS();
671             state->mode = FLAGS;
672             break;
673             }
674             if (state->head != Z_NULL)
675             state->head->done = -1;
676             if (!(state->wrap & 1) || /* check if zlib header allowed */
677             #else
678 1178 50         if (
679             #endif
680 1178           ((BITS(8) << 8) + (hold >> 8)) % 31) {
681 0           strm->msg = (char *)"incorrect header check";
682 0           state->mode = BAD;
683 0           break;
684             }
685 1178 50         if (BITS(4) != Z_DEFLATED) {
686 0           strm->msg = (char *)"unknown compression method";
687 0           state->mode = BAD;
688 0           break;
689             }
690 1178           DROPBITS(4);
691 1178           len = BITS(4) + 8;
692 1178 50         if (state->wbits == 0)
693 0           state->wbits = len;
694 1178 50         if (len > 15 || len > state->wbits) {
    50          
695 0           strm->msg = (char *)"invalid window size";
696 0           state->mode = BAD;
697 0           break;
698             }
699 1178           state->dmax = 1U << len;
700 1178           state->flags = 0; /* indicate zlib header */
701             Tracev((stderr, "inflate: zlib header ok\n"));
702 1178           strm->adler = state->check = adler32(0L, Z_NULL, 0);
703 1178 50         state->mode = hold & 0x200 ? DICTID : TYPE;
704 1178           INITBITS();
705 1178           break;
706             #ifdef GUNZIP
707             case FLAGS:
708             NEEDBITS(16);
709             state->flags = (int)(hold);
710             if ((state->flags & 0xff) != Z_DEFLATED) {
711             strm->msg = (char *)"unknown compression method";
712             state->mode = BAD;
713             break;
714             }
715             if (state->flags & 0xe000) {
716             strm->msg = (char *)"unknown header flags set";
717             state->mode = BAD;
718             break;
719             }
720             if (state->head != Z_NULL)
721             state->head->text = (int)((hold >> 8) & 1);
722             if ((state->flags & 0x0200) && (state->wrap & 4))
723             CRC2(state->check, hold);
724             INITBITS();
725             state->mode = TIME;
726             /* fallthrough */
727             case TIME:
728             NEEDBITS(32);
729             if (state->head != Z_NULL)
730             state->head->time = hold;
731             if ((state->flags & 0x0200) && (state->wrap & 4))
732             CRC4(state->check, hold);
733             INITBITS();
734             state->mode = OS;
735             /* fallthrough */
736             case OS:
737             NEEDBITS(16);
738             if (state->head != Z_NULL) {
739             state->head->xflags = (int)(hold & 0xff);
740             state->head->os = (int)(hold >> 8);
741             }
742             if ((state->flags & 0x0200) && (state->wrap & 4))
743             CRC2(state->check, hold);
744             INITBITS();
745             state->mode = EXLEN;
746             /* fallthrough */
747             case EXLEN:
748             if (state->flags & 0x0400) {
749             NEEDBITS(16);
750             state->length = (unsigned)(hold);
751             if (state->head != Z_NULL)
752             state->head->extra_len = (unsigned)hold;
753             if ((state->flags & 0x0200) && (state->wrap & 4))
754             CRC2(state->check, hold);
755             INITBITS();
756             }
757             else if (state->head != Z_NULL)
758             state->head->extra = Z_NULL;
759             state->mode = EXTRA;
760             /* fallthrough */
761             case EXTRA:
762             if (state->flags & 0x0400) {
763             copy = state->length;
764             if (copy > have) copy = have;
765             if (copy) {
766             if (state->head != Z_NULL &&
767             state->head->extra != Z_NULL) {
768             len = state->head->extra_len - state->length;
769             zmemcpy(state->head->extra + len, next,
770             len + copy > state->head->extra_max ?
771             state->head->extra_max - len : copy);
772             }
773             if ((state->flags & 0x0200) && (state->wrap & 4))
774             state->check = crc32(state->check, next, copy);
775             have -= copy;
776             next += copy;
777             state->length -= copy;
778             }
779             if (state->length) goto inf_leave;
780             }
781             state->length = 0;
782             state->mode = NAME;
783             /* fallthrough */
784             case NAME:
785             if (state->flags & 0x0800) {
786             if (have == 0) goto inf_leave;
787             copy = 0;
788             do {
789             len = (unsigned)(next[copy++]);
790             if (state->head != Z_NULL &&
791             state->head->name != Z_NULL &&
792             state->length < state->head->name_max)
793             state->head->name[state->length++] = (Bytef)len;
794             } while (len && copy < have);
795             if ((state->flags & 0x0200) && (state->wrap & 4))
796             state->check = crc32(state->check, next, copy);
797             have -= copy;
798             next += copy;
799             if (len) goto inf_leave;
800             }
801             else if (state->head != Z_NULL)
802             state->head->name = Z_NULL;
803             state->length = 0;
804             state->mode = COMMENT;
805             /* fallthrough */
806             case COMMENT:
807             if (state->flags & 0x1000) {
808             if (have == 0) goto inf_leave;
809             copy = 0;
810             do {
811             len = (unsigned)(next[copy++]);
812             if (state->head != Z_NULL &&
813             state->head->comment != Z_NULL &&
814             state->length < state->head->comm_max)
815             state->head->comment[state->length++] = (Bytef)len;
816             } while (len && copy < have);
817             if ((state->flags & 0x0200) && (state->wrap & 4))
818             state->check = crc32(state->check, next, copy);
819             have -= copy;
820             next += copy;
821             if (len) goto inf_leave;
822             }
823             else if (state->head != Z_NULL)
824             state->head->comment = Z_NULL;
825             state->mode = HCRC;
826             /* fallthrough */
827             case HCRC:
828             if (state->flags & 0x0200) {
829             NEEDBITS(16);
830             if ((state->wrap & 4) && hold != (state->check & 0xffff)) {
831             strm->msg = (char *)"header crc mismatch";
832             state->mode = BAD;
833             break;
834             }
835             INITBITS();
836             }
837             if (state->head != Z_NULL) {
838             state->head->hcrc = (int)((state->flags >> 9) & 1);
839             state->head->done = 1;
840             }
841             strm->adler = state->check = crc32(0L, Z_NULL, 0);
842             state->mode = TYPE;
843             break;
844             #endif
845             case DICTID:
846 0 0         NEEDBITS(32);
    0          
847 0           strm->adler = state->check = ZSWAP32(hold);
848 0           INITBITS();
849 0           state->mode = DICT;
850             /* fallthrough */
851             case DICT:
852 0 0         if (state->havedict == 0) {
853 0           RESTORE();
854 0           return Z_NEED_DICT;
855             }
856 0           strm->adler = state->check = adler32(0L, Z_NULL, 0);
857 0           state->mode = TYPE;
858             /* fallthrough */
859             case TYPE:
860 2252 50         if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave;
    50          
861             /* fallthrough */
862             case TYPEDO:
863 2252 100         if (state->last) {
864 1074           BYTEBITS();
865 1074           state->mode = CHECK;
866 1074           break;
867             }
868 2356 50         NEEDBITS(3);
    100          
869 1178           state->last = BITS(1);
870 1178           DROPBITS(1);
871 1178           switch (BITS(2)) {
872             case 0: /* stored block */
873             Tracev((stderr, "inflate: stored block%s\n",
874             state->last ? " (last)" : ""));
875 0           state->mode = STORED;
876 0           break;
877             case 1: /* fixed block */
878 765           fixedtables(state);
879             Tracev((stderr, "inflate: fixed codes block%s\n",
880             state->last ? " (last)" : ""));
881 765           state->mode = LEN_; /* decode codes */
882 765 50         if (flush == Z_TREES) {
883 0           DROPBITS(2);
884 0           goto inf_leave;
885             }
886 765           break;
887             case 2: /* dynamic block */
888             Tracev((stderr, "inflate: dynamic codes block%s\n",
889             state->last ? " (last)" : ""));
890 413           state->mode = TABLE;
891 413           break;
892             case 3:
893 0           strm->msg = (char *)"invalid block type";
894 0           state->mode = BAD;
895             }
896 1178           DROPBITS(2);
897 1178           break;
898             case STORED:
899 0           BYTEBITS(); /* go to byte boundary */
900 0 0         NEEDBITS(32);
    0          
901 0 0         if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
902 0           strm->msg = (char *)"invalid stored block lengths";
903 0           state->mode = BAD;
904 0           break;
905             }
906 0           state->length = (unsigned)hold & 0xffff;
907             Tracev((stderr, "inflate: stored length %u\n",
908             state->length));
909 0           INITBITS();
910 0           state->mode = COPY_;
911 0 0         if (flush == Z_TREES) goto inf_leave;
912             /* fallthrough */
913             case COPY_:
914 0           state->mode = COPY;
915             /* fallthrough */
916             case COPY:
917 0           copy = state->length;
918 0 0         if (copy) {
919 0 0         if (copy > have) copy = have;
920 0 0         if (copy > left) copy = left;
921 0 0         if (copy == 0) goto inf_leave;
922 0           zmemcpy(put, next, copy);
923 0           have -= copy;
924 0           next += copy;
925 0           left -= copy;
926 0           put += copy;
927 0           state->length -= copy;
928 0           break;
929             }
930             Tracev((stderr, "inflate: stored end\n"));
931 0           state->mode = TYPE;
932 0           break;
933             case TABLE:
934 1239 50         NEEDBITS(14);
    100          
935 413           state->nlen = BITS(5) + 257;
936 413           DROPBITS(5);
937 413           state->ndist = BITS(5) + 1;
938 413           DROPBITS(5);
939 413           state->ncode = BITS(4) + 4;
940 413           DROPBITS(4);
941             #ifndef PKZIP_BUG_WORKAROUND
942 413 50         if (state->nlen > 286 || state->ndist > 30) {
    50          
943 0           strm->msg = (char *)"too many length or distance symbols";
944 0           state->mode = BAD;
945 0           break;
946             }
947             #endif
948             Tracev((stderr, "inflate: table sizes ok\n"));
949 413           state->have = 0;
950 413           state->mode = LENLENS;
951             /* fallthrough */
952             case LENLENS:
953 6979 100         while (state->have < state->ncode) {
954 9010 50         NEEDBITS(3);
    100          
955 6566           state->lens[order[state->have++]] = (unsigned short)BITS(3);
956 6566           DROPBITS(3);
957             }
958 1694 100         while (state->have < 19)
959 1281           state->lens[order[state->have++]] = 0;
960 413           state->next = state->codes;
961 413           state->lencode = (const code FAR *)(state->next);
962 413           state->lenbits = 7;
963 413           ret = inflate_table(CODES, state->lens, 19, &(state->next),
964 413           &(state->lenbits), state->work);
965 413 50         if (ret) {
966 0           strm->msg = (char *)"invalid code lengths set";
967 0           state->mode = BAD;
968 0           break;
969             }
970             Tracev((stderr, "inflate: code lengths ok\n"));
971 413           state->have = 0;
972 413           state->mode = CODELENS;
973             /* fallthrough */
974             case CODELENS:
975 30689 100         while (state->have < state->nlen + state->ndist) {
976             for (;;) {
977 41139           here = state->lencode[BITS(state->lenbits)];
978 41139 100         if ((unsigned)(here.bits) <= bits) break;
979 10863 50         PULLBYTE();
980 10863           }
981 30276 100         if (here.val < 16) {
982 26062           DROPBITS(here.bits);
983 26062           state->lens[state->have++] = here.val;
984             }
985             else {
986 4214 100         if (here.val == 16) {
987 297 50         NEEDBITS(here.bits + 2);
    100          
988 277           DROPBITS(here.bits);
989 277 50         if (state->have == 0) {
990 0           strm->msg = (char *)"invalid bit length repeat";
991 0           state->mode = BAD;
992 0           break;
993             }
994 277           len = state->lens[state->have - 1];
995 277           copy = 3 + BITS(2);
996 277           DROPBITS(2);
997             }
998 3937 100         else if (here.val == 17) {
999 3533 50         NEEDBITS(here.bits + 3);
    100          
1000 2330           DROPBITS(here.bits);
1001 2330           len = 0;
1002 2330           copy = 3 + BITS(3);
1003 2330           DROPBITS(3);
1004             }
1005             else {
1006 2905 50         NEEDBITS(here.bits + 7);
    100          
1007 1607           DROPBITS(here.bits);
1008 1607           len = 0;
1009 1607           copy = 11 + BITS(7);
1010 1607           DROPBITS(7);
1011             }
1012 4214 50         if (state->have + copy > state->nlen + state->ndist) {
1013 0           strm->msg = (char *)"invalid bit length repeat";
1014 0           state->mode = BAD;
1015 0           break;
1016             }
1017 97925 100         while (copy--)
1018 93711           state->lens[state->have++] = (unsigned short)len;
1019             }
1020             }
1021              
1022             /* handle error breaks in while */
1023 413 50         if (state->mode == BAD) break;
1024              
1025             /* check for end-of-block code (better have one) */
1026 413 50         if (state->lens[256] == 0) {
1027 0           strm->msg = (char *)"invalid code -- missing end-of-block";
1028 0           state->mode = BAD;
1029 0           break;
1030             }
1031              
1032             /* build code tables -- note: do not change the lenbits or distbits
1033             values here (9 and 6) without reading the comments in inftrees.h
1034             concerning the ENOUGH constants, which depend on those values */
1035 413           state->next = state->codes;
1036 413           state->lencode = (const code FAR *)(state->next);
1037 413           state->lenbits = 9;
1038 413           ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
1039 413           &(state->lenbits), state->work);
1040 413 50         if (ret) {
1041 0           strm->msg = (char *)"invalid literal/lengths set";
1042 0           state->mode = BAD;
1043 0           break;
1044             }
1045 413           state->distcode = (const code FAR *)(state->next);
1046 413           state->distbits = 6;
1047 413           ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
1048 413           &(state->next), &(state->distbits), state->work);
1049 413 50         if (ret) {
1050 0           strm->msg = (char *)"invalid distances set";
1051 0           state->mode = BAD;
1052 0           break;
1053             }
1054             Tracev((stderr, "inflate: codes ok\n"));
1055 413           state->mode = LEN_;
1056 413 50         if (flush == Z_TREES) goto inf_leave;
1057             /* fallthrough */
1058             case LEN_:
1059 1178           state->mode = LEN;
1060             /* fallthrough */
1061             case LEN:
1062 85754 100         if (have >= 6 && left >= 258) {
    100          
1063 93           RESTORE();
1064 93           inflate_fast(strm, out);
1065 93           LOAD();
1066 93 100         if (state->mode == TYPE)
1067 7           state->back = -1;
1068 93           break;
1069             }
1070 85661           state->back = 0;
1071             for (;;) {
1072 150501           here = state->lencode[BITS(state->lenbits)];
1073 150501 100         if ((unsigned)(here.bits) <= bits) break;
1074 64840 50         PULLBYTE();
1075 64840           }
1076 85661 100         if (here.op && (here.op & 0xf0) == 0) {
    50          
1077 0           last = here;
1078             for (;;) {
1079 0           here = state->lencode[last.val +
1080 0           (BITS(last.bits + last.op) >> last.bits)];
1081 0 0         if ((unsigned)(last.bits + here.bits) <= bits) break;
1082 0 0         PULLBYTE();
1083 0           }
1084 0           DROPBITS(last.bits);
1085 0           state->back += last.bits;
1086             }
1087 85661           DROPBITS(here.bits);
1088 85661           state->back += here.bits;
1089 85661           state->length = (unsigned)here.val;
1090 85661 100         if ((int)(here.op) == 0) {
1091             Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?
1092             "inflate: literal '%c'\n" :
1093             "inflate: literal 0x%02x\n", here.val));
1094 81539           state->mode = LIT;
1095 81539           break;
1096             }
1097 4122 100         if (here.op & 32) {
1098             Tracevv((stderr, "inflate: end of block\n"));
1099 1067           state->back = -1;
1100 1067           state->mode = TYPE;
1101 1067           break;
1102             }
1103 3055 50         if (here.op & 64) {
1104 0           strm->msg = (char *)"invalid literal/length code";
1105 0           state->mode = BAD;
1106 0           break;
1107             }
1108 3055           state->extra = (unsigned)(here.op) & 15;
1109 3055           state->mode = LENEXT;
1110             /* fallthrough */
1111             case LENEXT:
1112 3055 100         if (state->extra) {
1113 583 50         NEEDBITS(state->extra);
    100          
1114 488           state->length += BITS(state->extra);
1115 488           DROPBITS(state->extra);
1116 488           state->back += state->extra;
1117             }
1118             Tracevv((stderr, "inflate: length %u\n", state->length));
1119 3055           state->was = state->length;
1120 3055           state->mode = DIST;
1121             /* fallthrough */
1122             case DIST:
1123             for (;;) {
1124 4078           here = state->distcode[BITS(state->distbits)];
1125 4078 100         if ((unsigned)(here.bits) <= bits) break;
1126 1023 50         PULLBYTE();
1127 1023           }
1128 3055 50         if ((here.op & 0xf0) == 0) {
1129 0           last = here;
1130             for (;;) {
1131 0           here = state->distcode[last.val +
1132 0           (BITS(last.bits + last.op) >> last.bits)];
1133 0 0         if ((unsigned)(last.bits + here.bits) <= bits) break;
1134 0 0         PULLBYTE();
1135 0           }
1136 0           DROPBITS(last.bits);
1137 0           state->back += last.bits;
1138             }
1139 3055           DROPBITS(here.bits);
1140 3055           state->back += here.bits;
1141 3055 50         if (here.op & 64) {
1142 0           strm->msg = (char *)"invalid distance code";
1143 0           state->mode = BAD;
1144 0           break;
1145             }
1146 3055           state->offset = (unsigned)here.val;
1147 3055           state->extra = (unsigned)(here.op) & 15;
1148 3055           state->mode = DISTEXT;
1149             /* fallthrough */
1150             case DISTEXT:
1151 3055 100         if (state->extra) {
1152 3355 50         NEEDBITS(state->extra);
    100          
1153 2289           state->offset += BITS(state->extra);
1154 2289           DROPBITS(state->extra);
1155 2289           state->back += state->extra;
1156             }
1157             #ifdef INFLATE_STRICT
1158             if (state->offset > state->dmax) {
1159             strm->msg = (char *)"invalid distance too far back";
1160             state->mode = BAD;
1161             break;
1162             }
1163             #endif
1164             Tracevv((stderr, "inflate: distance %u\n", state->offset));
1165 3055           state->mode = MATCH;
1166             /* fallthrough */
1167             case MATCH:
1168 3272 100         if (left == 0) goto inf_leave;
1169 3212           copy = out - left;
1170 3212 100         if (state->offset > copy) { /* copy from window */
1171 711           copy = state->offset - copy;
1172 711 50         if (copy > state->whave) {
1173 0 0         if (state->sane) {
1174 0           strm->msg = (char *)"invalid distance too far back";
1175 0           state->mode = BAD;
1176 0           break;
1177             }
1178             #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1179             Trace((stderr, "inflate.c too far\n"));
1180             copy -= state->whave;
1181             if (copy > state->length) copy = state->length;
1182             if (copy > left) copy = left;
1183             left -= copy;
1184             state->length -= copy;
1185             do {
1186             *put++ = 0;
1187             } while (--copy);
1188             if (state->length == 0) state->mode = LEN;
1189             break;
1190             #endif
1191             }
1192 711 50         if (copy > state->wnext) {
1193 0           copy -= state->wnext;
1194 0           from = state->window + (state->wsize - copy);
1195             }
1196             else
1197 711           from = state->window + (state->wnext - copy);
1198 711 100         if (copy > state->length) copy = state->length;
1199             }
1200             else { /* copy from output */
1201 2501           from = put - state->offset;
1202 2501           copy = state->length;
1203             }
1204 3212 100         if (copy > left) copy = left;
1205 3212           left -= copy;
1206 3212           state->length -= copy;
1207             do {
1208 31041           *put++ = *from++;
1209 31041 100         } while (--copy);
1210 3212 100         if (state->length == 0) state->mode = LEN;
1211 3212           break;
1212             case LIT:
1213 81938 100         if (left == 0) goto inf_leave;
1214 81448           *put++ = (unsigned char)(state->length);
1215 81448           left--;
1216 81448           state->mode = LEN;
1217 81448           break;
1218             case CHECK:
1219 1074 50         if (state->wrap) {
1220 5370 50         NEEDBITS(32);
    100          
1221 1074           out -= left;
1222 1074           strm->total_out += out;
1223 1074           state->total += out;
1224 1074 50         if ((state->wrap & 4) && out)
    50          
1225 1074           strm->adler = state->check =
1226 1074           UPDATE_CHECK(state->check, put - out, out);
1227 1074           out = left;
1228 1074 50         if ((state->wrap & 4) && (
    50          
1229             #ifdef GUNZIP
1230             state->flags ? hold :
1231             #endif
1232 1074           ZSWAP32(hold)) != state->check) {
1233 0           strm->msg = (char *)"incorrect data check";
1234 0           state->mode = BAD;
1235 0           break;
1236             }
1237 1074           INITBITS();
1238             Tracev((stderr, "inflate: check matches trailer\n"));
1239             }
1240             #ifdef GUNZIP
1241             state->mode = LENGTH;
1242             /* fallthrough */
1243             case LENGTH:
1244             if (state->wrap && state->flags) {
1245             NEEDBITS(32);
1246             if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) {
1247             strm->msg = (char *)"incorrect length check";
1248             state->mode = BAD;
1249             break;
1250             }
1251             INITBITS();
1252             Tracev((stderr, "inflate: length matches trailer\n"));
1253             }
1254             #endif
1255 1074           state->mode = DONE;
1256             /* fallthrough */
1257             case DONE:
1258 1074           ret = Z_STREAM_END;
1259 1074           goto inf_leave;
1260             case BAD:
1261 0           ret = Z_DATA_ERROR;
1262 0           goto inf_leave;
1263             case MEM:
1264 0           return Z_MEM_ERROR;
1265             case SYNC:
1266             /* fallthrough */
1267             default:
1268 0           return Z_STREAM_ERROR;
1269             }
1270              
1271             /*
1272             Return from inflate(), updating the total counts and the check value.
1273             If there was no progress during the inflate() call, return a buffer
1274             error. Call updatewindow() to create and/or update the window state.
1275             Note: a memory error from inflate() is non-recoverable.
1276             */
1277 170789           inf_leave:
1278 1624           RESTORE();
1279 1624 100         if (state->wsize || (out != strm->avail_out && state->mode < BAD &&
    100          
    50          
    50          
1280 0 0         (state->mode < CHECK || flush != Z_FINISH)))
1281 996 50         if (updatewindow(strm, strm->next_out, out - strm->avail_out)) {
1282 0           state->mode = MEM;
1283 0           return Z_MEM_ERROR;
1284             }
1285 1624           in -= strm->avail_in;
1286 1624           out -= strm->avail_out;
1287 1624           strm->total_in += in;
1288 1624           strm->total_out += out;
1289 1624           state->total += out;
1290 1624 50         if ((state->wrap & 4) && out)
    100          
1291 550           strm->adler = state->check =
1292 550           UPDATE_CHECK(state->check, strm->next_out - out, out);
1293 1624 50         strm->data_type = (int)state->bits + (state->last ? 64 : 0) +
1294 1624 50         (state->mode == TYPE ? 128 : 0) +
1295 1624 50         (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0);
    50          
1296 1624 50         if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
    0          
    50          
    100          
1297 550           ret = Z_BUF_ERROR;
1298 1624           return ret;
1299             }
1300              
1301 1178           int ZEXPORT inflateEnd(strm)
1302             z_streamp strm;
1303             {
1304             struct inflate_state FAR *state;
1305 1178 50         if (inflateStateCheck(strm))
1306 0           return Z_STREAM_ERROR;
1307 1178           state = (struct inflate_state FAR *)strm->state;
1308 1178 100         if (state->window != Z_NULL) ZFREE(strm, state->window);
1309 1178           ZFREE(strm, strm->state);
1310 1178           strm->state = Z_NULL;
1311             Tracev((stderr, "inflate: end\n"));
1312 1178           return Z_OK;
1313             }
1314              
1315 0           int ZEXPORT inflateGetDictionary(strm, dictionary, dictLength)
1316             z_streamp strm;
1317             Bytef *dictionary;
1318             uInt *dictLength;
1319             {
1320             struct inflate_state FAR *state;
1321              
1322             /* check state */
1323 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1324 0           state = (struct inflate_state FAR *)strm->state;
1325              
1326             /* copy dictionary */
1327 0 0         if (state->whave && dictionary != Z_NULL) {
    0          
1328 0           zmemcpy(dictionary, state->window + state->wnext,
1329 0           state->whave - state->wnext);
1330 0           zmemcpy(dictionary + state->whave - state->wnext,
1331 0           state->window, state->wnext);
1332             }
1333 0 0         if (dictLength != Z_NULL)
1334 0           *dictLength = state->whave;
1335 0           return Z_OK;
1336             }
1337              
1338 0           int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
1339             z_streamp strm;
1340             const Bytef *dictionary;
1341             uInt dictLength;
1342             {
1343             struct inflate_state FAR *state;
1344             unsigned long dictid;
1345             int ret;
1346              
1347             /* check state */
1348 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1349 0           state = (struct inflate_state FAR *)strm->state;
1350 0 0         if (state->wrap != 0 && state->mode != DICT)
    0          
1351 0           return Z_STREAM_ERROR;
1352              
1353             /* check for correct dictionary identifier */
1354 0 0         if (state->mode == DICT) {
1355 0           dictid = adler32(0L, Z_NULL, 0);
1356 0           dictid = adler32(dictid, dictionary, dictLength);
1357 0 0         if (dictid != state->check)
1358 0           return Z_DATA_ERROR;
1359             }
1360              
1361             /* copy dictionary to window using updatewindow(), which will amend the
1362             existing dictionary if appropriate */
1363 0           ret = updatewindow(strm, dictionary + dictLength, dictLength);
1364 0 0         if (ret) {
1365 0           state->mode = MEM;
1366 0           return Z_MEM_ERROR;
1367             }
1368 0           state->havedict = 1;
1369             Tracev((stderr, "inflate: dictionary set\n"));
1370 0           return Z_OK;
1371             }
1372              
1373 0           int ZEXPORT inflateGetHeader(strm, head)
1374             z_streamp strm;
1375             gz_headerp head;
1376             {
1377             struct inflate_state FAR *state;
1378              
1379             /* check state */
1380 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1381 0           state = (struct inflate_state FAR *)strm->state;
1382 0 0         if ((state->wrap & 2) == 0) return Z_STREAM_ERROR;
1383              
1384             /* save header structure */
1385 0           state->head = head;
1386 0           head->done = 0;
1387 0           return Z_OK;
1388             }
1389              
1390             /*
1391             Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found
1392             or when out of input. When called, *have is the number of pattern bytes
1393             found in order so far, in 0..3. On return *have is updated to the new
1394             state. If on return *have equals four, then the pattern was found and the
1395             return value is how many bytes were read including the last byte of the
1396             pattern. If *have is less than four, then the pattern has not been found
1397             yet and the return value is len. In the latter case, syncsearch() can be
1398             called again with more data and the *have state. *have is initialized to
1399             zero for the first call.
1400             */
1401 0           local unsigned syncsearch(have, buf, len)
1402             unsigned FAR *have;
1403             const unsigned char FAR *buf;
1404             unsigned len;
1405             {
1406             unsigned got;
1407             unsigned next;
1408              
1409 0           got = *have;
1410 0           next = 0;
1411 0 0         while (next < len && got < 4) {
    0          
1412 0 0         if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
    0          
1413 0           got++;
1414 0 0         else if (buf[next])
1415 0           got = 0;
1416             else
1417 0           got = 4 - got;
1418 0           next++;
1419             }
1420 0           *have = got;
1421 0           return next;
1422             }
1423              
1424 0           int ZEXPORT inflateSync(strm)
1425             z_streamp strm;
1426             {
1427             unsigned len; /* number of bytes to look at or looked at */
1428             int flags; /* temporary to save header status */
1429             unsigned long in, out; /* temporary to save total_in and total_out */
1430             unsigned char buf[4]; /* to restore bit buffer to byte string */
1431             struct inflate_state FAR *state;
1432              
1433             /* check parameters */
1434 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1435 0           state = (struct inflate_state FAR *)strm->state;
1436 0 0         if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
    0          
1437              
1438             /* if first time, start search in bit buffer */
1439 0 0         if (state->mode != SYNC) {
1440 0           state->mode = SYNC;
1441 0           state->hold <<= state->bits & 7;
1442 0           state->bits -= state->bits & 7;
1443 0           len = 0;
1444 0 0         while (state->bits >= 8) {
1445 0           buf[len++] = (unsigned char)(state->hold);
1446 0           state->hold >>= 8;
1447 0           state->bits -= 8;
1448             }
1449 0           state->have = 0;
1450 0           syncsearch(&(state->have), buf, len);
1451             }
1452              
1453             /* search available input */
1454 0           len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
1455 0           strm->avail_in -= len;
1456 0           strm->next_in += len;
1457 0           strm->total_in += len;
1458              
1459             /* return no joy or set up to restart inflate() on a new block */
1460 0 0         if (state->have != 4) return Z_DATA_ERROR;
1461 0 0         if (state->flags == -1)
1462 0           state->wrap = 0; /* if no header yet, treat as raw */
1463             else
1464 0           state->wrap &= ~4; /* no point in computing a check value now */
1465 0           flags = state->flags;
1466 0           in = strm->total_in; out = strm->total_out;
1467 0           inflateReset(strm);
1468 0           strm->total_in = in; strm->total_out = out;
1469 0           state->flags = flags;
1470 0           state->mode = TYPE;
1471 0           return Z_OK;
1472             }
1473              
1474             /*
1475             Returns true if inflate is currently at the end of a block generated by
1476             Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
1477             implementation to provide an additional safety check. PPP uses
1478             Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
1479             block. When decompressing, PPP checks that at the end of input packet,
1480             inflate is waiting for these length bytes.
1481             */
1482 0           int ZEXPORT inflateSyncPoint(strm)
1483             z_streamp strm;
1484             {
1485             struct inflate_state FAR *state;
1486              
1487 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1488 0           state = (struct inflate_state FAR *)strm->state;
1489 0 0         return state->mode == STORED && state->bits == 0;
    0          
1490             }
1491              
1492 0           int ZEXPORT inflateCopy(dest, source)
1493             z_streamp dest;
1494             z_streamp source;
1495             {
1496             struct inflate_state FAR *state;
1497             struct inflate_state FAR *copy;
1498             unsigned char FAR *window;
1499             unsigned wsize;
1500              
1501             /* check input */
1502 0 0         if (inflateStateCheck(source) || dest == Z_NULL)
    0          
1503 0           return Z_STREAM_ERROR;
1504 0           state = (struct inflate_state FAR *)source->state;
1505              
1506             /* allocate space */
1507 0           copy = (struct inflate_state FAR *)
1508 0           ZALLOC(source, 1, sizeof(struct inflate_state));
1509 0 0         if (copy == Z_NULL) return Z_MEM_ERROR;
1510 0           window = Z_NULL;
1511 0 0         if (state->window != Z_NULL) {
1512 0           window = (unsigned char FAR *)
1513 0           ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
1514 0 0         if (window == Z_NULL) {
1515 0           ZFREE(source, copy);
1516 0           return Z_MEM_ERROR;
1517             }
1518             }
1519              
1520             /* copy state */
1521 0           zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream));
1522 0           zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state));
1523 0           copy->strm = dest;
1524 0 0         if (state->lencode >= state->codes &&
    0          
1525 0           state->lencode <= state->codes + ENOUGH - 1) {
1526 0           copy->lencode = copy->codes + (state->lencode - state->codes);
1527 0           copy->distcode = copy->codes + (state->distcode - state->codes);
1528             }
1529 0           copy->next = copy->codes + (state->next - state->codes);
1530 0 0         if (window != Z_NULL) {
1531 0           wsize = 1U << state->wbits;
1532 0           zmemcpy(window, state->window, wsize);
1533             }
1534 0           copy->window = window;
1535 0           dest->state = (struct internal_state FAR *)copy;
1536 0           return Z_OK;
1537             }
1538              
1539 0           int ZEXPORT inflateUndermine(strm, subvert)
1540             z_streamp strm;
1541             int subvert;
1542             {
1543             struct inflate_state FAR *state;
1544              
1545 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1546 0           state = (struct inflate_state FAR *)strm->state;
1547             #ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR
1548             state->sane = !subvert;
1549             return Z_OK;
1550             #else
1551             (void)subvert;
1552 0           state->sane = 1;
1553 0           return Z_DATA_ERROR;
1554             #endif
1555             }
1556              
1557 0           int ZEXPORT inflateValidate(strm, check)
1558             z_streamp strm;
1559             int check;
1560             {
1561             struct inflate_state FAR *state;
1562              
1563 0 0         if (inflateStateCheck(strm)) return Z_STREAM_ERROR;
1564 0           state = (struct inflate_state FAR *)strm->state;
1565 0 0         if (check && state->wrap)
    0          
1566 0           state->wrap |= 4;
1567             else
1568 0           state->wrap &= ~4;
1569 0           return Z_OK;
1570             }
1571              
1572 0           long ZEXPORT inflateMark(strm)
1573             z_streamp strm;
1574             {
1575             struct inflate_state FAR *state;
1576              
1577 0 0         if (inflateStateCheck(strm))
1578 0           return -(1L << 16);
1579 0           state = (struct inflate_state FAR *)strm->state;
1580 0 0         return (long)(((unsigned long)((long)state->back)) << 16) +
    0          
1581 0           (state->mode == COPY ? state->length :
1582 0           (state->mode == MATCH ? state->was - state->length : 0));
1583             }
1584              
1585 0           unsigned long ZEXPORT inflateCodesUsed(strm)
1586             z_streamp strm;
1587             {
1588             struct inflate_state FAR *state;
1589 0 0         if (inflateStateCheck(strm)) return (unsigned long)-1;
1590 0           state = (struct inflate_state FAR *)strm->state;
1591 0           return (unsigned long)(state->next - state->codes);
1592             }