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