VirtualBox

source: vbox/trunk/src/libs/liblzma-5.4.1/lzma/lzma_decoder.c

Last change on this file was 98730, checked in by vboxsync, 15 months ago

libs/liblzma-5.4.1: Export to OSE, bugref:10254

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

© 2023 Oracle
ContactPrivacy policyTerms of Use