1 /* 2 * GRUB -- GRand Unified Bootloader 3 * Copyright (C) 1999 Free Software Foundation, Inc. 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 18 */ 19 20 /* 21 * Most of this file was originally the source file "inflate.c", written 22 * by Mark Adler. It has been very heavily modified. In particular, the 23 * original would run through the whole file at once, and this version can 24 * be stopped and restarted on any boundary during the decompression process. 25 * 26 * The license and header comments that file are included here. 27 */ 28 29 /* inflate.c -- Not copyrighted 1992 by Mark Adler 30 version c10p1, 10 January 1993 */ 31 32 /* You can do whatever you like with this source file, though I would 33 prefer that if you modify it and redistribute it that you include 34 comments to that effect with your name and the date. Thank you. 35 */ 36 37 /* 38 Inflate deflated (PKZIP's method 8 compressed) data. The compression 39 method searches for as much of the current string of bytes (up to a 40 length of 258) in the previous 32K bytes. If it doesn't find any 41 matches (of at least length 3), it codes the next byte. Otherwise, it 42 codes the length of the matched string and its distance backwards from 43 the current position. There is a single Huffman code that codes both 44 single bytes (called "literals") and match lengths. A second Huffman 45 code codes the distance information, which follows a length code. Each 46 length or distance code actually represents a base value and a number 47 of "extra" (sometimes zero) bits to get to add to the base value. At 48 the end of each deflated block is a special end-of-block (EOB) literal/ 49 length code. The decoding process is basically: get a literal/length 50 code; if EOB then done; if a literal, emit the decoded byte; if a 51 length then get the distance and emit the referred-to bytes from the 52 sliding window of previously emitted data. 53 54 There are (currently) three kinds of inflate blocks: stored, fixed, and 55 dynamic. The compressor deals with some chunk of data at a time, and 56 decides which method to use on a chunk-by-chunk basis. A chunk might 57 typically be 32K or 64K. If the chunk is uncompressible, then the 58 "stored" method is used. In this case, the bytes are simply stored as 59 is, eight bits per byte, with none of the above coding. The bytes are 60 preceded by a count, since there is no longer an EOB code. 61 62 If the data is compressible, then either the fixed or dynamic methods 63 are used. In the dynamic method, the compressed data is preceded by 64 an encoding of the literal/length and distance Huffman codes that are 65 to be used to decode this block. The representation is itself Huffman 66 coded, and so is preceded by a description of that code. These code 67 descriptions take up a little space, and so for small blocks, there is 68 a predefined set of codes, called the fixed codes. The fixed method is 69 used if the block codes up smaller that way (usually for quite small 70 chunks), otherwise the dynamic method is used. In the latter case, the 71 codes are customized to the probabilities in the current block, and so 72 can code it much better than the pre-determined fixed codes. 73 74 The Huffman codes themselves are decoded using a mutli-level table 75 lookup, in order to maximize the speed of decoding plus the speed of 76 building the decoding tables. See the comments below that precede the 77 lbits and dbits tuning parameters. 78 */ 79 80 81 /* 82 Notes beyond the 1.93a appnote.txt: 83 84 1. Distance pointers never point before the beginning of the output 85 stream. 86 2. Distance pointers can point back across blocks, up to 32k away. 87 3. There is an implied maximum of 7 bits for the bit length table and 88 15 bits for the actual data. 89 4. If only one code exists, then it is encoded using one bit. (Zero 90 would be more efficient, but perhaps a little confusing.) If two 91 codes exist, they are coded using one bit each (0 and 1). 92 5. There is no way of sending zero distance codes--a dummy must be 93 sent if there are none. (History: a pre 2.0 version of PKZIP would 94 store blocks with no distance codes, but this was discovered to be 95 too harsh a criterion.) Valid only for 1.93a. 2.04c does allow 96 zero distance codes, which is sent as one code of zero bits in 97 length. 98 6. There are up to 286 literal/length codes. Code 256 represents the 99 end-of-block. Note however that the static length tree defines 100 288 codes just to fill out the Huffman codes. Codes 286 and 287 101 cannot be used though, since there is no length base or extra bits 102 defined for them. Similarly, there are up to 30 distance codes. 103 However, static trees define 32 codes (all 5 bits) to fill out the 104 Huffman codes, but the last two had better not show up in the data. 105 7. Unzip can check dynamic Huffman blocks for complete code sets. 106 The exception is that a single code would not be complete (see #4). 107 8. The five bits following the block type is really the number of 108 literal codes sent minus 257. 109 9. Length codes 8,16,16 are interpreted as 13 length codes of 8 bits 110 (1+6+6). Therefore, to output three times the length, you output 111 three codes (1+1+1), whereas to output four times the same length, 112 you only need two codes (1+3). Hmm. 113 10. In the tree reconstruction algorithm, Code = Code + Increment 114 only if BitLength(i) is not zero. (Pretty obvious.) 115 11. Correction: 4 Bits: # of Bit Length codes - 4 (4 - 19) 116 12. Note: length code 284 can represent 227-258, but length code 285 117 really is 258. The last length deserves its own, short code 118 since it gets used a lot in very redundant files. The length 119 258 is special since 258 - 3 (the min match length) is 255. 120 13. The literal/length and distance code bit lengths are read as a 121 single stream of lengths. It is possible (and advantageous) for 122 a repeat code (16, 17, or 18) to go across the boundary between 123 the two sets of lengths. 124 */ 125 126 #ifndef NO_DECOMPRESSION 127 128 #include "shared.h" 129 130 #include "filesys.h" 131 132 /* so we can disable decompression */ 133 int no_decompression = 0; 134 135 /* used to tell if "read" should be redirected to "gunzip_read" */ 136 int compressed_file; 137 138 /* internal variables only */ 139 static int gzip_data_offset; 140 static int gzip_filepos; 141 static int gzip_filemax; 142 static int gzip_fsmax; 143 static int saved_filepos; 144 static unsigned long gzip_crc; 145 146 /* internal extra variables for use of inflate code */ 147 static int block_type; 148 static int block_len; 149 static int last_block; 150 static int code_state; 151 152 153 /* Function prototypes */ 154 static void initialize_tables (void); 155 156 /* 157 * Linear allocator. 158 */ 159 160 static unsigned long linalloc_topaddr; 161 162 static void * 163 linalloc (int size) 164 { 165 linalloc_topaddr = (linalloc_topaddr - size) & ~3; 166 return (void *) linalloc_topaddr; 167 } 168 169 static void 170 reset_linalloc (void) 171 { 172 linalloc_topaddr = RAW_ADDR ((mbi.mem_upper << 10) + 0x100000); 173 } 174 175 176 /* internal variable swap function */ 177 static void 178 gunzip_swap_values (void) 179 { 180 register int itmp; 181 182 /* swap filepos */ 183 itmp = filepos; 184 filepos = gzip_filepos; 185 gzip_filepos = itmp; 186 187 /* swap filemax */ 188 itmp = filemax; 189 filemax = gzip_filemax; 190 gzip_filemax = itmp; 191 192 /* swap fsmax */ 193 itmp = fsmax; 194 fsmax = gzip_fsmax; 195 gzip_fsmax = itmp; 196 } 197 198 199 /* internal function for eating variable-length header fields */ 200 static int 201 bad_field (int len) 202 { 203 char ch = 1; 204 int not_retval = 1; 205 206 do 207 { 208 if (len >= 0) 209 { 210 if (!(len--)) 211 break; 212 } 213 else 214 { 215 if (!ch) 216 break; 217 } 218 } 219 while ((not_retval = grub_read (&ch, 1)) == 1); 220 221 return (!not_retval); 222 } 223 224 225 /* Little-Endian defines for the 2-byte magic number for gzip files */ 226 #define GZIP_HDR_LE 0x8B1F 227 #define OLD_GZIP_HDR_LE 0x9E1F 228 229 /* Compression methods (see algorithm.doc) */ 230 #define STORED 0 231 #define COMPRESSED 1 232 #define PACKED 2 233 #define LZHED 3 234 /* methods 4 to 7 reserved */ 235 #define DEFLATED 8 236 #define MAX_METHODS 9 237 238 /* gzip flag byte */ 239 #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ 240 #define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */ 241 #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ 242 #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ 243 #define COMMENT 0x10 /* bit 4 set: file comment present */ 244 #define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */ 245 #define RESERVED 0xC0 /* bit 6,7: reserved */ 246 247 #define UNSUPP_FLAGS (CONTINUATION|ENCRYPTED|RESERVED) 248 249 /* inflate block codes */ 250 #define INFLATE_STORED 0 251 #define INFLATE_FIXED 1 252 #define INFLATE_DYNAMIC 2 253 254 typedef unsigned char uch; 255 typedef unsigned short ush; 256 typedef unsigned long ulg; 257 258 /* 259 * Window Size 260 * 261 * This must be a power of two, and at least 32K for zip's deflate method 262 */ 263 264 #define WSIZE 0x8000 265 266 267 int 268 gunzip_test_header (void) 269 { 270 unsigned char buf[10]; 271 272 /* "compressed_file" is already reset to zero by this point */ 273 274 /* 275 * This checks if the file is gzipped. If a problem occurs here 276 * (other than a real error with the disk) then we don't think it 277 * is a compressed file, and simply mark it as such. 278 */ 279 if (no_decompression 280 || grub_read (buf, 10) != 10 281 || ((*((unsigned short *) buf) != GZIP_HDR_LE) 282 && (*((unsigned short *) buf) != OLD_GZIP_HDR_LE))) 283 { 284 filepos = 0; 285 return ! errnum; 286 } 287 288 /* 289 * This does consistency checking on the header data. If a 290 * problem occurs from here on, then we have corrupt or otherwise 291 * bad data, and the error should be reported to the user. 292 */ 293 if (buf[2] != DEFLATED 294 || (buf[3] & UNSUPP_FLAGS) 295 || ((buf[3] & EXTRA_FIELD) 296 && (grub_read (buf, 2) != 2 297 || bad_field (*((unsigned short *) buf)))) 298 || ((buf[3] & ORIG_NAME) && bad_field (-1)) 299 || ((buf[3] & COMMENT) && bad_field (-1))) 300 { 301 if (! errnum) 302 errnum = ERR_BAD_GZIP_HEADER; 303 304 return 0; 305 } 306 307 gzip_data_offset = filepos; 308 309 filepos = filemax - 8; 310 311 if (grub_read (buf, 8) != 8) 312 { 313 if (! errnum) 314 errnum = ERR_BAD_GZIP_HEADER; 315 316 return 0; 317 } 318 319 gzip_crc = *((unsigned long *) buf); 320 gzip_fsmax = gzip_filemax = *((unsigned long *) (buf + 4)); 321 322 initialize_tables (); 323 324 compressed_file = 1; 325 gunzip_swap_values (); 326 /* 327 * Now "gzip_*" values refer to the compressed data. 328 */ 329 330 filepos = 0; 331 332 return 1; 333 } 334 335 336 /* Huffman code lookup table entry--this entry is four bytes for machines 337 that have 16-bit pointers (e.g. PC's in the small or medium model). 338 Valid extra bits are 0..13. e == 15 is EOB (end of block), e == 16 339 means that v is a literal, 16 < e < 32 means that v is a pointer to 340 the next table, which codes e - 16 bits, and lastly e == 99 indicates 341 an unused code. If a code with e == 99 is looked up, this implies an 342 error in the data. */ 343 struct huft 344 { 345 uch e; /* number of extra bits or operation */ 346 uch b; /* number of bits in this code or subcode */ 347 union 348 { 349 ush n; /* literal, length base, or distance base */ 350 struct huft *t; /* pointer to next level of table */ 351 } 352 v; 353 }; 354 355 356 /* The inflate algorithm uses a sliding 32K byte window on the uncompressed 357 stream to find repeated byte strings. This is implemented here as a 358 circular buffer. The index is updated simply by incrementing and then 359 and'ing with 0x7fff (32K-1). */ 360 /* It is left to other modules to supply the 32K area. It is assumed 361 to be usable as if it were declared "uch slide[32768];" or as just 362 "uch *slide;" and then malloc'ed in the latter case. The definition 363 must be in unzip.h, included above. */ 364 365 366 /* sliding window in uncompressed data */ 367 static uch slide[WSIZE]; 368 369 /* current position in slide */ 370 static unsigned wp; 371 372 373 /* Tables for deflate from PKZIP's appnote.txt. */ 374 static unsigned bitorder[] = 375 { /* Order of the bit length code lengths */ 376 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; 377 static ush cplens[] = 378 { /* Copy lengths for literal codes 257..285 */ 379 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 380 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; 381 /* note: see note #13 above about the 258 in this list. */ 382 static ush cplext[] = 383 { /* Extra bits for literal codes 257..285 */ 384 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 385 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 99, 99}; /* 99==invalid */ 386 static ush cpdist[] = 387 { /* Copy offsets for distance codes 0..29 */ 388 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 389 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 390 8193, 12289, 16385, 24577}; 391 static ush cpdext[] = 392 { /* Extra bits for distance codes */ 393 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 394 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 395 12, 12, 13, 13}; 396 397 398 /* 399 Huffman code decoding is performed using a multi-level table lookup. 400 The fastest way to decode is to simply build a lookup table whose 401 size is determined by the longest code. However, the time it takes 402 to build this table can also be a factor if the data being decoded 403 is not very long. The most common codes are necessarily the 404 shortest codes, so those codes dominate the decoding time, and hence 405 the speed. The idea is you can have a shorter table that decodes the 406 shorter, more probable codes, and then point to subsidiary tables for 407 the longer codes. The time it costs to decode the longer codes is 408 then traded against the time it takes to make longer tables. 409 410 This results of this trade are in the variables lbits and dbits 411 below. lbits is the number of bits the first level table for literal/ 412 length codes can decode in one step, and dbits is the same thing for 413 the distance codes. Subsequent tables are also less than or equal to 414 those sizes. These values may be adjusted either when all of the 415 codes are shorter than that, in which case the longest code length in 416 bits is used, or when the shortest code is *longer* than the requested 417 table size, in which case the length of the shortest code in bits is 418 used. 419 420 There are two different values for the two tables, since they code a 421 different number of possibilities each. The literal/length table 422 codes 286 possible values, or in a flat code, a little over eight 423 bits. The distance table codes 30 possible values, or a little less 424 than five bits, flat. The optimum values for speed end up being 425 about one bit more than those, so lbits is 8+1 and dbits is 5+1. 426 The optimum values may differ though from machine to machine, and 427 possibly even between compilers. Your mileage may vary. 428 */ 429 430 431 static int lbits = 9; /* bits in base literal/length lookup table */ 432 static int dbits = 6; /* bits in base distance lookup table */ 433 434 435 /* If BMAX needs to be larger than 16, then h and x[] should be ulg. */ 436 #define BMAX 16 /* maximum bit length of any code (16 for explode) */ 437 #define N_MAX 288 /* maximum number of codes in any set */ 438 439 440 static unsigned hufts; /* track memory usage */ 441 442 443 /* Macros for inflate() bit peeking and grabbing. 444 The usage is: 445 446 NEEDBITS(j) 447 x = b & mask_bits[j]; 448 DUMPBITS(j) 449 450 where NEEDBITS makes sure that b has at least j bits in it, and 451 DUMPBITS removes the bits from b. The macros use the variable k 452 for the number of bits in b. Normally, b and k are register 453 variables for speed, and are initialized at the beginning of a 454 routine that uses these macros from a global bit buffer and count. 455 456 If we assume that EOB will be the longest code, then we will never 457 ask for bits with NEEDBITS that are beyond the end of the stream. 458 So, NEEDBITS should not read any more bytes than are needed to 459 meet the request. Then no bytes need to be "returned" to the buffer 460 at the end of the last block. 461 462 However, this assumption is not true for fixed blocks--the EOB code 463 is 7 bits, but the other literal/length codes can be 8 or 9 bits. 464 (The EOB code is shorter than other codes because fixed blocks are 465 generally short. So, while a block always has an EOB, many other 466 literal/length codes have a significantly lower probability of 467 showing up at all.) However, by making the first table have a 468 lookup of seven bits, the EOB code will be found in that first 469 lookup, and so will not require that too many bits be pulled from 470 the stream. 471 */ 472 473 static ulg bb; /* bit buffer */ 474 static unsigned bk; /* bits in bit buffer */ 475 476 static ush mask_bits[] = 477 { 478 0x0000, 479 0x0001, 0x0003, 0x0007, 0x000f, 0x001f, 0x003f, 0x007f, 0x00ff, 480 0x01ff, 0x03ff, 0x07ff, 0x0fff, 0x1fff, 0x3fff, 0x7fff, 0xffff 481 }; 482 483 #define NEEDBITS(n) do {while(k<(n)){b|=((ulg)get_byte())<<k;k+=8;}} while (0) 484 #define DUMPBITS(n) do {b>>=(n);k-=(n);} while (0) 485 486 #define INBUFSIZ 0x2000 487 488 static uch inbuf[INBUFSIZ]; 489 static int bufloc; 490 491 static int 492 get_byte (void) 493 { 494 if (filepos == gzip_data_offset || bufloc == INBUFSIZ) 495 { 496 bufloc = 0; 497 grub_read (inbuf, INBUFSIZ); 498 } 499 500 return inbuf[bufloc++]; 501 } 502 503 /* decompression global pointers */ 504 static struct huft *tl; /* literal/length code table */ 505 static struct huft *td; /* distance code table */ 506 static int bl; /* lookup bits for tl */ 507 static int bd; /* lookup bits for td */ 508 509 510 /* more function prototypes */ 511 static int huft_build (unsigned *, unsigned, unsigned, ush *, ush *, 512 struct huft **, int *); 513 static int inflate_codes_in_window (void); 514 515 516 /* Given a list of code lengths and a maximum table size, make a set of 517 tables to decode that set of codes. Return zero on success, one if 518 the given code set is incomplete (the tables are still built in this 519 case), two if the input is invalid (all zero length codes or an 520 oversubscribed set of lengths), and three if not enough memory. */ 521 522 static int 523 huft_build (unsigned *b, /* code lengths in bits (all assumed <= BMAX) */ 524 unsigned n, /* number of codes (assumed <= N_MAX) */ 525 unsigned s, /* number of simple-valued codes (0..s-1) */ 526 ush * d, /* list of base values for non-simple codes */ 527 ush * e, /* list of extra bits for non-simple codes */ 528 struct huft **t, /* result: starting table */ 529 int *m) /* maximum lookup bits, returns actual */ 530 { 531 unsigned a; /* counter for codes of length k */ 532 unsigned c[BMAX + 1]; /* bit length count table */ 533 unsigned f; /* i repeats in table every f entries */ 534 int g; /* maximum code length */ 535 int h; /* table level */ 536 register unsigned i; /* counter, current code */ 537 register unsigned j; /* counter */ 538 register int k; /* number of bits in current code */ 539 int l; /* bits per table (returned in m) */ 540 register unsigned *p; /* pointer into c[], b[], or v[] */ 541 register struct huft *q; /* points to current table */ 542 struct huft r; /* table entry for structure assignment */ 543 struct huft *u[BMAX]; /* table stack */ 544 unsigned v[N_MAX]; /* values in order of bit length */ 545 register int w; /* bits before this table == (l * h) */ 546 unsigned x[BMAX + 1]; /* bit offsets, then code stack */ 547 unsigned *xp; /* pointer into x */ 548 int y; /* number of dummy codes added */ 549 unsigned z; /* number of entries in current table */ 550 551 /* Generate counts for each bit length */ 552 memset ((char *) c, 0, sizeof (c)); 553 p = b; 554 i = n; 555 do 556 { 557 c[*p]++; /* assume all entries <= BMAX */ 558 p++; /* Can't combine with above line (Solaris bug) */ 559 } 560 while (--i); 561 if (c[0] == n) /* null input--all zero length codes */ 562 { 563 *t = (struct huft *) NULL; 564 *m = 0; 565 return 0; 566 } 567 568 /* Find minimum and maximum length, bound *m by those */ 569 l = *m; 570 for (j = 1; j <= BMAX; j++) 571 if (c[j]) 572 break; 573 k = j; /* minimum code length */ 574 if ((unsigned) l < j) 575 l = j; 576 for (i = BMAX; i; i--) 577 if (c[i]) 578 break; 579 g = i; /* maximum code length */ 580 if ((unsigned) l > i) 581 l = i; 582 *m = l; 583 584 /* Adjust last length count to fill out codes, if needed */ 585 for (y = 1 << j; j < i; j++, y <<= 1) 586 if ((y -= c[j]) < 0) 587 return 2; /* bad input: more codes than bits */ 588 if ((y -= c[i]) < 0) 589 return 2; 590 c[i] += y; 591 592 /* Generate starting offsets into the value table for each length */ 593 x[1] = j = 0; 594 p = c + 1; 595 xp = x + 2; 596 while (--i) 597 { /* note that i == g from above */ 598 *xp++ = (j += *p++); 599 } 600 601 /* Make a table of values in order of bit lengths */ 602 p = b; 603 i = 0; 604 do 605 { 606 if ((j = *p++) != 0) 607 v[x[j]++] = i; 608 } 609 while (++i < n); 610 611 /* Generate the Huffman codes and for each, make the table entries */ 612 x[0] = i = 0; /* first Huffman code is zero */ 613 p = v; /* grab values in bit order */ 614 h = -1; /* no tables yet--level -1 */ 615 w = -l; /* bits decoded == (l * h) */ 616 u[0] = (struct huft *) NULL; /* just to keep compilers happy */ 617 q = (struct huft *) NULL; /* ditto */ 618 z = 0; /* ditto */ 619 620 /* go through the bit lengths (k already is bits in shortest code) */ 621 for (; k <= g; k++) 622 { 623 a = c[k]; 624 while (a--) 625 { 626 /* here i is the Huffman code of length k bits for value *p */ 627 /* make tables up to required level */ 628 while (k > w + l) 629 { 630 h++; 631 w += l; /* previous table always l bits */ 632 633 /* compute minimum size table less than or equal to l bits */ 634 z = (z = g - w) > (unsigned) l ? l : z; /* upper limit on table size */ 635 if ((f = 1 << (j = k - w)) > a + 1) /* try a k-w bit table */ 636 { /* too few codes for k-w bit table */ 637 f -= a + 1; /* deduct codes from patterns left */ 638 xp = c + k; 639 while (++j < z) /* try smaller tables up to z bits */ 640 { 641 if ((f <<= 1) <= *++xp) 642 break; /* enough codes to use up j bits */ 643 f -= *xp; /* else deduct codes from patterns */ 644 } 645 } 646 z = 1 << j; /* table entries for j-bit table */ 647 648 /* allocate and link in new table */ 649 q = (struct huft *) linalloc ((z + 1) * sizeof (struct huft)); 650 651 hufts += z + 1; /* track memory usage */ 652 *t = q + 1; /* link to list for huft_free() */ 653 *(t = &(q->v.t)) = (struct huft *) NULL; 654 u[h] = ++q; /* table starts after link */ 655 656 /* connect to last table, if there is one */ 657 if (h) 658 { 659 x[h] = i; /* save pattern for backing up */ 660 r.b = (uch) l; /* bits to dump before this table */ 661 r.e = (uch) (16 + j); /* bits in this table */ 662 r.v.t = q; /* pointer to this table */ 663 j = i >> (w - l); /* (get around Turbo C bug) */ 664 u[h - 1][j] = r; /* connect to last table */ 665 } 666 } 667 668 /* set up table entry in r */ 669 r.b = (uch) (k - w); 670 if (p >= v + n) 671 r.e = 99; /* out of values--invalid code */ 672 else if (*p < s) 673 { 674 r.e = (uch) (*p < 256 ? 16 : 15); /* 256 is end-of-block code */ 675 r.v.n = (ush) (*p); /* simple code is just the value */ 676 p++; /* one compiler does not like *p++ */ 677 } 678 else 679 { 680 r.e = (uch) e[*p - s]; /* non-simple--look up in lists */ 681 r.v.n = d[*p++ - s]; 682 } 683 684 /* fill code-like entries with r */ 685 f = 1 << (k - w); 686 for (j = i >> w; j < z; j += f) 687 q[j] = r; 688 689 /* backwards increment the k-bit code i */ 690 for (j = 1 << (k - 1); i & j; j >>= 1) 691 i ^= j; 692 i ^= j; 693 694 /* backup over finished tables */ 695 while ((i & ((1 << w) - 1)) != x[h]) 696 { 697 h--; /* don't need to update q */ 698 w -= l; 699 } 700 } 701 } 702 703 /* Return true (1) if we were given an incomplete table */ 704 return y != 0 && g != 1; 705 } 706 707 708 /* 709 * inflate (decompress) the codes in a deflated (compressed) block. 710 * Return an error code or zero if it all goes ok. 711 */ 712 713 static unsigned inflate_n, inflate_d; 714 715 static int 716 inflate_codes_in_window (void) 717 { 718 register unsigned e; /* table entry flag/number of extra bits */ 719 unsigned n, d; /* length and index for copy */ 720 unsigned w; /* current window position */ 721 struct huft *t; /* pointer to table entry */ 722 unsigned ml, md; /* masks for bl and bd bits */ 723 register ulg b; /* bit buffer */ 724 register unsigned k; /* number of bits in bit buffer */ 725 726 /* make local copies of globals */ 727 d = inflate_d; 728 n = inflate_n; 729 b = bb; /* initialize bit buffer */ 730 k = bk; 731 w = wp; /* initialize window position */ 732 733 /* inflate the coded data */ 734 ml = mask_bits[bl]; /* precompute masks for speed */ 735 md = mask_bits[bd]; 736 for (;;) /* do until end of block */ 737 { 738 if (!code_state) 739 { 740 NEEDBITS ((unsigned) bl); 741 if ((e = (t = tl + ((unsigned) b & ml))->e) > 16) 742 do 743 { 744 if (e == 99) 745 { 746 errnum = ERR_BAD_GZIP_DATA; 747 return 0; 748 } 749 DUMPBITS (t->b); 750 e -= 16; 751 NEEDBITS (e); 752 } 753 while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) > 16); 754 DUMPBITS (t->b); 755 756 if (e == 16) /* then it's a literal */ 757 { 758 slide[w++] = (uch) t->v.n; 759 if (w == WSIZE) 760 break; 761 } 762 else 763 /* it's an EOB or a length */ 764 { 765 /* exit if end of block */ 766 if (e == 15) 767 { 768 block_len = 0; 769 break; 770 } 771 772 /* get length of block to copy */ 773 NEEDBITS (e); 774 n = t->v.n + ((unsigned) b & mask_bits[e]); 775 DUMPBITS (e); 776 777 /* decode distance of block to copy */ 778 NEEDBITS ((unsigned) bd); 779 if ((e = (t = td + ((unsigned) b & md))->e) > 16) 780 do 781 { 782 if (e == 99) 783 { 784 errnum = ERR_BAD_GZIP_DATA; 785 return 0; 786 } 787 DUMPBITS (t->b); 788 e -= 16; 789 NEEDBITS (e); 790 } 791 while ((e = (t = t->v.t + ((unsigned) b & mask_bits[e]))->e) 792 > 16); 793 DUMPBITS (t->b); 794 NEEDBITS (e); 795 d = w - t->v.n - ((unsigned) b & mask_bits[e]); 796 DUMPBITS (e); 797 code_state++; 798 } 799 } 800 801 if (code_state) 802 { 803 /* do the copy */ 804 do 805 { 806 n -= (e = (e = WSIZE - ((d &= WSIZE - 1) > w ? d : w)) > n ? n 807 : e); 808 if (w - d >= e) 809 { 810 memmove (slide + w, slide + d, e); 811 w += e; 812 d += e; 813 } 814 else 815 /* purposefully use the overlap for extra copies here!! */ 816 { 817 while (e--) 818 slide[w++] = slide[d++]; 819 } 820 if (w == WSIZE) 821 break; 822 } 823 while (n); 824 825 if (!n) 826 code_state--; 827 828 /* did we break from the loop too soon? */ 829 if (w == WSIZE) 830 break; 831 } 832 } 833 834 /* restore the globals from the locals */ 835 inflate_d = d; 836 inflate_n = n; 837 wp = w; /* restore global window pointer */ 838 bb = b; /* restore global bit buffer */ 839 bk = k; 840 841 return !block_len; 842 } 843 844 845 /* get header for an inflated type 0 (stored) block. */ 846 847 static void 848 init_stored_block (void) 849 { 850 register ulg b; /* bit buffer */ 851 register unsigned k; /* number of bits in bit buffer */ 852 853 /* make local copies of globals */ 854 b = bb; /* initialize bit buffer */ 855 k = bk; 856 857 /* go to byte boundary */ 858 DUMPBITS (k & 7); 859 860 /* get the length and its complement */ 861 NEEDBITS (16); 862 block_len = ((unsigned) b & 0xffff); 863 DUMPBITS (16); 864 NEEDBITS (16); 865 if (block_len != (unsigned) ((~b) & 0xffff)) 866 errnum = ERR_BAD_GZIP_DATA; 867 DUMPBITS (16); 868 869 /* restore global variables */ 870 bb = b; 871 bk = k; 872 } 873 874 875 /* get header for an inflated type 1 (fixed Huffman codes) block. We should 876 either replace this with a custom decoder, or at least precompute the 877 Huffman tables. */ 878 879 static void 880 init_fixed_block () 881 { 882 int i; /* temporary variable */ 883 unsigned l[288]; /* length list for huft_build */ 884 885 /* set up literal table */ 886 for (i = 0; i < 144; i++) 887 l[i] = 8; 888 for (; i < 256; i++) 889 l[i] = 9; 890 for (; i < 280; i++) 891 l[i] = 7; 892 for (; i < 288; i++) /* make a complete, but wrong code set */ 893 l[i] = 8; 894 bl = 7; 895 if ((i = huft_build (l, 288, 257, cplens, cplext, &tl, &bl)) != 0) 896 { 897 errnum = ERR_BAD_GZIP_DATA; 898 return; 899 } 900 901 /* set up distance table */ 902 for (i = 0; i < 30; i++) /* make an incomplete code set */ 903 l[i] = 5; 904 bd = 5; 905 if ((i = huft_build (l, 30, 0, cpdist, cpdext, &td, &bd)) > 1) 906 { 907 errnum = ERR_BAD_GZIP_DATA; 908 return; 909 } 910 911 /* indicate we're now working on a block */ 912 code_state = 0; 913 block_len++; 914 } 915 916 917 /* get header for an inflated type 2 (dynamic Huffman codes) block. */ 918 919 static void 920 init_dynamic_block (void) 921 { 922 int i; /* temporary variables */ 923 unsigned j; 924 unsigned l; /* last length */ 925 unsigned m; /* mask for bit lengths table */ 926 unsigned n; /* number of lengths to get */ 927 unsigned nb; /* number of bit length codes */ 928 unsigned nl; /* number of literal/length codes */ 929 unsigned nd; /* number of distance codes */ 930 unsigned ll[286 + 30]; /* literal/length and distance code lengths */ 931 register ulg b; /* bit buffer */ 932 register unsigned k; /* number of bits in bit buffer */ 933 934 /* make local bit buffer */ 935 b = bb; 936 k = bk; 937 938 /* read in table lengths */ 939 NEEDBITS (5); 940 nl = 257 + ((unsigned) b & 0x1f); /* number of literal/length codes */ 941 DUMPBITS (5); 942 NEEDBITS (5); 943 nd = 1 + ((unsigned) b & 0x1f); /* number of distance codes */ 944 DUMPBITS (5); 945 NEEDBITS (4); 946 nb = 4 + ((unsigned) b & 0xf); /* number of bit length codes */ 947 DUMPBITS (4); 948 if (nl > 286 || nd > 30) 949 { 950 errnum = ERR_BAD_GZIP_DATA; 951 return; 952 } 953 954 /* read in bit-length-code lengths */ 955 for (j = 0; j < nb; j++) 956 { 957 NEEDBITS (3); 958 ll[bitorder[j]] = (unsigned) b & 7; 959 DUMPBITS (3); 960 } 961 for (; j < 19; j++) 962 ll[bitorder[j]] = 0; 963 964 /* build decoding table for trees--single level, 7 bit lookup */ 965 bl = 7; 966 if ((i = huft_build (ll, 19, 19, NULL, NULL, &tl, &bl)) != 0) 967 { 968 errnum = ERR_BAD_GZIP_DATA; 969 return; 970 } 971 972 /* read in literal and distance code lengths */ 973 n = nl + nd; 974 m = mask_bits[bl]; 975 i = l = 0; 976 while ((unsigned) i < n) 977 { 978 NEEDBITS ((unsigned) bl); 979 j = (td = tl + ((unsigned) b & m))->b; 980 DUMPBITS (j); 981 j = td->v.n; 982 if (j < 16) /* length of code in bits (0..15) */ 983 ll[i++] = l = j; /* save last length in l */ 984 else if (j == 16) /* repeat last length 3 to 6 times */ 985 { 986 NEEDBITS (2); 987 j = 3 + ((unsigned) b & 3); 988 DUMPBITS (2); 989 if ((unsigned) i + j > n) 990 { 991 errnum = ERR_BAD_GZIP_DATA; 992 return; 993 } 994 while (j--) 995 ll[i++] = l; 996 } 997 else if (j == 17) /* 3 to 10 zero length codes */ 998 { 999 NEEDBITS (3); 1000 j = 3 + ((unsigned) b & 7); 1001 DUMPBITS (3); 1002 if ((unsigned) i + j > n) 1003 { 1004 errnum = ERR_BAD_GZIP_DATA; 1005 return; 1006 } 1007 while (j--) 1008 ll[i++] = 0; 1009 l = 0; 1010 } 1011 else 1012 /* j == 18: 11 to 138 zero length codes */ 1013 { 1014 NEEDBITS (7); 1015 j = 11 + ((unsigned) b & 0x7f); 1016 DUMPBITS (7); 1017 if ((unsigned) i + j > n) 1018 { 1019 errnum = ERR_BAD_GZIP_DATA; 1020 return; 1021 } 1022 while (j--) 1023 ll[i++] = 0; 1024 l = 0; 1025 } 1026 } 1027 1028 /* free decoding table for trees */ 1029 reset_linalloc (); 1030 1031 /* restore the global bit buffer */ 1032 bb = b; 1033 bk = k; 1034 1035 /* build the decoding tables for literal/length and distance codes */ 1036 bl = lbits; 1037 if ((i = huft_build (ll, nl, 257, cplens, cplext, &tl, &bl)) != 0) 1038 { 1039 #if 0 1040 if (i == 1) 1041 printf ("gunzip: incomplete literal tree\n"); 1042 #endif 1043 1044 errnum = ERR_BAD_GZIP_DATA; 1045 return; 1046 } 1047 bd = dbits; 1048 if ((i = huft_build (ll + nl, nd, 0, cpdist, cpdext, &td, &bd)) != 0) 1049 { 1050 #if 0 1051 if (i == 1) 1052 printf ("gunzip: incomplete distance tree\n"); 1053 #endif 1054 1055 errnum = ERR_BAD_GZIP_DATA; 1056 return; 1057 } 1058 1059 /* indicate we're now working on a block */ 1060 code_state = 0; 1061 block_len++; 1062 } 1063 1064 1065 static void 1066 get_new_block (void) 1067 { 1068 register ulg b; /* bit buffer */ 1069 register unsigned k; /* number of bits in bit buffer */ 1070 1071 hufts = 0; 1072 1073 /* make local bit buffer */ 1074 b = bb; 1075 k = bk; 1076 1077 /* read in last block bit */ 1078 NEEDBITS (1); 1079 last_block = (int) b & 1; 1080 DUMPBITS (1); 1081 1082 /* read in block type */ 1083 NEEDBITS (2); 1084 block_type = (unsigned) b & 3; 1085 DUMPBITS (2); 1086 1087 /* restore the global bit buffer */ 1088 bb = b; 1089 bk = k; 1090 1091 if (block_type == INFLATE_STORED) 1092 init_stored_block (); 1093 if (block_type == INFLATE_FIXED) 1094 init_fixed_block (); 1095 if (block_type == INFLATE_DYNAMIC) 1096 init_dynamic_block (); 1097 } 1098 1099 1100 static void 1101 inflate_window (void) 1102 { 1103 /* initialize window */ 1104 wp = 0; 1105 1106 /* 1107 * Main decompression loop. 1108 */ 1109 1110 while (wp < WSIZE && !errnum) 1111 { 1112 if (!block_len) 1113 { 1114 if (last_block) 1115 break; 1116 1117 get_new_block (); 1118 } 1119 1120 if (block_type > INFLATE_DYNAMIC) 1121 errnum = ERR_BAD_GZIP_DATA; 1122 1123 if (errnum) 1124 return; 1125 1126 /* 1127 * Expand stored block here. 1128 */ 1129 if (block_type == INFLATE_STORED) 1130 { 1131 int w = wp; 1132 1133 /* 1134 * This is basically a glorified pass-through 1135 */ 1136 1137 while (block_len && w < WSIZE && !errnum) 1138 { 1139 slide[w++] = get_byte (); 1140 block_len--; 1141 } 1142 1143 wp = w; 1144 1145 continue; 1146 } 1147 1148 /* 1149 * Expand other kind of block. 1150 */ 1151 1152 if (inflate_codes_in_window ()) 1153 reset_linalloc (); 1154 } 1155 1156 saved_filepos += WSIZE; 1157 1158 /* XXX do CRC calculation here! */ 1159 } 1160 1161 1162 static void 1163 initialize_tables (void) 1164 { 1165 saved_filepos = 0; 1166 filepos = gzip_data_offset; 1167 1168 /* initialize window, bit buffer */ 1169 bk = 0; 1170 bb = 0; 1171 1172 /* reset partial decompression code */ 1173 last_block = 0; 1174 block_len = 0; 1175 1176 /* reset memory allocation stuff */ 1177 reset_linalloc (); 1178 } 1179 1180 1181 int 1182 gunzip_read (char *buf, int len) 1183 { 1184 int ret = 0; 1185 1186 compressed_file = 0; 1187 gunzip_swap_values (); 1188 /* 1189 * Now "gzip_*" values refer to the uncompressed data. 1190 */ 1191 1192 /* do we reset decompression to the beginning of the file? */ 1193 if (saved_filepos > gzip_filepos + WSIZE) 1194 initialize_tables (); 1195 1196 /* 1197 * This loop operates upon uncompressed data only. The only 1198 * special thing it does is to make sure the decompression 1199 * window is within the range of data it needs. 1200 */ 1201 1202 while (len > 0 && !errnum) 1203 { 1204 register int size; 1205 register char *srcaddr; 1206 1207 while (gzip_filepos >= saved_filepos) 1208 inflate_window (); 1209 1210 srcaddr = (char *) ((gzip_filepos & (WSIZE - 1)) + slide); 1211 size = saved_filepos - gzip_filepos; 1212 if (size > len) 1213 size = len; 1214 1215 memmove (buf, srcaddr, size); 1216 1217 buf += size; 1218 len -= size; 1219 gzip_filepos += size; 1220 ret += size; 1221 } 1222 1223 compressed_file = 1; 1224 gunzip_swap_values (); 1225 /* 1226 * Now "gzip_*" values refer to the compressed data. 1227 */ 1228 1229 if (errnum) 1230 ret = 0; 1231 1232 return ret; 1233 } 1234 1235 #endif /* ! NO_DECOMPRESSION */ 1236