1 /* inflate.c -- zlib decompression
2 * Copyright (C) 1995-2003 Mark Adler
3 * For conditions of distribution and use, see copyright notice in zlib.h
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
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
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
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
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 write == 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
57 * 1.2.beta5 1 Jan 2003
58 * - Improved inflateBack() interface to allow the caller to provide initial
60 * - Fixed stored blocks bug in inflateBack()
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 *
69 * 1.2.beta7 27 Jan 2003
70 * - Changed many types to unsigned or unsigned short to avoid warnings
71 * - Added inflateCopy() function
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()
80 * The history for versions after 1.2.0 are in ChangeLog in zlib distribution.
83 #include <sys/cdefs.h>
84 __FBSDID("$FreeBSD$");
97 /* function prototypes */
98 local void fixedtables OF((struct inflate_state FAR *state));
99 local int updatewindow OF((z_streamp strm, unsigned out));
101 void makefixed OF((void));
103 local unsigned syncsearch OF((unsigned FAR *have, unsigned char FAR *buf,
106 int ZEXPORT inflateReset(strm)
109 struct inflate_state FAR *state;
111 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
112 state = (struct inflate_state FAR *)strm->state;
113 strm->total_in = strm->total_out = state->total = 0;
122 state->lencode = state->distcode = state->next = state->codes;
123 Tracev((stderr, "inflate: reset\n"));
127 int ZEXPORT inflateInit2_(strm, windowBits, version, stream_size)
133 struct inflate_state FAR *state;
135 if (version == Z_NULL || version[0] != ZLIB_VERSION[0] ||
136 stream_size != (int)(sizeof(z_stream)))
137 return Z_VERSION_ERROR;
138 if (strm == Z_NULL) return Z_STREAM_ERROR;
139 strm->msg = Z_NULL; /* in case we return an error */
140 if (strm->zalloc == (alloc_func)0) {
141 strm->zalloc = zcalloc;
142 strm->opaque = (voidpf)0;
144 if (strm->zfree == (free_func)0) strm->zfree = zcfree;
145 state = (struct inflate_state FAR *)
146 ZALLOC(strm, 1, sizeof(struct inflate_state));
147 if (state == Z_NULL) return Z_MEM_ERROR;
148 Tracev((stderr, "inflate: allocated\n"));
149 strm->state = (voidpf)state;
150 if (windowBits < 0) {
152 windowBits = -windowBits;
155 state->wrap = (windowBits >> 4) + 1;
157 if (windowBits < 48) windowBits &= 15;
160 if (windowBits < 8 || windowBits > 15) {
162 strm->state = Z_NULL;
163 return Z_STREAM_ERROR;
165 state->wbits = (unsigned)windowBits;
166 state->window = Z_NULL;
167 return inflateReset(strm);
170 int ZEXPORT inflateInit_(strm, version, stream_size)
175 return inflateInit2_(strm, DEF_WBITS, version, stream_size);
179 Return state with length and distance decoding tables and index sizes set to
180 fixed code decoding. Normally this returns fixed tables from inffixed.h.
181 If BUILDFIXED is defined, then instead this routine builds the tables the
182 first time it's called, and returns those tables the first time and
183 thereafter. This reduces the size of the code by about 2K bytes, in
184 exchange for a little execution time. However, BUILDFIXED should not be
185 used for threaded applications, since the rewriting of the tables and virgin
186 may not be thread-safe.
188 local void fixedtables(state)
189 struct inflate_state FAR *state;
192 static int virgin = 1;
193 static code *lenfix, *distfix;
194 static code fixed[544];
196 /* build fixed huffman tables if first call (may not be thread safe) */
201 /* literal/length table */
203 while (sym < 144) state->lens[sym++] = 8;
204 while (sym < 256) state->lens[sym++] = 9;
205 while (sym < 280) state->lens[sym++] = 7;
206 while (sym < 288) state->lens[sym++] = 8;
210 inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work);
214 while (sym < 32) state->lens[sym++] = 5;
217 inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work);
219 /* do this just once */
222 #else /* !BUILDFIXED */
223 # include "inffixed.h"
224 #endif /* BUILDFIXED */
225 state->lencode = lenfix;
227 state->distcode = distfix;
235 Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also
236 defines BUILDFIXED, so the tables are built on the fly. makefixed() writes
237 those tables to stdout, which would be piped to inffixed.h. A small program
238 can simply call makefixed to do this:
240 void makefixed(void);
248 Then that can be linked with zlib built with MAKEFIXED defined and run:
255 struct inflate_state state;
258 puts(" /* inffixed.h -- table for decoding fixed codes");
259 puts(" * Generated automatically by makefixed().");
262 puts(" /* WARNING: this file should *not* be used by applications.");
263 puts(" It is part of the implementation of this library and is");
264 puts(" subject to change. Applications should only use zlib.h.");
268 printf(" static const code lenfix[%u] = {", size);
271 if ((low % 7) == 0) printf("\n ");
272 printf("{%u,%u,%d}", state.lencode[low].op, state.lencode[low].bits,
273 state.lencode[low].val);
274 if (++low == size) break;
279 printf("\n static const code distfix[%u] = {", size);
282 if ((low % 6) == 0) printf("\n ");
283 printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits,
284 state.distcode[low].val);
285 if (++low == size) break;
290 #endif /* MAKEFIXED */
293 Update the window with the last wsize (normally 32K) bytes written before
294 returning. If window does not exist yet, create it. This is only called
295 when a window is already in use, or when output has been written during this
296 inflate call, but the end of the deflate stream has not been reached yet.
297 It is also called to create a window for dictionary data when a dictionary
300 Providing output buffers larger than 32K to inflate() should provide a speed
301 advantage, since only the last 32K of output is copied to the sliding window
302 upon return from inflate(), and since all distances after the first 32K of
303 output will fall in the output data, making match copies simpler and faster.
304 The advantage may be dependent on the size of the processor's data caches.
306 local int updatewindow(strm, out)
310 struct inflate_state FAR *state;
313 state = (struct inflate_state FAR *)strm->state;
315 /* if it hasn't been done already, allocate space for the window */
316 if (state->window == Z_NULL) {
317 state->window = (unsigned char FAR *)
318 ZALLOC(strm, 1U << state->wbits,
319 sizeof(unsigned char));
320 if (state->window == Z_NULL) return 1;
323 /* if window not in use yet, initialize */
324 if (state->wsize == 0) {
325 state->wsize = 1U << state->wbits;
330 /* copy state->wsize or less output bytes into the circular window */
331 copy = out - strm->avail_out;
332 if (copy >= state->wsize) {
333 zmemcpy(state->window, strm->next_out - state->wsize, state->wsize);
335 state->whave = state->wsize;
338 dist = state->wsize - state->write;
339 if (dist > copy) dist = copy;
340 zmemcpy(state->window + state->write, strm->next_out - copy, dist);
343 zmemcpy(state->window, strm->next_out - copy, copy);
345 state->whave = state->wsize;
348 state->write += dist;
349 if (state->write == state->wsize) state->write = 0;
350 if (state->whave < state->wsize) state->whave += dist;
356 /* Macros for inflate(): */
358 /* check function to use adler32() for zlib or crc32() for gzip */
360 # define UPDATE(check, buf, len) \
361 (state->flags ? crc32(check, buf, len) : adler32(check, buf, len))
363 # define UPDATE(check, buf, len) adler32(check, buf, len)
366 /* check macros for header crc */
368 # define CRC2(check, word) \
370 hbuf[0] = (unsigned char)(word); \
371 hbuf[1] = (unsigned char)((word) >> 8); \
372 check = crc32(check, hbuf, 2); \
375 # define CRC4(check, word) \
377 hbuf[0] = (unsigned char)(word); \
378 hbuf[1] = (unsigned char)((word) >> 8); \
379 hbuf[2] = (unsigned char)((word) >> 16); \
380 hbuf[3] = (unsigned char)((word) >> 24); \
381 check = crc32(check, hbuf, 4); \
385 /* Load registers with state in inflate() for speed */
388 put = strm->next_out; \
389 left = strm->avail_out; \
390 next = strm->next_in; \
391 have = strm->avail_in; \
392 hold = state->hold; \
393 bits = state->bits; \
396 /* Restore state from registers in inflate() */
399 strm->next_out = put; \
400 strm->avail_out = left; \
401 strm->next_in = next; \
402 strm->avail_in = have; \
403 state->hold = hold; \
404 state->bits = bits; \
407 /* Clear the input bit accumulator */
414 /* Get a byte of input into the bit accumulator, or return from inflate()
415 if there is no input available. */
418 if (have == 0) goto inf_leave; \
420 hold += (unsigned long)(*next++) << bits; \
424 /* Assure that there are at least n bits in the bit accumulator. If there is
425 not enough available input to do that, then return from inflate(). */
426 #define NEEDBITS(n) \
428 while (bits < (unsigned)(n)) \
432 /* Return the low n bits of the bit accumulator (n < 16) */
434 ((unsigned)hold & ((1U << (n)) - 1))
436 /* Remove n bits from the bit accumulator */
437 #define DROPBITS(n) \
440 bits -= (unsigned)(n); \
443 /* Remove zero to seven bits as needed to go to a byte boundary */
450 /* Reverse the bytes in a 32-bit value */
452 ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \
453 (((q) & 0xff00) << 8) + (((q) & 0xff) << 24))
456 inflate() uses a state machine to process as much input data and generate as
457 much output data as possible before returning. The state machine is
458 structured roughly as follows:
460 for (;;) switch (state) {
463 if (not enough input data or output space to make progress)
465 ... make progress ...
471 so when inflate() is called again, the same case is attempted again, and
472 if the appropriate resources are provided, the machine proceeds to the
473 next state. The NEEDBITS() macro is usually the way the state evaluates
474 whether it can proceed or should return. NEEDBITS() does the return if
475 the requested bits are not available. The typical use of the BITS macros
479 ... do something with BITS(n) ...
482 where NEEDBITS(n) either returns from inflate() if there isn't enough
483 input left to load n bits into the accumulator, or it continues. BITS(n)
484 gives the low n bits in the accumulator. When done, DROPBITS(n) drops
485 the low n bits off the accumulator. INITBITS() clears the accumulator
486 and sets the number of available bits to zero. BYTEBITS() discards just
487 enough bits to put the accumulator on a byte boundary. After BYTEBITS()
488 and a NEEDBITS(8), then BITS(8) would return the next byte in the stream.
490 NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return
491 if there is no input available. The decoding of variable length codes uses
492 PULLBYTE() directly in order to pull just enough bytes to decode the next
495 Some states loop until they get enough input, making sure that enough
496 state information is maintained to continue the loop where it left off
497 if NEEDBITS() returns in the loop. For example, want, need, and keep
498 would all have to actually be part of the saved state in case NEEDBITS()
502 while (want < need) {
504 keep[want++] = BITS(n);
510 As shown above, if the next state is also the next case, then the break
513 A state may also return if there is not enough output space available to
514 complete that state. Those states are copying stored data, writing a
515 literal byte, and copying a matching string.
517 When returning, a "goto inf_leave" is used to update the total counters,
518 update the check value, and determine whether any progress has been made
519 during that inflate() call in order to return the proper return code.
520 Progress is defined as a change in either strm->avail_in or strm->avail_out.
521 When there is a window, goto inf_leave will update the window with the last
522 output written. If a goto inf_leave occurs in the middle of decompression
523 and there is no window currently, goto inf_leave will create one and copy
524 output to the window for the next call of inflate().
526 In this implementation, the flush parameter of inflate() only affects the
527 return code (per zlib.h). inflate() always writes as much as possible to
528 strm->next_out, given the space available and the provided input--the effect
529 documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers
530 the allocation of and copying into a sliding window until necessary, which
531 provides the effect documented in zlib.h for Z_FINISH when the entire input
532 stream available. So the only thing the flush parameter actually does is:
533 when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it
534 will return Z_BUF_ERROR if it has not reached the end of the stream.
537 int ZEXPORT inflate(strm, flush)
541 struct inflate_state FAR *state;
542 unsigned char FAR *next; /* next input */
543 unsigned char FAR *put; /* next output */
544 unsigned have, left; /* available input and output */
545 unsigned long hold; /* bit buffer */
546 unsigned bits; /* bits in bit buffer */
547 unsigned in, out; /* save starting available input and output */
548 unsigned copy; /* number of stored or match bytes to copy */
549 unsigned char FAR *from; /* where to copy match bytes from */
550 code this; /* current decoding table entry */
551 code last; /* parent table entry */
552 unsigned len; /* length to copy for repeats, bits to drop */
553 int ret; /* return code */
555 unsigned char hbuf[4]; /* buffer for gzip header crc calculation */
557 static const unsigned short order[19] = /* permutation of code lengths */
558 {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
560 if (strm == Z_NULL || strm->state == Z_NULL || strm->next_out == Z_NULL ||
561 (strm->next_in == Z_NULL && strm->avail_in != 0))
562 return Z_STREAM_ERROR;
564 state = (struct inflate_state FAR *)strm->state;
565 if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */
571 switch (state->mode) {
573 if (state->wrap == 0) {
574 state->mode = TYPEDO;
579 if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */
580 state->check = crc32(0L, Z_NULL, 0);
581 CRC2(state->check, hold);
586 state->flags = 0; /* expect zlib header */
587 if (!(state->wrap & 1) || /* check if zlib header allowed */
591 ((BITS(8) << 8) + (hold >> 8)) % 31) {
592 strm->msg = (char *)"incorrect header check";
596 if (BITS(4) != Z_DEFLATED) {
597 strm->msg = (char *)"unknown compression method";
602 if (BITS(4) + 8 > state->wbits) {
603 strm->msg = (char *)"invalid window size";
607 Tracev((stderr, "inflate: zlib header ok\n"));
608 strm->adler = state->check = adler32(0L, Z_NULL, 0);
609 state->mode = hold & 0x200 ? DICTID : TYPE;
615 state->flags = (int)(hold);
616 if ((state->flags & 0xff) != Z_DEFLATED) {
617 strm->msg = (char *)"unknown compression method";
621 if (state->flags & 0xe000) {
622 strm->msg = (char *)"unknown header flags set";
626 if (state->flags & 0x0200) CRC2(state->check, hold);
631 if (state->flags & 0x0200) CRC4(state->check, hold);
636 if (state->flags & 0x0200) CRC2(state->check, hold);
640 if (state->flags & 0x0400) {
642 state->length = (unsigned)(hold);
643 if (state->flags & 0x0200) CRC2(state->check, hold);
648 if (state->flags & 0x0400) {
649 copy = state->length;
650 if (copy > have) copy = have;
652 if (state->flags & 0x0200)
653 state->check = crc32(state->check, next, copy);
656 state->length -= copy;
658 if (state->length) goto inf_leave;
662 if (state->flags & 0x0800) {
663 if (have == 0) goto inf_leave;
666 len = (unsigned)(next[copy++]);
667 } while (len && copy < have);
668 if (state->flags & 0x02000)
669 state->check = crc32(state->check, next, copy);
672 if (len) goto inf_leave;
674 state->mode = COMMENT;
676 if (state->flags & 0x1000) {
677 if (have == 0) goto inf_leave;
680 len = (unsigned)(next[copy++]);
681 } while (len && copy < have);
682 if (state->flags & 0x02000)
683 state->check = crc32(state->check, next, copy);
686 if (len) goto inf_leave;
690 if (state->flags & 0x0200) {
692 if (hold != (state->check & 0xffff)) {
693 strm->msg = (char *)"header crc mismatch";
699 strm->adler = state->check = crc32(0L, Z_NULL, 0);
705 strm->adler = state->check = REVERSE(hold);
709 if (state->havedict == 0) {
713 strm->adler = state->check = adler32(0L, Z_NULL, 0);
716 if (flush == Z_BLOCK) goto inf_leave;
724 state->last = BITS(1);
727 case 0: /* stored block */
728 Tracev((stderr, "inflate: stored block%s\n",
729 state->last ? " (last)" : ""));
730 state->mode = STORED;
732 case 1: /* fixed block */
734 Tracev((stderr, "inflate: fixed codes block%s\n",
735 state->last ? " (last)" : ""));
736 state->mode = LEN; /* decode codes */
738 case 2: /* dynamic block */
739 Tracev((stderr, "inflate: dynamic codes block%s\n",
740 state->last ? " (last)" : ""));
744 strm->msg = (char *)"invalid block type";
750 BYTEBITS(); /* go to byte boundary */
752 if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) {
753 strm->msg = (char *)"invalid stored block lengths";
757 state->length = (unsigned)hold & 0xffff;
758 Tracev((stderr, "inflate: stored length %u\n",
763 copy = state->length;
765 if (copy > have) copy = have;
766 if (copy > left) copy = left;
767 if (copy == 0) goto inf_leave;
768 zmemcpy(put, next, copy);
773 state->length -= copy;
776 Tracev((stderr, "inflate: stored end\n"));
781 state->nlen = BITS(5) + 257;
783 state->ndist = BITS(5) + 1;
785 state->ncode = BITS(4) + 4;
787 #ifndef PKZIP_BUG_WORKAROUND
788 if (state->nlen > 286 || state->ndist > 30) {
789 strm->msg = (char *)"too many length or distance symbols";
794 Tracev((stderr, "inflate: table sizes ok\n"));
796 state->mode = LENLENS;
798 while (state->have < state->ncode) {
800 state->lens[order[state->have++]] = (unsigned short)BITS(3);
803 while (state->have < 19)
804 state->lens[order[state->have++]] = 0;
805 state->next = state->codes;
806 state->lencode = (code const FAR *)(state->next);
808 ret = inflate_table(CODES, state->lens, 19, &(state->next),
809 &(state->lenbits), state->work);
811 strm->msg = (char *)"invalid code lengths set";
815 Tracev((stderr, "inflate: code lengths ok\n"));
817 state->mode = CODELENS;
819 while (state->have < state->nlen + state->ndist) {
821 this = state->lencode[BITS(state->lenbits)];
822 if ((unsigned)(this.bits) <= bits) break;
828 state->lens[state->have++] = this.val;
831 if (this.val == 16) {
832 NEEDBITS(this.bits + 2);
834 if (state->have == 0) {
835 strm->msg = (char *)"invalid bit length repeat";
839 len = state->lens[state->have - 1];
843 else if (this.val == 17) {
844 NEEDBITS(this.bits + 3);
851 NEEDBITS(this.bits + 7);
857 if (state->have + copy > state->nlen + state->ndist) {
858 strm->msg = (char *)"invalid bit length repeat";
863 state->lens[state->have++] = (unsigned short)len;
867 if (state->mode == BAD)
870 /* build code tables */
871 state->next = state->codes;
872 state->lencode = (code const FAR *)(state->next);
874 ret = inflate_table(LENS, state->lens, state->nlen, &(state->next),
875 &(state->lenbits), state->work);
877 strm->msg = (char *)"invalid literal/lengths set";
881 state->distcode = (code const FAR *)(state->next);
883 ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist,
884 &(state->next), &(state->distbits), state->work);
886 strm->msg = (char *)"invalid distances set";
890 Tracev((stderr, "inflate: codes ok\n"));
893 if (have >= 6 && left >= 258) {
895 inflate_fast(strm, out);
900 this = state->lencode[BITS(state->lenbits)];
901 if ((unsigned)(this.bits) <= bits) break;
904 if (this.op && (this.op & 0xf0) == 0) {
907 this = state->lencode[last.val +
908 (BITS(last.bits + last.op) >> last.bits)];
909 if ((unsigned)(last.bits + this.bits) <= bits) break;
915 state->length = (unsigned)this.val;
916 if ((int)(this.op) == 0) {
917 Tracevv((stderr, this.val >= 0x20 && this.val < 0x7f ?
918 "inflate: literal '%c'\n" :
919 "inflate: literal 0x%02x\n", this.val));
924 Tracevv((stderr, "inflate: end of block\n"));
929 strm->msg = (char *)"invalid literal/length code";
933 state->extra = (unsigned)(this.op) & 15;
934 state->mode = LENEXT;
937 NEEDBITS(state->extra);
938 state->length += BITS(state->extra);
939 DROPBITS(state->extra);
941 Tracevv((stderr, "inflate: length %u\n", state->length));
945 this = state->distcode[BITS(state->distbits)];
946 if ((unsigned)(this.bits) <= bits) break;
949 if ((this.op & 0xf0) == 0) {
952 this = state->distcode[last.val +
953 (BITS(last.bits + last.op) >> last.bits)];
954 if ((unsigned)(last.bits + this.bits) <= bits) break;
961 strm->msg = (char *)"invalid distance code";
965 state->offset = (unsigned)this.val;
966 state->extra = (unsigned)(this.op) & 15;
967 state->mode = DISTEXT;
970 NEEDBITS(state->extra);
971 state->offset += BITS(state->extra);
972 DROPBITS(state->extra);
974 if (state->offset > state->whave + out - left) {
975 strm->msg = (char *)"invalid distance too far back";
979 Tracevv((stderr, "inflate: distance %u\n", state->offset));
982 if (left == 0) goto inf_leave;
984 if (state->offset > copy) { /* copy from window */
985 copy = state->offset - copy;
986 if (copy > state->write) {
987 copy -= state->write;
988 from = state->window + (state->wsize - copy);
991 from = state->window + (state->write - copy);
992 if (copy > state->length) copy = state->length;
994 else { /* copy from output */
995 from = put - state->offset;
996 copy = state->length;
998 if (copy > left) copy = left;
1000 state->length -= copy;
1004 if (state->length == 0) state->mode = LEN;
1007 if (left == 0) goto inf_leave;
1008 *put++ = (unsigned char)(state->length);
1016 strm->total_out += out;
1017 state->total += out;
1019 strm->adler = state->check =
1020 UPDATE(state->check, put - out, out);
1024 state->flags ? hold :
1026 REVERSE(hold)) != state->check) {
1027 strm->msg = (char *)"incorrect data check";
1032 Tracev((stderr, "inflate: check matches trailer\n"));
1035 state->mode = LENGTH;
1037 if (state->wrap && state->flags) {
1039 if (hold != (state->total & 0xffffffffUL)) {
1040 strm->msg = (char *)"incorrect length check";
1045 Tracev((stderr, "inflate: length matches trailer\n"));
1059 return Z_STREAM_ERROR;
1063 Return from inflate(), updating the total counts and the check value.
1064 If there was no progress during the inflate() call, return a buffer
1065 error. Call updatewindow() to create and/or update the window state.
1066 Note: a memory error from inflate() is non-recoverable.
1070 if (state->wsize || (state->mode < CHECK && out != strm->avail_out))
1071 if (updatewindow(strm, out)) {
1075 in -= strm->avail_in;
1076 out -= strm->avail_out;
1077 strm->total_in += in;
1078 strm->total_out += out;
1079 state->total += out;
1080 if (state->wrap && out)
1081 strm->adler = state->check =
1082 UPDATE(state->check, strm->next_out - out, out);
1083 strm->data_type = state->bits + (state->last ? 64 : 0) +
1084 (state->mode == TYPE ? 128 : 0);
1085 if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK)
1090 int ZEXPORT inflateEnd(strm)
1093 struct inflate_state FAR *state;
1094 if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0)
1095 return Z_STREAM_ERROR;
1096 state = (struct inflate_state FAR *)strm->state;
1097 if (state->window != Z_NULL) ZFREE(strm, state->window);
1098 ZFREE(strm, strm->state);
1099 strm->state = Z_NULL;
1100 Tracev((stderr, "inflate: end\n"));
1104 int ZEXPORT inflateSetDictionary(strm, dictionary, dictLength)
1106 const Bytef *dictionary;
1109 struct inflate_state FAR *state;
1113 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1114 state = (struct inflate_state FAR *)strm->state;
1115 if (state->mode != DICT) return Z_STREAM_ERROR;
1117 /* check for correct dictionary id */
1118 id = adler32(0L, Z_NULL, 0);
1119 id = adler32(id, dictionary, dictLength);
1120 if (id != state->check) return Z_DATA_ERROR;
1122 /* copy dictionary to window */
1123 if (updatewindow(strm, strm->avail_out)) {
1127 if (dictLength > state->wsize) {
1128 zmemcpy(state->window, dictionary + dictLength - state->wsize,
1130 state->whave = state->wsize;
1133 zmemcpy(state->window + state->wsize - dictLength, dictionary,
1135 state->whave = dictLength;
1137 state->havedict = 1;
1138 Tracev((stderr, "inflate: dictionary set\n"));
1143 Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found
1144 or when out of input. When called, *have is the number of pattern bytes
1145 found in order so far, in 0..3. On return *have is updated to the new
1146 state. If on return *have equals four, then the pattern was found and the
1147 return value is how many bytes were read including the last byte of the
1148 pattern. If *have is less than four, then the pattern has not been found
1149 yet and the return value is len. In the latter case, syncsearch() can be
1150 called again with more data and the *have state. *have is initialized to
1151 zero for the first call.
1153 local unsigned syncsearch(have, buf, len)
1155 unsigned char FAR *buf;
1163 while (next < len && got < 4) {
1164 if ((int)(buf[next]) == (got < 2 ? 0 : 0xff))
1176 int ZEXPORT inflateSync(strm)
1179 unsigned len; /* number of bytes to look at or looked at */
1180 unsigned long in, out; /* temporary to save total_in and total_out */
1181 unsigned char buf[4]; /* to restore bit buffer to byte string */
1182 struct inflate_state FAR *state;
1184 /* check parameters */
1185 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1186 state = (struct inflate_state FAR *)strm->state;
1187 if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR;
1189 /* if first time, start search in bit buffer */
1190 if (state->mode != SYNC) {
1192 state->hold <<= state->bits & 7;
1193 state->bits -= state->bits & 7;
1195 while (state->bits >= 8) {
1196 buf[len++] = (unsigned char)(state->hold);
1201 syncsearch(&(state->have), buf, len);
1204 /* search available input */
1205 len = syncsearch(&(state->have), strm->next_in, strm->avail_in);
1206 strm->avail_in -= len;
1207 strm->next_in += len;
1208 strm->total_in += len;
1210 /* return no joy or set up to restart inflate() on a new block */
1211 if (state->have != 4) return Z_DATA_ERROR;
1212 in = strm->total_in; out = strm->total_out;
1214 strm->total_in = in; strm->total_out = out;
1220 Returns true if inflate is currently at the end of a block generated by
1221 Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP
1222 implementation to provide an additional safety check. PPP uses
1223 Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored
1224 block. When decompressing, PPP checks that at the end of input packet,
1225 inflate is waiting for these length bytes.
1227 int ZEXPORT inflateSyncPoint(strm)
1230 struct inflate_state FAR *state;
1232 if (strm == Z_NULL || strm->state == Z_NULL) return Z_STREAM_ERROR;
1233 state = (struct inflate_state FAR *)strm->state;
1234 return state->mode == STORED && state->bits == 0;
1237 int ZEXPORT inflateCopy(dest, source)
1241 struct inflate_state FAR *state;
1242 struct inflate_state FAR *copy;
1243 unsigned char FAR *window;
1246 if (dest == Z_NULL || source == Z_NULL || source->state == Z_NULL ||
1247 source->zalloc == (alloc_func)0 || source->zfree == (free_func)0)
1248 return Z_STREAM_ERROR;
1249 state = (struct inflate_state FAR *)source->state;
1251 /* allocate space */
1252 copy = (struct inflate_state FAR *)
1253 ZALLOC(source, 1, sizeof(struct inflate_state));
1254 if (copy == Z_NULL) return Z_MEM_ERROR;
1256 if (state->window != Z_NULL) {
1257 window = (unsigned char FAR *)
1258 ZALLOC(source, 1U << state->wbits, sizeof(unsigned char));
1259 if (window == Z_NULL) {
1260 ZFREE(source, copy);
1268 copy->lencode = copy->codes + (state->lencode - state->codes);
1269 copy->distcode = copy->codes + (state->distcode - state->codes);
1270 copy->next = copy->codes + (state->next - state->codes);
1271 if (window != Z_NULL)
1272 zmemcpy(window, state->window, 1U << state->wbits);
1273 copy->window = window;
1274 dest->state = (voidpf)copy;