1 /////////////////////////////////////////////////////////////////////////////// 2 // 3 /// \file lzma_decoder.c 4 /// \brief LZMA decoder 5 /// 6 // Authors: Igor Pavlov 7 // Lasse Collin 8 // 9 // This file has been put into the public domain. 10 // You can do whatever you want with this file. 11 // 12 /////////////////////////////////////////////////////////////////////////////// 13 14 #include "lz_decoder.h" 15 #include "lzma_common.h" 16 #include "lzma_decoder.h" 17 #include "range_decoder.h" 18 19 20 #ifdef HAVE_SMALL 21 22 // Macros for (somewhat) size-optimized code. 23 #define seq_4(seq) seq 24 25 #define seq_6(seq) seq 26 27 #define seq_8(seq) seq 28 29 #define seq_len(seq) \ 30 seq ## _CHOICE, \ 31 seq ## _CHOICE2, \ 32 seq ## _BITTREE 33 34 #define len_decode(target, ld, pos_state, seq) \ 35 do { \ 36 case seq ## _CHOICE: \ 37 rc_if_0(ld.choice, seq ## _CHOICE) { \ 38 rc_update_0(ld.choice); \ 39 probs = ld.low[pos_state];\ 40 limit = LEN_LOW_SYMBOLS; \ 41 target = MATCH_LEN_MIN; \ 42 } else { \ 43 rc_update_1(ld.choice); \ 44 case seq ## _CHOICE2: \ 45 rc_if_0(ld.choice2, seq ## _CHOICE2) { \ 46 rc_update_0(ld.choice2); \ 47 probs = ld.mid[pos_state]; \ 48 limit = LEN_MID_SYMBOLS; \ 49 target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ 50 } else { \ 51 rc_update_1(ld.choice2); \ 52 probs = ld.high; \ 53 limit = LEN_HIGH_SYMBOLS; \ 54 target = MATCH_LEN_MIN + LEN_LOW_SYMBOLS \ 55 + LEN_MID_SYMBOLS; \ 56 } \ 57 } \ 58 symbol = 1; \ 59 case seq ## _BITTREE: \ 60 do { \ 61 rc_bit(probs[symbol], , , seq ## _BITTREE); \ 62 } while (symbol < limit); \ 63 target += symbol - limit; \ 64 } while (0) 65 66 #else // HAVE_SMALL 67 68 // Unrolled versions 69 #define seq_4(seq) \ 70 seq ## 0, \ 71 seq ## 1, \ 72 seq ## 2, \ 73 seq ## 3 74 75 #define seq_6(seq) \ 76 seq ## 0, \ 77 seq ## 1, \ 78 seq ## 2, \ 79 seq ## 3, \ 80 seq ## 4, \ 81 seq ## 5 82 83 #define seq_8(seq) \ 84 seq ## 0, \ 85 seq ## 1, \ 86 seq ## 2, \ 87 seq ## 3, \ 88 seq ## 4, \ 89 seq ## 5, \ 90 seq ## 6, \ 91 seq ## 7 92 93 #define seq_len(seq) \ 94 seq ## _CHOICE, \ 95 seq ## _LOW0, \ 96 seq ## _LOW1, \ 97 seq ## _LOW2, \ 98 seq ## _CHOICE2, \ 99 seq ## _MID0, \ 100 seq ## _MID1, \ 101 seq ## _MID2, \ 102 seq ## _HIGH0, \ 103 seq ## _HIGH1, \ 104 seq ## _HIGH2, \ 105 seq ## _HIGH3, \ 106 seq ## _HIGH4, \ 107 seq ## _HIGH5, \ 108 seq ## _HIGH6, \ 109 seq ## _HIGH7 110 111 #define len_decode(target, ld, pos_state, seq) \ 112 do { \ 113 symbol = 1; \ 114 case seq ## _CHOICE: \ 115 rc_if_0(ld.choice, seq ## _CHOICE) { \ 116 rc_update_0(ld.choice); \ 117 rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW0); \ 118 rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW1); \ 119 rc_bit_case(ld.low[pos_state][symbol], , , seq ## _LOW2); \ 120 target = symbol - LEN_LOW_SYMBOLS + MATCH_LEN_MIN; \ 121 } else { \ 122 rc_update_1(ld.choice); \ 123 case seq ## _CHOICE2: \ 124 rc_if_0(ld.choice2, seq ## _CHOICE2) { \ 125 rc_update_0(ld.choice2); \ 126 rc_bit_case(ld.mid[pos_state][symbol], , , \ 127 seq ## _MID0); \ 128 rc_bit_case(ld.mid[pos_state][symbol], , , \ 129 seq ## _MID1); \ 130 rc_bit_case(ld.mid[pos_state][symbol], , , \ 131 seq ## _MID2); \ 132 target = symbol - LEN_MID_SYMBOLS \ 133 + MATCH_LEN_MIN + LEN_LOW_SYMBOLS; \ 134 } else { \ 135 rc_update_1(ld.choice2); \ 136 rc_bit_case(ld.high[symbol], , , seq ## _HIGH0); \ 137 rc_bit_case(ld.high[symbol], , , seq ## _HIGH1); \ 138 rc_bit_case(ld.high[symbol], , , seq ## _HIGH2); \ 139 rc_bit_case(ld.high[symbol], , , seq ## _HIGH3); \ 140 rc_bit_case(ld.high[symbol], , , seq ## _HIGH4); \ 141 rc_bit_case(ld.high[symbol], , , seq ## _HIGH5); \ 142 rc_bit_case(ld.high[symbol], , , seq ## _HIGH6); \ 143 rc_bit_case(ld.high[symbol], , , seq ## _HIGH7); \ 144 target = symbol - LEN_HIGH_SYMBOLS \ 145 + MATCH_LEN_MIN \ 146 + LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; \ 147 } \ 148 } \ 149 } while (0) 150 151 #endif // HAVE_SMALL 152 153 154 /// Length decoder probabilities; see comments in lzma_common.h. 155 typedef struct { 156 probability choice; 157 probability choice2; 158 probability low[POS_STATES_MAX][LEN_LOW_SYMBOLS]; 159 probability mid[POS_STATES_MAX][LEN_MID_SYMBOLS]; 160 probability high[LEN_HIGH_SYMBOLS]; 161 } lzma_length_decoder; 162 163 164 struct lzma_coder_s { 165 /////////////////// 166 // Probabilities // 167 /////////////////// 168 169 /// Literals; see comments in lzma_common.h. 170 probability literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; 171 172 /// If 1, it's a match. Otherwise it's a single 8-bit literal. 173 probability is_match[STATES][POS_STATES_MAX]; 174 175 /// If 1, it's a repeated match. The distance is one of rep0 .. rep3. 176 probability is_rep[STATES]; 177 178 /// If 0, distance of a repeated match is rep0. 179 /// Otherwise check is_rep1. 180 probability is_rep0[STATES]; 181 182 /// If 0, distance of a repeated match is rep1. 183 /// Otherwise check is_rep2. 184 probability is_rep1[STATES]; 185 186 /// If 0, distance of a repeated match is rep2. Otherwise it is rep3. 187 probability is_rep2[STATES]; 188 189 /// If 1, the repeated match has length of one byte. Otherwise 190 /// the length is decoded from rep_len_decoder. 191 probability is_rep0_long[STATES][POS_STATES_MAX]; 192 193 /// Probability tree for the highest two bits of the match distance. 194 /// There is a separate probability tree for match lengths of 195 /// 2 (i.e. MATCH_LEN_MIN), 3, 4, and [5, 273]. 196 probability pos_slot[LEN_TO_POS_STATES][POS_SLOTS]; 197 198 /// Probability trees for additional bits for match distance when the 199 /// distance is in the range [4, 127]. 200 probability pos_special[FULL_DISTANCES - END_POS_MODEL_INDEX]; 201 202 /// Probability tree for the lowest four bits of a match distance 203 /// that is equal to or greater than 128. 204 probability pos_align[ALIGN_TABLE_SIZE]; 205 206 /// Length of a normal match 207 lzma_length_decoder match_len_decoder; 208 209 /// Length of a repeated match 210 lzma_length_decoder rep_len_decoder; 211 212 /////////////////// 213 // Decoder state // 214 /////////////////// 215 216 // Range coder 217 lzma_range_decoder rc; 218 219 // Types of the most recently seen LZMA symbols 220 lzma_lzma_state state; 221 222 uint32_t rep0; ///< Distance of the latest match 223 uint32_t rep1; ///< Distance of second latest match 224 uint32_t rep2; ///< Distance of third latest match 225 uint32_t rep3; ///< Distance of fourth latest match 226 227 uint32_t pos_mask; // (1U << pb) - 1 228 uint32_t literal_context_bits; 229 uint32_t literal_pos_mask; 230 231 /// Uncompressed size as bytes, or LZMA_VLI_UNKNOWN if end of 232 /// payload marker is expected. 233 lzma_vli uncompressed_size; 234 235 //////////////////////////////// 236 // State of incomplete symbol // 237 //////////////////////////////// 238 239 /// Position where to continue the decoder loop 240 enum { 241 SEQ_NORMALIZE, 242 SEQ_IS_MATCH, 243 seq_8(SEQ_LITERAL), 244 seq_8(SEQ_LITERAL_MATCHED), 245 SEQ_LITERAL_WRITE, 246 SEQ_IS_REP, 247 seq_len(SEQ_MATCH_LEN), 248 seq_6(SEQ_POS_SLOT), 249 SEQ_POS_MODEL, 250 SEQ_DIRECT, 251 seq_4(SEQ_ALIGN), 252 SEQ_EOPM, 253 SEQ_IS_REP0, 254 SEQ_SHORTREP, 255 SEQ_IS_REP0_LONG, 256 SEQ_IS_REP1, 257 SEQ_IS_REP2, 258 seq_len(SEQ_REP_LEN), 259 SEQ_COPY, 260 } sequence; 261 262 /// Base of the current probability tree 263 probability *probs; 264 265 /// Symbol being decoded. This is also used as an index variable in 266 /// bittree decoders: probs[symbol] 267 uint32_t symbol; 268 269 /// Used as a loop termination condition on bittree decoders and 270 /// direct bits decoder. 271 uint32_t limit; 272 273 /// Matched literal decoder: 0x100 or 0 to help avoiding branches. 274 /// Bittree reverse decoders: Offset of the next bit: 1 << offset 275 uint32_t offset; 276 277 /// If decoding a literal: match byte. 278 /// If decoding a match: length of the match. 279 uint32_t len; 280 }; 281 282 283 static lzma_ret 284 lzma_decode(lzma_coder *restrict coder, lzma_dict *restrict dictptr, 285 const uint8_t *restrict in, 286 size_t *restrict in_pos, size_t in_size) 287 { 288 //////////////////// 289 // Initialization // 290 //////////////////// 291 292 if (!rc_read_init(&coder->rc, in, in_pos, in_size)) 293 return LZMA_OK; 294 295 /////////////// 296 // Variables // 297 /////////////// 298 299 // Making local copies of often-used variables improves both 300 // speed and readability. 301 302 lzma_dict dict = *dictptr; 303 304 const size_t dict_start = dict.pos; 305 306 // Range decoder 307 rc_to_local(coder->rc, *in_pos); 308 309 // State 310 uint32_t state = coder->state; 311 uint32_t rep0 = coder->rep0; 312 uint32_t rep1 = coder->rep1; 313 uint32_t rep2 = coder->rep2; 314 uint32_t rep3 = coder->rep3; 315 316 const uint32_t pos_mask = coder->pos_mask; 317 318 // These variables are actually needed only if we last time ran 319 // out of input in the middle of the decoder loop. 320 probability *probs = coder->probs; 321 uint32_t symbol = coder->symbol; 322 uint32_t limit = coder->limit; 323 uint32_t offset = coder->offset; 324 uint32_t len = coder->len; 325 326 const uint32_t literal_pos_mask = coder->literal_pos_mask; 327 const uint32_t literal_context_bits = coder->literal_context_bits; 328 329 // Temporary variables 330 uint32_t pos_state = dict.pos & pos_mask; 331 332 lzma_ret ret = LZMA_OK; 333 334 // If uncompressed size is known, there must be no end of payload 335 // marker. 336 const bool no_eopm = coder->uncompressed_size 337 != LZMA_VLI_UNKNOWN; 338 if (no_eopm && coder->uncompressed_size < dict.limit - dict.pos) 339 dict.limit = dict.pos + (size_t)(coder->uncompressed_size); 340 341 // The main decoder loop. The "switch" is used to restart the decoder at 342 // correct location. Once restarted, the "switch" is no longer used. 343 switch (coder->sequence) 344 while (true) { 345 // Calculate new pos_state. This is skipped on the first loop 346 // since we already calculated it when setting up the local 347 // variables. 348 pos_state = dict.pos & pos_mask; 349 350 case SEQ_NORMALIZE: 351 case SEQ_IS_MATCH: 352 if (unlikely(no_eopm && dict.pos == dict.limit)) 353 break; 354 355 rc_if_0(coder->is_match[state][pos_state], SEQ_IS_MATCH) { 356 rc_update_0(coder->is_match[state][pos_state]); 357 358 // It's a literal i.e. a single 8-bit byte. 359 360 probs = literal_subcoder(coder->literal, 361 literal_context_bits, literal_pos_mask, 362 dict.pos, dict_get(&dict, 0)); 363 symbol = 1; 364 365 if (is_literal_state(state)) { 366 // Decode literal without match byte. 367 #ifdef HAVE_SMALL 368 case SEQ_LITERAL: 369 do { 370 rc_bit(probs[symbol], , , SEQ_LITERAL); 371 } while (symbol < (1 << 8)); 372 #else 373 rc_bit_case(probs[symbol], , , SEQ_LITERAL0); 374 rc_bit_case(probs[symbol], , , SEQ_LITERAL1); 375 rc_bit_case(probs[symbol], , , SEQ_LITERAL2); 376 rc_bit_case(probs[symbol], , , SEQ_LITERAL3); 377 rc_bit_case(probs[symbol], , , SEQ_LITERAL4); 378 rc_bit_case(probs[symbol], , , SEQ_LITERAL5); 379 rc_bit_case(probs[symbol], , , SEQ_LITERAL6); 380 rc_bit_case(probs[symbol], , , SEQ_LITERAL7); 381 #endif 382 } else { 383 // Decode literal with match byte. 384 // 385 // We store the byte we compare against 386 // ("match byte") to "len" to minimize the 387 // number of variables we need to store 388 // between decoder calls. 389 len = dict_get(&dict, rep0) << 1; 390 391 // The usage of "offset" allows omitting some 392 // branches, which should give tiny speed 393 // improvement on some CPUs. "offset" gets 394 // set to zero if match_bit didn't match. 395 offset = 0x100; 396 397 #ifdef HAVE_SMALL 398 case SEQ_LITERAL_MATCHED: 399 do { 400 const uint32_t match_bit 401 = len & offset; 402 const uint32_t subcoder_index 403 = offset + match_bit 404 + symbol; 405 406 rc_bit(probs[subcoder_index], 407 offset &= ~match_bit, 408 offset &= match_bit, 409 SEQ_LITERAL_MATCHED); 410 411 // It seems to be faster to do this 412 // here instead of putting it to the 413 // beginning of the loop and then 414 // putting the "case" in the middle 415 // of the loop. 416 len <<= 1; 417 418 } while (symbol < (1 << 8)); 419 #else 420 // Unroll the loop. 421 uint32_t match_bit; 422 uint32_t subcoder_index; 423 424 # define d(seq) \ 425 case seq: \ 426 match_bit = len & offset; \ 427 subcoder_index = offset + match_bit + symbol; \ 428 rc_bit(probs[subcoder_index], \ 429 offset &= ~match_bit, \ 430 offset &= match_bit, \ 431 seq) 432 433 d(SEQ_LITERAL_MATCHED0); 434 len <<= 1; 435 d(SEQ_LITERAL_MATCHED1); 436 len <<= 1; 437 d(SEQ_LITERAL_MATCHED2); 438 len <<= 1; 439 d(SEQ_LITERAL_MATCHED3); 440 len <<= 1; 441 d(SEQ_LITERAL_MATCHED4); 442 len <<= 1; 443 d(SEQ_LITERAL_MATCHED5); 444 len <<= 1; 445 d(SEQ_LITERAL_MATCHED6); 446 len <<= 1; 447 d(SEQ_LITERAL_MATCHED7); 448 # undef d 449 #endif 450 } 451 452 //update_literal(state); 453 // Use a lookup table to update to literal state, 454 // since compared to other state updates, this would 455 // need two branches. 456 static const lzma_lzma_state next_state[] = { 457 STATE_LIT_LIT, 458 STATE_LIT_LIT, 459 STATE_LIT_LIT, 460 STATE_LIT_LIT, 461 STATE_MATCH_LIT_LIT, 462 STATE_REP_LIT_LIT, 463 STATE_SHORTREP_LIT_LIT, 464 STATE_MATCH_LIT, 465 STATE_REP_LIT, 466 STATE_SHORTREP_LIT, 467 STATE_MATCH_LIT, 468 STATE_REP_LIT 469 }; 470 state = next_state[state]; 471 472 case SEQ_LITERAL_WRITE: 473 if (unlikely(dict_put(&dict, symbol))) { 474 coder->sequence = SEQ_LITERAL_WRITE; 475 goto out; 476 } 477 478 continue; 479 } 480 481 // Instead of a new byte we are going to get a byte range 482 // (distance and length) which will be repeated from our 483 // output history. 484 485 rc_update_1(coder->is_match[state][pos_state]); 486 487 case SEQ_IS_REP: 488 rc_if_0(coder->is_rep[state], SEQ_IS_REP) { 489 // Not a repeated match 490 rc_update_0(coder->is_rep[state]); 491 update_match(state); 492 493 // The latest three match distances are kept in 494 // memory in case there are repeated matches. 495 rep3 = rep2; 496 rep2 = rep1; 497 rep1 = rep0; 498 499 // Decode the length of the match. 500 len_decode(len, coder->match_len_decoder, 501 pos_state, SEQ_MATCH_LEN); 502 503 // Prepare to decode the highest two bits of the 504 // match distance. 505 probs = coder->pos_slot[get_len_to_pos_state(len)]; 506 symbol = 1; 507 508 #ifdef HAVE_SMALL 509 case SEQ_POS_SLOT: 510 do { 511 rc_bit(probs[symbol], , , SEQ_POS_SLOT); 512 } while (symbol < POS_SLOTS); 513 #else 514 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT0); 515 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT1); 516 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT2); 517 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT3); 518 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT4); 519 rc_bit_case(probs[symbol], , , SEQ_POS_SLOT5); 520 #endif 521 // Get rid of the highest bit that was needed for 522 // indexing of the probability array. 523 symbol -= POS_SLOTS; 524 assert(symbol <= 63); 525 526 if (symbol < START_POS_MODEL_INDEX) { 527 // Match distances [0, 3] have only two bits. 528 rep0 = symbol; 529 } else { 530 // Decode the lowest [1, 29] bits of 531 // the match distance. 532 limit = (symbol >> 1) - 1; 533 assert(limit >= 1 && limit <= 30); 534 rep0 = 2 + (symbol & 1); 535 536 if (symbol < END_POS_MODEL_INDEX) { 537 // Prepare to decode the low bits for 538 // a distance of [4, 127]. 539 assert(limit <= 5); 540 rep0 <<= limit; 541 assert(rep0 <= 96); 542 // -1 is fine, because we start 543 // decoding at probs[1], not probs[0]. 544 // NOTE: This violates the C standard, 545 // since we are doing pointer 546 // arithmetic past the beginning of 547 // the array. 548 assert((int32_t)(rep0 - symbol - 1) 549 >= -1); 550 assert((int32_t)(rep0 - symbol - 1) 551 <= 82); 552 probs = coder->pos_special + rep0 553 - symbol - 1; 554 symbol = 1; 555 offset = 0; 556 case SEQ_POS_MODEL: 557 #ifdef HAVE_SMALL 558 do { 559 rc_bit(probs[symbol], , 560 rep0 += 1 << offset, 561 SEQ_POS_MODEL); 562 } while (++offset < limit); 563 #else 564 switch (limit) { 565 case 5: 566 assert(offset == 0); 567 rc_bit(probs[symbol], , 568 rep0 += 1, 569 SEQ_POS_MODEL); 570 ++offset; 571 --limit; 572 case 4: 573 rc_bit(probs[symbol], , 574 rep0 += 1 << offset, 575 SEQ_POS_MODEL); 576 ++offset; 577 --limit; 578 case 3: 579 rc_bit(probs[symbol], , 580 rep0 += 1 << offset, 581 SEQ_POS_MODEL); 582 ++offset; 583 --limit; 584 case 2: 585 rc_bit(probs[symbol], , 586 rep0 += 1 << offset, 587 SEQ_POS_MODEL); 588 ++offset; 589 --limit; 590 case 1: 591 // We need "symbol" only for 592 // indexing the probability 593 // array, thus we can use 594 // rc_bit_last() here to omit 595 // the unneeded updating of 596 // "symbol". 597 rc_bit_last(probs[symbol], , 598 rep0 += 1 << offset, 599 SEQ_POS_MODEL); 600 } 601 #endif 602 } else { 603 // The distance is >= 128. Decode the 604 // lower bits without probabilities 605 // except the lowest four bits. 606 assert(symbol >= 14); 607 assert(limit >= 6); 608 limit -= ALIGN_BITS; 609 assert(limit >= 2); 610 case SEQ_DIRECT: 611 // Not worth manual unrolling 612 do { 613 rc_direct(rep0, SEQ_DIRECT); 614 } while (--limit > 0); 615 616 // Decode the lowest four bits using 617 // probabilities. 618 rep0 <<= ALIGN_BITS; 619 symbol = 1; 620 #ifdef HAVE_SMALL 621 offset = 0; 622 case SEQ_ALIGN: 623 do { 624 rc_bit(coder->pos_align[ 625 symbol], , 626 rep0 += 1 << offset, 627 SEQ_ALIGN); 628 } while (++offset < ALIGN_BITS); 629 #else 630 case SEQ_ALIGN0: 631 rc_bit(coder->pos_align[symbol], , 632 rep0 += 1, SEQ_ALIGN0); 633 case SEQ_ALIGN1: 634 rc_bit(coder->pos_align[symbol], , 635 rep0 += 2, SEQ_ALIGN1); 636 case SEQ_ALIGN2: 637 rc_bit(coder->pos_align[symbol], , 638 rep0 += 4, SEQ_ALIGN2); 639 case SEQ_ALIGN3: 640 // Like in SEQ_POS_MODEL, we don't 641 // need "symbol" for anything else 642 // than indexing the probability array. 643 rc_bit_last(coder->pos_align[symbol], , 644 rep0 += 8, SEQ_ALIGN3); 645 #endif 646 647 if (rep0 == UINT32_MAX) { 648 // End of payload marker was 649 // found. It must not be 650 // present if uncompressed 651 // size is known. 652 if (coder->uncompressed_size 653 != LZMA_VLI_UNKNOWN) { 654 ret = LZMA_DATA_ERROR; 655 goto out; 656 } 657 658 case SEQ_EOPM: 659 // LZMA1 stream with 660 // end-of-payload marker. 661 rc_normalize(SEQ_EOPM); 662 ret = LZMA_STREAM_END; 663 goto out; 664 } 665 } 666 } 667 668 // Validate the distance we just decoded. 669 if (unlikely(!dict_is_distance_valid(&dict, rep0))) { 670 ret = LZMA_DATA_ERROR; 671 goto out; 672 } 673 674 } else { 675 rc_update_1(coder->is_rep[state]); 676 677 // Repeated match 678 // 679 // The match distance is a value that we have had 680 // earlier. The latest four match distances are 681 // available as rep0, rep1, rep2 and rep3. We will 682 // now decode which of them is the new distance. 683 // 684 // There cannot be a match if we haven't produced 685 // any output, so check that first. 686 if (unlikely(!dict_is_distance_valid(&dict, 0))) { 687 ret = LZMA_DATA_ERROR; 688 goto out; 689 } 690 691 case SEQ_IS_REP0: 692 rc_if_0(coder->is_rep0[state], SEQ_IS_REP0) { 693 rc_update_0(coder->is_rep0[state]); 694 // The distance is rep0. 695 696 case SEQ_IS_REP0_LONG: 697 rc_if_0(coder->is_rep0_long[state][pos_state], 698 SEQ_IS_REP0_LONG) { 699 rc_update_0(coder->is_rep0_long[ 700 state][pos_state]); 701 702 update_short_rep(state); 703 704 case SEQ_SHORTREP: 705 if (unlikely(dict_put(&dict, dict_get( 706 &dict, rep0)))) { 707 coder->sequence = SEQ_SHORTREP; 708 goto out; 709 } 710 711 continue; 712 } 713 714 // Repeating more than one byte at 715 // distance of rep0. 716 rc_update_1(coder->is_rep0_long[ 717 state][pos_state]); 718 719 } else { 720 rc_update_1(coder->is_rep0[state]); 721 722 case SEQ_IS_REP1: 723 // The distance is rep1, rep2 or rep3. Once 724 // we find out which one of these three, it 725 // is stored to rep0 and rep1, rep2 and rep3 726 // are updated accordingly. 727 rc_if_0(coder->is_rep1[state], SEQ_IS_REP1) { 728 rc_update_0(coder->is_rep1[state]); 729 730 const uint32_t distance = rep1; 731 rep1 = rep0; 732 rep0 = distance; 733 734 } else { 735 rc_update_1(coder->is_rep1[state]); 736 case SEQ_IS_REP2: 737 rc_if_0(coder->is_rep2[state], 738 SEQ_IS_REP2) { 739 rc_update_0(coder->is_rep2[ 740 state]); 741 742 const uint32_t distance = rep2; 743 rep2 = rep1; 744 rep1 = rep0; 745 rep0 = distance; 746 747 } else { 748 rc_update_1(coder->is_rep2[ 749 state]); 750 751 const uint32_t distance = rep3; 752 rep3 = rep2; 753 rep2 = rep1; 754 rep1 = rep0; 755 rep0 = distance; 756 } 757 } 758 } 759 760 update_long_rep(state); 761 762 // Decode the length of the repeated match. 763 len_decode(len, coder->rep_len_decoder, 764 pos_state, SEQ_REP_LEN); 765 } 766 767 ///////////////////////////////// 768 // Repeat from history buffer. // 769 ///////////////////////////////// 770 771 // The length is always between these limits. There is no way 772 // to trigger the algorithm to set len outside this range. 773 assert(len >= MATCH_LEN_MIN); 774 assert(len <= MATCH_LEN_MAX); 775 776 case SEQ_COPY: 777 // Repeat len bytes from distance of rep0. 778 if (unlikely(dict_repeat(&dict, rep0, &len))) { 779 coder->sequence = SEQ_COPY; 780 goto out; 781 } 782 } 783 784 rc_normalize(SEQ_NORMALIZE); 785 coder->sequence = SEQ_IS_MATCH; 786 787 out: 788 // Save state 789 790 // NOTE: Must not copy dict.limit. 791 dictptr->pos = dict.pos; 792 dictptr->full = dict.full; 793 794 rc_from_local(coder->rc, *in_pos); 795 796 coder->state = state; 797 coder->rep0 = rep0; 798 coder->rep1 = rep1; 799 coder->rep2 = rep2; 800 coder->rep3 = rep3; 801 802 coder->probs = probs; 803 coder->symbol = symbol; 804 coder->limit = limit; 805 coder->offset = offset; 806 coder->len = len; 807 808 // Update the remaining amount of uncompressed data if uncompressed 809 // size was known. 810 if (coder->uncompressed_size != LZMA_VLI_UNKNOWN) { 811 coder->uncompressed_size -= dict.pos - dict_start; 812 813 // Since there cannot be end of payload marker if the 814 // uncompressed size was known, we check here if we 815 // finished decoding. 816 if (coder->uncompressed_size == 0 && ret == LZMA_OK 817 && coder->sequence != SEQ_NORMALIZE) 818 ret = coder->sequence == SEQ_IS_MATCH 819 ? LZMA_STREAM_END : LZMA_DATA_ERROR; 820 } 821 822 // We can do an additional check in the range decoder to catch some 823 // corrupted files. 824 if (ret == LZMA_STREAM_END) { 825 if (!rc_is_finished(coder->rc)) 826 ret = LZMA_DATA_ERROR; 827 828 // Reset the range decoder so that it is ready to reinitialize 829 // for a new LZMA2 chunk. 830 rc_reset(coder->rc); 831 } 832 833 return ret; 834 } 835 836 837 838 static void 839 lzma_decoder_uncompressed(lzma_coder *coder, lzma_vli uncompressed_size) 840 { 841 coder->uncompressed_size = uncompressed_size; 842 } 843 844 /* 845 extern void 846 lzma_lzma_decoder_uncompressed(void *coder_ptr, lzma_vli uncompressed_size) 847 { 848 // This is hack. 849 (*(lzma_coder **)(coder))->uncompressed_size = uncompressed_size; 850 } 851 */ 852 853 static void 854 lzma_decoder_reset(lzma_coder *coder, const void *opt) 855 { 856 const lzma_options_lzma *options = opt; 857 858 // NOTE: We assume that lc/lp/pb are valid since they were 859 // successfully decoded with lzma_lzma_decode_properties(). 860 861 // Calculate pos_mask. We don't need pos_bits as is for anything. 862 coder->pos_mask = (1U << options->pb) - 1; 863 864 // Initialize the literal decoder. 865 literal_init(coder->literal, options->lc, options->lp); 866 867 coder->literal_context_bits = options->lc; 868 coder->literal_pos_mask = (1U << options->lp) - 1; 869 870 // State 871 coder->state = STATE_LIT_LIT; 872 coder->rep0 = 0; 873 coder->rep1 = 0; 874 coder->rep2 = 0; 875 coder->rep3 = 0; 876 coder->pos_mask = (1U << options->pb) - 1; 877 878 // Range decoder 879 rc_reset(coder->rc); 880 881 // Bit and bittree decoders 882 for (uint32_t i = 0; i < STATES; ++i) { 883 for (uint32_t j = 0; j <= coder->pos_mask; ++j) { 884 bit_reset(coder->is_match[i][j]); 885 bit_reset(coder->is_rep0_long[i][j]); 886 } 887 888 bit_reset(coder->is_rep[i]); 889 bit_reset(coder->is_rep0[i]); 890 bit_reset(coder->is_rep1[i]); 891 bit_reset(coder->is_rep2[i]); 892 } 893 894 for (uint32_t i = 0; i < LEN_TO_POS_STATES; ++i) 895 bittree_reset(coder->pos_slot[i], POS_SLOT_BITS); 896 897 for (uint32_t i = 0; i < FULL_DISTANCES - END_POS_MODEL_INDEX; ++i) 898 bit_reset(coder->pos_special[i]); 899 900 bittree_reset(coder->pos_align, ALIGN_BITS); 901 902 // Len decoders (also bit/bittree) 903 const uint32_t num_pos_states = 1U << options->pb; 904 bit_reset(coder->match_len_decoder.choice); 905 bit_reset(coder->match_len_decoder.choice2); 906 bit_reset(coder->rep_len_decoder.choice); 907 bit_reset(coder->rep_len_decoder.choice2); 908 909 for (uint32_t pos_state = 0; pos_state < num_pos_states; ++pos_state) { 910 bittree_reset(coder->match_len_decoder.low[pos_state], 911 LEN_LOW_BITS); 912 bittree_reset(coder->match_len_decoder.mid[pos_state], 913 LEN_MID_BITS); 914 915 bittree_reset(coder->rep_len_decoder.low[pos_state], 916 LEN_LOW_BITS); 917 bittree_reset(coder->rep_len_decoder.mid[pos_state], 918 LEN_MID_BITS); 919 } 920 921 bittree_reset(coder->match_len_decoder.high, LEN_HIGH_BITS); 922 bittree_reset(coder->rep_len_decoder.high, LEN_HIGH_BITS); 923 924 coder->sequence = SEQ_IS_MATCH; 925 coder->probs = NULL; 926 coder->symbol = 0; 927 coder->limit = 0; 928 coder->offset = 0; 929 coder->len = 0; 930 931 return; 932 } 933 934 935 extern lzma_ret 936 lzma_lzma_decoder_create(lzma_lz_decoder *lz, lzma_allocator *allocator, 937 const void *opt, lzma_lz_options *lz_options) 938 { 939 if (lz->coder == NULL) { 940 lz->coder = lzma_alloc(sizeof(lzma_coder), allocator); 941 if (lz->coder == NULL) 942 return LZMA_MEM_ERROR; 943 944 lz->code = &lzma_decode; 945 lz->reset = &lzma_decoder_reset; 946 lz->set_uncompressed = &lzma_decoder_uncompressed; 947 } 948 949 // All dictionary sizes are OK here. LZ decoder will take care of 950 // the special cases. 951 const lzma_options_lzma *options = opt; 952 lz_options->dict_size = options->dict_size; 953 lz_options->preset_dict = options->preset_dict; 954 lz_options->preset_dict_size = options->preset_dict_size; 955 956 return LZMA_OK; 957 } 958 959 960 /// Allocate and initialize LZMA decoder. This is used only via LZ 961 /// initialization (lzma_lzma_decoder_init() passes function pointer to 962 /// the LZ initialization). 963 static lzma_ret 964 lzma_decoder_init(lzma_lz_decoder *lz, lzma_allocator *allocator, 965 const void *options, lzma_lz_options *lz_options) 966 { 967 if (!is_lclppb_valid(options)) 968 return LZMA_PROG_ERROR; 969 970 return_if_error(lzma_lzma_decoder_create( 971 lz, allocator, options, lz_options)); 972 973 lzma_decoder_reset(lz->coder, options); 974 lzma_decoder_uncompressed(lz->coder, LZMA_VLI_UNKNOWN); 975 976 return LZMA_OK; 977 } 978 979 980 extern lzma_ret 981 lzma_lzma_decoder_init(lzma_next_coder *next, lzma_allocator *allocator, 982 const lzma_filter_info *filters) 983 { 984 // LZMA can only be the last filter in the chain. This is enforced 985 // by the raw_decoder initialization. 986 assert(filters[1].init == NULL); 987 988 return lzma_lz_decoder_init(next, allocator, filters, 989 &lzma_decoder_init); 990 } 991 992 993 extern bool 994 lzma_lzma_lclppb_decode(lzma_options_lzma *options, uint8_t byte) 995 { 996 if (byte > (4 * 5 + 4) * 9 + 8) 997 return true; 998 999 // See the file format specification to understand this. 1000 options->pb = byte / (9 * 5); 1001 byte -= options->pb * 9 * 5; 1002 options->lp = byte / 9; 1003 options->lc = byte - options->lp * 9; 1004 1005 return options->lc + options->lp > LZMA_LCLP_MAX; 1006 } 1007 1008 1009 extern uint64_t 1010 lzma_lzma_decoder_memusage_nocheck(const void *options) 1011 { 1012 const lzma_options_lzma *const opt = options; 1013 return sizeof(lzma_coder) + lzma_lz_decoder_memusage(opt->dict_size); 1014 } 1015 1016 1017 extern uint64_t 1018 lzma_lzma_decoder_memusage(const void *options) 1019 { 1020 if (!is_lclppb_valid(options)) 1021 return UINT64_MAX; 1022 1023 return lzma_lzma_decoder_memusage_nocheck(options); 1024 } 1025 1026 1027 extern lzma_ret 1028 lzma_lzma_props_decode(void **options, lzma_allocator *allocator, 1029 const uint8_t *props, size_t props_size) 1030 { 1031 if (props_size != 5) 1032 return LZMA_OPTIONS_ERROR; 1033 1034 lzma_options_lzma *opt 1035 = lzma_alloc(sizeof(lzma_options_lzma), allocator); 1036 if (opt == NULL) 1037 return LZMA_MEM_ERROR; 1038 1039 if (lzma_lzma_lclppb_decode(opt, props[0])) 1040 goto error; 1041 1042 // All dictionary sizes are accepted, including zero. LZ decoder 1043 // will automatically use a dictionary at least a few KiB even if 1044 // a smaller dictionary is requested. 1045 opt->dict_size = unaligned_read32le(props + 1); 1046 1047 opt->preset_dict = NULL; 1048 opt->preset_dict_size = 0; 1049 1050 *options = opt; 1051 1052 return LZMA_OK; 1053 1054 error: 1055 lzma_free(opt, allocator); 1056 return LZMA_OPTIONS_ERROR; 1057 } 1058