xref: /haiku/src/bin/unzip/inflatef.c (revision 1e36cfc2721ef13a187c6f7354dc9cbc485e89d3)
1 /*
2   Copyright (c) 1990-2002 Info-ZIP.  All rights reserved.
3 
4   See the accompanying file LICENSE, version 2000-Apr-09 or later
5   (the contents of which are also included in unzip.h) for terms of use.
6   If, for some reason, all these files are missing, the Info-ZIP license
7   also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html
8 */
9 /* inflatef.c
10 	*** This is only needed to build funzip correctly and is a direct copy
11 	of inflate.c. Don't forget to update here if you update inflate.c!!
12 	See inflate.c for more information ***
13 */
14 
15 #define PKZIP_BUG_WORKAROUND    /* PKZIP 1.93a problem--live with it */
16 
17 #define FUNZIP
18 #define __INFLATE_C     /* identifies this source module */
19 
20 /* #define DEBUG */
21 #define INFMOD          /* tell inflate.h to include code to be compiled */
22 #include "inflate.h"
23 
24 
25 /* marker for "unused" huft code, and corresponding check macro */
26 #define INVALID_CODE 99
27 #define IS_INVALID_CODE(c)  ((c) == INVALID_CODE)
28 
29 #ifndef WSIZE               /* default is 32K resp. 64K */
30 #  ifdef USE_DEFLATE64
31 #    define WSIZE   65536L  /* window size--must be a power of two, and */
32 #  else                     /*  at least 64K for PKZip's deflate64 method */
33 #    define WSIZE   0x8000  /* window size--must be a power of two, and */
34 #  endif                    /*  at least 32K for zip's deflate method */
35 #endif
36 
37 /* some buffer counters must be capable of holding 64k for Deflate64 */
38 #if (defined(USE_DEFLATE64) && defined(INT_16BIT))
39 #  define UINT_D64 ulg
40 #else
41 #  define UINT_D64 unsigned
42 #endif
43 
44 #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
45 #  define wsize G._wsize    /* wsize is a variable */
46 #else
47 #  define wsize WSIZE       /* wsize is a constant */
48 #endif
49 
50 
51 #ifndef NEXTBYTE        /* default is to simply get a byte from stdin */
52 #  define NEXTBYTE getchar()
53 #endif
54 
55 #ifndef MESSAGE   /* only used twice, for fixed strings--NOT general-purpose */
56 #  define MESSAGE(str,len,flag)  fprintf(stderr,(char *)(str))
57 #endif
58 
59 #ifndef FLUSH           /* default is to simply write the buffer to stdout */
60 #  define FLUSH(n) \
61     (((extent)fwrite(redirSlide, 1, (extent)(n), stdout) == (extent)(n)) ? \
62      0 : PKDISK)
63 #endif
64 /* Warning: the fwrite above might not work on 16-bit compilers, since
65    0x8000 might be interpreted as -32,768 by the library function.  When
66    support for Deflate64 is enabled, the window size is 64K and the
67    simple fwrite statement is definitely broken for 16-bit compilers. */
68 
69 #ifndef Trace
70 #  ifdef DEBUG
71 #    define Trace(x) fprintf x
72 #  else
73 #    define Trace(x)
74 #  endif
75 #endif
76 
77 
78 /*---------------------------------------------------------------------------*/
79 #ifdef USE_ZLIB
80 
81 
82 /*
83    GRR:  return values for both original inflate() and UZinflate()
84            0  OK
85            1  incomplete table(?)
86            2  bad input
87            3  not enough memory
88  */
89 
90 /**************************/
91 /*  Function UZinflate()  */
92 /**************************/
93 
94 int UZinflate(__G__ is_defl64)
95     __GDEF
96     int is_defl64;
97 /* decompress an inflated entry using the zlib routines */
98 {
99     int retval = 0;     /* return code: 0 = "no error" */
100     int err=Z_OK;
101 
102 #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
103     if (G.redirect_slide)
104         wsize = G.redirect_size, redirSlide = G.redirect_buffer;
105     else
106         wsize = WSIZE, redirSlide = slide;
107 #endif
108 
109     G.dstrm.next_out = redirSlide;
110     G.dstrm.avail_out = wsize;
111 
112     G.dstrm.next_in = G.inptr;
113     G.dstrm.avail_in = G.incnt;
114 
115     if (!G.inflInit) {
116         unsigned i;
117         int windowBits;
118 
119         /* only need to test this stuff once */
120         if (zlib_version[0] != ZLIB_VERSION[0]) {
121             Info(slide, 0x21, ((char *)slide,
122               "error:  incompatible zlib version (expected %s, found %s)\n",
123               ZLIB_VERSION, zlib_version));
124             return 3;
125         } else if (strcmp(zlib_version, ZLIB_VERSION) != 0)
126             Info(slide, 0x21, ((char *)slide,
127               "warning:  different zlib version (expected %s, using %s)\n",
128               ZLIB_VERSION, zlib_version));
129 
130         /* windowBits = log2(wsize) */
131         for (i = (unsigned)wsize, windowBits = 0;
132              !(i & 1);  i >>= 1, ++windowBits);
133         if ((unsigned)windowBits > (unsigned)15)
134             windowBits = 15;
135         else if (windowBits < 8)
136             windowBits = 8;
137 
138         G.dstrm.zalloc = (alloc_func)Z_NULL;
139         G.dstrm.zfree = (free_func)Z_NULL;
140 
141         Trace((stderr, "initializing inflate()\n"));
142         err = inflateInit2(&G.dstrm, -windowBits);
143 
144         if (err == Z_MEM_ERROR)
145             return 3;
146         else if (err != Z_OK)
147             Trace((stderr, "oops!  (inflateInit2() err = %d)\n", err));
148         G.inflInit = 1;
149     }
150 
151 #ifdef FUNZIP
152     while (err != Z_STREAM_END) {
153 #else /* !FUNZIP */
154     while (G.csize > 0) {
155         Trace((stderr, "first loop:  G.csize = %ld\n", G.csize));
156 #endif /* ?FUNZIP */
157         while (G.dstrm.avail_out > 0) {
158             err = inflate(&G.dstrm, Z_PARTIAL_FLUSH);
159 
160             if (err == Z_DATA_ERROR) {
161                 retval = 2; goto uzinflate_cleanup_exit;
162             } else if (err == Z_MEM_ERROR) {
163                 retval = 3; goto uzinflate_cleanup_exit;
164             } else if (err != Z_OK && err != Z_STREAM_END)
165                 Trace((stderr, "oops!  (inflate(first loop) err = %d)\n", err));
166 
167 #ifdef FUNZIP
168             if (err == Z_STREAM_END)    /* "END-of-entry-condition" ? */
169 #else /* !FUNZIP */
170             if (G.csize <= 0L)          /* "END-of-entry-condition" ? */
171 #endif /* ?FUNZIP */
172                 break;
173 
174             if (G.dstrm.avail_in <= 0) {
175                 if (fillinbuf(__G) == 0) {
176                     /* no "END-condition" yet, but no more data */
177                     retval = 2; goto uzinflate_cleanup_exit;
178                 }
179 
180                 G.dstrm.next_in = G.inptr;
181                 G.dstrm.avail_in = G.incnt;
182             }
183             Trace((stderr, "     avail_in = %d\n", G.dstrm.avail_in));
184         }
185         /* flush slide[] */
186         if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0)
187             goto uzinflate_cleanup_exit;
188         Trace((stderr, "inside loop:  flushing %ld bytes (ptr diff = %ld)\n",
189           (long)(wsize - G.dstrm.avail_out),
190           (long)(G.dstrm.next_out-(Bytef *)redirSlide)));
191         G.dstrm.next_out = redirSlide;
192         G.dstrm.avail_out = wsize;
193     }
194 
195     /* no more input, so loop until we have all output */
196     Trace((stderr, "beginning final loop:  err = %d\n", err));
197     while (err != Z_STREAM_END) {
198         err = inflate(&G.dstrm, Z_PARTIAL_FLUSH);
199         if (err == Z_DATA_ERROR) {
200             retval = 2; goto uzinflate_cleanup_exit;
201         } else if (err == Z_MEM_ERROR) {
202             retval = 3; goto uzinflate_cleanup_exit;
203         } else if (err == Z_BUF_ERROR) {                /* DEBUG */
204             Trace((stderr,
205                    "zlib inflate() did not detect stream end (%s, %s)\n",
206                    G.zipfn, G.filename));
207             break;
208         } else if (err != Z_OK && err != Z_STREAM_END) {
209             Trace((stderr, "oops!  (inflate(final loop) err = %d)\n", err));
210             DESTROYGLOBALS();
211             EXIT(PK_MEM3);
212         }
213         /* final flush of slide[] */
214         if ((retval = FLUSH(wsize - G.dstrm.avail_out)) != 0)
215             goto uzinflate_cleanup_exit;
216         Trace((stderr, "final loop:  flushing %ld bytes (ptr diff = %ld)\n",
217           (long)(wsize - G.dstrm.avail_out),
218           (long)(G.dstrm.next_out-(Bytef *)redirSlide)));
219         G.dstrm.next_out = redirSlide;
220         G.dstrm.avail_out = wsize;
221     }
222     Trace((stderr, "total in = %ld, total out = %ld\n", G.dstrm.total_in,
223       G.dstrm.total_out));
224 
225     G.inptr = (uch *)G.dstrm.next_in;
226     G.incnt = (G.inbuf + INBUFSIZ) - G.inptr;  /* reset for other routines */
227 
228 uzinflate_cleanup_exit:
229     err = inflateReset(&G.dstrm);
230     if (err != Z_OK)
231         Trace((stderr, "oops!  (inflateReset() err = %d)\n", err));
232 
233     return retval;
234 }
235 
236 
237 /*---------------------------------------------------------------------------*/
238 #else /* !USE_ZLIB */
239 
240 
241 /* Function prototypes */
242 #ifndef OF
243 #  ifdef __STDC__
244 #    define OF(a) a
245 #  else
246 #    define OF(a) ()
247 #  endif
248 #endif /* !OF */
249 int inflate_codes OF((__GPRO__ struct huft *tl, struct huft *td,
250                       int bl, int bd));
251 static int inflate_stored OF((__GPRO));
252 static int inflate_fixed OF((__GPRO));
253 static int inflate_dynamic OF((__GPRO));
254 static int inflate_block OF((__GPRO__ int *e));
255 
256 
257 /* The inflate algorithm uses a sliding 32K byte window on the uncompressed
258    stream to find repeated byte strings.  This is implemented here as a
259    circular buffer.  The index is updated simply by incrementing and then
260    and'ing with 0x7fff (32K-1). */
261 /* It is left to other modules to supply the 32K area.  It is assumed
262    to be usable as if it were declared "uch slide[32768];" or as just
263    "uch *slide;" and then malloc'ed in the latter case.  The definition
264    must be in unzip.h, included above. */
265 
266 
267 /* unsigned wp;  moved to globals.h */     /* current position in slide */
268 
269 /* Tables for deflate from PKZIP's appnote.txt. */
270 /* - Order of the bit length code lengths */
271 static ZCONST unsigned border[] = {
272         16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15};
273 
274 /* - Copy lengths for literal codes 257..285 */
275 #ifdef USE_DEFLATE64
276 static ZCONST ush cplens64[] = {
277         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
278         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 3, 0, 0};
279         /* For Deflate64, the code 285 is defined differently. */
280 #else
281 #  define cplens32 cplens
282 #endif
283 static ZCONST ush cplens32[] = {
284         3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,
285         35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0};
286         /* note: see note #13 above about the 258 in this list. */
287 /* - Extra bits for literal codes 257..285 */
288 #ifdef USE_DEFLATE64
289 static ZCONST uch cplext64[] = {
290         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
291         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 16, INVALID_CODE, INVALID_CODE};
292 #else
293 #  define cplext32 cplext
294 #endif
295 static ZCONST uch cplext32[] = {
296         0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
297         3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, INVALID_CODE, INVALID_CODE};
298 
299 /* - Copy offsets for distance codes 0..29 (0..31 for Deflate64) */
300 static ZCONST ush cpdist[] = {
301         1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,
302         257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,
303 #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND))
304         8193, 12289, 16385, 24577, 32769, 49153};
305 #else
306         8193, 12289, 16385, 24577};
307 #endif
308 
309 /* - Extra bits for distance codes 0..29 (0..31 for Deflate64) */
310 #ifdef USE_DEFLATE64
311 static ZCONST uch cpdext64[] = {
312         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
313         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
314         12, 12, 13, 13, 14, 14};
315 #else
316 #  define cpdext32 cpdext
317 #endif
318 static ZCONST uch cpdext32[] = {
319         0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,
320         7, 7, 8, 8, 9, 9, 10, 10, 11, 11,
321 #ifdef PKZIP_BUG_WORKAROUND
322         12, 12, 13, 13, INVALID_CODE, INVALID_CODE};
323 #else
324         12, 12, 13, 13};
325 #endif
326 
327 #ifdef PKZIP_BUG_WORKAROUND
328 #  define MAXLITLENS 288
329 #else
330 #  define MAXLITLENS 286
331 #endif
332 #if (defined(USE_DEFLATE64) || defined(PKZIP_BUG_WORKAROUND))
333 #  define MAXDISTS 32
334 #else
335 #  define MAXDISTS 30
336 #endif
337 
338 
339 /* moved to consts.h (included in unzip.c), resp. funzip.c */
340 #if 0
341 /* And'ing with mask_bits[n] masks the lower n bits */
342 ZCONST ush near mask_bits[] = {
343     0x0000,
344     0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff,
345     0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff
346 };
347 #endif /* 0 */
348 
349 
350 /* Macros for inflate() bit peeking and grabbing.
351    The usage is:
352 
353         NEEDBITS(j)
354         x = b & mask_bits[j];
355         DUMPBITS(j)
356 
357    where NEEDBITS makes sure that b has at least j bits in it, and
358    DUMPBITS removes the bits from b.  The macros use the variable k
359    for the number of bits in b.  Normally, b and k are register
360    variables for speed and are initialized at the begining of a
361    routine that uses these macros from a global bit buffer and count.
362 
363    In order to not ask for more bits than there are in the compressed
364    stream, the Huffman tables are constructed to only ask for just
365    enough bits to make up the end-of-block code (value 256).  Then no
366    bytes need to be "returned" to the buffer at the end of the last
367    block.  See the huft_build() routine.
368  */
369 
370 /* These have been moved to globals.h */
371 #if 0
372 ulg bb;                         /* bit buffer */
373 unsigned bk;                    /* bits in bit buffer */
374 #endif
375 
376 #ifndef CHECK_EOF
377 #  define CHECK_EOF   /* default as of 5.13/5.2 */
378 #endif
379 
380 #ifndef CHECK_EOF
381 #  define NEEDBITS(n) {while(k<(n)){b|=((ulg)NEXTBYTE)<<k;k+=8;}}
382 #else
383 #  define NEEDBITS(n) {while(k<(n)){int c=NEXTBYTE;\
384     if(c==EOF){retval=1;goto cleanup_and_exit;}\
385     b|=((ulg)c)<<k;k+=8;}}
386 #endif
387 
388 #define DUMPBITS(n) {b>>=(n);k-=(n);}
389 
390 
391 /*
392    Huffman code decoding is performed using a multi-level table lookup.
393    The fastest way to decode is to simply build a lookup table whose
394    size is determined by the longest code.  However, the time it takes
395    to build this table can also be a factor if the data being decoded
396    are not very long.  The most common codes are necessarily the
397    shortest codes, so those codes dominate the decoding time, and hence
398    the speed.  The idea is you can have a shorter table that decodes the
399    shorter, more probable codes, and then point to subsidiary tables for
400    the longer codes.  The time it costs to decode the longer codes is
401    then traded against the time it takes to make longer tables.
402 
403    This results of this trade are in the variables lbits and dbits
404    below.  lbits is the number of bits the first level table for literal/
405    length codes can decode in one step, and dbits is the same thing for
406    the distance codes.  Subsequent tables are also less than or equal to
407    those sizes.  These values may be adjusted either when all of the
408    codes are shorter than that, in which case the longest code length in
409    bits is used, or when the shortest code is *longer* than the requested
410    table size, in which case the length of the shortest code in bits is
411    used.
412 
413    There are two different values for the two tables, since they code a
414    different number of possibilities each.  The literal/length table
415    codes 286 possible values, or in a flat code, a little over eight
416    bits.  The distance table codes 30 possible values, or a little less
417    than five bits, flat.  The optimum values for speed end up being
418    about one bit more than those, so lbits is 8+1 and dbits is 5+1.
419    The optimum values may differ though from machine to machine, and
420    possibly even between compilers.  Your mileage may vary.
421  */
422 
423 
424 static ZCONST int lbits = 9;    /* bits in base literal/length lookup table */
425 static ZCONST int dbits = 6;    /* bits in base distance lookup table */
426 
427 
428 #ifndef ASM_INFLATECODES
429 
430 int inflate_codes(__G__ tl, td, bl, bd)
431      __GDEF
432 struct huft *tl, *td;   /* literal/length and distance decoder tables */
433 int bl, bd;             /* number of bits decoded by tl[] and td[] */
434 /* inflate (decompress) the codes in a deflated (compressed) block.
435    Return an error code or zero if it all goes ok. */
436 {
437   register unsigned e;  /* table entry flag/number of extra bits */
438   unsigned d;           /* index for copy */
439   UINT_D64 n;           /* length for copy (deflate64: might be 64k+2) */
440   UINT_D64 w;           /* current window position (deflate64: up to 64k) */
441   struct huft *t;       /* pointer to table entry */
442   unsigned ml, md;      /* masks for bl and bd bits */
443   register ulg b;       /* bit buffer */
444   register unsigned k;  /* number of bits in bit buffer */
445   int retval = 0;       /* error code returned: initialized to "no error" */
446 
447 
448   /* make local copies of globals */
449   b = G.bb;                       /* initialize bit buffer */
450   k = G.bk;
451   w = G.wp;                       /* initialize window position */
452 
453 
454   /* inflate the coded data */
455   ml = mask_bits[bl];           /* precompute masks for speed */
456   md = mask_bits[bd];
457   while (1)                     /* do until end of block */
458   {
459     NEEDBITS((unsigned)bl)
460     t = tl + ((unsigned)b & ml);
461     while (1) {
462       DUMPBITS(t->b)
463 
464       if ((e = t->e) == 32)     /* then it's a literal */
465       {
466         redirSlide[w++] = (uch)t->v.n;
467         if (w == wsize)
468         {
469           if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit;
470           w = 0;
471         }
472         break;
473       }
474 
475       if (e < 31)               /* then it's a length */
476       {
477         /* get length of block to copy */
478         NEEDBITS(e)
479         n = t->v.n + ((unsigned)b & mask_bits[e]);
480         DUMPBITS(e)
481 
482         /* decode distance of block to copy */
483         NEEDBITS((unsigned)bd)
484         t = td + ((unsigned)b & md);
485         while (1) {
486           DUMPBITS(t->b)
487           if ((e = t->e) < 32)
488             break;
489           if (IS_INVALID_CODE(e))
490             return 1;
491           e &= 31;
492           NEEDBITS(e)
493           t = t->v.t + ((unsigned)b & mask_bits[e]);
494         }
495         NEEDBITS(e)
496         d = (unsigned)w - t->v.n - ((unsigned)b & mask_bits[e]);
497         DUMPBITS(e)
498 
499         /* do the copy */
500         do {
501 #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
502           if (G.redirect_slide) {
503             /* &= w/ wsize unnecessary & wrong if redirect */
504             if ((UINT_D64)d >= wsize)
505               return 1;         /* invalid compressed data */
506             e = (unsigned)(wsize - (d > (unsigned)w ? (UINT_D64)d : w));
507           }
508           else
509 #endif
510             e = (unsigned)(wsize -
511                            ((d &= (unsigned)(wsize-1)) > (unsigned)w ?
512                             (UINT_D64)d : w));
513           if ((UINT_D64)e > n) e = (unsigned)n;
514           n -= e;
515 #ifndef NOMEMCPY
516           if ((unsigned)w - d >= e)
517           /* (this test assumes unsigned comparison) */
518           {
519             memcpy(redirSlide + (unsigned)w, redirSlide + d, e);
520             w += e;
521             d += e;
522           }
523           else                  /* do it slowly to avoid memcpy() overlap */
524 #endif /* !NOMEMCPY */
525             do {
526               redirSlide[w++] = redirSlide[d++];
527             } while (--e);
528           if (w == wsize)
529           {
530             if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit;
531             w = 0;
532           }
533         } while (n);
534         break;
535       }
536 
537       if (e == 31)              /* it's the EOB signal */
538       {
539         /* sorry for this goto, but we have to exit two loops at once */
540         goto cleanup_decode;
541       }
542 
543       if (IS_INVALID_CODE(e))
544         return 1;
545 
546       e &= 31;
547       NEEDBITS(e)
548       t = t->v.t + ((unsigned)b & mask_bits[e]);
549     }
550   }
551 cleanup_decode:
552 
553   /* restore the globals from the locals */
554   G.wp = (unsigned)w;             /* restore global window pointer */
555   G.bb = b;                       /* restore global bit buffer */
556   G.bk = k;
557 
558 
559 cleanup_and_exit:
560   /* done */
561   return retval;
562 }
563 
564 #endif /* ASM_INFLATECODES */
565 
566 
567 
568 static int inflate_stored(__G)
569      __GDEF
570 /* "decompress" an inflated type 0 (stored) block. */
571 {
572   UINT_D64 w;           /* current window position (deflate64: up to 64k!) */
573   unsigned n;           /* number of bytes in block */
574   register ulg b;       /* bit buffer */
575   register unsigned k;  /* number of bits in bit buffer */
576   int retval = 0;       /* error code returned: initialized to "no error" */
577 
578 
579   /* make local copies of globals */
580   Trace((stderr, "\nstored block"));
581   b = G.bb;                       /* initialize bit buffer */
582   k = G.bk;
583   w = G.wp;                       /* initialize window position */
584 
585 
586   /* go to byte boundary */
587   n = k & 7;
588   DUMPBITS(n);
589 
590 
591   /* get the length and its complement */
592   NEEDBITS(16)
593   n = ((unsigned)b & 0xffff);
594   DUMPBITS(16)
595   NEEDBITS(16)
596   if (n != (unsigned)((~b) & 0xffff))
597     return 1;                   /* error in compressed data */
598   DUMPBITS(16)
599 
600 
601   /* read and output the compressed data */
602   while (n--)
603   {
604     NEEDBITS(8)
605     redirSlide[w++] = (uch)b;
606     if (w == wsize)
607     {
608       if ((retval = FLUSH(w)) != 0) goto cleanup_and_exit;
609       w = 0;
610     }
611     DUMPBITS(8)
612   }
613 
614 
615   /* restore the globals from the locals */
616   G.wp = (unsigned)w;             /* restore global window pointer */
617   G.bb = b;                       /* restore global bit buffer */
618   G.bk = k;
619 
620 cleanup_and_exit:
621   return retval;
622 }
623 
624 
625 /* Globals for literal tables (built once) */
626 /* Moved to globals.h                      */
627 #if 0
628 struct huft *fixed_tl = (struct huft *)NULL;
629 struct huft *fixed_td;
630 int fixed_bl, fixed_bd;
631 #endif
632 
633 static int inflate_fixed(__G)
634      __GDEF
635 /* decompress an inflated type 1 (fixed Huffman codes) block.  We should
636    either replace this with a custom decoder, or at least precompute the
637    Huffman tables. */
638 {
639   /* if first time, set up tables for fixed blocks */
640   Trace((stderr, "\nliteral block"));
641   if (G.fixed_tl == (struct huft *)NULL)
642   {
643     int i;                /* temporary variable */
644     unsigned l[288];      /* length list for huft_build */
645 
646     /* literal table */
647     for (i = 0; i < 144; i++)
648       l[i] = 8;
649     for (; i < 256; i++)
650       l[i] = 9;
651     for (; i < 280; i++)
652       l[i] = 7;
653     for (; i < 288; i++)          /* make a complete, but wrong code set */
654       l[i] = 8;
655     G.fixed_bl = 7;
656 #ifdef USE_DEFLATE64
657     if ((i = huft_build(__G__ l, 288, 257, G.cplens, G.cplext,
658                         &G.fixed_tl, &G.fixed_bl)) != 0)
659 #else
660     if ((i = huft_build(__G__ l, 288, 257, cplens, cplext,
661                         &G.fixed_tl, &G.fixed_bl)) != 0)
662 #endif
663     {
664       G.fixed_tl = (struct huft *)NULL;
665       return i;
666     }
667 
668     /* distance table */
669     for (i = 0; i < MAXDISTS; i++)      /* make an incomplete code set */
670       l[i] = 5;
671     G.fixed_bd = 5;
672 #ifdef USE_DEFLATE64
673     if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, G.cpdext,
674                         &G.fixed_td, &G.fixed_bd)) > 1)
675 #else
676     if ((i = huft_build(__G__ l, MAXDISTS, 0, cpdist, cpdext,
677                         &G.fixed_td, &G.fixed_bd)) > 1)
678 #endif
679     {
680       huft_free(G.fixed_tl);
681       G.fixed_td = G.fixed_tl = (struct huft *)NULL;
682       return i;
683     }
684   }
685 
686   /* decompress until an end-of-block code */
687   return inflate_codes(__G__ G.fixed_tl, G.fixed_td,
688                              G.fixed_bl, G.fixed_bd);
689 }
690 
691 
692 
693 static int inflate_dynamic(__G)
694   __GDEF
695 /* decompress an inflated type 2 (dynamic Huffman codes) block. */
696 {
697   int i;                /* temporary variables */
698   unsigned j;
699   unsigned l;           /* last length */
700   unsigned m;           /* mask for bit lengths table */
701   unsigned n;           /* number of lengths to get */
702   struct huft *tl;      /* literal/length code table */
703   struct huft *td;      /* distance code table */
704   int bl;               /* lookup bits for tl */
705   int bd;               /* lookup bits for td */
706   unsigned nb;          /* number of bit length codes */
707   unsigned nl;          /* number of literal/length codes */
708   unsigned nd;          /* number of distance codes */
709   unsigned ll[MAXLITLENS+MAXDISTS]; /* lit./length and distance code lengths */
710   register ulg b;       /* bit buffer */
711   register unsigned k;  /* number of bits in bit buffer */
712   int retval = 0;       /* error code returned: initialized to "no error" */
713 
714 
715   /* make local bit buffer */
716   Trace((stderr, "\ndynamic block"));
717   b = G.bb;
718   k = G.bk;
719 
720 
721   /* read in table lengths */
722   NEEDBITS(5)
723   nl = 257 + ((unsigned)b & 0x1f);      /* number of literal/length codes */
724   DUMPBITS(5)
725   NEEDBITS(5)
726   nd = 1 + ((unsigned)b & 0x1f);        /* number of distance codes */
727   DUMPBITS(5)
728   NEEDBITS(4)
729   nb = 4 + ((unsigned)b & 0xf);         /* number of bit length codes */
730   DUMPBITS(4)
731   if (nl > MAXLITLENS || nd > MAXDISTS)
732     return 1;                   /* bad lengths */
733 
734 
735   /* read in bit-length-code lengths */
736   for (j = 0; j < nb; j++)
737   {
738     NEEDBITS(3)
739     ll[border[j]] = (unsigned)b & 7;
740     DUMPBITS(3)
741   }
742   for (; j < 19; j++)
743     ll[border[j]] = 0;
744 
745 
746   /* build decoding table for trees--single level, 7 bit lookup */
747   bl = 7;
748   retval = huft_build(__G__ ll, 19, 19, NULL, NULL, &tl, &bl);
749   if (bl == 0)                  /* no bit lengths */
750     retval = 1;
751   if (retval)
752   {
753     if (retval == 1)
754       huft_free(tl);
755     return retval;              /* incomplete code set */
756   }
757 
758 
759   /* read in literal and distance code lengths */
760   n = nl + nd;
761   m = mask_bits[bl];
762   i = l = 0;
763   while ((unsigned)i < n)
764   {
765     NEEDBITS((unsigned)bl)
766     j = (td = tl + ((unsigned)b & m))->b;
767     DUMPBITS(j)
768     j = td->v.n;
769     if (j < 16)                 /* length of code in bits (0..15) */
770       ll[i++] = l = j;          /* save last length in l */
771     else if (j == 16)           /* repeat last length 3 to 6 times */
772     {
773       NEEDBITS(2)
774       j = 3 + ((unsigned)b & 3);
775       DUMPBITS(2)
776       if ((unsigned)i + j > n)
777         return 1;
778       while (j--)
779         ll[i++] = l;
780     }
781     else if (j == 17)           /* 3 to 10 zero length codes */
782     {
783       NEEDBITS(3)
784       j = 3 + ((unsigned)b & 7);
785       DUMPBITS(3)
786       if ((unsigned)i + j > n)
787         return 1;
788       while (j--)
789         ll[i++] = 0;
790       l = 0;
791     }
792     else                        /* j == 18: 11 to 138 zero length codes */
793     {
794       NEEDBITS(7)
795       j = 11 + ((unsigned)b & 0x7f);
796       DUMPBITS(7)
797       if ((unsigned)i + j > n)
798         return 1;
799       while (j--)
800         ll[i++] = 0;
801       l = 0;
802     }
803   }
804 
805 
806   /* free decoding table for trees */
807   huft_free(tl);
808 
809 
810   /* restore the global bit buffer */
811   G.bb = b;
812   G.bk = k;
813 
814 
815   /* build the decoding tables for literal/length and distance codes */
816   bl = lbits;
817 #ifdef USE_DEFLATE64
818   retval = huft_build(__G__ ll, nl, 257, G.cplens, G.cplext, &tl, &bl);
819 #else
820   retval = huft_build(__G__ ll, nl, 257, cplens, cplext, &tl, &bl);
821 #endif
822   if (bl == 0)                  /* no literals or lengths */
823     retval = 1;
824   if (retval)
825   {
826     if (retval == 1) {
827       if (!uO.qflag)
828         MESSAGE((uch *)"(incomplete l-tree)  ", 21L, 1);
829       huft_free(tl);
830     }
831     return retval;              /* incomplete code set */
832   }
833   bd = dbits;
834 #ifdef USE_DEFLATE64
835   retval = huft_build(__G__ ll + nl, nd, 0, cpdist, G.cpdext, &td, &bd);
836 #else
837   retval = huft_build(__G__ ll + nl, nd, 0, cpdist, cpdext, &td, &bd);
838 #endif
839 #ifdef PKZIP_BUG_WORKAROUND
840   if (retval == 1)
841     retval = 0;
842 #endif
843   if (bd == 0 && nl > 257)    /* lengths but no distances */
844     retval = 1;
845   if (retval)
846   {
847     if (retval == 1) {
848       if (!uO.qflag)
849         MESSAGE((uch *)"(incomplete d-tree)  ", 21L, 1);
850       huft_free(td);
851     }
852     huft_free(tl);
853     return retval;
854   }
855 
856   /* decompress until an end-of-block code */
857   retval = inflate_codes(__G__ tl, td, bl, bd);
858 
859 cleanup_and_exit:
860   /* free the decoding tables, return */
861   huft_free(tl);
862   huft_free(td);
863   return retval;
864 }
865 
866 
867 
868 static int inflate_block(__G__ e)
869   __GDEF
870   int *e;               /* last block flag */
871 /* decompress an inflated block */
872 {
873   unsigned t;           /* block type */
874   register ulg b;       /* bit buffer */
875   register unsigned k;  /* number of bits in bit buffer */
876   int retval = 0;       /* error code returned: initialized to "no error" */
877 
878 
879   /* make local bit buffer */
880   b = G.bb;
881   k = G.bk;
882 
883 
884   /* read in last block bit */
885   NEEDBITS(1)
886   *e = (int)b & 1;
887   DUMPBITS(1)
888 
889 
890   /* read in block type */
891   NEEDBITS(2)
892   t = (unsigned)b & 3;
893   DUMPBITS(2)
894 
895 
896   /* restore the global bit buffer */
897   G.bb = b;
898   G.bk = k;
899 
900 
901   /* inflate that block type */
902   if (t == 2)
903     return inflate_dynamic(__G);
904   if (t == 0)
905     return inflate_stored(__G);
906   if (t == 1)
907     return inflate_fixed(__G);
908 
909 
910   /* bad block type */
911   retval = 2;
912 
913 cleanup_and_exit:
914   return retval;
915 }
916 
917 
918 
919 int inflate(__G__ is_defl64)
920     __GDEF
921     int is_defl64;
922 /* decompress an inflated entry */
923 {
924   int e;                /* last block flag */
925   int r;                /* result code */
926 #ifdef DEBUG
927   unsigned h = 0;       /* maximum struct huft's malloc'ed */
928 #endif
929 
930 #if (defined(DLL) && !defined(NO_SLIDE_REDIR))
931   if (G.redirect_slide)
932     wsize = G.redirect_size, redirSlide = G.redirect_buffer;
933   else
934     wsize = WSIZE, redirSlide = slide;   /* how they're #defined if !DLL */
935 #endif
936 
937   /* initialize window, bit buffer */
938   G.wp = 0;
939   G.bk = 0;
940   G.bb = 0;
941 
942 #ifdef USE_DEFLATE64
943   if (is_defl64) {
944     G.cplens = cplens64;
945     G.cplext = cplext64;
946     G.cpdext = cpdext64;
947     G.fixed_tl = G.fixed_tl64;
948     G.fixed_bl = G.fixed_bl64;
949     G.fixed_td = G.fixed_td64;
950     G.fixed_bd = G.fixed_bd64;
951   } else {
952     G.cplens = cplens32;
953     G.cplext = cplext32;
954     G.cpdext = cpdext32;
955     G.fixed_tl = G.fixed_tl32;
956     G.fixed_bl = G.fixed_bl32;
957     G.fixed_td = G.fixed_td32;
958     G.fixed_bd = G.fixed_bd32;
959   }
960 #else /* !USE_DEFLATE64 */
961   if (is_defl64) {
962     /* This should not happen unless UnZip is built from object files
963      * compiled with inconsistent option setting.  Handle this by
964      * returning with "bad input" error code.
965      */
966     Trace((stderr, "\nThis inflate() cannot handle Deflate64!\n"));
967     return 2;
968   }
969 #endif /* ?USE_DEFLATE64 */
970 
971   /* decompress until the last block */
972   do {
973 #ifdef DEBUG
974     G.hufts = 0;
975 #endif
976     if ((r = inflate_block(__G__ &e)) != 0)
977       return r;
978 #ifdef DEBUG
979     if (G.hufts > h)
980       h = G.hufts;
981 #endif
982   } while (!e);
983 
984   Trace((stderr, "\n%u bytes in Huffman tables (%u/entry)\n",
985          h * (unsigned)sizeof(struct huft), (unsigned)sizeof(struct huft)));
986 
987 #ifdef USE_DEFLATE64
988   if (is_defl64) {
989     G.fixed_tl64 = G.fixed_tl;
990     G.fixed_bl64 = G.fixed_bl;
991     G.fixed_td64 = G.fixed_td;
992     G.fixed_bd64 = G.fixed_bd;
993   } else {
994     G.fixed_tl32 = G.fixed_tl;
995     G.fixed_bl32 = G.fixed_bl;
996     G.fixed_td32 = G.fixed_td;
997     G.fixed_bd32 = G.fixed_bd;
998   }
999 #endif
1000 
1001   /* flush out redirSlide and return (success, unless final FLUSH failed) */
1002   return (FLUSH(G.wp));
1003 }
1004 
1005 
1006 
1007 int inflate_free(__G)
1008     __GDEF
1009 {
1010   if (G.fixed_tl != (struct huft *)NULL)
1011   {
1012     huft_free(G.fixed_td);
1013     huft_free(G.fixed_tl);
1014     G.fixed_td = G.fixed_tl = (struct huft *)NULL;
1015   }
1016   return 0;
1017 }
1018 
1019 #endif /* ?USE_ZLIB */
1020 
1021 
1022 /*
1023  * GRR:  moved huft_build() and huft_free() down here; used by explode()
1024  *       and fUnZip regardless of whether USE_ZLIB defined or not
1025  */
1026 
1027 
1028 /* If BMAX needs to be larger than 16, then h and x[] should be ulg. */
1029 #define BMAX 16         /* maximum bit length of any code (16 for explode) */
1030 #define N_MAX 288       /* maximum number of codes in any set */
1031 
1032 
1033 int huft_build(__G__ b, n, s, d, e, t, m)
1034   __GDEF
1035   ZCONST unsigned *b;   /* code lengths in bits (all assumed <= BMAX) */
1036   unsigned n;           /* number of codes (assumed <= N_MAX) */
1037   unsigned s;           /* number of simple-valued codes (0..s-1) */
1038   ZCONST ush *d;        /* list of base values for non-simple codes */
1039   ZCONST uch *e;        /* list of extra bits for non-simple codes */
1040   struct huft **t;      /* result: starting table */
1041   int *m;               /* maximum lookup bits, returns actual */
1042 /* Given a list of code lengths and a maximum table size, make a set of
1043    tables to decode that set of codes.  Return zero on success, one if
1044    the given code set is incomplete (the tables are still built in this
1045    case), two if the input is invalid (all zero length codes or an
1046    oversubscribed set of lengths), and three if not enough memory.
1047    The code with value 256 is special, and the tables are constructed
1048    so that no bits beyond that code are fetched when that code is
1049    decoded. */
1050 {
1051   unsigned a;                   /* counter for codes of length k */
1052   unsigned c[BMAX+1];           /* bit length count table */
1053   unsigned el;                  /* length of EOB code (value 256) */
1054   unsigned f;                   /* i repeats in table every f entries */
1055   int g;                        /* maximum code length */
1056   int h;                        /* table level */
1057   register unsigned i;          /* counter, current code */
1058   register unsigned j;          /* counter */
1059   register int k;               /* number of bits in current code */
1060   int lx[BMAX+1];               /* memory for l[-1..BMAX-1] */
1061   int *l = lx+1;                /* stack of bits per table */
1062   register unsigned *p;         /* pointer into c[], b[], or v[] */
1063   register struct huft *q;      /* points to current table */
1064   struct huft r;                /* table entry for structure assignment */
1065   struct huft *u[BMAX];         /* table stack */
1066   unsigned v[N_MAX];            /* values in order of bit length */
1067   register int w;               /* bits before this table == (l * h) */
1068   unsigned x[BMAX+1];           /* bit offsets, then code stack */
1069   unsigned *xp;                 /* pointer into x */
1070   int y;                        /* number of dummy codes added */
1071   unsigned z;                   /* number of entries in current table */
1072 
1073 
1074   /* Generate counts for each bit length */
1075   el = n > 256 ? b[256] : BMAX; /* set length of EOB code, if any */
1076   memzero((char *)c, sizeof(c));
1077   p = (unsigned *)b;  i = n;
1078   do {
1079     c[*p]++; p++;               /* assume all entries <= BMAX */
1080   } while (--i);
1081   if (c[0] == n)                /* null input--all zero length codes */
1082   {
1083     *t = (struct huft *)NULL;
1084     *m = 0;
1085     return 0;
1086   }
1087 
1088 
1089   /* Find minimum and maximum length, bound *m by those */
1090   for (j = 1; j <= BMAX; j++)
1091     if (c[j])
1092       break;
1093   k = j;                        /* minimum code length */
1094   if ((unsigned)*m < j)
1095     *m = j;
1096   for (i = BMAX; i; i--)
1097     if (c[i])
1098       break;
1099   g = i;                        /* maximum code length */
1100   if ((unsigned)*m > i)
1101     *m = i;
1102 
1103 
1104   /* Adjust last length count to fill out codes, if needed */
1105   for (y = 1 << j; j < i; j++, y <<= 1)
1106     if ((y -= c[j]) < 0)
1107       return 2;                 /* bad input: more codes than bits */
1108   if ((y -= c[i]) < 0)
1109     return 2;
1110   c[i] += y;
1111 
1112 
1113   /* Generate starting offsets into the value table for each length */
1114   x[1] = j = 0;
1115   p = c + 1;  xp = x + 2;
1116   while (--i) {                 /* note that i == g from above */
1117     *xp++ = (j += *p++);
1118   }
1119 
1120 
1121   /* Make a table of values in order of bit lengths */
1122   memzero((char *)v, sizeof(v));
1123   p = (unsigned *)b;  i = 0;
1124   do {
1125     if ((j = *p++) != 0)
1126       v[x[j]++] = i;
1127   } while (++i < n);
1128   n = x[g];                     /* set n to length of v */
1129 
1130 
1131   /* Generate the Huffman codes and for each, make the table entries */
1132   x[0] = i = 0;                 /* first Huffman code is zero */
1133   p = v;                        /* grab values in bit order */
1134   h = -1;                       /* no tables yet--level -1 */
1135   w = l[-1] = 0;                /* no bits decoded yet */
1136   u[0] = (struct huft *)NULL;   /* just to keep compilers happy */
1137   q = (struct huft *)NULL;      /* ditto */
1138   z = 0;                        /* ditto */
1139 
1140   /* go through the bit lengths (k already is bits in shortest code) */
1141   for (; k <= g; k++)
1142   {
1143     a = c[k];
1144     while (a--)
1145     {
1146       /* here i is the Huffman code of length k bits for value *p */
1147       /* make tables up to required level */
1148       while (k > w + l[h])
1149       {
1150         w += l[h++];            /* add bits already decoded */
1151 
1152         /* compute minimum size table less than or equal to *m bits */
1153         z = (z = g - w) > (unsigned)*m ? *m : z;        /* upper limit */
1154         if ((f = 1 << (j = k - w)) > a + 1)     /* try a k-w bit table */
1155         {                       /* too few codes for k-w bit table */
1156           f -= a + 1;           /* deduct codes from patterns left */
1157           xp = c + k;
1158           while (++j < z)       /* try smaller tables up to z bits */
1159           {
1160             if ((f <<= 1) <= *++xp)
1161               break;            /* enough codes to use up j bits */
1162             f -= *xp;           /* else deduct codes from patterns */
1163           }
1164         }
1165         if ((unsigned)w + j > el && (unsigned)w < el)
1166           j = el - w;           /* make EOB code end at table */
1167         z = 1 << j;             /* table entries for j-bit table */
1168         l[h] = j;               /* set table size in stack */
1169 
1170         /* allocate and link in new table */
1171         if ((q = (struct huft *)malloc((z + 1)*sizeof(struct huft))) ==
1172             (struct huft *)NULL)
1173         {
1174           if (h)
1175             huft_free(u[0]);
1176           return 3;             /* not enough memory */
1177         }
1178 #ifdef DEBUG
1179         G.hufts += z + 1;         /* track memory usage */
1180 #endif
1181         *t = q + 1;             /* link to list for huft_free() */
1182         *(t = &(q->v.t)) = (struct huft *)NULL;
1183         u[h] = ++q;             /* table starts after link */
1184 
1185         /* connect to last table, if there is one */
1186         if (h)
1187         {
1188           x[h] = i;             /* save pattern for backing up */
1189           r.b = (uch)l[h-1];    /* bits to dump before this table */
1190           r.e = (uch)(32 + j);  /* bits in this table */
1191           r.v.t = q;            /* pointer to this table */
1192           j = (i & ((1 << w) - 1)) >> (w - l[h-1]);
1193           u[h-1][j] = r;        /* connect to last table */
1194         }
1195       }
1196 
1197       /* set up table entry in r */
1198       r.b = (uch)(k - w);
1199       if (p >= v + n)
1200         r.e = INVALID_CODE;     /* out of values--invalid code */
1201       else if (*p < s)
1202       {
1203         r.e = (uch)(*p < 256 ? 32 : 31);  /* 256 is end-of-block code */
1204         r.v.n = (ush)*p++;                /* simple code is just the value */
1205       }
1206       else
1207       {
1208         r.e = e[*p - s];        /* non-simple--look up in lists */
1209         r.v.n = d[*p++ - s];
1210       }
1211 
1212       /* fill code-like entries with r */
1213       f = 1 << (k - w);
1214       for (j = i >> w; j < z; j += f)
1215         q[j] = r;
1216 
1217       /* backwards increment the k-bit code i */
1218       for (j = 1 << (k - 1); i & j; j >>= 1)
1219         i ^= j;
1220       i ^= j;
1221 
1222       /* backup over finished tables */
1223       while ((i & ((1 << w) - 1)) != x[h])
1224         w -= l[--h];            /* don't need to update q */
1225     }
1226   }
1227 
1228 
1229   /* return actual size of base table */
1230   *m = l[0];
1231 
1232 
1233   /* Return true (1) if we were given an incomplete table */
1234   return y != 0 && g != 1;
1235 }
1236 
1237 
1238 
1239 int huft_free(t)
1240 struct huft *t;         /* table to free */
1241 /* Free the malloc'ed tables built by huft_build(), which makes a linked
1242    list of the tables it made, with the links in a dummy first entry of
1243    each table. */
1244 {
1245   register struct huft *p, *q;
1246 
1247 
1248   /* Go through linked list, freeing from the malloced (t[-1]) address. */
1249   p = t;
1250   while (p != (struct huft *)NULL)
1251   {
1252     q = (--p)->v.t;
1253     free((zvoid *)p);
1254     p = q;
1255   }
1256   return 0;
1257 }
1258