Coverage Report

Created: 2025-10-28 07:09

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/woff2/brotli/c/dec/decode.c
Line
Count
Source
1
/* Copyright 2013 Google Inc. All Rights Reserved.
2
3
   Distributed under MIT license.
4
   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5
*/
6
7
#include <brotli/decode.h>
8
9
#ifdef __ARM_NEON__
10
#include <arm_neon.h>
11
#endif
12
13
#include <stdlib.h>  /* free, malloc */
14
#include <string.h>  /* memcpy, memset */
15
16
#include "../common/constants.h"
17
#include "../common/context.h"
18
#include "../common/dictionary.h"
19
#include "../common/platform.h"
20
#include "../common/transform.h"
21
#include "../common/version.h"
22
#include "./bit_reader.h"
23
#include "./huffman.h"
24
#include "./prefix.h"
25
#include "./state.h"
26
27
#if defined(__cplusplus) || defined(c_plusplus)
28
extern "C" {
29
#endif
30
31
2.14k
#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
32
33
#define BROTLI_LOG_UINT(name)                                       \
34
  BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned long)(name)))
35
#define BROTLI_LOG_ARRAY_INDEX(array_name, idx)                     \
36
  BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name,        \
37
         (unsigned long)(idx), (unsigned long)array_name[idx]))
38
39
2.12G
#define HUFFMAN_TABLE_BITS 8U
40
1.54G
#define HUFFMAN_TABLE_MASK 0xFF
41
42
/* We need the slack region for the following reasons:
43
    - doing up to two 16-byte copies for fast backward copying
44
    - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
45
static const uint32_t kRingBufferWriteAheadSlack = 42;
46
47
static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {
48
  1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
49
};
50
51
/* Static prefix code for the complex code length code lengths. */
52
static const uint8_t kCodeLengthPrefixLength[16] = {
53
  2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
54
};
55
56
static const uint8_t kCodeLengthPrefixValue[16] = {
57
  0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
58
};
59
60
BROTLI_BOOL BrotliDecoderSetParameter(
61
0
    BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
62
0
  if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
63
0
  switch (p) {
64
0
    case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
65
0
      state->canny_ringbuffer_allocation = !!value ? 0 : 1;
66
0
      return BROTLI_TRUE;
67
68
0
    case BROTLI_DECODER_PARAM_LARGE_WINDOW:
69
0
      state->large_window = TO_BROTLI_BOOL(!!value);
70
0
      return BROTLI_TRUE;
71
72
0
    default: return BROTLI_FALSE;
73
0
  }
74
0
}
75
76
BrotliDecoderState* BrotliDecoderCreateInstance(
77
0
    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
78
0
  BrotliDecoderState* state = 0;
79
0
  if (!alloc_func && !free_func) {
80
0
    state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
81
0
  } else if (alloc_func && free_func) {
82
0
    state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
83
0
  }
84
0
  if (state == 0) {
85
0
    BROTLI_DUMP();
86
0
    return 0;
87
0
  }
88
0
  if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
89
0
    BROTLI_DUMP();
90
0
    if (!alloc_func && !free_func) {
91
0
      free(state);
92
0
    } else if (alloc_func && free_func) {
93
0
      free_func(opaque, state);
94
0
    }
95
0
    return 0;
96
0
  }
97
0
  return state;
98
0
}
99
100
/* Deinitializes and frees BrotliDecoderState instance. */
101
0
void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
102
0
  if (!state) {
103
0
    return;
104
0
  } else {
105
0
    brotli_free_func free_func = state->free_func;
106
0
    void* opaque = state->memory_manager_opaque;
107
0
    BrotliDecoderStateCleanup(state);
108
0
    free_func(opaque, state);
109
0
  }
110
0
}
111
112
/* Saves error code and converts it to BrotliDecoderResult. */
113
static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
114
10.9k
    BrotliDecoderState* s, BrotliDecoderErrorCode e) {
115
10.9k
  s->error_code = (int)e;
116
10.9k
  switch (e) {
117
2.25k
    case BROTLI_DECODER_SUCCESS:
118
2.25k
      return BROTLI_DECODER_RESULT_SUCCESS;
119
120
6.26k
    case BROTLI_DECODER_NEEDS_MORE_INPUT:
121
6.26k
      return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
122
123
246
    case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
124
246
      return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
125
126
2.14k
    default:
127
2.14k
      return BROTLI_DECODER_RESULT_ERROR;
128
10.9k
  }
129
10.9k
}
130
131
/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
132
   Precondition: bit-reader accumulator has at least 8 bits. */
133
static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
134
8.08k
                                               BrotliBitReader* br) {
135
8.08k
  uint32_t n;
136
8.08k
  BROTLI_BOOL large_window = s->large_window;
137
8.08k
  s->large_window = BROTLI_FALSE;
138
8.08k
  BrotliTakeBits(br, 1, &n);
139
8.08k
  if (n == 0) {
140
4.66k
    s->window_bits = 16;
141
4.66k
    return BROTLI_DECODER_SUCCESS;
142
4.66k
  }
143
3.42k
  BrotliTakeBits(br, 3, &n);
144
3.42k
  if (n != 0) {
145
2.63k
    s->window_bits = 17 + n;
146
2.63k
    return BROTLI_DECODER_SUCCESS;
147
2.63k
  }
148
786
  BrotliTakeBits(br, 3, &n);
149
786
  if (n == 1) {
150
8
    if (large_window) {
151
0
      BrotliTakeBits(br, 1, &n);
152
0
      if (n == 1) {
153
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
154
0
      }
155
0
      s->large_window = BROTLI_TRUE;
156
0
      return BROTLI_DECODER_SUCCESS;
157
8
    } else {
158
8
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
159
8
    }
160
8
  }
161
778
  if (n != 0) {
162
645
    s->window_bits = 8 + n;
163
645
    return BROTLI_DECODER_SUCCESS;
164
645
  }
165
133
  s->window_bits = 17;
166
133
  return BROTLI_DECODER_SUCCESS;
167
778
}
168
169
237M
static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
170
#if defined(__ARM_NEON__)
171
  vst1q_u8(dst, vld1q_u8(src));
172
#else
173
237M
  uint32_t buffer[4];
174
237M
  memcpy(buffer, src, 16);
175
237M
  memcpy(dst, buffer, 16);
176
237M
#endif
177
237M
}
178
179
/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
180
static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
181
132k
    BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
182
132k
  uint32_t bits;
183
132k
  switch (s->substate_decode_uint8) {
184
132k
    case BROTLI_STATE_DECODE_UINT8_NONE:
185
132k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
186
20
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
187
20
      }
188
132k
      if (bits == 0) {
189
112k
        *value = 0;
190
112k
        return BROTLI_DECODER_SUCCESS;
191
112k
      }
192
      /* No break, transit to the next state. */
193
194
20.1k
    case BROTLI_STATE_DECODE_UINT8_SHORT:
195
20.1k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
196
22
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
197
22
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
198
22
      }
199
20.1k
      if (bits == 0) {
200
2.12k
        *value = 1;
201
2.12k
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
202
2.12k
        return BROTLI_DECODER_SUCCESS;
203
2.12k
      }
204
      /* Use output value as a temporary storage. It MUST be persisted. */
205
17.9k
      *value = bits;
206
      /* No break, transit to the next state. */
207
208
17.9k
    case BROTLI_STATE_DECODE_UINT8_LONG:
209
17.9k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
210
24
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
211
24
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
212
24
      }
213
17.9k
      *value = (1U << *value) + bits;
214
17.9k
      s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
215
17.9k
      return BROTLI_DECODER_SUCCESS;
216
217
0
    default:
218
0
      return
219
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
220
132k
  }
221
132k
}
222
223
/* Decodes a metablock length and flags by reading 2 - 31 bits. */
224
static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
225
256k
    BrotliDecoderState* s, BrotliBitReader* br) {
226
256k
  uint32_t bits;
227
256k
  int i;
228
726k
  for (;;) {
229
726k
    switch (s->substate_metablock_header) {
230
256k
      case BROTLI_STATE_METABLOCK_HEADER_NONE:
231
256k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
232
31
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
233
31
        }
234
256k
        s->is_last_metablock = bits ? 1 : 0;
235
256k
        s->meta_block_remaining_len = 0;
236
256k
        s->is_uncompressed = 0;
237
256k
        s->is_metadata = 0;
238
256k
        if (!s->is_last_metablock) {
239
252k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
240
252k
          break;
241
252k
        }
242
3.49k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
243
        /* No break, transit to the next state. */
244
245
3.49k
      case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
246
3.49k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
247
35
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
248
35
        }
249
3.46k
        if (bits) {
250
740
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
251
740
          return BROTLI_DECODER_SUCCESS;
252
740
        }
253
2.72k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
254
        /* No break, transit to the next state. */
255
256
255k
      case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
257
255k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
258
50
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
259
50
        }
260
255k
        s->size_nibbles = (uint8_t)(bits + 4);
261
255k
        s->loop_counter = 0;
262
255k
        if (bits == 3) {
263
217k
          s->is_metadata = 1;
264
217k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
265
217k
          break;
266
217k
        }
267
37.4k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
268
        /* No break, transit to the next state. */
269
270
37.4k
      case BROTLI_STATE_METABLOCK_HEADER_SIZE:
271
37.4k
        i = s->loop_counter;
272
188k
        for (; i < (int)s->size_nibbles; ++i) {
273
151k
          if (!BrotliSafeReadBits(br, 4, &bits)) {
274
438
            s->loop_counter = i;
275
438
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
276
438
          }
277
150k
          if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
278
14
            return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
279
14
          }
280
150k
          s->meta_block_remaining_len |= (int)(bits << (i * 4));
281
150k
        }
282
36.9k
        s->substate_metablock_header =
283
36.9k
            BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
284
        /* No break, transit to the next state. */
285
286
36.9k
      case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
287
36.9k
        if (!s->is_last_metablock) {
288
34.6k
          if (!BrotliSafeReadBits(br, 1, &bits)) {
289
3
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
290
3
          }
291
34.6k
          s->is_uncompressed = bits ? 1 : 0;
292
34.6k
        }
293
36.9k
        ++s->meta_block_remaining_len;
294
36.9k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
295
36.9k
        return BROTLI_DECODER_SUCCESS;
296
297
217k
      case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
298
217k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
299
10
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
300
10
        }
301
217k
        if (bits != 0) {
302
49
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
303
49
        }
304
217k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
305
        /* No break, transit to the next state. */
306
307
217k
      case BROTLI_STATE_METABLOCK_HEADER_BYTES:
308
217k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
309
25
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
310
25
        }
311
217k
        if (bits == 0) {
312
168k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
313
168k
          return BROTLI_DECODER_SUCCESS;
314
168k
        }
315
48.8k
        s->size_nibbles = (uint8_t)bits;
316
48.8k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
317
        /* No break, transit to the next state. */
318
319
48.8k
      case BROTLI_STATE_METABLOCK_HEADER_METADATA:
320
48.8k
        i = s->loop_counter;
321
98.0k
        for (; i < (int)s->size_nibbles; ++i) {
322
49.2k
          if (!BrotliSafeReadBits(br, 8, &bits)) {
323
31
            s->loop_counter = i;
324
31
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
325
31
          }
326
49.1k
          if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
327
13
            return BROTLI_FAILURE(
328
13
                BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
329
13
          }
330
49.1k
          s->meta_block_remaining_len |= (int)(bits << (i * 8));
331
49.1k
        }
332
48.7k
        ++s->meta_block_remaining_len;
333
48.7k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
334
48.7k
        return BROTLI_DECODER_SUCCESS;
335
336
0
      default:
337
0
        return
338
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
339
726k
    }
340
726k
  }
341
256k
}
342
343
/* Decodes the Huffman code.
344
   This method doesn't read data from the bit reader, BUT drops the amount of
345
   bits that correspond to the decoded symbol.
346
   bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */
347
static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
348
                                           const HuffmanCode* table,
349
1.32G
                                           BrotliBitReader* br) {
350
1.32G
  table += bits & HUFFMAN_TABLE_MASK;
351
1.32G
  if (table->bits > HUFFMAN_TABLE_BITS) {
352
1.26M
    uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
353
1.26M
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
354
1.26M
    table += table->value;
355
1.26M
    table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
356
1.26M
  }
357
1.32G
  BrotliDropBits(br, table->bits);
358
1.32G
  return table->value;
359
1.32G
}
360
361
/* Reads and decodes the next Huffman code from bit-stream.
362
   This method peeks 16 bits of input and drops 0 - 15 of them. */
363
static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
364
183M
                                         BrotliBitReader* br) {
365
183M
  return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
366
183M
}
367
368
/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
369
   input are currently available. */
370
static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
371
230M
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
372
230M
  uint32_t val;
373
230M
  uint32_t available_bits = BrotliGetAvailableBits(br);
374
230M
  if (available_bits == 0) {
375
17.0M
    if (table->bits == 0) {
376
17.0M
      *result = table->value;
377
17.0M
      return BROTLI_TRUE;
378
17.0M
    }
379
319
    return BROTLI_FALSE;  /* No valid bits at all. */
380
17.0M
  }
381
213M
  val = (uint32_t)BrotliGetBitsUnmasked(br);
382
213M
  table += val & HUFFMAN_TABLE_MASK;
383
213M
  if (table->bits <= HUFFMAN_TABLE_BITS) {
384
213M
    if (table->bits <= available_bits) {
385
213M
      BrotliDropBits(br, table->bits);
386
213M
      *result = table->value;
387
213M
      return BROTLI_TRUE;
388
213M
    } else {
389
196
      return BROTLI_FALSE;  /* Not enough bits for the first level. */
390
196
    }
391
213M
  }
392
77
  if (available_bits <= HUFFMAN_TABLE_BITS) {
393
38
    return BROTLI_FALSE;  /* Not enough bits to move to the second level. */
394
38
  }
395
396
  /* Speculatively drop HUFFMAN_TABLE_BITS. */
397
39
  val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
398
39
  available_bits -= HUFFMAN_TABLE_BITS;
399
39
  table += table->value + val;
400
39
  if (available_bits < table->bits) {
401
5
    return BROTLI_FALSE;  /* Not enough bits for the second level. */
402
5
  }
403
404
34
  BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
405
34
  *result = table->value;
406
34
  return BROTLI_TRUE;
407
39
}
408
409
static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
410
1.37G
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
411
1.37G
  uint32_t val;
412
1.37G
  if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
413
1.14G
    *result = DecodeSymbol(val, table, br);
414
1.14G
    return BROTLI_TRUE;
415
1.14G
  }
416
230M
  return SafeDecodeSymbol(table, br, result);
417
1.37G
}
418
419
/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
420
static BROTLI_INLINE void PreloadSymbol(int safe,
421
                                        const HuffmanCode* table,
422
                                        BrotliBitReader* br,
423
                                        uint32_t* bits,
424
644M
                                        uint32_t* value) {
425
644M
  if (safe) {
426
60.9M
    return;
427
60.9M
  }
428
583M
  table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
429
583M
  *bits = table->bits;
430
583M
  *value = table->value;
431
583M
}
432
433
/* Decodes the next Huffman code using data prepared by PreloadSymbol.
434
   Reads 0 - 15 bits. Also peeks 8 following bits. */
435
static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* table,
436
                                                  BrotliBitReader* br,
437
                                                  uint32_t* bits,
438
574M
                                                  uint32_t* value) {
439
574M
  uint32_t result = *value;
440
574M
  if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
441
6.84k
    uint32_t val = BrotliGet16BitsUnmasked(br);
442
6.84k
    const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
443
6.84k
    uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
444
6.84k
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
445
6.84k
    ext += (val >> HUFFMAN_TABLE_BITS) & mask;
446
6.84k
    BrotliDropBits(br, ext->bits);
447
6.84k
    result = ext->value;
448
574M
  } else {
449
574M
    BrotliDropBits(br, *bits);
450
574M
  }
451
574M
  PreloadSymbol(0, table, br, bits, value);
452
574M
  return result;
453
574M
}
454
455
106k
static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
456
106k
  uint32_t result = 0;
457
833k
  while (x) {
458
727k
    x >>= 1;
459
727k
    ++result;
460
727k
  }
461
106k
  return result;
462
106k
}
463
464
/* Reads (s->symbol + 1) symbols.
465
   Totally 1..4 symbols are read, 1..11 bits each.
466
   The list of symbols MUST NOT contain duplicates. */
467
static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
468
106k
    uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
469
  /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
470
106k
  BrotliBitReader* br = &s->br;
471
106k
  uint32_t max_bits = Log2Floor(alphabet_size - 1);
472
106k
  uint32_t i = s->sub_loop_counter;
473
106k
  uint32_t num_symbols = s->symbol;
474
291k
  while (i <= num_symbols) {
475
185k
    uint32_t v;
476
185k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
477
69
      s->sub_loop_counter = i;
478
69
      s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
479
69
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
480
69
    }
481
185k
    if (v >= max_symbol) {
482
44
      return
483
44
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
484
44
    }
485
185k
    s->symbols_lists_array[i] = (uint16_t)v;
486
185k
    BROTLI_LOG_UINT(s->symbols_lists_array[i]);
487
185k
    ++i;
488
185k
  }
489
490
185k
  for (i = 0; i < num_symbols; ++i) {
491
79.2k
    uint32_t k = i + 1;
492
192k
    for (; k <= num_symbols; ++k) {
493
113k
      if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
494
24
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
495
24
      }
496
113k
    }
497
79.2k
  }
498
499
106k
  return BROTLI_DECODER_SUCCESS;
500
106k
}
501
502
/* Process single decoded symbol code length:
503
    A) reset the repeat variable
504
    B) remember code length (if it is not 0)
505
    C) extend corresponding index-chain
506
    D) reduce the Huffman space
507
    E) update the histogram */
508
static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
509
    uint32_t* symbol, uint32_t* repeat, uint32_t* space,
510
    uint32_t* prev_code_len, uint16_t* symbol_lists,
511
2.75M
    uint16_t* code_length_histo, int* next_symbol) {
512
2.75M
  *repeat = 0;
513
2.75M
  if (code_len != 0) {  /* code_len == 1..15 */
514
1.63M
    symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
515
1.63M
    next_symbol[code_len] = (int)(*symbol);
516
1.63M
    *prev_code_len = code_len;
517
1.63M
    *space -= 32768U >> code_len;
518
1.63M
    code_length_histo[code_len]++;
519
1.63M
    BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n", *symbol, code_len));
520
1.63M
  }
521
2.75M
  (*symbol)++;
522
2.75M
}
523
524
/* Process repeated symbol code length.
525
    A) Check if it is the extension of previous repeat sequence; if the decoded
526
       value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
527
       symbol-skip
528
    B) Update repeat variable
529
    C) Check if operation is feasible (fits alphabet)
530
    D) For each symbol do the same operations as in ProcessSingleCodeLength
531
532
   PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or
533
                 code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
534
static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
535
    uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
536
    uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
537
    uint32_t* repeat_code_len, uint16_t* symbol_lists,
538
495k
    uint16_t* code_length_histo, int* next_symbol) {
539
495k
  uint32_t old_repeat;
540
495k
  uint32_t extra_bits = 3;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
541
495k
  uint32_t new_len = 0;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
542
495k
  if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
543
284k
    new_len = *prev_code_len;
544
284k
    extra_bits = 2;
545
284k
  }
546
495k
  if (*repeat_code_len != new_len) {
547
199k
    *repeat = 0;
548
199k
    *repeat_code_len = new_len;
549
199k
  }
550
495k
  old_repeat = *repeat;
551
495k
  if (*repeat > 0) {
552
153k
    *repeat -= 2;
553
153k
    *repeat <<= extra_bits;
554
153k
  }
555
495k
  *repeat += repeat_delta + 3U;
556
495k
  repeat_delta = *repeat - old_repeat;
557
495k
  if (*symbol + repeat_delta > alphabet_size) {
558
162
    BROTLI_DUMP();
559
162
    *symbol = alphabet_size;
560
162
    *space = 0xFFFFF;
561
162
    return;
562
162
  }
563
495k
  BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
564
495k
              *symbol, *symbol + repeat_delta - 1, *repeat_code_len));
565
495k
  if (*repeat_code_len != 0) {
566
283k
    unsigned last = *symbol + repeat_delta;
567
283k
    int next = next_symbol[*repeat_code_len];
568
1.88M
    do {
569
1.88M
      symbol_lists[next] = (uint16_t)*symbol;
570
1.88M
      next = (int)*symbol;
571
1.88M
    } while (++(*symbol) != last);
572
283k
    next_symbol[*repeat_code_len] = next;
573
283k
    *space -= repeat_delta << (15 - *repeat_code_len);
574
283k
    code_length_histo[*repeat_code_len] =
575
283k
        (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
576
283k
  } else {
577
211k
    *symbol += repeat_delta;
578
211k
  }
579
495k
}
580
581
/* Reads and decodes symbol codelengths. */
582
static BrotliDecoderErrorCode ReadSymbolCodeLengths(
583
48.4k
    uint32_t alphabet_size, BrotliDecoderState* s) {
584
48.4k
  BrotliBitReader* br = &s->br;
585
48.4k
  uint32_t symbol = s->symbol;
586
48.4k
  uint32_t repeat = s->repeat;
587
48.4k
  uint32_t space = s->space;
588
48.4k
  uint32_t prev_code_len = s->prev_code_len;
589
48.4k
  uint32_t repeat_code_len = s->repeat_code_len;
590
48.4k
  uint16_t* symbol_lists = s->symbol_lists;
591
48.4k
  uint16_t* code_length_histo = s->code_length_histo;
592
48.4k
  int* next_symbol = s->next_symbol;
593
48.4k
  if (!BrotliWarmupBitReader(br)) {
594
36
    return BROTLI_DECODER_NEEDS_MORE_INPUT;
595
36
  }
596
3.26M
  while (symbol < alphabet_size && space > 0) {
597
3.21M
    const HuffmanCode* p = s->table;
598
3.21M
    uint32_t code_len;
599
3.21M
    if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
600
881
      s->symbol = symbol;
601
881
      s->repeat = repeat;
602
881
      s->prev_code_len = prev_code_len;
603
881
      s->repeat_code_len = repeat_code_len;
604
881
      s->space = space;
605
881
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
606
881
    }
607
3.21M
    BrotliFillBitWindow16(br);
608
3.21M
    p += BrotliGetBitsUnmasked(br) &
609
3.21M
        BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
610
3.21M
    BrotliDropBits(br, p->bits);  /* Use 1..5 bits. */
611
3.21M
    code_len = p->value;  /* code_len == 0..17 */
612
3.21M
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
613
2.71M
      ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
614
2.71M
          &prev_code_len, symbol_lists, code_length_histo, next_symbol);
615
2.71M
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
616
494k
      uint32_t extra_bits =
617
494k
          (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
618
494k
      uint32_t repeat_delta =
619
494k
          (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
620
494k
      BrotliDropBits(br, extra_bits);
621
494k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
622
494k
          &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
623
494k
          symbol_lists, code_length_histo, next_symbol);
624
494k
    }
625
3.21M
  }
626
47.4k
  s->space = space;
627
47.4k
  return BROTLI_DECODER_SUCCESS;
628
48.3k
}
629
630
static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
631
917
    uint32_t alphabet_size, BrotliDecoderState* s) {
632
917
  BrotliBitReader* br = &s->br;
633
917
  BROTLI_BOOL get_byte = BROTLI_FALSE;
634
38.1k
  while (s->symbol < alphabet_size && s->space > 0) {
635
37.4k
    const HuffmanCode* p = s->table;
636
37.4k
    uint32_t code_len;
637
37.4k
    uint32_t available_bits;
638
37.4k
    uint32_t bits = 0;
639
37.4k
    if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
640
37.2k
    get_byte = BROTLI_FALSE;
641
37.2k
    available_bits = BrotliGetAvailableBits(br);
642
37.2k
    if (available_bits != 0) {
643
32.8k
      bits = (uint32_t)BrotliGetBitsUnmasked(br);
644
32.8k
    }
645
37.2k
    p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
646
37.2k
    if (p->bits > available_bits) {
647
433
      get_byte = BROTLI_TRUE;
648
433
      continue;
649
433
    }
650
36.7k
    code_len = p->value;  /* code_len == 0..17 */
651
36.7k
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
652
35.0k
      BrotliDropBits(br, p->bits);
653
35.0k
      ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
654
35.0k
          &s->prev_code_len, s->symbol_lists, s->code_length_histo,
655
35.0k
          s->next_symbol);
656
35.0k
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
657
1.68k
      uint32_t extra_bits = code_len - 14U;
658
1.68k
      uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
659
1.68k
      if (available_bits < p->bits + extra_bits) {
660
175
        get_byte = BROTLI_TRUE;
661
175
        continue;
662
175
      }
663
1.51k
      BrotliDropBits(br, p->bits + extra_bits);
664
1.51k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
665
1.51k
          &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
666
1.51k
          &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
667
1.51k
          s->next_symbol);
668
1.51k
    }
669
36.7k
  }
670
707
  return BROTLI_DECODER_SUCCESS;
671
917
}
672
673
/* Reads and decodes 15..18 codes using static prefix code.
674
   Each code is 2..4 bits long. In total 30..72 bits are used. */
675
48.9k
static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
676
48.9k
  BrotliBitReader* br = &s->br;
677
48.9k
  uint32_t num_codes = s->repeat;
678
48.9k
  unsigned space = s->space;
679
48.9k
  uint32_t i = s->sub_loop_counter;
680
422k
  for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
681
421k
    const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
682
421k
    uint32_t ix;
683
421k
    uint32_t v;
684
421k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
685
532
      uint32_t available_bits = BrotliGetAvailableBits(br);
686
532
      if (available_bits != 0) {
687
403
        ix = BrotliGetBitsUnmasked(br) & 0xF;
688
403
      } else {
689
129
        ix = 0;
690
129
      }
691
532
      if (kCodeLengthPrefixLength[ix] > available_bits) {
692
277
        s->sub_loop_counter = i;
693
277
        s->repeat = num_codes;
694
277
        s->space = space;
695
277
        s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
696
277
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
697
277
      }
698
532
    }
699
421k
    v = kCodeLengthPrefixValue[ix];
700
421k
    BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
701
421k
    s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
702
421k
    BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
703
421k
    if (v != 0) {
704
340k
      space = space - (32U >> v);
705
340k
      ++num_codes;
706
340k
      ++s->code_length_histo[v];
707
340k
      if (space - 1U >= 32U) {
708
        /* space is 0 or wrapped around. */
709
47.8k
        break;
710
47.8k
      }
711
340k
    }
712
421k
  }
713
48.6k
  if (!(num_codes == 1 || space == 0)) {
714
269
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
715
269
  }
716
48.4k
  return BROTLI_DECODER_SUCCESS;
717
48.6k
}
718
719
/* Decodes the Huffman tables.
720
   There are 2 scenarios:
721
    A) Huffman code contains only few symbols (1..4). Those symbols are read
722
       directly; their code lengths are defined by the number of symbols.
723
       For this scenario 4 - 49 bits will be read.
724
725
    B) 2-phase decoding:
726
    B.1) Small Huffman table is decoded; it is specified with code lengths
727
         encoded with predefined entropy code. 32 - 74 bits are used.
728
    B.2) Decoded table is used to decode code lengths of symbols in resulting
729
         Huffman table. In worst case 3520 bits are read. */
730
static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
731
                                              uint32_t max_symbol,
732
                                              HuffmanCode* table,
733
                                              uint32_t* opt_table_size,
734
155k
                                              BrotliDecoderState* s) {
735
155k
  BrotliBitReader* br = &s->br;
736
  /* Unnecessary masking, but might be good for safety. */
737
155k
  alphabet_size &= 0x7FF;
738
  /* State machine. */
739
204k
  for (;;) {
740
204k
    switch (s->substate_huffman) {
741
155k
      case BROTLI_STATE_HUFFMAN_NONE:
742
155k
        if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
743
68
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
744
68
        }
745
155k
        BROTLI_LOG_UINT(s->sub_loop_counter);
746
        /* The value is used as follows:
747
           1 for simple code;
748
           0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
749
155k
        if (s->sub_loop_counter != 1) {
750
48.9k
          s->space = 32;
751
48.9k
          s->repeat = 0;  /* num_codes */
752
48.9k
          memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
753
48.9k
              (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
754
48.9k
          memset(&s->code_length_code_lengths[0], 0,
755
48.9k
              sizeof(s->code_length_code_lengths));
756
48.9k
          s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
757
48.9k
          continue;
758
48.9k
        }
759
        /* No break, transit to the next state. */
760
761
106k
      case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
762
        /* Read symbols, codes & code lengths directly. */
763
106k
        if (!BrotliSafeReadBits(br, 2, &s->symbol)) {  /* num_symbols */
764
39
          s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
765
39
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
766
39
        }
767
106k
        s->sub_loop_counter = 0;
768
        /* No break, transit to the next state. */
769
770
106k
      case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
771
106k
        BrotliDecoderErrorCode result =
772
106k
            ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
773
106k
        if (result != BROTLI_DECODER_SUCCESS) {
774
137
          return result;
775
137
        }
776
        /* No break, transit to the next state. */
777
106k
      }
778
779
106k
      case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
780
106k
        uint32_t table_size;
781
106k
        if (s->symbol == 3) {
782
3.66k
          uint32_t bits;
783
3.66k
          if (!BrotliSafeReadBits(br, 1, &bits)) {
784
4
            s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
785
4
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
786
4
          }
787
3.66k
          s->symbol += bits;
788
3.66k
        }
789
106k
        BROTLI_LOG_UINT(s->symbol);
790
106k
        table_size = BrotliBuildSimpleHuffmanTable(
791
106k
            table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
792
106k
        if (opt_table_size) {
793
73.5k
          *opt_table_size = table_size;
794
73.5k
        }
795
106k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
796
106k
        return BROTLI_DECODER_SUCCESS;
797
106k
      }
798
799
      /* Decode Huffman-coded code lengths. */
800
48.9k
      case BROTLI_STATE_HUFFMAN_COMPLEX: {
801
48.9k
        uint32_t i;
802
48.9k
        BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
803
48.9k
        if (result != BROTLI_DECODER_SUCCESS) {
804
546
          return result;
805
546
        }
806
48.4k
        BrotliBuildCodeLengthsHuffmanTable(s->table,
807
48.4k
                                           s->code_length_code_lengths,
808
48.4k
                                           s->code_length_histo);
809
48.4k
        memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
810
822k
        for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
811
774k
          s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
812
774k
          s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
813
774k
        }
814
815
48.4k
        s->symbol = 0;
816
48.4k
        s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
817
48.4k
        s->repeat = 0;
818
48.4k
        s->repeat_code_len = 0;
819
48.4k
        s->space = 32768;
820
48.4k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
821
        /* No break, transit to the next state. */
822
48.4k
      }
823
824
48.4k
      case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
825
48.4k
        uint32_t table_size;
826
48.4k
        BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
827
48.4k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
828
917
          result = SafeReadSymbolCodeLengths(max_symbol, s);
829
917
        }
830
48.4k
        if (result != BROTLI_DECODER_SUCCESS) {
831
210
          return result;
832
210
        }
833
834
48.1k
        if (s->space != 0) {
835
361
          BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", s->space));
836
361
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
837
361
        }
838
47.8k
        table_size = BrotliBuildHuffmanTable(
839
47.8k
            table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
840
47.8k
        if (opt_table_size) {
841
43.8k
          *opt_table_size = table_size;
842
43.8k
        }
843
47.8k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
844
47.8k
        return BROTLI_DECODER_SUCCESS;
845
48.1k
      }
846
847
0
      default:
848
0
        return
849
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
850
204k
    }
851
204k
  }
852
155k
}
853
854
/* Decodes a block length by reading 3..39 bits. */
855
static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
856
1.87M
                                              BrotliBitReader* br) {
857
1.87M
  uint32_t code;
858
1.87M
  uint32_t nbits;
859
1.87M
  code = ReadSymbol(table, br);
860
1.87M
  nbits = kBlockLengthPrefixCode[code].nbits;  /* nbits == 2..24 */
861
1.87M
  return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
862
1.87M
}
863
864
/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then
865
   reading can't be continued with ReadBlockLength. */
866
static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
867
    BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
868
45.0k
    BrotliBitReader* br) {
869
45.0k
  uint32_t index;
870
45.0k
  if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
871
45.0k
    if (!SafeReadSymbol(table, br, &index)) {
872
81
      return BROTLI_FALSE;
873
81
    }
874
45.0k
  } else {
875
0
    index = s->block_length_index;
876
0
  }
877
44.9k
  {
878
44.9k
    uint32_t bits;
879
44.9k
    uint32_t nbits = kBlockLengthPrefixCode[index].nbits;  /* nbits == 2..24 */
880
44.9k
    if (!BrotliSafeReadBits(br, nbits, &bits)) {
881
355
      s->block_length_index = index;
882
355
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
883
355
      return BROTLI_FALSE;
884
355
    }
885
44.6k
    *result = kBlockLengthPrefixCode[index].offset + bits;
886
44.6k
    s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
887
44.6k
    return BROTLI_TRUE;
888
44.9k
  }
889
44.9k
}
890
891
/* Transform:
892
    1) initialize list L with values 0, 1,... 255
893
    2) For each input element X:
894
    2.1) let Y = L[X]
895
    2.2) remove X-th element from L
896
    2.3) prepend Y to L
897
    2.4) append Y to output
898
899
   In most cases max(Y) <= 7, so most of L remains intact.
900
   To reduce the cost of initialization, we reuse L, remember the upper bound
901
   of Y values, and reinitialize only first elements in L.
902
903
   Most of input values are 0 and 1. To reduce number of branches, we replace
904
   inner for loop with do-while. */
905
static BROTLI_NOINLINE void InverseMoveToFrontTransform(
906
2.09k
    uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
907
  /* Reinitialize elements that could have been changed. */
908
2.09k
  uint32_t i = 1;
909
2.09k
  uint32_t upper_bound = state->mtf_upper_bound;
910
2.09k
  uint32_t* mtf = &state->mtf[1];  /* Make mtf[-1] addressable. */
911
2.09k
  uint8_t* mtf_u8 = (uint8_t*)mtf;
912
  /* Load endian-aware constant. */
913
2.09k
  const uint8_t b0123[4] = {0, 1, 2, 3};
914
2.09k
  uint32_t pattern;
915
2.09k
  memcpy(&pattern, &b0123, 4);
916
917
  /* Initialize list using 4 consequent values pattern. */
918
2.09k
  mtf[0] = pattern;
919
106k
  do {
920
106k
    pattern += 0x04040404;  /* Advance all 4 values by 4. */
921
106k
    mtf[i] = pattern;
922
106k
    i++;
923
106k
  } while (i <= upper_bound);
924
925
  /* Transform the input. */
926
2.09k
  upper_bound = 0;
927
1.05M
  for (i = 0; i < v_len; ++i) {
928
1.05M
    int index = v[i];
929
1.05M
    uint8_t value = mtf_u8[index];
930
1.05M
    upper_bound |= v[i];
931
1.05M
    v[i] = value;
932
1.05M
    mtf_u8[-1] = value;
933
9.03M
    do {
934
9.03M
      index--;
935
9.03M
      mtf_u8[index + 1] = mtf_u8[index];
936
9.03M
    } while (index >= 0);
937
1.05M
  }
938
  /* Remember amount of elements to be reinitialized. */
939
2.09k
  state->mtf_upper_bound = upper_bound >> 2;
940
2.09k
}
941
942
/* Decodes a series of Huffman table using ReadHuffmanCode function. */
943
static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
944
76.8k
    HuffmanTreeGroup* group, BrotliDecoderState* s) {
945
76.8k
  if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
946
76.8k
    s->next = group->codes;
947
76.8k
    s->htree_index = 0;
948
76.8k
    s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
949
76.8k
  }
950
194k
  while (s->htree_index < group->num_htrees) {
951
118k
    uint32_t table_size;
952
118k
    BrotliDecoderErrorCode result =
953
118k
        ReadHuffmanCode(group->alphabet_size, group->max_symbol,
954
118k
                        s->next, &table_size, s);
955
118k
    if (result != BROTLI_DECODER_SUCCESS) return result;
956
117k
    group->htrees[s->htree_index] = s->next;
957
117k
    s->next += table_size;
958
117k
    ++s->htree_index;
959
117k
  }
960
76.1k
  s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
961
76.1k
  return BROTLI_DECODER_SUCCESS;
962
76.8k
}
963
964
/* Decodes a context map.
965
   Decoding is done in 4 phases:
966
    1) Read auxiliary information (6..16 bits) and allocate memory.
967
       In case of trivial context map, decoding is finished at this phase.
968
    2) Decode Huffman table using ReadHuffmanCode function.
969
       This table will be used for reading context map items.
970
    3) Read context map items; "0" values could be run-length encoded.
971
    4) Optionally, apply InverseMoveToFront transform to the resulting map. */
972
static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size,
973
                                               uint32_t* num_htrees,
974
                                               uint8_t** context_map_arg,
975
52.4k
                                               BrotliDecoderState* s) {
976
52.4k
  BrotliBitReader* br = &s->br;
977
52.4k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
978
979
52.4k
  switch ((int)s->substate_context_map) {
980
52.4k
    case BROTLI_STATE_CONTEXT_MAP_NONE:
981
52.4k
      result = DecodeVarLenUint8(s, br, num_htrees);
982
52.4k
      if (result != BROTLI_DECODER_SUCCESS) {
983
36
        return result;
984
36
      }
985
52.4k
      (*num_htrees)++;
986
52.4k
      s->context_index = 0;
987
52.4k
      BROTLI_LOG_UINT(context_map_size);
988
52.4k
      BROTLI_LOG_UINT(*num_htrees);
989
52.4k
      *context_map_arg =
990
52.4k
          (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
991
52.4k
      if (*context_map_arg == 0) {
992
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
993
0
      }
994
52.4k
      if (*num_htrees <= 1) {
995
49.7k
        memset(*context_map_arg, 0, (size_t)context_map_size);
996
49.7k
        return BROTLI_DECODER_SUCCESS;
997
49.7k
      }
998
2.70k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
999
      /* No break, continue to next state. */
1000
1001
2.70k
    case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
1002
2.70k
      uint32_t bits;
1003
      /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
1004
         to peek 4 bits ahead. */
1005
2.70k
      if (!BrotliSafeGetBits(br, 5, &bits)) {
1006
14
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1007
14
      }
1008
2.68k
      if ((bits & 1) != 0) { /* Use RLE for zeros. */
1009
1.96k
        s->max_run_length_prefix = (bits >> 1) + 1;
1010
1.96k
        BrotliDropBits(br, 5);
1011
1.96k
      } else {
1012
723
        s->max_run_length_prefix = 0;
1013
723
        BrotliDropBits(br, 1);
1014
723
      }
1015
2.68k
      BROTLI_LOG_UINT(s->max_run_length_prefix);
1016
2.68k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
1017
      /* No break, continue to next state. */
1018
2.68k
    }
1019
1020
2.68k
    case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
1021
2.68k
      uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
1022
2.68k
      result = ReadHuffmanCode(alphabet_size, alphabet_size,
1023
2.68k
                               s->context_map_table, NULL, s);
1024
2.68k
      if (result != BROTLI_DECODER_SUCCESS) return result;
1025
2.54k
      s->code = 0xFFFF;
1026
2.54k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
1027
      /* No break, continue to next state. */
1028
2.54k
    }
1029
1030
2.54k
    case BROTLI_STATE_CONTEXT_MAP_DECODE: {
1031
2.54k
      uint32_t context_index = s->context_index;
1032
2.54k
      uint32_t max_run_length_prefix = s->max_run_length_prefix;
1033
2.54k
      uint8_t* context_map = *context_map_arg;
1034
2.54k
      uint32_t code = s->code;
1035
2.54k
      BROTLI_BOOL skip_preamble = (code != 0xFFFF);
1036
598k
      while (context_index < context_map_size || skip_preamble) {
1037
595k
        if (!skip_preamble) {
1038
595k
          if (!SafeReadSymbol(s->context_map_table, br, &code)) {
1039
73
            s->code = 0xFFFF;
1040
73
            s->context_index = context_index;
1041
73
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1042
73
          }
1043
595k
          BROTLI_LOG_UINT(code);
1044
1045
595k
          if (code == 0) {
1046
101k
            context_map[context_index++] = 0;
1047
101k
            continue;
1048
101k
          }
1049
494k
          if (code > max_run_length_prefix) {
1050
413k
            context_map[context_index++] =
1051
413k
                (uint8_t)(code - max_run_length_prefix);
1052
413k
            continue;
1053
413k
          }
1054
494k
        } else {
1055
0
          skip_preamble = BROTLI_FALSE;
1056
0
        }
1057
        /* RLE sub-stage. */
1058
80.1k
        {
1059
80.1k
          uint32_t reps;
1060
80.1k
          if (!BrotliSafeReadBits(br, code, &reps)) {
1061
54
            s->code = code;
1062
54
            s->context_index = context_index;
1063
54
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1064
54
          }
1065
80.0k
          reps += 1U << code;
1066
80.0k
          BROTLI_LOG_UINT(reps);
1067
80.0k
          if (context_index + reps > context_map_size) {
1068
105
            return
1069
105
                BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
1070
105
          }
1071
1.01M
          do {
1072
1.01M
            context_map[context_index++] = 0;
1073
1.01M
          } while (--reps);
1074
79.9k
        }
1075
79.9k
      }
1076
      /* No break, continue to next state. */
1077
2.54k
    }
1078
1079
2.31k
    case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
1080
2.31k
      uint32_t bits;
1081
2.31k
      if (!BrotliSafeReadBits(br, 1, &bits)) {
1082
14
        s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
1083
14
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1084
14
      }
1085
2.30k
      if (bits != 0) {
1086
2.09k
        InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
1087
2.09k
      }
1088
2.30k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
1089
2.30k
      return BROTLI_DECODER_SUCCESS;
1090
2.31k
    }
1091
1092
0
    default:
1093
0
      return
1094
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1095
52.4k
  }
1096
52.4k
}
1097
1098
/* Decodes a command or literal and updates block type ring-buffer.
1099
   Reads 3..54 bits. */
1100
static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
1101
1.90M
    int safe, BrotliDecoderState* s, int tree_type) {
1102
1.90M
  uint32_t max_block_type = s->num_block_types[tree_type];
1103
1.90M
  const HuffmanCode* type_tree = &s->block_type_trees[
1104
1.90M
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
1105
1.90M
  const HuffmanCode* len_tree = &s->block_len_trees[
1106
1.90M
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
1107
1.90M
  BrotliBitReader* br = &s->br;
1108
1.90M
  uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
1109
1.90M
  uint32_t block_type;
1110
1.90M
  if (max_block_type <= 1) {
1111
0
    return BROTLI_FALSE;
1112
0
  }
1113
1114
  /* Read 0..15 + 3..39 bits. */
1115
1.90M
  if (!safe) {
1116
1.87M
    block_type = ReadSymbol(type_tree, br);
1117
1.87M
    s->block_length[tree_type] = ReadBlockLength(len_tree, br);
1118
1.87M
  } else {
1119
28.2k
    BrotliBitReaderState memento;
1120
28.2k
    BrotliBitReaderSaveState(br, &memento);
1121
28.2k
    if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
1122
28.1k
    if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
1123
394
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
1124
394
      BrotliBitReaderRestoreState(br, &memento);
1125
394
      return BROTLI_FALSE;
1126
394
    }
1127
28.1k
  }
1128
1129
1.90M
  if (block_type == 1) {
1130
117k
    block_type = ringbuffer[1] + 1;
1131
1.78M
  } else if (block_type == 0) {
1132
1.61M
    block_type = ringbuffer[0];
1133
1.61M
  } else {
1134
167k
    block_type -= 2;
1135
167k
  }
1136
1.90M
  if (block_type >= max_block_type) {
1137
32.1k
    block_type -= max_block_type;
1138
32.1k
  }
1139
1.90M
  ringbuffer[0] = ringbuffer[1];
1140
1.90M
  ringbuffer[1] = block_type;
1141
1.90M
  return BROTLI_TRUE;
1142
1.90M
}
1143
1144
static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
1145
26.0k
    BrotliDecoderState* s) {
1146
26.0k
  size_t i;
1147
234k
  for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
1148
110k
  for (i = 0; i < s->num_block_types[0]; i++) {
1149
84.2k
    size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
1150
84.2k
    size_t error = 0;
1151
84.2k
    size_t sample = s->context_map[offset];
1152
84.2k
    size_t j;
1153
1.43M
    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
1154
1.34M
      BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
1155
1.34M
    }
1156
84.2k
    if (error == 0) {
1157
68.3k
      s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
1158
68.3k
    }
1159
84.2k
  }
1160
26.0k
}
1161
1162
262k
static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
1163
262k
  uint8_t context_mode;
1164
262k
  size_t trivial;
1165
262k
  uint32_t block_type = s->block_type_rb[1];
1166
262k
  uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
1167
262k
  s->context_map_slice = s->context_map + context_offset;
1168
262k
  trivial = s->trivial_literal_contexts[block_type >> 5];
1169
262k
  s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
1170
262k
  s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
1171
262k
  context_mode = s->context_modes[block_type] & 3;
1172
262k
  s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
1173
262k
}
1174
1175
/* Decodes the block type and updates the state for literal context.
1176
   Reads 3..54 bits. */
1177
static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
1178
237k
    int safe, BrotliDecoderState* s) {
1179
237k
  if (!DecodeBlockTypeAndLength(safe, s, 0)) {
1180
182
    return BROTLI_FALSE;
1181
182
  }
1182
237k
  PrepareLiteralDecoding(s);
1183
237k
  return BROTLI_TRUE;
1184
237k
}
1185
1186
226k
static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
1187
226k
  DecodeLiteralBlockSwitchInternal(0, s);
1188
226k
}
1189
1190
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
1191
11.6k
    BrotliDecoderState* s) {
1192
11.6k
  return DecodeLiteralBlockSwitchInternal(1, s);
1193
11.6k
}
1194
1195
/* Block switch for insert/copy length.
1196
   Reads 3..54 bits. */
1197
static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
1198
1.45M
    int safe, BrotliDecoderState* s) {
1199
1.45M
  if (!DecodeBlockTypeAndLength(safe, s, 1)) {
1200
123
    return BROTLI_FALSE;
1201
123
  }
1202
1.45M
  s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
1203
1.45M
  return BROTLI_TRUE;
1204
1.45M
}
1205
1206
1.44M
static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
1207
1.44M
  DecodeCommandBlockSwitchInternal(0, s);
1208
1.44M
}
1209
1210
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
1211
8.09k
    BrotliDecoderState* s) {
1212
8.09k
  return DecodeCommandBlockSwitchInternal(1, s);
1213
8.09k
}
1214
1215
/* Block switch for distance codes.
1216
   Reads 3..54 bits. */
1217
static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
1218
214k
    int safe, BrotliDecoderState* s) {
1219
214k
  if (!DecodeBlockTypeAndLength(safe, s, 2)) {
1220
161
    return BROTLI_FALSE;
1221
161
  }
1222
214k
  s->dist_context_map_slice = s->dist_context_map +
1223
214k
      (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
1224
214k
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1225
214k
  return BROTLI_TRUE;
1226
214k
}
1227
1228
206k
static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
1229
206k
  DecodeDistanceBlockSwitchInternal(0, s);
1230
206k
}
1231
1232
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
1233
8.42k
    BrotliDecoderState* s) {
1234
8.42k
  return DecodeDistanceBlockSwitchInternal(1, s);
1235
8.42k
}
1236
1237
15.8k
static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
1238
15.8k
  size_t pos = wrap && s->pos > s->ringbuffer_size ?
1239
14.9k
      (size_t)s->ringbuffer_size : (size_t)(s->pos);
1240
15.8k
  size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
1241
15.8k
  return partial_pos_rb - s->partial_pos_out;
1242
15.8k
}
1243
1244
/* Dumps output.
1245
   Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push
1246
   and either ring-buffer is as big as window size, or |force| is true. */
1247
static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
1248
    BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
1249
15.8k
    size_t* total_out, BROTLI_BOOL force) {
1250
15.8k
  uint8_t* start =
1251
15.8k
      s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
1252
15.8k
  size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
1253
15.8k
  size_t num_written = *available_out;
1254
15.8k
  if (num_written > to_write) {
1255
11.8k
    num_written = to_write;
1256
11.8k
  }
1257
15.8k
  if (s->meta_block_remaining_len < 0) {
1258
238
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
1259
238
  }
1260
15.5k
  if (next_out && !*next_out) {
1261
0
    *next_out = start;
1262
15.5k
  } else {
1263
15.5k
    if (next_out) {
1264
15.5k
      memcpy(*next_out, start, num_written);
1265
15.5k
      *next_out += num_written;
1266
15.5k
    }
1267
15.5k
  }
1268
15.5k
  *available_out -= num_written;
1269
15.5k
  BROTLI_LOG_UINT(to_write);
1270
15.5k
  BROTLI_LOG_UINT(num_written);
1271
15.5k
  s->partial_pos_out += num_written;
1272
15.5k
  if (total_out) {
1273
15.5k
    *total_out = s->partial_pos_out;
1274
15.5k
  }
1275
15.5k
  if (num_written < to_write) {
1276
1.55k
    if (s->ringbuffer_size == (1 << s->window_bits) || force) {
1277
1.52k
      return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
1278
1.52k
    } else {
1279
36
      return BROTLI_DECODER_SUCCESS;
1280
36
    }
1281
1.55k
  }
1282
  /* Wrap ring buffer only if it has reached its maximal size. */
1283
14.0k
  if (s->ringbuffer_size == (1 << s->window_bits) &&
1284
11.5k
      s->pos >= s->ringbuffer_size) {
1285
11.1k
    s->pos -= s->ringbuffer_size;
1286
11.1k
    s->rb_roundtrips++;
1287
11.1k
    s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
1288
11.1k
  }
1289
14.0k
  return BROTLI_DECODER_SUCCESS;
1290
15.5k
}
1291
1292
10.7k
static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
1293
10.7k
  if (s->should_wrap_ringbuffer) {
1294
825
    memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
1295
825
    s->should_wrap_ringbuffer = 0;
1296
825
  }
1297
10.7k
}
1298
1299
/* Allocates ring-buffer.
1300
1301
   s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before
1302
   this function is called.
1303
1304
   Last two bytes of ring-buffer are initialized to 0, so context calculation
1305
   could be done uniformly for the first two and all other positions. */
1306
static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
1307
35.1k
    BrotliDecoderState* s) {
1308
35.1k
  uint8_t* old_ringbuffer = s->ringbuffer;
1309
35.1k
  if (s->ringbuffer_size == s->new_ringbuffer_size) {
1310
28.7k
    return BROTLI_TRUE;
1311
28.7k
  }
1312
1313
6.40k
  s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
1314
6.40k
      (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
1315
6.40k
  if (s->ringbuffer == 0) {
1316
    /* Restore previous value. */
1317
0
    s->ringbuffer = old_ringbuffer;
1318
0
    return BROTLI_FALSE;
1319
0
  }
1320
6.40k
  s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
1321
6.40k
  s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
1322
1323
6.40k
  if (!!old_ringbuffer) {
1324
693
    memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
1325
693
    BROTLI_DECODER_FREE(s, old_ringbuffer);
1326
693
  }
1327
1328
6.40k
  s->ringbuffer_size = s->new_ringbuffer_size;
1329
6.40k
  s->ringbuffer_mask = s->new_ringbuffer_size - 1;
1330
6.40k
  s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
1331
1332
6.40k
  return BROTLI_TRUE;
1333
6.40k
}
1334
1335
static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
1336
    size_t* available_out, uint8_t** next_out, size_t* total_out,
1337
9.95k
    BrotliDecoderState* s) {
1338
  /* TODO: avoid allocation for single uncompressed block. */
1339
9.95k
  if (!BrotliEnsureRingBuffer(s)) {
1340
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
1341
0
  }
1342
1343
  /* State machine */
1344
10.4k
  for (;;) {
1345
10.4k
    switch (s->substate_uncompressed) {
1346
10.4k
      case BROTLI_STATE_UNCOMPRESSED_NONE: {
1347
10.4k
        int nbytes = (int)BrotliGetRemainingBytes(&s->br);
1348
10.4k
        if (nbytes > s->meta_block_remaining_len) {
1349
9.72k
          nbytes = s->meta_block_remaining_len;
1350
9.72k
        }
1351
10.4k
        if (s->pos + nbytes > s->ringbuffer_size) {
1352
487
          nbytes = s->ringbuffer_size - s->pos;
1353
487
        }
1354
        /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
1355
10.4k
        BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
1356
10.4k
        s->pos += nbytes;
1357
10.4k
        s->meta_block_remaining_len -= nbytes;
1358
10.4k
        if (s->pos < 1 << s->window_bits) {
1359
9.95k
          if (s->meta_block_remaining_len == 0) {
1360
9.71k
            return BROTLI_DECODER_SUCCESS;
1361
9.71k
          }
1362
244
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
1363
9.95k
        }
1364
495
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
1365
        /* No break, continue to next state. */
1366
495
      }
1367
1368
495
      case BROTLI_STATE_UNCOMPRESSED_WRITE: {
1369
495
        BrotliDecoderErrorCode result;
1370
495
        result = WriteRingBuffer(
1371
495
            s, available_out, next_out, total_out, BROTLI_FALSE);
1372
495
        if (result != BROTLI_DECODER_SUCCESS) {
1373
5
          return result;
1374
5
        }
1375
490
        if (s->ringbuffer_size == 1 << s->window_bits) {
1376
490
          s->max_distance = s->max_backward_distance;
1377
490
        }
1378
490
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
1379
490
        break;
1380
495
      }
1381
10.4k
    }
1382
10.4k
  }
1383
0
  BROTLI_DCHECK(0);  /* Unreachable */
1384
0
}
1385
1386
/* Calculates the smallest feasible ring buffer.
1387
1388
   If we know the data size is small, do not allocate more ring buffer
1389
   size than needed to reduce memory usage.
1390
1391
   When this method is called, metablock size and flags MUST be decoded. */
1392
static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
1393
36.9k
    BrotliDecoderState* s) {
1394
36.9k
  int window_size = 1 << s->window_bits;
1395
36.9k
  int new_ringbuffer_size = window_size;
1396
  /* We need at least 2 bytes of ring buffer size to get the last two
1397
     bytes for context from there */
1398
36.9k
  int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
1399
36.9k
  int output_size;
1400
1401
  /* If maximum is already reached, no further extension is retired. */
1402
36.9k
  if (s->ringbuffer_size == window_size) {
1403
5.85k
    return;
1404
5.85k
  }
1405
1406
  /* Metadata blocks does not touch ring buffer. */
1407
31.0k
  if (s->is_metadata) {
1408
0
    return;
1409
0
  }
1410
1411
31.0k
  if (!s->ringbuffer) {
1412
7.24k
    output_size = 0;
1413
23.8k
  } else {
1414
23.8k
    output_size = s->pos;
1415
23.8k
  }
1416
31.0k
  output_size += s->meta_block_remaining_len;
1417
31.0k
  min_size = min_size < output_size ? output_size : min_size;
1418
1419
31.0k
  if (!!s->canny_ringbuffer_allocation) {
1420
    /* Reduce ring buffer size to save memory when server is unscrupulous.
1421
       In worst case memory usage might be 1.5x bigger for a short period of
1422
       ring buffer reallocation. */
1423
145k
    while ((new_ringbuffer_size >> 1) >= min_size) {
1424
113k
      new_ringbuffer_size >>= 1;
1425
113k
    }
1426
31.0k
  }
1427
1428
31.0k
  s->new_ringbuffer_size = new_ringbuffer_size;
1429
31.0k
}
1430
1431
/* Reads 1..256 2-bit context modes. */
1432
26.4k
static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
1433
26.4k
  BrotliBitReader* br = &s->br;
1434
26.4k
  int i = s->loop_counter;
1435
1436
119k
  while (i < (int)s->num_block_types[0]) {
1437
92.9k
    uint32_t bits;
1438
92.9k
    if (!BrotliSafeReadBits(br, 2, &bits)) {
1439
35
      s->loop_counter = i;
1440
35
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
1441
35
    }
1442
92.9k
    s->context_modes[i] = (uint8_t)bits;
1443
92.9k
    BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
1444
92.9k
    i++;
1445
92.9k
  }
1446
26.3k
  return BROTLI_DECODER_SUCCESS;
1447
26.4k
}
1448
1449
58.0M
static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
1450
58.0M
  if (s->distance_code == 0) {
1451
2.15M
    --s->dist_rb_idx;
1452
2.15M
    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
1453
    /* Compensate double distance-ring-buffer roll for dictionary items. */
1454
2.15M
    s->distance_context = 1;
1455
55.8M
  } else {
1456
55.8M
    int distance_code = s->distance_code << 1;
1457
    /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
1458
        3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
1459
55.8M
    const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
1460
    /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
1461
       -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
1462
55.8M
    const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
1463
55.8M
    int v = (s->dist_rb_idx +
1464
55.8M
        (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
1465
55.8M
    s->distance_code = s->dist_rb[v];
1466
55.8M
    v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
1467
55.8M
    if ((distance_code & 0x3) != 0) {
1468
23.0M
      s->distance_code += v;
1469
32.7M
    } else {
1470
32.7M
      s->distance_code -= v;
1471
32.7M
      if (s->distance_code <= 0) {
1472
        /* A huge distance will cause a BROTLI_FAILURE() soon.
1473
           This is a little faster than failing here. */
1474
62
        s->distance_code = 0x7FFFFFFF;
1475
62
      }
1476
32.7M
    }
1477
55.8M
  }
1478
58.0M
}
1479
1480
static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
1481
360M
    BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
1482
360M
  if (n_bits != 0) {
1483
38.1k
    return BrotliSafeReadBits(br, n_bits, val);
1484
360M
  } else {
1485
360M
    *val = 0;
1486
360M
    return BROTLI_TRUE;
1487
360M
  }
1488
360M
}
1489
1490
/* Precondition: s->distance_code < 0. */
1491
static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
1492
72.4M
    int safe, BrotliDecoderState* s, BrotliBitReader* br) {
1493
72.4M
  int distval;
1494
72.4M
  BrotliBitReaderState memento;
1495
72.4M
  HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
1496
72.4M
  if (!safe) {
1497
19.9M
    s->distance_code = (int)ReadSymbol(distance_tree, br);
1498
52.4M
  } else {
1499
52.4M
    uint32_t code;
1500
52.4M
    BrotliBitReaderSaveState(br, &memento);
1501
52.4M
    if (!SafeReadSymbol(distance_tree, br, &code)) {
1502
73
      return BROTLI_FALSE;
1503
73
    }
1504
52.4M
    s->distance_code = (int)code;
1505
52.4M
  }
1506
  /* Convert the distance code to the actual distance by possibly
1507
     looking up past distances from the s->ringbuffer. */
1508
72.4M
  s->distance_context = 0;
1509
72.4M
  if ((s->distance_code & ~0xF) == 0) {
1510
58.0M
    TakeDistanceFromRingBuffer(s);
1511
58.0M
    --s->block_length[2];
1512
58.0M
    return BROTLI_TRUE;
1513
58.0M
  }
1514
14.4M
  distval = s->distance_code - (int)s->num_direct_distance_codes;
1515
14.4M
  if (distval >= 0) {
1516
6.92M
    uint32_t nbits;
1517
6.92M
    int postfix;
1518
6.92M
    int offset;
1519
6.92M
    if (!safe && (s->distance_postfix_bits == 0)) {
1520
101k
      nbits = ((uint32_t)distval >> 1) + 1;
1521
101k
      offset = ((2 + (distval & 1)) << nbits) - 4;
1522
101k
      s->distance_code = (int)s->num_direct_distance_codes + offset +
1523
101k
                         (int)BrotliReadBits(br, nbits);
1524
6.82M
    } else {
1525
      /* This branch also works well when s->distance_postfix_bits == 0. */
1526
6.82M
      uint32_t bits;
1527
6.82M
      postfix = distval & s->distance_postfix_mask;
1528
6.82M
      distval >>= s->distance_postfix_bits;
1529
6.82M
      nbits = ((uint32_t)distval >> 1) + 1;
1530
6.82M
      if (safe) {
1531
12.8k
        if (!SafeReadBits(br, nbits, &bits)) {
1532
381
          s->distance_code = -1;  /* Restore precondition. */
1533
381
          BrotliBitReaderRestoreState(br, &memento);
1534
381
          return BROTLI_FALSE;
1535
381
        }
1536
6.80M
      } else {
1537
6.80M
        bits = BrotliReadBits(br, nbits);
1538
6.80M
      }
1539
6.82M
      offset = ((2 + (distval & 1)) << nbits) - 4;
1540
6.82M
      s->distance_code = (int)s->num_direct_distance_codes +
1541
6.82M
          ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
1542
6.82M
    }
1543
6.92M
  }
1544
14.4M
  s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
1545
14.4M
  --s->block_length[2];
1546
14.4M
  return BROTLI_TRUE;
1547
14.4M
}
1548
1549
static BROTLI_INLINE void ReadDistance(
1550
19.9M
    BrotliDecoderState* s, BrotliBitReader* br) {
1551
19.9M
  ReadDistanceInternal(0, s, br);
1552
19.9M
}
1553
1554
static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
1555
52.4M
    BrotliDecoderState* s, BrotliBitReader* br) {
1556
52.4M
  return ReadDistanceInternal(1, s, br);
1557
52.4M
}
1558
1559
static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
1560
237M
    int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1561
237M
  uint32_t cmd_code;
1562
237M
  uint32_t insert_len_extra = 0;
1563
237M
  uint32_t copy_length;
1564
237M
  CmdLutElement v;
1565
237M
  BrotliBitReaderState memento;
1566
237M
  if (!safe) {
1567
57.3M
    cmd_code = ReadSymbol(s->htree_command, br);
1568
180M
  } else {
1569
180M
    BrotliBitReaderSaveState(br, &memento);
1570
180M
    if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
1571
78
      return BROTLI_FALSE;
1572
78
    }
1573
180M
  }
1574
237M
  v = kCmdLut[cmd_code];
1575
237M
  s->distance_code = v.distance_code;
1576
237M
  s->distance_context = v.context;
1577
237M
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1578
237M
  *insert_length = v.insert_len_offset;
1579
237M
  if (!safe) {
1580
57.3M
    if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
1581
710k
      insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
1582
710k
    }
1583
57.3M
    copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
1584
180M
  } else {
1585
180M
    if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
1586
180M
        !SafeReadBits(br, v.copy_len_extra_bits, &copy_length)) {
1587
347
      BrotliBitReaderRestoreState(br, &memento);
1588
347
      return BROTLI_FALSE;
1589
347
    }
1590
180M
  }
1591
237M
  s->copy_length = (int)copy_length + v.copy_len_offset;
1592
237M
  --s->block_length[1];
1593
237M
  *insert_length += (int)insert_len_extra;
1594
237M
  return BROTLI_TRUE;
1595
237M
}
1596
1597
static BROTLI_INLINE void ReadCommand(
1598
57.3M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1599
57.3M
  ReadCommandInternal(0, s, br, insert_length);
1600
57.3M
}
1601
1602
static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
1603
180M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1604
180M
  return ReadCommandInternal(1, s, br, insert_length);
1605
180M
}
1606
1607
static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
1608
2.05G
    int safe, BrotliBitReader* const br, size_t num) {
1609
2.05G
  if (safe) {
1610
1.32G
    return BROTLI_TRUE;
1611
1.32G
  }
1612
736M
  return BrotliCheckInputAmount(br, num);
1613
2.05G
}
1614
1615
#define BROTLI_SAFE(METHOD)                       \
1616
311M
  {                                               \
1617
311M
    if (safe) {                                   \
1618
232M
      if (!Safe##METHOD) {                        \
1619
1.34k
        result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
1620
1.34k
        goto saveStateAndReturn;                  \
1621
1.34k
      }                                           \
1622
232M
    } else {                                      \
1623
79.1M
      METHOD;                                     \
1624
79.1M
    }                                             \
1625
311M
  }
1626
1627
static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
1628
42.3k
    int safe, BrotliDecoderState* s) {
1629
42.3k
  int pos = s->pos;
1630
42.3k
  int i = s->loop_counter;
1631
42.3k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
1632
42.3k
  BrotliBitReader* br = &s->br;
1633
1634
42.3k
  if (!CheckInputAmount(safe, br, 28)) {
1635
4.95k
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1636
4.95k
    goto saveStateAndReturn;
1637
4.95k
  }
1638
37.3k
  if (!safe) {
1639
30.9k
    BROTLI_UNUSED(BrotliWarmupBitReader(br));
1640
30.9k
  }
1641
1642
  /* Jump into state machine. */
1643
37.3k
  if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
1644
26.9k
    goto CommandBegin;
1645
26.9k
  } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
1646
4.75k
    goto CommandInner;
1647
5.64k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
1648
1.50k
    goto CommandPostDecodeLiterals;
1649
4.14k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
1650
4.14k
    goto CommandPostWrapCopy;
1651
4.14k
  } else {
1652
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1653
0
  }
1654
1655
239M
CommandBegin:
1656
239M
  if (safe) {
1657
180M
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1658
180M
  }
1659
239M
  if (!CheckInputAmount(safe, br, 28)) {  /* 156 bits + 7 bytes */
1660
692
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1661
692
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1662
692
    goto saveStateAndReturn;
1663
692
  }
1664
239M
  if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
1665
1.45M
    BROTLI_SAFE(DecodeCommandBlockSwitch(s));
1666
1.45M
    goto CommandBegin;
1667
1.45M
  }
1668
  /* Read the insert/copy length in the command. */
1669
237M
  BROTLI_SAFE(ReadCommand(s, br, &i));
1670
237M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
1671
237M
              pos, i, s->copy_length));
1672
237M
  if (i == 0) {
1673
152M
    goto CommandPostDecodeLiterals;
1674
152M
  }
1675
85.1M
  s->meta_block_remaining_len -= i;
1676
1677
85.2M
CommandInner:
1678
85.2M
  if (safe) {
1679
61.2M
    s->state = BROTLI_STATE_COMMAND_INNER;
1680
61.2M
  }
1681
  /* Read the literals in the command. */
1682
85.2M
  if (s->trivial_literal_context) {
1683
69.8M
    uint32_t bits;
1684
69.8M
    uint32_t value;
1685
69.8M
    PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1686
1.68G
    do {
1687
1.68G
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1688
567
        s->state = BROTLI_STATE_COMMAND_INNER;
1689
567
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1690
567
        goto saveStateAndReturn;
1691
567
      }
1692
1.68G
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1693
40.0k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1694
39.8k
        PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1695
39.8k
        if (!s->trivial_literal_context) goto CommandInner;
1696
39.8k
      }
1697
1.68G
      if (!safe) {
1698
574M
        s->ringbuffer[pos] =
1699
574M
            (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
1700
1.11G
      } else {
1701
1.11G
        uint32_t literal;
1702
1.11G
        if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
1703
127
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1704
127
          goto saveStateAndReturn;
1705
127
        }
1706
1.11G
        s->ringbuffer[pos] = (uint8_t)literal;
1707
1.11G
      }
1708
1.68G
      --s->block_length[0];
1709
1.68G
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
1710
1.68G
      ++pos;
1711
1.68G
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1712
2.78k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1713
2.78k
        --i;
1714
2.78k
        goto saveStateAndReturn;
1715
2.78k
      }
1716
1.68G
    } while (--i != 0);
1717
69.8M
  } else {
1718
15.3M
    uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
1719
15.3M
    uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
1720
129M
    do {
1721
129M
      const HuffmanCode* hc;
1722
129M
      uint8_t context;
1723
129M
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1724
272
        s->state = BROTLI_STATE_COMMAND_INNER;
1725
272
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1726
272
        goto saveStateAndReturn;
1727
272
      }
1728
129M
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1729
197k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1730
197k
        if (s->trivial_literal_context) goto CommandInner;
1731
197k
      }
1732
129M
      context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
1733
129M
      BROTLI_LOG_UINT(context);
1734
129M
      hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
1735
129M
      p2 = p1;
1736
129M
      if (!safe) {
1737
102M
        p1 = (uint8_t)ReadSymbol(hc, br);
1738
102M
      } else {
1739
26.9M
        uint32_t literal;
1740
26.9M
        if (!SafeReadSymbol(hc, br, &literal)) {
1741
54
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1742
54
          goto saveStateAndReturn;
1743
54
        }
1744
26.9M
        p1 = (uint8_t)literal;
1745
26.9M
      }
1746
129M
      s->ringbuffer[pos] = p1;
1747
129M
      --s->block_length[0];
1748
129M
      BROTLI_LOG_UINT(s->context_map_slice[context]);
1749
129M
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
1750
129M
      ++pos;
1751
129M
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1752
2.85k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1753
2.85k
        --i;
1754
2.85k
        goto saveStateAndReturn;
1755
2.85k
      }
1756
129M
    } while (--i != 0);
1757
15.3M
  }
1758
85.1M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1759
85.1M
  if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
1760
8.72k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1761
8.72k
    goto saveStateAndReturn;
1762
8.72k
  }
1763
1764
237M
CommandPostDecodeLiterals:
1765
237M
  if (safe) {
1766
180M
    s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
1767
180M
  }
1768
237M
  if (s->distance_code >= 0) {
1769
    /* Implicit distance case. */
1770
165M
    s->distance_context = s->distance_code ? 0 : 1;
1771
165M
    --s->dist_rb_idx;
1772
165M
    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
1773
165M
  } else {
1774
    /* Read distance code in the command, unless it was implicitly zero. */
1775
72.4M
    if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
1776
214k
      BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
1777
214k
    }
1778
72.4M
    BROTLI_SAFE(ReadDistance(s, br));
1779
72.4M
  }
1780
237M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
1781
237M
              pos, s->distance_code));
1782
237M
  if (s->max_distance != s->max_backward_distance) {
1783
235M
    s->max_distance =
1784
235M
        (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
1785
235M
  }
1786
237M
  i = s->copy_length;
1787
  /* Apply copy of LZ77 back-reference, or static dictionary reference if
1788
     the distance is larger than the max LZ77 distance */
1789
237M
  if (s->distance_code > s->max_distance) {
1790
    /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.
1791
       With this choice, no signed overflow can occur after decoding
1792
       a special distance code (e.g., after adding 3 to the last distance). */
1793
356k
    if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
1794
62
      BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1795
62
          "len: %d bytes left: %d\n",
1796
62
          pos, s->distance_code, i, s->meta_block_remaining_len));
1797
62
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
1798
62
    }
1799
356k
    if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
1800
356k
        i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
1801
356k
      int address = s->distance_code - s->max_distance - 1;
1802
356k
      const BrotliDictionary* words = s->dictionary;
1803
356k
      const BrotliTransforms* transforms = s->transforms;
1804
356k
      int offset = (int)s->dictionary->offsets_by_length[i];
1805
356k
      uint32_t shift = s->dictionary->size_bits_by_length[i];
1806
1807
356k
      int mask = (int)BitMask(shift);
1808
356k
      int word_idx = address & mask;
1809
356k
      int transform_idx = address >> shift;
1810
      /* Compensate double distance-ring-buffer roll. */
1811
356k
      s->dist_rb_idx += s->distance_context;
1812
356k
      offset += word_idx * i;
1813
356k
      if (BROTLI_PREDICT_FALSE(!words->data)) {
1814
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
1815
0
      }
1816
356k
      if (transform_idx < (int)transforms->num_transforms) {
1817
356k
        const uint8_t* word = &words->data[offset];
1818
356k
        int len = i;
1819
356k
        if (transform_idx == transforms->cutOffTransforms[0]) {
1820
309k
          memcpy(&s->ringbuffer[pos], word, (size_t)len);
1821
309k
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
1822
309k
                      len, word));
1823
309k
        } else {
1824
47.1k
          len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
1825
47.1k
              transforms, transform_idx);
1826
47.1k
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
1827
47.1k
                      " transform_idx = %d, transformed: [%.*s]\n",
1828
47.1k
                      i, word, transform_idx, len, &s->ringbuffer[pos]));
1829
47.1k
        }
1830
356k
        pos += len;
1831
356k
        s->meta_block_remaining_len -= len;
1832
356k
        if (pos >= s->ringbuffer_size) {
1833
1.15k
          s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
1834
1.15k
          goto saveStateAndReturn;
1835
1.15k
        }
1836
356k
      } else {
1837
197
        BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1838
197
            "len: %d bytes left: %d\n",
1839
197
            pos, s->distance_code, i, s->meta_block_remaining_len));
1840
197
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
1841
197
      }
1842
356k
    } else {
1843
163
      BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1844
163
          "len: %d bytes left: %d\n",
1845
163
          pos, s->distance_code, i, s->meta_block_remaining_len));
1846
163
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
1847
163
    }
1848
237M
  } else {
1849
237M
    int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
1850
237M
    uint8_t* copy_dst = &s->ringbuffer[pos];
1851
237M
    uint8_t* copy_src = &s->ringbuffer[src_start];
1852
237M
    int dst_end = pos + i;
1853
237M
    int src_end = src_start + i;
1854
    /* Update the recent distances cache. */
1855
237M
    s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
1856
237M
    ++s->dist_rb_idx;
1857
237M
    s->meta_block_remaining_len -= i;
1858
    /* There are 32+ bytes of slack in the ring-buffer allocation.
1859
       Also, we have 16 short codes, that make these 16 bytes irrelevant
1860
       in the ring-buffer. Let's copy over them as a first guess. */
1861
237M
    memmove16(copy_dst, copy_src);
1862
237M
    if (src_end > pos && dst_end > src_start) {
1863
      /* Regions intersect. */
1864
35.4M
      goto CommandPostWrapCopy;
1865
35.4M
    }
1866
201M
    if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
1867
      /* At least one region wraps. */
1868
7.89k
      goto CommandPostWrapCopy;
1869
7.89k
    }
1870
201M
    pos += i;
1871
201M
    if (i > 16) {
1872
249k
      if (i > 32) {
1873
114k
        memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
1874
135k
      } else {
1875
        /* This branch covers about 45% cases.
1876
           Fixed size short copy allows more compiler optimizations. */
1877
135k
        memmove16(copy_dst + 16, copy_src + 16);
1878
135k
      }
1879
249k
    }
1880
201M
  }
1881
202M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1882
202M
  if (s->meta_block_remaining_len <= 0) {
1883
    /* Next metablock, if any. */
1884
10.7k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1885
10.7k
    goto saveStateAndReturn;
1886
202M
  } else {
1887
202M
    goto CommandBegin;
1888
202M
  }
1889
35.4M
CommandPostWrapCopy:
1890
35.4M
  {
1891
35.4M
    int wrap_guard = s->ringbuffer_size - pos;
1892
1.32G
    while (--i >= 0) {
1893
1.29G
      s->ringbuffer[pos] =
1894
1.29G
          s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
1895
1.29G
      ++pos;
1896
1.29G
      if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
1897
4.35k
        s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
1898
4.35k
        goto saveStateAndReturn;
1899
4.35k
      }
1900
1.29G
    }
1901
35.4M
  }
1902
35.4M
  if (s->meta_block_remaining_len <= 0) {
1903
    /* Next metablock, if any. */
1904
3.31k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1905
3.31k
    goto saveStateAndReturn;
1906
35.4M
  } else {
1907
35.4M
    goto CommandBegin;
1908
35.4M
  }
1909
1910
41.9k
saveStateAndReturn:
1911
41.9k
  s->pos = pos;
1912
41.9k
  s->loop_counter = i;
1913
41.9k
  return result;
1914
35.4M
}
1915
1916
#undef BROTLI_SAFE
1917
1918
static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
1919
35.8k
    BrotliDecoderState* s) {
1920
35.8k
  return ProcessCommandsInternal(0, s);
1921
35.8k
}
1922
1923
static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
1924
6.48k
    BrotliDecoderState* s) {
1925
6.48k
  return ProcessCommandsInternal(1, s);
1926
6.48k
}
1927
1928
/* Returns the maximum number of distance symbols which can only represent
1929
   distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
1930
0
static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) {
1931
0
  static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
1932
0
  static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
1933
0
  uint32_t postfix = 1U << npostfix;
1934
0
  if (ndirect < bound[npostfix]) {
1935
0
    return ndirect + diff[npostfix] + postfix;
1936
0
  } else if (ndirect > bound[npostfix] + postfix) {
1937
0
    return ndirect + diff[npostfix];
1938
0
  } else {
1939
0
    return bound[npostfix] + diff[npostfix] + postfix;
1940
0
  }
1941
0
}
1942
1943
BrotliDecoderResult BrotliDecoderDecompress(
1944
    size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size,
1945
10.9k
    uint8_t* decoded_buffer) {
1946
10.9k
  BrotliDecoderState s;
1947
10.9k
  BrotliDecoderResult result;
1948
10.9k
  size_t total_out = 0;
1949
10.9k
  size_t available_in = encoded_size;
1950
10.9k
  const uint8_t* next_in = encoded_buffer;
1951
10.9k
  size_t available_out = *decoded_size;
1952
10.9k
  uint8_t* next_out = decoded_buffer;
1953
10.9k
  if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
1954
0
    return BROTLI_DECODER_RESULT_ERROR;
1955
0
  }
1956
10.9k
  result = BrotliDecoderDecompressStream(
1957
10.9k
      &s, &available_in, &next_in, &available_out, &next_out, &total_out);
1958
10.9k
  *decoded_size = total_out;
1959
10.9k
  BrotliDecoderStateCleanup(&s);
1960
10.9k
  if (result != BROTLI_DECODER_RESULT_SUCCESS) {
1961
8.65k
    result = BROTLI_DECODER_RESULT_ERROR;
1962
8.65k
  }
1963
10.9k
  return result;
1964
10.9k
}
1965
1966
/* Invariant: input stream is never overconsumed:
1967
    - invalid input implies that the whole stream is invalid -> any amount of
1968
      input could be read and discarded
1969
    - when result is "needs more input", then at least one more byte is REQUIRED
1970
      to complete decoding; all input data MUST be consumed by decoder, so
1971
      client could swap the input buffer
1972
    - when result is "needs more output" decoder MUST ensure that it doesn't
1973
      hold more than 7 bits in bit reader; this saves client from swapping input
1974
      buffer ahead of time
1975
    - when result is "success" decoder MUST return all unused data back to input
1976
      buffer; this is possible because the invariant is held on enter */
1977
BrotliDecoderResult BrotliDecoderDecompressStream(
1978
    BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
1979
10.9k
    size_t* available_out, uint8_t** next_out, size_t* total_out) {
1980
10.9k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
1981
10.9k
  BrotliBitReader* br = &s->br;
1982
  /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
1983
10.9k
  if (total_out) {
1984
10.9k
    *total_out = s->partial_pos_out;
1985
10.9k
  }
1986
  /* Do not try to process further in a case of unrecoverable error. */
1987
10.9k
  if ((int)s->error_code < 0) {
1988
0
    return BROTLI_DECODER_RESULT_ERROR;
1989
0
  }
1990
10.9k
  if (*available_out && (!next_out || !*next_out)) {
1991
0
    return SaveErrorCode(
1992
0
        s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
1993
0
  }
1994
10.9k
  if (!*available_out) next_out = 0;
1995
10.9k
  if (s->buffer_length == 0) {  /* Just connect bit reader to input stream. */
1996
10.9k
    br->avail_in = *available_in;
1997
10.9k
    br->next_in = *next_in;
1998
10.9k
  } else {
1999
    /* At least one byte of input is required. More than one byte of input may
2000
       be required to complete the transaction -> reading more data must be
2001
       done in a loop -> do it in a main loop. */
2002
0
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2003
0
    br->next_in = &s->buffer.u8[0];
2004
0
  }
2005
  /* State machine */
2006
984k
  for (;;) {
2007
984k
    if (result != BROTLI_DECODER_SUCCESS) {
2008
      /* Error, needs more input/output. */
2009
8.65k
      if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2010
6.30k
        if (s->ringbuffer != 0) {  /* Pro-actively push output. */
2011
1.96k
          BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
2012
1.96k
              available_out, next_out, total_out, BROTLI_TRUE);
2013
          /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
2014
1.96k
          if ((int)intermediate_result < 0) {
2015
34
            result = intermediate_result;
2016
34
            break;
2017
34
          }
2018
1.96k
        }
2019
6.26k
        if (s->buffer_length != 0) {  /* Used with internal buffer. */
2020
0
          if (br->avail_in == 0) {
2021
            /* Successfully finished read transaction.
2022
               Accumulator contains less than 8 bits, because internal buffer
2023
               is expanded byte-by-byte until it is enough to complete read. */
2024
0
            s->buffer_length = 0;
2025
            /* Switch to input stream and restart. */
2026
0
            result = BROTLI_DECODER_SUCCESS;
2027
0
            br->avail_in = *available_in;
2028
0
            br->next_in = *next_in;
2029
0
            continue;
2030
0
          } else if (*available_in != 0) {
2031
            /* Not enough data in buffer, but can take one more byte from
2032
               input stream. */
2033
0
            result = BROTLI_DECODER_SUCCESS;
2034
0
            s->buffer.u8[s->buffer_length] = **next_in;
2035
0
            s->buffer_length++;
2036
0
            br->avail_in = s->buffer_length;
2037
0
            (*next_in)++;
2038
0
            (*available_in)--;
2039
            /* Retry with more data in buffer. */
2040
0
            continue;
2041
0
          }
2042
          /* Can't finish reading and no more input. */
2043
0
          break;
2044
6.26k
        } else {  /* Input stream doesn't contain enough input. */
2045
          /* Copy tail to internal buffer and return. */
2046
6.26k
          *next_in = br->next_in;
2047
6.26k
          *available_in = br->avail_in;
2048
6.33k
          while (*available_in) {
2049
67
            s->buffer.u8[s->buffer_length] = **next_in;
2050
67
            s->buffer_length++;
2051
67
            (*next_in)++;
2052
67
            (*available_in)--;
2053
67
          }
2054
6.26k
          break;
2055
6.26k
        }
2056
        /* Unreachable. */
2057
6.26k
      }
2058
2059
      /* Fail or needs more output. */
2060
2061
2.35k
      if (s->buffer_length != 0) {
2062
        /* Just consumed the buffered input and produced some output. Otherwise
2063
           it would result in "needs more input". Reset internal buffer. */
2064
0
        s->buffer_length = 0;
2065
2.35k
      } else {
2066
        /* Using input stream in last iteration. When decoder switches to input
2067
           stream it has less than 8 bits in accumulator, so it is safe to
2068
           return unused accumulator bits there. */
2069
2.35k
        BrotliBitReaderUnload(br);
2070
2.35k
        *available_in = br->avail_in;
2071
2.35k
        *next_in = br->next_in;
2072
2.35k
      }
2073
2.35k
      break;
2074
8.65k
    }
2075
976k
    switch (s->state) {
2076
10.9k
      case BROTLI_STATE_UNINITED:
2077
        /* Prepare to the first read. */
2078
10.9k
        if (!BrotliWarmupBitReader(br)) {
2079
2.82k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2080
2.82k
          break;
2081
2.82k
        }
2082
        /* Decode window size. */
2083
8.08k
        result = DecodeWindowBits(s, br);  /* Reads 1..8 bits. */
2084
8.08k
        if (result != BROTLI_DECODER_SUCCESS) {
2085
8
          break;
2086
8
        }
2087
8.07k
        if (s->large_window) {
2088
0
          s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
2089
0
          break;
2090
0
        }
2091
8.07k
        s->state = BROTLI_STATE_INITIALIZE;
2092
8.07k
        break;
2093
2094
0
      case BROTLI_STATE_LARGE_WINDOW_BITS:
2095
0
        if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
2096
0
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2097
0
          break;
2098
0
        }
2099
0
        if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
2100
0
            s->window_bits > BROTLI_LARGE_MAX_WBITS) {
2101
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
2102
0
          break;
2103
0
        }
2104
0
        s->state = BROTLI_STATE_INITIALIZE;
2105
        /* No break, continue to next state */
2106
2107
8.07k
      case BROTLI_STATE_INITIALIZE:
2108
8.07k
        BROTLI_LOG_UINT(s->window_bits);
2109
        /* Maximum distance, see section 9.1. of the spec. */
2110
8.07k
        s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;
2111
2112
        /* Allocate memory for both block_type_trees and block_len_trees. */
2113
8.07k
        s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
2114
8.07k
            sizeof(HuffmanCode) * 3 *
2115
8.07k
                (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
2116
8.07k
        if (s->block_type_trees == 0) {
2117
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
2118
0
          break;
2119
0
        }
2120
8.07k
        s->block_len_trees =
2121
8.07k
            s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
2122
2123
8.07k
        s->state = BROTLI_STATE_METABLOCK_BEGIN;
2124
        /* No break, continue to next state. */
2125
2126
256k
      case BROTLI_STATE_METABLOCK_BEGIN:
2127
256k
        BrotliDecoderStateMetablockBegin(s);
2128
256k
        BROTLI_LOG_UINT(s->pos);
2129
256k
        s->state = BROTLI_STATE_METABLOCK_HEADER;
2130
        /* No break, continue to next state. */
2131
2132
256k
      case BROTLI_STATE_METABLOCK_HEADER:
2133
256k
        result = DecodeMetaBlockLength(s, br);  /* Reads 2 - 31 bits. */
2134
256k
        if (result != BROTLI_DECODER_SUCCESS) {
2135
699
          break;
2136
699
        }
2137
255k
        BROTLI_LOG_UINT(s->is_last_metablock);
2138
255k
        BROTLI_LOG_UINT(s->meta_block_remaining_len);
2139
255k
        BROTLI_LOG_UINT(s->is_metadata);
2140
255k
        BROTLI_LOG_UINT(s->is_uncompressed);
2141
255k
        if (s->is_metadata || s->is_uncompressed) {
2142
227k
          if (!BrotliJumpToByteBoundary(br)) {
2143
67
            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
2144
67
            break;
2145
67
          }
2146
227k
        }
2147
255k
        if (s->is_metadata) {
2148
217k
          s->state = BROTLI_STATE_METADATA;
2149
217k
          break;
2150
217k
        }
2151
37.6k
        if (s->meta_block_remaining_len == 0) {
2152
740
          s->state = BROTLI_STATE_METABLOCK_DONE;
2153
740
          break;
2154
740
        }
2155
36.9k
        BrotliCalculateRingBufferSize(s);
2156
36.9k
        if (s->is_uncompressed) {
2157
9.95k
          s->state = BROTLI_STATE_UNCOMPRESSED;
2158
9.95k
          break;
2159
9.95k
        }
2160
26.9k
        s->loop_counter = 0;
2161
26.9k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2162
26.9k
        break;
2163
2164
9.95k
      case BROTLI_STATE_UNCOMPRESSED: {
2165
9.95k
        result = CopyUncompressedBlockToOutput(
2166
9.95k
            available_out, next_out, total_out, s);
2167
9.95k
        if (result != BROTLI_DECODER_SUCCESS) {
2168
249
          break;
2169
249
        }
2170
9.71k
        s->state = BROTLI_STATE_METABLOCK_DONE;
2171
9.71k
        break;
2172
9.95k
      }
2173
2174
217k
      case BROTLI_STATE_METADATA:
2175
2.38M
        for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
2176
2.17M
          uint32_t bits;
2177
          /* Read one byte and ignore it. */
2178
2.17M
          if (!BrotliSafeReadBits(br, 8, &bits)) {
2179
94
            result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2180
94
            break;
2181
94
          }
2182
2.17M
        }
2183
217k
        if (result == BROTLI_DECODER_SUCCESS) {
2184
217k
          s->state = BROTLI_STATE_METABLOCK_DONE;
2185
217k
        }
2186
217k
        break;
2187
2188
106k
      case BROTLI_STATE_HUFFMAN_CODE_0:
2189
106k
        if (s->loop_counter >= 3) {
2190
26.4k
          s->state = BROTLI_STATE_METABLOCK_HEADER_2;
2191
26.4k
          break;
2192
26.4k
        }
2193
        /* Reads 1..11 bits. */
2194
80.1k
        result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
2195
80.1k
        if (result != BROTLI_DECODER_SUCCESS) {
2196
30
          break;
2197
30
        }
2198
80.0k
        s->num_block_types[s->loop_counter]++;
2199
80.0k
        BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
2200
80.0k
        if (s->num_block_types[s->loop_counter] < 2) {
2201
62.6k
          s->loop_counter++;
2202
62.6k
          break;
2203
62.6k
        }
2204
17.3k
        s->state = BROTLI_STATE_HUFFMAN_CODE_1;
2205
        /* No break, continue to next state. */
2206
2207
17.3k
      case BROTLI_STATE_HUFFMAN_CODE_1: {
2208
17.3k
        uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
2209
17.3k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
2210
17.3k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2211
17.3k
            &s->block_type_trees[tree_offset], NULL, s);
2212
17.3k
        if (result != BROTLI_DECODER_SUCCESS) break;
2213
17.0k
        s->state = BROTLI_STATE_HUFFMAN_CODE_2;
2214
        /* No break, continue to next state. */
2215
17.0k
      }
2216
2217
17.0k
      case BROTLI_STATE_HUFFMAN_CODE_2: {
2218
17.0k
        uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
2219
17.0k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2220
17.0k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2221
17.0k
            &s->block_len_trees[tree_offset], NULL, s);
2222
17.0k
        if (result != BROTLI_DECODER_SUCCESS) break;
2223
16.9k
        s->state = BROTLI_STATE_HUFFMAN_CODE_3;
2224
        /* No break, continue to next state. */
2225
16.9k
      }
2226
2227
16.9k
      case BROTLI_STATE_HUFFMAN_CODE_3: {
2228
16.9k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2229
16.9k
        if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
2230
16.9k
            &s->block_len_trees[tree_offset], br)) {
2231
42
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2232
42
          break;
2233
42
        }
2234
16.8k
        BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
2235
16.8k
        s->loop_counter++;
2236
16.8k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2237
16.8k
        break;
2238
16.9k
      }
2239
2240
26.4k
      case BROTLI_STATE_METABLOCK_HEADER_2: {
2241
26.4k
        uint32_t bits;
2242
26.4k
        if (!BrotliSafeReadBits(br, 6, &bits)) {
2243
23
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2244
23
          break;
2245
23
        }
2246
26.4k
        s->distance_postfix_bits = bits & BitMask(2);
2247
26.4k
        bits >>= 2;
2248
26.4k
        s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
2249
26.4k
            (bits << s->distance_postfix_bits);
2250
26.4k
        BROTLI_LOG_UINT(s->num_direct_distance_codes);
2251
26.4k
        BROTLI_LOG_UINT(s->distance_postfix_bits);
2252
26.4k
        s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
2253
26.4k
        s->context_modes =
2254
26.4k
            (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
2255
26.4k
        if (s->context_modes == 0) {
2256
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
2257
0
          break;
2258
0
        }
2259
26.4k
        s->loop_counter = 0;
2260
26.4k
        s->state = BROTLI_STATE_CONTEXT_MODES;
2261
        /* No break, continue to next state. */
2262
26.4k
      }
2263
2264
26.4k
      case BROTLI_STATE_CONTEXT_MODES:
2265
26.4k
        result = ReadContextModes(s);
2266
26.4k
        if (result != BROTLI_DECODER_SUCCESS) {
2267
35
          break;
2268
35
        }
2269
26.3k
        s->state = BROTLI_STATE_CONTEXT_MAP_1;
2270
        /* No break, continue to next state. */
2271
2272
26.3k
      case BROTLI_STATE_CONTEXT_MAP_1:
2273
26.3k
        result = DecodeContextMap(
2274
26.3k
            s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
2275
26.3k
            &s->num_literal_htrees, &s->context_map, s);
2276
26.3k
        if (result != BROTLI_DECODER_SUCCESS) {
2277
307
          break;
2278
307
        }
2279
26.0k
        DetectTrivialLiteralBlockTypes(s);
2280
26.0k
        s->state = BROTLI_STATE_CONTEXT_MAP_2;
2281
        /* No break, continue to next state. */
2282
2283
26.0k
      case BROTLI_STATE_CONTEXT_MAP_2: {
2284
26.0k
        uint32_t num_direct_codes =
2285
26.0k
            s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
2286
26.0k
        uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
2287
26.0k
            num_direct_codes, s->distance_postfix_bits,
2288
26.0k
            (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
2289
26.0k
                               BROTLI_MAX_DISTANCE_BITS));
2290
26.0k
        uint32_t max_distance_symbol = (s->large_window ?
2291
0
            BrotliMaxDistanceSymbol(
2292
0
                num_direct_codes, s->distance_postfix_bits) :
2293
26.0k
            num_distance_codes);
2294
26.0k
        BROTLI_BOOL allocation_success = BROTLI_TRUE;
2295
26.0k
        result = DecodeContextMap(
2296
26.0k
            s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
2297
26.0k
            &s->num_dist_htrees, &s->dist_context_map, s);
2298
26.0k
        if (result != BROTLI_DECODER_SUCCESS) {
2299
129
          break;
2300
129
        }
2301
25.9k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2302
25.9k
            s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
2303
25.9k
            BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
2304
25.9k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2305
25.9k
            s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
2306
25.9k
            BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
2307
25.9k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2308
25.9k
            s, &s->distance_hgroup, num_distance_codes,
2309
25.9k
            max_distance_symbol, s->num_dist_htrees);
2310
25.9k
        if (!allocation_success) {
2311
0
          return SaveErrorCode(s,
2312
0
              BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
2313
0
        }
2314
25.9k
        s->loop_counter = 0;
2315
25.9k
        s->state = BROTLI_STATE_TREE_GROUP;
2316
        /* No break, continue to next state. */
2317
25.9k
      }
2318
2319
76.8k
      case BROTLI_STATE_TREE_GROUP: {
2320
76.8k
        HuffmanTreeGroup* hgroup = NULL;
2321
76.8k
        switch (s->loop_counter) {
2322
25.9k
          case 0: hgroup = &s->literal_hgroup; break;
2323
25.5k
          case 1: hgroup = &s->insert_copy_hgroup; break;
2324
25.3k
          case 2: hgroup = &s->distance_hgroup; break;
2325
0
          default: return SaveErrorCode(s, BROTLI_FAILURE(
2326
0
              BROTLI_DECODER_ERROR_UNREACHABLE));
2327
76.8k
        }
2328
76.8k
        result = HuffmanTreeGroupDecode(hgroup, s);
2329
76.8k
        if (result != BROTLI_DECODER_SUCCESS) break;
2330
76.1k
        s->loop_counter++;
2331
76.1k
        if (s->loop_counter >= 3) {
2332
25.1k
          PrepareLiteralDecoding(s);
2333
25.1k
          s->dist_context_map_slice = s->dist_context_map;
2334
25.1k
          s->htree_command = s->insert_copy_hgroup.htrees[0];
2335
25.1k
          if (!BrotliEnsureRingBuffer(s)) {
2336
0
            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
2337
0
            break;
2338
0
          }
2339
25.1k
          s->state = BROTLI_STATE_COMMAND_BEGIN;
2340
25.1k
        }
2341
76.1k
        break;
2342
76.1k
      }
2343
2344
76.1k
      case BROTLI_STATE_COMMAND_BEGIN:
2345
30.2k
      case BROTLI_STATE_COMMAND_INNER:
2346
31.7k
      case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
2347
35.8k
      case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
2348
35.8k
        result = ProcessCommands(s);
2349
35.8k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2350
6.48k
          result = SafeProcessCommands(s);
2351
6.48k
        }
2352
35.8k
        break;
2353
2354
5.63k
      case BROTLI_STATE_COMMAND_INNER_WRITE:
2355
6.79k
      case BROTLI_STATE_COMMAND_POST_WRITE_1:
2356
11.1k
      case BROTLI_STATE_COMMAND_POST_WRITE_2:
2357
11.1k
        result = WriteRingBuffer(
2358
11.1k
            s, available_out, next_out, total_out, BROTLI_FALSE);
2359
11.1k
        if (result != BROTLI_DECODER_SUCCESS) {
2360
423
          break;
2361
423
        }
2362
10.7k
        WrapRingBuffer(s);
2363
10.7k
        if (s->ringbuffer_size == 1 << s->window_bits) {
2364
10.6k
          s->max_distance = s->max_backward_distance;
2365
10.6k
        }
2366
10.7k
        if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
2367
1.11k
          if (s->meta_block_remaining_len == 0) {
2368
            /* Next metablock, if any. */
2369
2
            s->state = BROTLI_STATE_METABLOCK_DONE;
2370
1.11k
          } else {
2371
1.11k
            s->state = BROTLI_STATE_COMMAND_BEGIN;
2372
1.11k
          }
2373
1.11k
          break;
2374
9.61k
        } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
2375
4.14k
          s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
2376
5.46k
        } else {  /* BROTLI_STATE_COMMAND_INNER_WRITE */
2377
5.46k
          if (s->loop_counter == 0) {
2378
1.55k
            if (s->meta_block_remaining_len == 0) {
2379
52
              s->state = BROTLI_STATE_METABLOCK_DONE;
2380
1.50k
            } else {
2381
1.50k
              s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
2382
1.50k
            }
2383
1.55k
            break;
2384
1.55k
          }
2385
3.91k
          s->state = BROTLI_STATE_COMMAND_INNER;
2386
3.91k
        }
2387
8.06k
        break;
2388
2389
250k
      case BROTLI_STATE_METABLOCK_DONE:
2390
250k
        if (s->meta_block_remaining_len < 0) {
2391
458
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
2392
458
          break;
2393
458
        }
2394
250k
        BrotliDecoderStateCleanupAfterMetablock(s);
2395
250k
        if (!s->is_last_metablock) {
2396
247k
          s->state = BROTLI_STATE_METABLOCK_BEGIN;
2397
247k
          break;
2398
247k
        }
2399
2.34k
        if (!BrotliJumpToByteBoundary(br)) {
2400
71
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
2401
71
          break;
2402
71
        }
2403
2.27k
        if (s->buffer_length == 0) {
2404
2.27k
          BrotliBitReaderUnload(br);
2405
2.27k
          *available_in = br->avail_in;
2406
2.27k
          *next_in = br->next_in;
2407
2.27k
        }
2408
2.27k
        s->state = BROTLI_STATE_DONE;
2409
        /* No break, continue to next state. */
2410
2411
2.27k
      case BROTLI_STATE_DONE:
2412
2.27k
        if (s->ringbuffer != 0) {
2413
2.20k
          result = WriteRingBuffer(
2414
2.20k
              s, available_out, next_out, total_out, BROTLI_TRUE);
2415
2.20k
          if (result != BROTLI_DECODER_SUCCESS) {
2416
22
            break;
2417
22
          }
2418
2.20k
        }
2419
2.25k
        return SaveErrorCode(s, result);
2420
976k
    }
2421
976k
  }
2422
8.65k
  return SaveErrorCode(s, result);
2423
10.9k
}
2424
2425
0
BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
2426
  /* After unrecoverable error remaining output is considered nonsensical. */
2427
0
  if ((int)s->error_code < 0) {
2428
0
    return BROTLI_FALSE;
2429
0
  }
2430
0
  return TO_BROTLI_BOOL(
2431
0
      s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
2432
0
}
2433
2434
0
const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
2435
0
  uint8_t* result = 0;
2436
0
  size_t available_out = *size ? *size : 1u << 24;
2437
0
  size_t requested_out = available_out;
2438
0
  BrotliDecoderErrorCode status;
2439
0
  if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
2440
0
    *size = 0;
2441
0
    return 0;
2442
0
  }
2443
0
  WrapRingBuffer(s);
2444
0
  status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
2445
  /* Either WriteRingBuffer returns those "success" codes... */
2446
0
  if (status == BROTLI_DECODER_SUCCESS ||
2447
0
      status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
2448
0
    *size = requested_out - available_out;
2449
0
  } else {
2450
    /* ... or stream is broken. Normally this should be caught by
2451
       BrotliDecoderDecompressStream, this is just a safeguard. */
2452
0
    if ((int)status < 0) SaveErrorCode(s, status);
2453
0
    *size = 0;
2454
0
    result = 0;
2455
0
  }
2456
0
  return result;
2457
0
}
2458
2459
0
BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
2460
0
  return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
2461
0
      BrotliGetAvailableBits(&s->br) != 0);
2462
0
}
2463
2464
0
BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
2465
0
  return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
2466
0
      !BrotliDecoderHasMoreOutput(s);
2467
0
}
2468
2469
0
BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {
2470
0
  return (BrotliDecoderErrorCode)s->error_code;
2471
0
}
2472
2473
0
const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
2474
0
  switch (c) {
2475
0
#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
2476
0
    case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
2477
0
#define BROTLI_NOTHING_
2478
0
    BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)
2479
0
#undef BROTLI_ERROR_CODE_CASE_
2480
0
#undef BROTLI_NOTHING_
2481
0
    default: return "INVALID";
2482
0
  }
2483
0
}
2484
2485
0
uint32_t BrotliDecoderVersion() {
2486
0
  return BROTLI_VERSION;
2487
0
}
2488
2489
#if defined(__cplusplus) || defined(c_plusplus)
2490
}  /* extern "C" */
2491
#endif