github.com/Schaudge/grailbase@v0.0.0-20240223061707-44c758a471c0/compress/libdeflate/deflate_decompress.c (about) 1 /* 2 * deflate_decompress.c - a decompressor for DEFLATE 3 * 4 * Copyright 2016 Eric Biggers 5 * 6 * Permission is hereby granted, free of charge, to any person 7 * obtaining a copy of this software and associated documentation 8 * files (the "Software"), to deal in the Software without 9 * restriction, including without limitation the rights to use, 10 * copy, modify, merge, publish, distribute, sublicense, and/or sell 11 * copies of the Software, and to permit persons to whom the 12 * Software is furnished to do so, subject to the following 13 * conditions: 14 * 15 * The above copyright notice and this permission notice shall be 16 * included in all copies or substantial portions of the Software. 17 * 18 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 19 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 20 * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 21 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 22 * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 23 * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 24 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 25 * OTHER DEALINGS IN THE SOFTWARE. 26 * 27 * --------------------------------------------------------------------------- 28 * 29 * This is a highly optimized DEFLATE decompressor. When compiled with gcc on 30 * x86_64, it decompresses data in about 52% of the time of zlib (48% if BMI2 31 * instructions are available). On other architectures it should still be 32 * significantly faster than zlib, but the difference may be smaller. 33 * 34 * Why this is faster than zlib's implementation: 35 * 36 * - Word accesses rather than byte accesses when reading input 37 * - Word accesses rather than byte accesses when copying matches 38 * - Faster Huffman decoding combined with various DEFLATE-specific tricks 39 * - Larger bitbuffer variable that doesn't need to be filled as often 40 * - Other optimizations to remove unnecessary branches 41 * - Only full-buffer decompression is supported, so the code doesn't need to 42 * support stopping and resuming decompression. 43 * - On x86_64, compile a version of the decompression routine using BMI2 44 * instructions and use it automatically at runtime when supported. 45 */ 46 47 #include <stdlib.h> 48 #include <string.h> 49 50 #include "deflate_constants.h" 51 #include "unaligned.h" 52 53 #include "libdeflate.h" 54 55 /* 56 * If the expression passed to SAFETY_CHECK() evaluates to false, then the 57 * decompression routine immediately returns LIBDEFLATE_BAD_DATA, indicating the 58 * compressed data is invalid. 59 * 60 * Theoretically, these checks could be disabled for specialized applications 61 * where all input to the decompressor will be trusted. 62 */ 63 #if 0 64 # pragma message("UNSAFE DECOMPRESSION IS ENABLED. THIS MUST ONLY BE USED IF THE DECOMPRESSOR INPUT WILL ALWAYS BE TRUSTED!") 65 # define SAFETY_CHECK(expr) (void)(expr) 66 #else 67 # define SAFETY_CHECK(expr) if (unlikely(!(expr))) return LIBDEFLATE_BAD_DATA 68 #endif 69 70 /* 71 * Each TABLEBITS number is the base-2 logarithm of the number of entries in the 72 * main portion of the corresponding decode table. Each number should be large 73 * enough to ensure that for typical data, the vast majority of symbols can be 74 * decoded by a direct lookup of the next TABLEBITS bits of compressed data. 75 * However, this must be balanced against the fact that a larger table requires 76 * more memory and requires more time to fill. 77 * 78 * Note: you cannot change a TABLEBITS number without also changing the 79 * corresponding ENOUGH number! 80 */ 81 #define PRECODE_TABLEBITS 7 82 #define LITLEN_TABLEBITS 10 83 #define OFFSET_TABLEBITS 8 84 85 /* 86 * Each ENOUGH number is the maximum number of decode table entries that may be 87 * required for the corresponding Huffman code, including the main table and all 88 * subtables. Each number depends on three parameters: 89 * 90 * (1) the maximum number of symbols in the code (DEFLATE_NUM_*_SYMBOLS) 91 * (2) the number of main table bits (the TABLEBITS numbers defined above) 92 * (3) the maximum allowed codeword length (DEFLATE_MAX_*_CODEWORD_LEN) 93 * 94 * The ENOUGH numbers were computed using the utility program 'enough' from 95 * zlib. This program enumerates all possible relevant Huffman codes to find 96 * the worst-case usage of decode table entries. 97 */ 98 #define PRECODE_ENOUGH 128 /* enough 19 7 7 */ 99 #define LITLEN_ENOUGH 1334 /* enough 288 10 15 */ 100 #define OFFSET_ENOUGH 402 /* enough 32 8 15 */ 101 102 /* 103 * Type for codeword lengths. 104 */ 105 typedef u8 len_t; 106 107 /* 108 * The main DEFLATE decompressor structure. Since this implementation only 109 * supports full buffer decompression, this structure does not store the entire 110 * decompression state, but rather only some arrays that are too large to 111 * comfortably allocate on the stack. 112 */ 113 struct libdeflate_decompressor { 114 115 /* 116 * The arrays aren't all needed at the same time. 'precode_lens' and 117 * 'precode_decode_table' are unneeded after 'lens' has been filled. 118 * Furthermore, 'lens' need not be retained after building the litlen 119 * and offset decode tables. In fact, 'lens' can be in union with 120 * 'litlen_decode_table' provided that 'offset_decode_table' is separate 121 * and is built first. 122 */ 123 124 union { 125 len_t precode_lens[DEFLATE_NUM_PRECODE_SYMS]; 126 127 struct { 128 len_t lens[DEFLATE_NUM_LITLEN_SYMS + 129 DEFLATE_NUM_OFFSET_SYMS + 130 DEFLATE_MAX_LENS_OVERRUN]; 131 132 u32 precode_decode_table[PRECODE_ENOUGH]; 133 } l; 134 135 u32 litlen_decode_table[LITLEN_ENOUGH]; 136 } u; 137 138 u32 offset_decode_table[OFFSET_ENOUGH]; 139 140 u16 working_space[2 * (DEFLATE_MAX_CODEWORD_LEN + 1) + 141 DEFLATE_MAX_NUM_SYMS]; 142 }; 143 144 /***************************************************************************** 145 * Input bitstream * 146 *****************************************************************************/ 147 148 /* 149 * The state of the "input bitstream" consists of the following variables: 150 * 151 * - in_next: pointer to the next unread byte in the input buffer 152 * 153 * - in_end: pointer just past the end of the input buffer 154 * 155 * - bitbuf: a word-sized variable containing bits that have been read from 156 * the input buffer. The buffered bits are right-aligned 157 * (they're the low-order bits). 158 * 159 * - bitsleft: number of bits in 'bitbuf' that are valid. 160 * 161 * To make it easier for the compiler to optimize the code by keeping variables 162 * in registers, these are declared as normal variables and manipulated using 163 * macros. 164 */ 165 166 /* 167 * The type for the bitbuffer variable ('bitbuf' described above). For best 168 * performance, this should have size equal to a machine word. 169 * 170 * 64-bit platforms have a significant advantage: they get a bigger bitbuffer 171 * which they have to fill less often. 172 */ 173 typedef machine_word_t bitbuf_t; 174 175 /* 176 * Number of bits the bitbuffer variable can hold. 177 */ 178 #define BITBUF_NBITS (8 * sizeof(bitbuf_t)) 179 180 /* 181 * The maximum number of bits that can be requested to be in the bitbuffer 182 * variable. This is the maximum value of 'n' that can be passed 183 * ENSURE_BITS(n). 184 * 185 * This not equal to BITBUF_NBITS because we never read less than one byte at a 186 * time. If the bitbuffer variable contains more than (BITBUF_NBITS - 8) bits, 187 * then we can't read another byte without first consuming some bits. So the 188 * maximum count we can ensure is (BITBUF_NBITS - 7). 189 */ 190 #define MAX_ENSURE (BITBUF_NBITS - 7) 191 192 /* 193 * Evaluates to true if 'n' is a valid argument to ENSURE_BITS(n), or false if 194 * 'n' is too large to be passed to ENSURE_BITS(n). Note: if 'n' is a compile 195 * time constant, then this expression will be a compile-type constant. 196 * Therefore, CAN_ENSURE() can be used choose between alternative 197 * implementations at compile time. 198 */ 199 #define CAN_ENSURE(n) ((n) <= MAX_ENSURE) 200 201 /* 202 * Fill the bitbuffer variable, reading one byte at a time. 203 * 204 * If we would overread the input buffer, we just don't read anything, leaving 205 * the bits zeroed but marking them filled. This simplifies the decompressor 206 * because it removes the need to distinguish between real overreads and 207 * overreads that occur only because of the decompressor's own lookahead. 208 * 209 * The disadvantage is that real overreads are not detected immediately. 210 * However, this is safe because the decompressor is still guaranteed to make 211 * forward progress when presented never-ending 0 bits. In an existing block 212 * output will be getting generated, whereas new blocks can only be uncompressed 213 * (since the type code for uncompressed blocks is 0), for which we check for 214 * previous overread. But even if we didn't check, uncompressed blocks would 215 * fail to validate because LEN would not equal ~NLEN. So the decompressor will 216 * eventually either detect that the output buffer is full, or detect invalid 217 * input, or finish the final block. 218 */ 219 #define FILL_BITS_BYTEWISE() \ 220 do { \ 221 if (likely(in_next != in_end)) \ 222 bitbuf |= (bitbuf_t)*in_next++ << bitsleft; \ 223 else \ 224 overrun_count++; \ 225 bitsleft += 8; \ 226 } while (bitsleft <= BITBUF_NBITS - 8) 227 228 /* 229 * Fill the bitbuffer variable by reading the next word from the input buffer. 230 * This can be significantly faster than FILL_BITS_BYTEWISE(). However, for 231 * this to work correctly, the word must be interpreted in little-endian format. 232 * In addition, the memory access may be unaligned. Therefore, this method is 233 * most efficient on little-endian architectures that support fast unaligned 234 * access, such as x86 and x86_64. 235 */ 236 #define FILL_BITS_WORDWISE() \ 237 do { \ 238 bitbuf |= get_unaligned_leword(in_next) << bitsleft; \ 239 in_next += (BITBUF_NBITS - bitsleft) >> 3; \ 240 bitsleft += (BITBUF_NBITS - bitsleft) & ~7; \ 241 } while (0) 242 243 /* 244 * Does the bitbuffer variable currently contain at least 'n' bits? 245 */ 246 #define HAVE_BITS(n) (bitsleft >= (n)) 247 248 /* 249 * Load more bits from the input buffer until the specified number of bits is 250 * present in the bitbuffer variable. 'n' cannot be too large; see MAX_ENSURE 251 * and CAN_ENSURE(). 252 */ 253 #define ENSURE_BITS(n) \ 254 if (!HAVE_BITS(n)) { \ 255 if (CPU_IS_LITTLE_ENDIAN() && \ 256 UNALIGNED_ACCESS_IS_FAST && \ 257 likely(in_end - in_next >= sizeof(bitbuf_t))) \ 258 FILL_BITS_WORDWISE(); \ 259 else \ 260 FILL_BITS_BYTEWISE(); \ 261 } 262 263 /* 264 * Return the next 'n' bits from the bitbuffer variable without removing them. 265 */ 266 #define BITS(n) ((u32)bitbuf & (((u32)1 << (n)) - 1)) 267 268 /* 269 * Remove the next 'n' bits from the bitbuffer variable. 270 */ 271 #define REMOVE_BITS(n) (bitbuf >>= (n), bitsleft -= (n)) 272 273 /* 274 * Remove and return the next 'n' bits from the bitbuffer variable. 275 */ 276 #define POP_BITS(n) (tmp32 = BITS(n), REMOVE_BITS(n), tmp32) 277 278 /* 279 * Verify that the input buffer hasn't been overread, then align the input to 280 * the next byte boundary, discarding any remaining bits in the current byte. 281 * 282 * Note that if the bitbuffer variable currently contains more than 7 bits, then 283 * we must rewind 'in_next', effectively putting those bits back. Only the bits 284 * in what would be the "current" byte if we were reading one byte at a time can 285 * be actually discarded. 286 */ 287 #define ALIGN_INPUT() \ 288 do { \ 289 SAFETY_CHECK(overrun_count <= (bitsleft >> 3)); \ 290 in_next -= (bitsleft >> 3) - overrun_count; \ 291 overrun_count = 0; \ 292 bitbuf = 0; \ 293 bitsleft = 0; \ 294 } while(0) 295 296 /* 297 * Read a 16-bit value from the input. This must have been preceded by a call 298 * to ALIGN_INPUT(), and the caller must have already checked for overrun. 299 */ 300 #define READ_U16() (tmp16 = get_unaligned_le16(in_next), in_next += 2, tmp16) 301 302 /***************************************************************************** 303 * Huffman decoding * 304 *****************************************************************************/ 305 306 /* 307 * A decode table for order TABLEBITS consists of a main table of (1 << 308 * TABLEBITS) entries followed by a variable number of subtables. 309 * 310 * The decoding algorithm takes the next TABLEBITS bits of compressed data and 311 * uses them as an index into the decode table. The resulting entry is either a 312 * "direct entry", meaning that it contains the value desired, or a "subtable 313 * pointer", meaning that the entry references a subtable that must be indexed 314 * using more bits of the compressed data to decode the symbol. 315 * 316 * Each decode table (a main table along with with its subtables, if any) is 317 * associated with a Huffman code. Logically, the result of a decode table 318 * lookup is a symbol from the alphabet from which the corresponding Huffman 319 * code was constructed. A symbol with codeword length n <= TABLEBITS is 320 * associated with 2**(TABLEBITS - n) direct entries in the table, whereas a 321 * symbol with codeword length n > TABLEBITS is associated with one or more 322 * subtable entries. 323 * 324 * On top of this basic design, we implement several optimizations: 325 * 326 * - We store the length of each codeword directly in each of its decode table 327 * entries. This allows the codeword length to be produced without indexing 328 * an additional table. 329 * 330 * - When beneficial, we don't store the Huffman symbol itself, but instead data 331 * generated from it. For example, when decoding an offset symbol in DEFLATE, 332 * it's more efficient if we can decode the offset base and number of extra 333 * offset bits directly rather than decoding the offset symbol and then 334 * looking up both of those values in an additional table or tables. 335 * 336 * The size of each decode table entry is 32 bits, which provides slightly 337 * better performance than 16-bit entries on 32 and 64 bit processers, provided 338 * that the table doesn't get so large that it takes up too much memory and 339 * starts generating cache misses. The bits of each decode table entry are 340 * defined as follows: 341 * 342 * - Bits 30 -- 31: flags (see below) 343 * - Bits 8 -- 29: decode result: a Huffman symbol or related data 344 * - Bits 0 -- 7: codeword length 345 */ 346 347 /* 348 * This flag is set in all main decode table entries that represent subtable 349 * pointers. 350 */ 351 #define HUFFDEC_SUBTABLE_POINTER 0x80000000 352 353 /* 354 * This flag is set in all entries in the litlen decode table that represent 355 * literals. 356 */ 357 #define HUFFDEC_LITERAL 0x40000000 358 359 /* Mask for extracting the codeword length from a decode table entry. */ 360 #define HUFFDEC_LENGTH_MASK 0xFF 361 362 /* Shift to extract the decode result from a decode table entry. */ 363 #define HUFFDEC_RESULT_SHIFT 8 364 365 /* The decode result for each precode symbol. There is no special optimization 366 * for the precode; the decode result is simply the symbol value. */ 367 static const u32 precode_decode_results[DEFLATE_NUM_PRECODE_SYMS] = { 368 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 369 }; 370 371 /* The decode result for each litlen symbol. For literals, this is the literal 372 * value itself and the HUFFDEC_LITERAL flag. For lengths, this is the length 373 * base and the number of extra length bits. */ 374 static const u32 litlen_decode_results[DEFLATE_NUM_LITLEN_SYMS] = { 375 #define ENTRY(literal) ((HUFFDEC_LITERAL >> HUFFDEC_RESULT_SHIFT) | (literal)) 376 377 /* Literals */ 378 ENTRY(0) , ENTRY(1) , ENTRY(2) , ENTRY(3) , 379 ENTRY(4) , ENTRY(5) , ENTRY(6) , ENTRY(7) , 380 ENTRY(8) , ENTRY(9) , ENTRY(10) , ENTRY(11) , 381 ENTRY(12) , ENTRY(13) , ENTRY(14) , ENTRY(15) , 382 ENTRY(16) , ENTRY(17) , ENTRY(18) , ENTRY(19) , 383 ENTRY(20) , ENTRY(21) , ENTRY(22) , ENTRY(23) , 384 ENTRY(24) , ENTRY(25) , ENTRY(26) , ENTRY(27) , 385 ENTRY(28) , ENTRY(29) , ENTRY(30) , ENTRY(31) , 386 ENTRY(32) , ENTRY(33) , ENTRY(34) , ENTRY(35) , 387 ENTRY(36) , ENTRY(37) , ENTRY(38) , ENTRY(39) , 388 ENTRY(40) , ENTRY(41) , ENTRY(42) , ENTRY(43) , 389 ENTRY(44) , ENTRY(45) , ENTRY(46) , ENTRY(47) , 390 ENTRY(48) , ENTRY(49) , ENTRY(50) , ENTRY(51) , 391 ENTRY(52) , ENTRY(53) , ENTRY(54) , ENTRY(55) , 392 ENTRY(56) , ENTRY(57) , ENTRY(58) , ENTRY(59) , 393 ENTRY(60) , ENTRY(61) , ENTRY(62) , ENTRY(63) , 394 ENTRY(64) , ENTRY(65) , ENTRY(66) , ENTRY(67) , 395 ENTRY(68) , ENTRY(69) , ENTRY(70) , ENTRY(71) , 396 ENTRY(72) , ENTRY(73) , ENTRY(74) , ENTRY(75) , 397 ENTRY(76) , ENTRY(77) , ENTRY(78) , ENTRY(79) , 398 ENTRY(80) , ENTRY(81) , ENTRY(82) , ENTRY(83) , 399 ENTRY(84) , ENTRY(85) , ENTRY(86) , ENTRY(87) , 400 ENTRY(88) , ENTRY(89) , ENTRY(90) , ENTRY(91) , 401 ENTRY(92) , ENTRY(93) , ENTRY(94) , ENTRY(95) , 402 ENTRY(96) , ENTRY(97) , ENTRY(98) , ENTRY(99) , 403 ENTRY(100) , ENTRY(101) , ENTRY(102) , ENTRY(103) , 404 ENTRY(104) , ENTRY(105) , ENTRY(106) , ENTRY(107) , 405 ENTRY(108) , ENTRY(109) , ENTRY(110) , ENTRY(111) , 406 ENTRY(112) , ENTRY(113) , ENTRY(114) , ENTRY(115) , 407 ENTRY(116) , ENTRY(117) , ENTRY(118) , ENTRY(119) , 408 ENTRY(120) , ENTRY(121) , ENTRY(122) , ENTRY(123) , 409 ENTRY(124) , ENTRY(125) , ENTRY(126) , ENTRY(127) , 410 ENTRY(128) , ENTRY(129) , ENTRY(130) , ENTRY(131) , 411 ENTRY(132) , ENTRY(133) , ENTRY(134) , ENTRY(135) , 412 ENTRY(136) , ENTRY(137) , ENTRY(138) , ENTRY(139) , 413 ENTRY(140) , ENTRY(141) , ENTRY(142) , ENTRY(143) , 414 ENTRY(144) , ENTRY(145) , ENTRY(146) , ENTRY(147) , 415 ENTRY(148) , ENTRY(149) , ENTRY(150) , ENTRY(151) , 416 ENTRY(152) , ENTRY(153) , ENTRY(154) , ENTRY(155) , 417 ENTRY(156) , ENTRY(157) , ENTRY(158) , ENTRY(159) , 418 ENTRY(160) , ENTRY(161) , ENTRY(162) , ENTRY(163) , 419 ENTRY(164) , ENTRY(165) , ENTRY(166) , ENTRY(167) , 420 ENTRY(168) , ENTRY(169) , ENTRY(170) , ENTRY(171) , 421 ENTRY(172) , ENTRY(173) , ENTRY(174) , ENTRY(175) , 422 ENTRY(176) , ENTRY(177) , ENTRY(178) , ENTRY(179) , 423 ENTRY(180) , ENTRY(181) , ENTRY(182) , ENTRY(183) , 424 ENTRY(184) , ENTRY(185) , ENTRY(186) , ENTRY(187) , 425 ENTRY(188) , ENTRY(189) , ENTRY(190) , ENTRY(191) , 426 ENTRY(192) , ENTRY(193) , ENTRY(194) , ENTRY(195) , 427 ENTRY(196) , ENTRY(197) , ENTRY(198) , ENTRY(199) , 428 ENTRY(200) , ENTRY(201) , ENTRY(202) , ENTRY(203) , 429 ENTRY(204) , ENTRY(205) , ENTRY(206) , ENTRY(207) , 430 ENTRY(208) , ENTRY(209) , ENTRY(210) , ENTRY(211) , 431 ENTRY(212) , ENTRY(213) , ENTRY(214) , ENTRY(215) , 432 ENTRY(216) , ENTRY(217) , ENTRY(218) , ENTRY(219) , 433 ENTRY(220) , ENTRY(221) , ENTRY(222) , ENTRY(223) , 434 ENTRY(224) , ENTRY(225) , ENTRY(226) , ENTRY(227) , 435 ENTRY(228) , ENTRY(229) , ENTRY(230) , ENTRY(231) , 436 ENTRY(232) , ENTRY(233) , ENTRY(234) , ENTRY(235) , 437 ENTRY(236) , ENTRY(237) , ENTRY(238) , ENTRY(239) , 438 ENTRY(240) , ENTRY(241) , ENTRY(242) , ENTRY(243) , 439 ENTRY(244) , ENTRY(245) , ENTRY(246) , ENTRY(247) , 440 ENTRY(248) , ENTRY(249) , ENTRY(250) , ENTRY(251) , 441 ENTRY(252) , ENTRY(253) , ENTRY(254) , ENTRY(255) , 442 #undef ENTRY 443 444 #define HUFFDEC_EXTRA_LENGTH_BITS_MASK 0xFF 445 #define HUFFDEC_LENGTH_BASE_SHIFT 8 446 #define HUFFDEC_END_OF_BLOCK_LENGTH 0 447 448 #define ENTRY(length_base, num_extra_bits) \ 449 (((u32)(length_base) << HUFFDEC_LENGTH_BASE_SHIFT) | (num_extra_bits)) 450 451 /* End of block */ 452 ENTRY(HUFFDEC_END_OF_BLOCK_LENGTH, 0), 453 454 /* Lengths */ 455 ENTRY(3 , 0) , ENTRY(4 , 0) , ENTRY(5 , 0) , ENTRY(6 , 0), 456 ENTRY(7 , 0) , ENTRY(8 , 0) , ENTRY(9 , 0) , ENTRY(10 , 0), 457 ENTRY(11 , 1) , ENTRY(13 , 1) , ENTRY(15 , 1) , ENTRY(17 , 1), 458 ENTRY(19 , 2) , ENTRY(23 , 2) , ENTRY(27 , 2) , ENTRY(31 , 2), 459 ENTRY(35 , 3) , ENTRY(43 , 3) , ENTRY(51 , 3) , ENTRY(59 , 3), 460 ENTRY(67 , 4) , ENTRY(83 , 4) , ENTRY(99 , 4) , ENTRY(115, 4), 461 ENTRY(131, 5) , ENTRY(163, 5) , ENTRY(195, 5) , ENTRY(227, 5), 462 ENTRY(258, 0) , ENTRY(258, 0) , ENTRY(258, 0) , 463 #undef ENTRY 464 }; 465 466 /* The decode result for each offset symbol. This is the offset base and the 467 * number of extra offset bits. */ 468 static const u32 offset_decode_results[DEFLATE_NUM_OFFSET_SYMS] = { 469 470 #define HUFFDEC_EXTRA_OFFSET_BITS_SHIFT 16 471 #define HUFFDEC_OFFSET_BASE_MASK (((u32)1 << HUFFDEC_EXTRA_OFFSET_BITS_SHIFT) - 1) 472 473 #define ENTRY(offset_base, num_extra_bits) \ 474 ((offset_base) | ((u32)(num_extra_bits) << HUFFDEC_EXTRA_OFFSET_BITS_SHIFT)) 475 ENTRY(1 , 0) , ENTRY(2 , 0) , ENTRY(3 , 0) , ENTRY(4 , 0) , 476 ENTRY(5 , 1) , ENTRY(7 , 1) , ENTRY(9 , 2) , ENTRY(13 , 2) , 477 ENTRY(17 , 3) , ENTRY(25 , 3) , ENTRY(33 , 4) , ENTRY(49 , 4) , 478 ENTRY(65 , 5) , ENTRY(97 , 5) , ENTRY(129 , 6) , ENTRY(193 , 6) , 479 ENTRY(257 , 7) , ENTRY(385 , 7) , ENTRY(513 , 8) , ENTRY(769 , 8) , 480 ENTRY(1025 , 9) , ENTRY(1537 , 9) , ENTRY(2049 , 10) , ENTRY(3073 , 10) , 481 ENTRY(4097 , 11) , ENTRY(6145 , 11) , ENTRY(8193 , 12) , ENTRY(12289 , 12) , 482 ENTRY(16385 , 13) , ENTRY(24577 , 13) , ENTRY(32769 , 14) , ENTRY(49153 , 14) , 483 #undef ENTRY 484 }; 485 486 /* Construct a decode table entry from a decode result and codeword length. */ 487 static forceinline u32 488 make_decode_table_entry(u32 result, u32 length) 489 { 490 return (result << HUFFDEC_RESULT_SHIFT) | length; 491 } 492 493 /* 494 * Build a table for fast decoding of symbols from a Huffman code. As input, 495 * this function takes the codeword length of each symbol which may be used in 496 * the code. As output, it produces a decode table for the canonical Huffman 497 * code described by the codeword lengths. The decode table is built with the 498 * assumption that it will be indexed with "bit-reversed" codewords, where the 499 * low-order bit is the first bit of the codeword. This format is used for all 500 * Huffman codes in DEFLATE. 501 * 502 * @decode_table 503 * The array in which the decode table will be generated. This array must 504 * have sufficient length; see the definition of the ENOUGH numbers. 505 * @lens 506 * An array which provides, for each symbol, the length of the 507 * corresponding codeword in bits, or 0 if the symbol is unused. This may 508 * alias @decode_table, since nothing is written to @decode_table until all 509 * @lens have been consumed. All codeword lengths are assumed to be <= 510 * @max_codeword_len but are otherwise considered untrusted. If they do 511 * not form a valid Huffman code, then the decode table is not built and 512 * %false is returned. 513 * @num_syms 514 * The number of symbols in the code, including all unused symbols. 515 * @decode_results 516 * An array which provides, for each symbol, the actual value to store into 517 * the decode table. This value will be directly produced as the result of 518 * decoding that symbol, thereby moving the indirection out of the decode 519 * loop and into the table initialization. 520 * @table_bits 521 * The log base-2 of the number of main table entries to use. 522 * @max_codeword_len 523 * The maximum allowed codeword length for this Huffman code. 524 * @working_space 525 * A temporary array of length '2 * (@max_codeword_len + 1) + @num_syms'. 526 * 527 * Returns %true if successful; %false if the codeword lengths do not form a 528 * valid Huffman code. 529 */ 530 static bool 531 build_decode_table(u32 decode_table[], 532 const len_t lens[], 533 const unsigned num_syms, 534 const u32 decode_results[], 535 const unsigned table_bits, 536 const unsigned max_codeword_len, 537 u16 working_space[]) 538 { 539 u16 * const len_counts = &working_space[0]; 540 u16 * const offsets = &working_space[1 * (max_codeword_len + 1)]; 541 u16 * const sorted_syms = &working_space[2 * (max_codeword_len + 1)]; 542 unsigned len; 543 unsigned sym; 544 s32 remainder; 545 unsigned sym_idx; 546 unsigned codeword_len; 547 unsigned codeword_reversed = 0; 548 unsigned cur_codeword_prefix = -1; 549 unsigned cur_table_start = 0; 550 unsigned cur_table_bits = table_bits; 551 unsigned num_dropped_bits = 0; 552 const unsigned table_mask = (1U << table_bits) - 1; 553 554 /* Count how many symbols have each codeword length, including 0. */ 555 for (len = 0; len <= max_codeword_len; len++) 556 len_counts[len] = 0; 557 for (sym = 0; sym < num_syms; sym++) 558 len_counts[lens[sym]]++; 559 560 /* Sort the symbols primarily by increasing codeword length and 561 * secondarily by increasing symbol value. */ 562 563 /* Initialize 'offsets' so that offsets[len] is the number of codewords 564 * shorter than 'len' bits, including length 0. */ 565 offsets[0] = 0; 566 for (len = 0; len < max_codeword_len; len++) 567 offsets[len + 1] = offsets[len] + len_counts[len]; 568 569 /* Use the 'offsets' array to sort the symbols. */ 570 for (sym = 0; sym < num_syms; sym++) 571 sorted_syms[offsets[lens[sym]]++] = sym; 572 573 /* It is already guaranteed that all lengths are <= max_codeword_len, 574 * but it cannot be assumed they form a complete prefix code. A 575 * codeword of length n should require a proportion of the codespace 576 * equaling (1/2)^n. The code is complete if and only if, by this 577 * measure, the codespace is exactly filled by the lengths. */ 578 remainder = 1; 579 for (len = 1; len <= max_codeword_len; len++) { 580 remainder <<= 1; 581 remainder -= len_counts[len]; 582 if (unlikely(remainder < 0)) { 583 /* The lengths overflow the codespace; that is, the code 584 * is over-subscribed. */ 585 return false; 586 } 587 } 588 589 if (unlikely(remainder != 0)) { 590 /* The lengths do not fill the codespace; that is, they form an 591 * incomplete code. */ 592 593 /* Initialize the table entries to default values. When 594 * decompressing a well-formed stream, these default values will 595 * never be used. But since a malformed stream might contain 596 * any bits at all, these entries need to be set anyway. */ 597 u32 entry = make_decode_table_entry(decode_results[0], 1); 598 for (sym = 0; sym < (1U << table_bits); sym++) 599 decode_table[sym] = entry; 600 601 /* A completely empty code is permitted. */ 602 if (remainder == (1U << max_codeword_len)) 603 return true; 604 605 /* The code is nonempty and incomplete. Proceed only if there 606 * is a single used symbol and its codeword has length 1. The 607 * DEFLATE RFC is somewhat unclear regarding this case. What 608 * zlib's decompressor does is permit this case for 609 * literal/length and offset codes and assume the codeword is 0 610 * rather than 1. We do the same except we allow this case for 611 * precodes too. */ 612 if (remainder != (1U << (max_codeword_len - 1)) || 613 len_counts[1] != 1) 614 return false; 615 } 616 617 /* Generate the decode table entries. Since we process codewords from 618 * shortest to longest, the main portion of the decode table is filled 619 * first; then the subtables are filled. Note that it's already been 620 * verified that the code is nonempty and not over-subscribed. */ 621 622 /* Start with the smallest codeword length and the smallest-valued 623 * symbol which has that codeword length. */ 624 sym_idx = offsets[0]; 625 codeword_len = 1; 626 while (len_counts[codeword_len] == 0) 627 codeword_len++; 628 629 for (;;) { /* For each used symbol and its codeword... */ 630 unsigned sym; 631 u32 entry; 632 unsigned i; 633 unsigned end; 634 unsigned increment; 635 unsigned bit; 636 637 /* Get the next symbol. */ 638 sym = sorted_syms[sym_idx]; 639 640 /* Start a new subtable if the codeword is long enough to 641 * require a subtable, *and* the first 'table_bits' bits of the 642 * codeword don't match the prefix for the previous subtable if 643 * any. */ 644 if (codeword_len > table_bits && 645 (codeword_reversed & table_mask) != cur_codeword_prefix) { 646 647 cur_codeword_prefix = (codeword_reversed & table_mask); 648 649 cur_table_start += 1U << cur_table_bits; 650 651 /* Calculate the subtable length. If the codeword 652 * length exceeds 'table_bits' by n, the subtable needs 653 * at least 2**n entries. But it may need more; if 654 * there are fewer than 2**n codewords of length 655 * 'table_bits + n' remaining, then n will need to be 656 * incremented to bring in longer codewords until the 657 * subtable can be filled completely. Note that it 658 * always will, eventually, be possible to fill the 659 * subtable, since the only case where we may have an 660 * incomplete code is a single codeword of length 1, 661 * and that never requires any subtables. */ 662 cur_table_bits = codeword_len - table_bits; 663 remainder = (s32)1 << cur_table_bits; 664 for (;;) { 665 remainder -= len_counts[table_bits + 666 cur_table_bits]; 667 if (remainder <= 0) 668 break; 669 cur_table_bits++; 670 remainder <<= 1; 671 } 672 673 /* Create the entry that points from the main table to 674 * the subtable. This entry contains the index of the 675 * start of the subtable and the number of bits with 676 * which the subtable is indexed (the log base 2 of the 677 * number of entries it contains). */ 678 decode_table[cur_codeword_prefix] = 679 HUFFDEC_SUBTABLE_POINTER | 680 make_decode_table_entry(cur_table_start, 681 cur_table_bits); 682 683 /* Now that we're filling a subtable, we need to drop 684 * the first 'table_bits' bits of the codewords. */ 685 num_dropped_bits = table_bits; 686 } 687 688 /* Create the decode table entry, which packs the decode result 689 * and the codeword length (minus 'table_bits' for subtables) 690 * together. */ 691 entry = make_decode_table_entry(decode_results[sym], 692 codeword_len - num_dropped_bits); 693 694 /* Fill in as many copies of the decode table entry as are 695 * needed. The number of entries to fill is a power of 2 and 696 * depends on the codeword length; it could be as few as 1 or as 697 * large as half the size of the table. Since the codewords are 698 * bit-reversed, the indices to fill are those with the codeword 699 * in its low bits; it's the high bits that vary. */ 700 i = cur_table_start + (codeword_reversed >> num_dropped_bits); 701 end = cur_table_start + (1U << cur_table_bits); 702 increment = 1U << (codeword_len - num_dropped_bits); 703 do { 704 decode_table[i] = entry; 705 i += increment; 706 } while (i < end); 707 708 /* Advance to the next codeword by incrementing it. But since 709 * our codewords are bit-reversed, we must manipulate the bits 710 * ourselves rather than simply adding 1. */ 711 bit = 1U << (codeword_len - 1); 712 while (codeword_reversed & bit) 713 bit >>= 1; 714 codeword_reversed &= bit - 1; 715 codeword_reversed |= bit; 716 717 /* Advance to the next symbol. This will either increase the 718 * codeword length, or keep the same codeword length but 719 * increase the symbol value. Note: since we are using 720 * bit-reversed codewords, we don't need to explicitly append 721 * zeroes to the codeword when the codeword length increases. */ 722 if (++sym_idx == num_syms) 723 return true; 724 len_counts[codeword_len]--; 725 while (len_counts[codeword_len] == 0) 726 codeword_len++; 727 } 728 } 729 730 /* Build the decode table for the precode. */ 731 static bool 732 build_precode_decode_table(struct libdeflate_decompressor *d) 733 { 734 /* When you change TABLEBITS, you must change ENOUGH, and vice versa! */ 735 STATIC_ASSERT(PRECODE_TABLEBITS == 7 && PRECODE_ENOUGH == 128); 736 737 return build_decode_table(d->u.l.precode_decode_table, 738 d->u.precode_lens, 739 DEFLATE_NUM_PRECODE_SYMS, 740 precode_decode_results, 741 PRECODE_TABLEBITS, 742 DEFLATE_MAX_PRE_CODEWORD_LEN, 743 d->working_space); 744 } 745 746 /* Build the decode table for the literal/length code. */ 747 static bool 748 build_litlen_decode_table(struct libdeflate_decompressor *d, 749 unsigned num_litlen_syms, unsigned num_offset_syms) 750 { 751 /* When you change TABLEBITS, you must change ENOUGH, and vice versa! */ 752 STATIC_ASSERT(LITLEN_TABLEBITS == 10 && LITLEN_ENOUGH == 1334); 753 754 return build_decode_table(d->u.litlen_decode_table, 755 d->u.l.lens, 756 num_litlen_syms, 757 litlen_decode_results, 758 LITLEN_TABLEBITS, 759 DEFLATE_MAX_LITLEN_CODEWORD_LEN, 760 d->working_space); 761 } 762 763 /* Build the decode table for the offset code. */ 764 static bool 765 build_offset_decode_table(struct libdeflate_decompressor *d, 766 unsigned num_litlen_syms, unsigned num_offset_syms) 767 { 768 /* When you change TABLEBITS, you must change ENOUGH, and vice versa! */ 769 STATIC_ASSERT(OFFSET_TABLEBITS == 8 && OFFSET_ENOUGH == 402); 770 771 return build_decode_table(d->offset_decode_table, 772 d->u.l.lens + num_litlen_syms, 773 num_offset_syms, 774 offset_decode_results, 775 OFFSET_TABLEBITS, 776 DEFLATE_MAX_OFFSET_CODEWORD_LEN, 777 d->working_space); 778 } 779 780 static forceinline machine_word_t 781 repeat_byte(u8 b) 782 { 783 machine_word_t v; 784 785 STATIC_ASSERT(WORDBITS == 32 || WORDBITS == 64); 786 787 v = b; 788 v |= v << 8; 789 v |= v << 16; 790 v |= v << ((WORDBITS == 64) ? 32 : 0); 791 return v; 792 } 793 794 static forceinline void 795 copy_word_unaligned(const void *src, void *dst) 796 { 797 store_word_unaligned(load_word_unaligned(src), dst); 798 } 799 800 /***************************************************************************** 801 * Main decompression routine 802 *****************************************************************************/ 803 804 typedef enum libdeflate_result (*decompress_func_t) 805 (struct libdeflate_decompressor * restrict d, 806 const void * restrict in, size_t in_nbytes, 807 void * restrict out, size_t out_nbytes_avail, 808 size_t *actual_in_nbytes_ret, size_t *actual_out_nbytes_ret); 809 810 #undef DEFAULT_IMPL 811 #undef DISPATCH 812 #if defined(__i386__) || defined(__x86_64__) 813 # include "decompress_impl.h" 814 #endif 815 816 #ifndef DEFAULT_IMPL 817 # define FUNCNAME deflate_decompress_default 818 # define ATTRIBUTES 819 # include "decompress_template.h" 820 # define DEFAULT_IMPL deflate_decompress_default 821 #endif 822 823 #ifdef DISPATCH 824 static enum libdeflate_result 825 dispatch(struct libdeflate_decompressor * restrict d, 826 const void * restrict in, size_t in_nbytes, 827 void * restrict out, size_t out_nbytes_avail, 828 size_t *actual_in_nbytes_ret, size_t *actual_out_nbytes_ret); 829 830 static volatile decompress_func_t decompress_impl = dispatch; 831 832 /* Choose the fastest implementation at runtime */ 833 static enum libdeflate_result 834 dispatch(struct libdeflate_decompressor * restrict d, 835 const void * restrict in, size_t in_nbytes, 836 void * restrict out, size_t out_nbytes_avail, 837 size_t *actual_in_nbytes_ret, size_t *actual_out_nbytes_ret) 838 { 839 decompress_func_t f = arch_select_decompress_func(); 840 841 if (f == NULL) 842 f = DEFAULT_IMPL; 843 844 decompress_impl = f; 845 return (*f)(d, in, in_nbytes, out, out_nbytes_avail, 846 actual_in_nbytes_ret, actual_out_nbytes_ret); 847 } 848 #else 849 # define decompress_impl DEFAULT_IMPL /* only one implementation, use it */ 850 #endif 851 852 853 /* 854 * This is the main DEFLATE decompression routine. See libdeflate.h for the 855 * documentation. 856 * 857 * Note that the real code is in decompress_template.h. The part here just 858 * handles calling the appropriate implementation depending on the CPU features 859 * at runtime. 860 */ 861 LIBDEFLATEAPI enum libdeflate_result 862 libdeflate_deflate_decompress_ex(struct libdeflate_decompressor * restrict d, 863 const void * restrict in, size_t in_nbytes, 864 void * restrict out, size_t out_nbytes_avail, 865 size_t *actual_in_nbytes_ret, 866 size_t *actual_out_nbytes_ret) 867 { 868 return decompress_impl(d, in, in_nbytes, out, out_nbytes_avail, 869 actual_in_nbytes_ret, actual_out_nbytes_ret); 870 } 871 872 LIBDEFLATEAPI enum libdeflate_result 873 libdeflate_deflate_decompress(struct libdeflate_decompressor * restrict d, 874 const void * restrict in, size_t in_nbytes, 875 void * restrict out, size_t out_nbytes_avail, 876 size_t *actual_out_nbytes_ret) 877 { 878 return libdeflate_deflate_decompress_ex(d, in, in_nbytes, 879 out, out_nbytes_avail, 880 NULL, actual_out_nbytes_ret); 881 } 882 883 LIBDEFLATEAPI struct libdeflate_decompressor * 884 libdeflate_alloc_decompressor(void) 885 { 886 return malloc(sizeof(struct libdeflate_decompressor)); 887 } 888 889 LIBDEFLATEAPI void 890 libdeflate_free_decompressor(struct libdeflate_decompressor *d) 891 { 892 free(d); 893 }