Coverage Report

Created: 2026-10-17 06:16

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.09k
#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.28G
#define HUFFMAN_TABLE_BITS 8U
40
1.70G
#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
11.9k
    BrotliDecoderState* s, BrotliDecoderErrorCode e) {
115
11.9k
  s->error_code = (int)e;
116
11.9k
  switch (e) {
117
2.58k
    case BROTLI_DECODER_SUCCESS:
118
2.58k
      return BROTLI_DECODER_RESULT_SUCCESS;
119
120
7.01k
    case BROTLI_DECODER_NEEDS_MORE_INPUT:
121
7.01k
      return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
122
123
254
    case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
124
254
      return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
125
126
2.09k
    default:
127
2.09k
      return BROTLI_DECODER_RESULT_ERROR;
128
11.9k
  }
129
11.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.52k
                                               BrotliBitReader* br) {
135
8.52k
  uint32_t n;
136
8.52k
  BROTLI_BOOL large_window = s->large_window;
137
8.52k
  s->large_window = BROTLI_FALSE;
138
8.52k
  BrotliTakeBits(br, 1, &n);
139
8.52k
  if (n == 0) {
140
4.90k
    s->window_bits = 16;
141
4.90k
    return BROTLI_DECODER_SUCCESS;
142
4.90k
  }
143
3.62k
  BrotliTakeBits(br, 3, &n);
144
3.62k
  if (n != 0) {
145
2.71k
    s->window_bits = 17 + n;
146
2.71k
    return BROTLI_DECODER_SUCCESS;
147
2.71k
  }
148
901
  BrotliTakeBits(br, 3, &n);
149
901
  if (n == 1) {
150
10
    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
10
    } else {
158
10
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
159
10
    }
160
10
  }
161
891
  if (n != 0) {
162
727
    s->window_bits = 8 + n;
163
727
    return BROTLI_DECODER_SUCCESS;
164
727
  }
165
164
  s->window_bits = 17;
166
164
  return BROTLI_DECODER_SUCCESS;
167
891
}
168
169
296M
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
296M
  uint32_t buffer[4];
174
296M
  memcpy(buffer, src, 16);
175
296M
  memcpy(dst, buffer, 16);
176
296M
#endif
177
296M
}
178
179
/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
180
static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
181
149k
    BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
182
149k
  uint32_t bits;
183
149k
  switch (s->substate_decode_uint8) {
184
149k
    case BROTLI_STATE_DECODE_UINT8_NONE:
185
149k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
186
25
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
187
25
      }
188
149k
      if (bits == 0) {
189
128k
        *value = 0;
190
128k
        return BROTLI_DECODER_SUCCESS;
191
128k
      }
192
      /* No break, transit to the next state. */
193
194
21.3k
    case BROTLI_STATE_DECODE_UINT8_SHORT:
195
21.3k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
196
27
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
197
27
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
198
27
      }
199
21.3k
      if (bits == 0) {
200
2.14k
        *value = 1;
201
2.14k
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
202
2.14k
        return BROTLI_DECODER_SUCCESS;
203
2.14k
      }
204
      /* Use output value as a temporary storage. It MUST be persisted. */
205
19.2k
      *value = bits;
206
      /* No break, transit to the next state. */
207
208
19.2k
    case BROTLI_STATE_DECODE_UINT8_LONG:
209
19.2k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
210
17
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
211
17
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
212
17
      }
213
19.1k
      *value = (1U << *value) + bits;
214
19.1k
      s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
215
19.1k
      return BROTLI_DECODER_SUCCESS;
216
217
0
    default:
218
0
      return
219
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
220
149k
  }
221
149k
}
222
223
/* Decodes a metablock length and flags by reading 2 - 31 bits. */
224
static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
225
287k
    BrotliDecoderState* s, BrotliBitReader* br) {
226
287k
  uint32_t bits;
227
287k
  int i;
228
816k
  for (;;) {
229
816k
    switch (s->substate_metablock_header) {
230
287k
      case BROTLI_STATE_METABLOCK_HEADER_NONE:
231
287k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
232
43
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
233
43
        }
234
287k
        s->is_last_metablock = bits ? 1 : 0;
235
287k
        s->meta_block_remaining_len = 0;
236
287k
        s->is_uncompressed = 0;
237
287k
        s->is_metadata = 0;
238
287k
        if (!s->is_last_metablock) {
239
283k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
240
283k
          break;
241
283k
        }
242
3.87k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
243
        /* No break, transit to the next state. */
244
245
3.87k
      case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
246
3.87k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
247
27
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
248
27
        }
249
3.84k
        if (bits) {
250
802
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
251
802
          return BROTLI_DECODER_SUCCESS;
252
802
        }
253
3.04k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
254
        /* No break, transit to the next state. */
255
256
287k
      case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
257
287k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
258
65
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
259
65
        }
260
286k
        s->size_nibbles = (uint8_t)(bits + 4);
261
286k
        s->loop_counter = 0;
262
286k
        if (bits == 3) {
263
244k
          s->is_metadata = 1;
264
244k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
265
244k
          break;
266
244k
        }
267
42.0k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
268
        /* No break, transit to the next state. */
269
270
42.0k
      case BROTLI_STATE_METABLOCK_HEADER_SIZE:
271
42.0k
        i = s->loop_counter;
272
211k
        for (; i < (int)s->size_nibbles; ++i) {
273
170k
          if (!BrotliSafeReadBits(br, 4, &bits)) {
274
277
            s->loop_counter = i;
275
277
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
276
277
          }
277
169k
          if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
278
21
            return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
279
21
          }
280
169k
          s->meta_block_remaining_len |= (int)(bits << (i * 4));
281
169k
        }
282
41.7k
        s->substate_metablock_header =
283
41.7k
            BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
284
        /* No break, transit to the next state. */
285
286
41.7k
      case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
287
41.7k
        if (!s->is_last_metablock) {
288
39.1k
          if (!BrotliSafeReadBits(br, 1, &bits)) {
289
7
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
290
7
          }
291
39.1k
          s->is_uncompressed = bits ? 1 : 0;
292
39.1k
        }
293
41.7k
        ++s->meta_block_remaining_len;
294
41.7k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
295
41.7k
        return BROTLI_DECODER_SUCCESS;
296
297
244k
      case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
298
244k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
299
20
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
300
20
        }
301
244k
        if (bits != 0) {
302
35
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
303
35
        }
304
244k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
305
        /* No break, transit to the next state. */
306
307
244k
      case BROTLI_STATE_METABLOCK_HEADER_BYTES:
308
244k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
309
38
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
310
38
        }
311
244k
        if (bits == 0) {
312
183k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
313
183k
          return BROTLI_DECODER_SUCCESS;
314
183k
        }
315
60.9k
        s->size_nibbles = (uint8_t)bits;
316
60.9k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
317
        /* No break, transit to the next state. */
318
319
60.9k
      case BROTLI_STATE_METABLOCK_HEADER_METADATA:
320
60.9k
        i = s->loop_counter;
321
122k
        for (; i < (int)s->size_nibbles; ++i) {
322
61.3k
          if (!BrotliSafeReadBits(br, 8, &bits)) {
323
54
            s->loop_counter = i;
324
54
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
325
54
          }
326
61.2k
          if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
327
18
            return BROTLI_FAILURE(
328
18
                BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
329
18
          }
330
61.2k
          s->meta_block_remaining_len |= (int)(bits << (i * 8));
331
61.2k
        }
332
60.9k
        ++s->meta_block_remaining_len;
333
60.9k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
334
60.9k
        return BROTLI_DECODER_SUCCESS;
335
336
0
      default:
337
0
        return
338
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
339
816k
    }
340
816k
  }
341
287k
}
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.29G
                                           BrotliBitReader* br) {
350
1.29G
  table += bits & HUFFMAN_TABLE_MASK;
351
1.29G
  if (table->bits > HUFFMAN_TABLE_BITS) {
352
1.31M
    uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
353
1.31M
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
354
1.31M
    table += table->value;
355
1.31M
    table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
356
1.31M
  }
357
1.29G
  BrotliDropBits(br, table->bits);
358
1.29G
  return table->value;
359
1.29G
}
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
189M
                                         BrotliBitReader* br) {
365
189M
  return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
366
189M
}
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
420M
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
372
420M
  uint32_t val;
373
420M
  uint32_t available_bits = BrotliGetAvailableBits(br);
374
420M
  if (available_bits == 0) {
375
16.2M
    if (table->bits == 0) {
376
16.2M
      *result = table->value;
377
16.2M
      return BROTLI_TRUE;
378
16.2M
    }
379
313
    return BROTLI_FALSE;  /* No valid bits at all. */
380
16.2M
  }
381
404M
  val = (uint32_t)BrotliGetBitsUnmasked(br);
382
404M
  table += val & HUFFMAN_TABLE_MASK;
383
404M
  if (table->bits <= HUFFMAN_TABLE_BITS) {
384
404M
    if (table->bits <= available_bits) {
385
404M
      BrotliDropBits(br, table->bits);
386
404M
      *result = table->value;
387
404M
      return BROTLI_TRUE;
388
404M
    } else {
389
221
      return BROTLI_FALSE;  /* Not enough bits for the first level. */
390
221
    }
391
404M
  }
392
101
  if (available_bits <= HUFFMAN_TABLE_BITS) {
393
41
    return BROTLI_FALSE;  /* Not enough bits to move to the second level. */
394
41
  }
395
396
  /* Speculatively drop HUFFMAN_TABLE_BITS. */
397
60
  val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
398
60
  available_bits -= HUFFMAN_TABLE_BITS;
399
60
  table += table->value + val;
400
60
  if (available_bits < table->bits) {
401
7
    return BROTLI_FALSE;  /* Not enough bits for the second level. */
402
7
  }
403
404
53
  BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
405
53
  *result = table->value;
406
53
  return BROTLI_TRUE;
407
60
}
408
409
static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
410
1.52G
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
411
1.52G
  uint32_t val;
412
1.52G
  if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
413
1.10G
    *result = DecodeSymbol(val, table, br);
414
1.10G
    return BROTLI_TRUE;
415
1.10G
  }
416
420M
  return SafeDecodeSymbol(table, br, result);
417
1.52G
}
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
656M
                                        uint32_t* value) {
425
656M
  if (safe) {
426
74.8M
    return;
427
74.8M
  }
428
581M
  table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
429
581M
  *bits = table->bits;
430
581M
  *value = table->value;
431
581M
}
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
568M
                                                  uint32_t* value) {
439
568M
  uint32_t result = *value;
440
568M
  if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
441
8.18k
    uint32_t val = BrotliGet16BitsUnmasked(br);
442
8.18k
    const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
443
8.18k
    uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
444
8.18k
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
445
8.18k
    ext += (val >> HUFFMAN_TABLE_BITS) & mask;
446
8.18k
    BrotliDropBits(br, ext->bits);
447
8.18k
    result = ext->value;
448
568M
  } else {
449
568M
    BrotliDropBits(br, *bits);
450
568M
  }
451
568M
  PreloadSymbol(0, table, br, bits, value);
452
568M
  return result;
453
568M
}
454
455
117k
static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
456
117k
  uint32_t result = 0;
457
929k
  while (x) {
458
811k
    x >>= 1;
459
811k
    ++result;
460
811k
  }
461
117k
  return result;
462
117k
}
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
117k
    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
117k
  BrotliBitReader* br = &s->br;
471
117k
  uint32_t max_bits = Log2Floor(alphabet_size - 1);
472
117k
  uint32_t i = s->sub_loop_counter;
473
117k
  uint32_t num_symbols = s->symbol;
474
321k
  while (i <= num_symbols) {
475
204k
    uint32_t v;
476
204k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
477
75
      s->sub_loop_counter = i;
478
75
      s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
479
75
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
480
75
    }
481
204k
    if (v >= max_symbol) {
482
44
      return
483
44
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
484
44
    }
485
204k
    s->symbols_lists_array[i] = (uint16_t)v;
486
204k
    BROTLI_LOG_UINT(s->symbols_lists_array[i]);
487
204k
    ++i;
488
204k
  }
489
490
204k
  for (i = 0; i < num_symbols; ++i) {
491
86.5k
    uint32_t k = i + 1;
492
210k
    for (; k <= num_symbols; ++k) {
493
123k
      if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
494
32
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
495
32
      }
496
123k
    }
497
86.5k
  }
498
499
117k
  return BROTLI_DECODER_SUCCESS;
500
117k
}
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
3.01M
    uint16_t* code_length_histo, int* next_symbol) {
512
3.01M
  *repeat = 0;
513
3.01M
  if (code_len != 0) {  /* code_len == 1..15 */
514
1.82M
    symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
515
1.82M
    next_symbol[code_len] = (int)(*symbol);
516
1.82M
    *prev_code_len = code_len;
517
1.82M
    *space -= 32768U >> code_len;
518
1.82M
    code_length_histo[code_len]++;
519
1.82M
    BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n", *symbol, code_len));
520
1.82M
  }
521
3.01M
  (*symbol)++;
522
3.01M
}
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
540k
    uint16_t* code_length_histo, int* next_symbol) {
539
540k
  uint32_t old_repeat;
540
540k
  uint32_t extra_bits = 3;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
541
540k
  uint32_t new_len = 0;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
542
540k
  if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
543
310k
    new_len = *prev_code_len;
544
310k
    extra_bits = 2;
545
310k
  }
546
540k
  if (*repeat_code_len != new_len) {
547
218k
    *repeat = 0;
548
218k
    *repeat_code_len = new_len;
549
218k
  }
550
540k
  old_repeat = *repeat;
551
540k
  if (*repeat > 0) {
552
166k
    *repeat -= 2;
553
166k
    *repeat <<= extra_bits;
554
166k
  }
555
540k
  *repeat += repeat_delta + 3U;
556
540k
  repeat_delta = *repeat - old_repeat;
557
540k
  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
540k
  BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
564
540k
              *symbol, *symbol + repeat_delta - 1, *repeat_code_len));
565
540k
  if (*repeat_code_len != 0) {
566
310k
    unsigned last = *symbol + repeat_delta;
567
310k
    int next = next_symbol[*repeat_code_len];
568
2.04M
    do {
569
2.04M
      symbol_lists[next] = (uint16_t)*symbol;
570
2.04M
      next = (int)*symbol;
571
2.04M
    } while (++(*symbol) != last);
572
310k
    next_symbol[*repeat_code_len] = next;
573
310k
    *space -= repeat_delta << (15 - *repeat_code_len);
574
310k
    code_length_histo[*repeat_code_len] =
575
310k
        (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
576
310k
  } else {
577
229k
    *symbol += repeat_delta;
578
229k
  }
579
540k
}
580
581
/* Reads and decodes symbol codelengths. */
582
static BrotliDecoderErrorCode ReadSymbolCodeLengths(
583
52.9k
    uint32_t alphabet_size, BrotliDecoderState* s) {
584
52.9k
  BrotliBitReader* br = &s->br;
585
52.9k
  uint32_t symbol = s->symbol;
586
52.9k
  uint32_t repeat = s->repeat;
587
52.9k
  uint32_t space = s->space;
588
52.9k
  uint32_t prev_code_len = s->prev_code_len;
589
52.9k
  uint32_t repeat_code_len = s->repeat_code_len;
590
52.9k
  uint16_t* symbol_lists = s->symbol_lists;
591
52.9k
  uint16_t* code_length_histo = s->code_length_histo;
592
52.9k
  int* next_symbol = s->next_symbol;
593
52.9k
  if (!BrotliWarmupBitReader(br)) {
594
31
    return BROTLI_DECODER_NEEDS_MORE_INPUT;
595
31
  }
596
3.57M
  while (symbol < alphabet_size && space > 0) {
597
3.52M
    const HuffmanCode* p = s->table;
598
3.52M
    uint32_t code_len;
599
3.52M
    if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
600
903
      s->symbol = symbol;
601
903
      s->repeat = repeat;
602
903
      s->prev_code_len = prev_code_len;
603
903
      s->repeat_code_len = repeat_code_len;
604
903
      s->space = space;
605
903
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
606
903
    }
607
3.52M
    BrotliFillBitWindow16(br);
608
3.52M
    p += BrotliGetBitsUnmasked(br) &
609
3.52M
        BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
610
3.52M
    BrotliDropBits(br, p->bits);  /* Use 1..5 bits. */
611
3.52M
    code_len = p->value;  /* code_len == 0..17 */
612
3.52M
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
613
2.98M
      ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
614
2.98M
          &prev_code_len, symbol_lists, code_length_histo, next_symbol);
615
2.98M
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
616
539k
      uint32_t extra_bits =
617
539k
          (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
618
539k
      uint32_t repeat_delta =
619
539k
          (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
620
539k
      BrotliDropBits(br, extra_bits);
621
539k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
622
539k
          &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
623
539k
          symbol_lists, code_length_histo, next_symbol);
624
539k
    }
625
3.52M
  }
626
52.0k
  s->space = space;
627
52.0k
  return BROTLI_DECODER_SUCCESS;
628
52.9k
}
629
630
static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
631
934
    uint32_t alphabet_size, BrotliDecoderState* s) {
632
934
  BrotliBitReader* br = &s->br;
633
934
  BROTLI_BOOL get_byte = BROTLI_FALSE;
634
36.2k
  while (s->symbol < alphabet_size && s->space > 0) {
635
35.5k
    const HuffmanCode* p = s->table;
636
35.5k
    uint32_t code_len;
637
35.5k
    uint32_t available_bits;
638
35.5k
    uint32_t bits = 0;
639
35.5k
    if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
640
35.3k
    get_byte = BROTLI_FALSE;
641
35.3k
    available_bits = BrotliGetAvailableBits(br);
642
35.3k
    if (available_bits != 0) {
643
32.5k
      bits = (uint32_t)BrotliGetBitsUnmasked(br);
644
32.5k
    }
645
35.3k
    p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
646
35.3k
    if (p->bits > available_bits) {
647
480
      get_byte = BROTLI_TRUE;
648
480
      continue;
649
480
    }
650
34.8k
    code_len = p->value;  /* code_len == 0..17 */
651
34.8k
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
652
33.1k
      BrotliDropBits(br, p->bits);
653
33.1k
      ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
654
33.1k
          &s->prev_code_len, s->symbol_lists, s->code_length_histo,
655
33.1k
          s->next_symbol);
656
33.1k
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
657
1.65k
      uint32_t extra_bits = code_len - 14U;
658
1.65k
      uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
659
1.65k
      if (available_bits < p->bits + extra_bits) {
660
185
        get_byte = BROTLI_TRUE;
661
185
        continue;
662
185
      }
663
1.46k
      BrotliDropBits(br, p->bits + extra_bits);
664
1.46k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
665
1.46k
          &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
666
1.46k
          &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
667
1.46k
          s->next_symbol);
668
1.46k
    }
669
34.8k
  }
670
709
  return BROTLI_DECODER_SUCCESS;
671
934
}
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
53.5k
static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
676
53.5k
  BrotliBitReader* br = &s->br;
677
53.5k
  uint32_t num_codes = s->repeat;
678
53.5k
  unsigned space = s->space;
679
53.5k
  uint32_t i = s->sub_loop_counter;
680
461k
  for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
681
461k
    const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
682
461k
    uint32_t ix;
683
461k
    uint32_t v;
684
461k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
685
563
      uint32_t available_bits = BrotliGetAvailableBits(br);
686
563
      if (available_bits != 0) {
687
415
        ix = BrotliGetBitsUnmasked(br) & 0xF;
688
415
      } else {
689
148
        ix = 0;
690
148
      }
691
563
      if (kCodeLengthPrefixLength[ix] > available_bits) {
692
299
        s->sub_loop_counter = i;
693
299
        s->repeat = num_codes;
694
299
        s->space = space;
695
299
        s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
696
299
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
697
299
      }
698
563
    }
699
460k
    v = kCodeLengthPrefixValue[ix];
700
460k
    BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
701
460k
    s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
702
460k
    BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
703
460k
    if (v != 0) {
704
372k
      space = space - (32U >> v);
705
372k
      ++num_codes;
706
372k
      ++s->code_length_histo[v];
707
372k
      if (space - 1U >= 32U) {
708
        /* space is 0 or wrapped around. */
709
52.4k
        break;
710
52.4k
      }
711
372k
    }
712
460k
  }
713
53.2k
  if (!(num_codes == 1 || space == 0)) {
714
257
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
715
257
  }
716
52.9k
  return BROTLI_DECODER_SUCCESS;
717
53.2k
}
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
171k
                                              BrotliDecoderState* s) {
735
171k
  BrotliBitReader* br = &s->br;
736
  /* Unnecessary masking, but might be good for safety. */
737
171k
  alphabet_size &= 0x7FF;
738
  /* State machine. */
739
224k
  for (;;) {
740
224k
    switch (s->substate_huffman) {
741
171k
      case BROTLI_STATE_HUFFMAN_NONE:
742
171k
        if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
743
98
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
744
98
        }
745
171k
        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
171k
        if (s->sub_loop_counter != 1) {
750
53.5k
          s->space = 32;
751
53.5k
          s->repeat = 0;  /* num_codes */
752
53.5k
          memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
753
53.5k
              (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
754
53.5k
          memset(&s->code_length_code_lengths[0], 0,
755
53.5k
              sizeof(s->code_length_code_lengths));
756
53.5k
          s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
757
53.5k
          continue;
758
53.5k
        }
759
        /* No break, transit to the next state. */
760
761
117k
      case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
762
        /* Read symbols, codes & code lengths directly. */
763
117k
        if (!BrotliSafeReadBits(br, 2, &s->symbol)) {  /* num_symbols */
764
55
          s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
765
55
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
766
55
        }
767
117k
        s->sub_loop_counter = 0;
768
        /* No break, transit to the next state. */
769
770
117k
      case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
771
117k
        BrotliDecoderErrorCode result =
772
117k
            ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
773
117k
        if (result != BROTLI_DECODER_SUCCESS) {
774
151
          return result;
775
151
        }
776
        /* No break, transit to the next state. */
777
117k
      }
778
779
117k
      case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
780
117k
        uint32_t table_size;
781
117k
        if (s->symbol == 3) {
782
4.03k
          uint32_t bits;
783
4.03k
          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
4.03k
          s->symbol += bits;
788
4.03k
        }
789
117k
        BROTLI_LOG_UINT(s->symbol);
790
117k
        table_size = BrotliBuildSimpleHuffmanTable(
791
117k
            table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
792
117k
        if (opt_table_size) {
793
82.9k
          *opt_table_size = table_size;
794
82.9k
        }
795
117k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
796
117k
        return BROTLI_DECODER_SUCCESS;
797
117k
      }
798
799
      /* Decode Huffman-coded code lengths. */
800
53.5k
      case BROTLI_STATE_HUFFMAN_COMPLEX: {
801
53.5k
        uint32_t i;
802
53.5k
        BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
803
53.5k
        if (result != BROTLI_DECODER_SUCCESS) {
804
556
          return result;
805
556
        }
806
52.9k
        BrotliBuildCodeLengthsHuffmanTable(s->table,
807
52.9k
                                           s->code_length_code_lengths,
808
52.9k
                                           s->code_length_histo);
809
52.9k
        memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
810
900k
        for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
811
847k
          s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
812
847k
          s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
813
847k
        }
814
815
52.9k
        s->symbol = 0;
816
52.9k
        s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
817
52.9k
        s->repeat = 0;
818
52.9k
        s->repeat_code_len = 0;
819
52.9k
        s->space = 32768;
820
52.9k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
821
        /* No break, transit to the next state. */
822
52.9k
      }
823
824
52.9k
      case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
825
52.9k
        uint32_t table_size;
826
52.9k
        BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
827
52.9k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
828
934
          result = SafeReadSymbolCodeLengths(max_symbol, s);
829
934
        }
830
52.9k
        if (result != BROTLI_DECODER_SUCCESS) {
831
225
          return result;
832
225
        }
833
834
52.7k
        if (s->space != 0) {
835
335
          BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", s->space));
836
335
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
837
335
        }
838
52.4k
        table_size = BrotliBuildHuffmanTable(
839
52.4k
            table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
840
52.4k
        if (opt_table_size) {
841
48.1k
          *opt_table_size = table_size;
842
48.1k
        }
843
52.4k
        s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
844
52.4k
        return BROTLI_DECODER_SUCCESS;
845
52.7k
      }
846
847
0
      default:
848
0
        return
849
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
850
224k
    }
851
224k
  }
852
171k
}
853
854
/* Decodes a block length by reading 3..39 bits. */
855
static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
856
2.23M
                                              BrotliBitReader* br) {
857
2.23M
  uint32_t code;
858
2.23M
  uint32_t nbits;
859
2.23M
  code = ReadSymbol(table, br);
860
2.23M
  nbits = kBlockLengthPrefixCode[code].nbits;  /* nbits == 2..24 */
861
2.23M
  return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
862
2.23M
}
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
48.4k
    BrotliBitReader* br) {
869
48.4k
  uint32_t index;
870
48.4k
  if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
871
48.4k
    if (!SafeReadSymbol(table, br, &index)) {
872
95
      return BROTLI_FALSE;
873
95
    }
874
48.4k
  } else {
875
0
    index = s->block_length_index;
876
0
  }
877
48.3k
  {
878
48.3k
    uint32_t bits;
879
48.3k
    uint32_t nbits = kBlockLengthPrefixCode[index].nbits;  /* nbits == 2..24 */
880
48.3k
    if (!BrotliSafeReadBits(br, nbits, &bits)) {
881
390
      s->block_length_index = index;
882
390
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
883
390
      return BROTLI_FALSE;
884
390
    }
885
47.9k
    *result = kBlockLengthPrefixCode[index].offset + bits;
886
47.9k
    s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
887
47.9k
    return BROTLI_TRUE;
888
48.3k
  }
889
48.3k
}
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.26k
    uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
907
  /* Reinitialize elements that could have been changed. */
908
2.26k
  uint32_t i = 1;
909
2.26k
  uint32_t upper_bound = state->mtf_upper_bound;
910
2.26k
  uint32_t* mtf = &state->mtf[1];  /* Make mtf[-1] addressable. */
911
2.26k
  uint8_t* mtf_u8 = (uint8_t*)mtf;
912
  /* Load endian-aware constant. */
913
2.26k
  const uint8_t b0123[4] = {0, 1, 2, 3};
914
2.26k
  uint32_t pattern;
915
2.26k
  memcpy(&pattern, &b0123, 4);
916
917
  /* Initialize list using 4 consequent values pattern. */
918
2.26k
  mtf[0] = pattern;
919
117k
  do {
920
117k
    pattern += 0x04040404;  /* Advance all 4 values by 4. */
921
117k
    mtf[i] = pattern;
922
117k
    i++;
923
117k
  } while (i <= upper_bound);
924
925
  /* Transform the input. */
926
2.26k
  upper_bound = 0;
927
1.12M
  for (i = 0; i < v_len; ++i) {
928
1.11M
    int index = v[i];
929
1.11M
    uint8_t value = mtf_u8[index];
930
1.11M
    upper_bound |= v[i];
931
1.11M
    v[i] = value;
932
1.11M
    mtf_u8[-1] = value;
933
9.76M
    do {
934
9.76M
      index--;
935
9.76M
      mtf_u8[index + 1] = mtf_u8[index];
936
9.76M
    } while (index >= 0);
937
1.11M
  }
938
  /* Remember amount of elements to be reinitialized. */
939
2.26k
  state->mtf_upper_bound = upper_bound >> 2;
940
2.26k
}
941
942
/* Decodes a series of Huffman table using ReadHuffmanCode function. */
943
static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
944
87.0k
    HuffmanTreeGroup* group, BrotliDecoderState* s) {
945
87.0k
  if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
946
87.0k
    s->next = group->codes;
947
87.0k
    s->htree_index = 0;
948
87.0k
    s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
949
87.0k
  }
950
218k
  while (s->htree_index < group->num_htrees) {
951
131k
    uint32_t table_size;
952
131k
    BrotliDecoderErrorCode result =
953
131k
        ReadHuffmanCode(group->alphabet_size, group->max_symbol,
954
131k
                        s->next, &table_size, s);
955
131k
    if (result != BROTLI_DECODER_SUCCESS) return result;
956
131k
    group->htrees[s->htree_index] = s->next;
957
131k
    s->next += table_size;
958
131k
    ++s->htree_index;
959
131k
  }
960
86.2k
  s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
961
86.2k
  return BROTLI_DECODER_SUCCESS;
962
87.0k
}
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
59.2k
                                               BrotliDecoderState* s) {
976
59.2k
  BrotliBitReader* br = &s->br;
977
59.2k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
978
979
59.2k
  switch ((int)s->substate_context_map) {
980
59.2k
    case BROTLI_STATE_CONTEXT_MAP_NONE:
981
59.2k
      result = DecodeVarLenUint8(s, br, num_htrees);
982
59.2k
      if (result != BROTLI_DECODER_SUCCESS) {
983
36
        return result;
984
36
      }
985
59.2k
      (*num_htrees)++;
986
59.2k
      s->context_index = 0;
987
59.2k
      BROTLI_LOG_UINT(context_map_size);
988
59.2k
      BROTLI_LOG_UINT(*num_htrees);
989
59.2k
      *context_map_arg =
990
59.2k
          (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
991
59.2k
      if (*context_map_arg == 0) {
992
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
993
0
      }
994
59.2k
      if (*num_htrees <= 1) {
995
56.3k
        memset(*context_map_arg, 0, (size_t)context_map_size);
996
56.3k
        return BROTLI_DECODER_SUCCESS;
997
56.3k
      }
998
2.91k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
999
      /* No break, continue to next state. */
1000
1001
2.91k
    case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
1002
2.91k
      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.91k
      if (!BrotliSafeGetBits(br, 5, &bits)) {
1006
11
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1007
11
      }
1008
2.90k
      if ((bits & 1) != 0) { /* Use RLE for zeros. */
1009
2.16k
        s->max_run_length_prefix = (bits >> 1) + 1;
1010
2.16k
        BrotliDropBits(br, 5);
1011
2.16k
      } else {
1012
744
        s->max_run_length_prefix = 0;
1013
744
        BrotliDropBits(br, 1);
1014
744
      }
1015
2.90k
      BROTLI_LOG_UINT(s->max_run_length_prefix);
1016
2.90k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
1017
      /* No break, continue to next state. */
1018
2.90k
    }
1019
1020
2.90k
    case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
1021
2.90k
      uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
1022
2.90k
      result = ReadHuffmanCode(alphabet_size, alphabet_size,
1023
2.90k
                               s->context_map_table, NULL, s);
1024
2.90k
      if (result != BROTLI_DECODER_SUCCESS) return result;
1025
2.78k
      s->code = 0xFFFF;
1026
2.78k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
1027
      /* No break, continue to next state. */
1028
2.78k
    }
1029
1030
2.78k
    case BROTLI_STATE_CONTEXT_MAP_DECODE: {
1031
2.78k
      uint32_t context_index = s->context_index;
1032
2.78k
      uint32_t max_run_length_prefix = s->max_run_length_prefix;
1033
2.78k
      uint8_t* context_map = *context_map_arg;
1034
2.78k
      uint32_t code = s->code;
1035
2.78k
      BROTLI_BOOL skip_preamble = (code != 0xFFFF);
1036
624k
      while (context_index < context_map_size || skip_preamble) {
1037
622k
        if (!skip_preamble) {
1038
622k
          if (!SafeReadSymbol(s->context_map_table, br, &code)) {
1039
72
            s->code = 0xFFFF;
1040
72
            s->context_index = context_index;
1041
72
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1042
72
          }
1043
622k
          BROTLI_LOG_UINT(code);
1044
1045
622k
          if (code == 0) {
1046
111k
            context_map[context_index++] = 0;
1047
111k
            continue;
1048
111k
          }
1049
510k
          if (code > max_run_length_prefix) {
1050
420k
            context_map[context_index++] =
1051
420k
                (uint8_t)(code - max_run_length_prefix);
1052
420k
            continue;
1053
420k
          }
1054
510k
        } else {
1055
0
          skip_preamble = BROTLI_FALSE;
1056
0
        }
1057
        /* RLE sub-stage. */
1058
89.6k
        {
1059
89.6k
          uint32_t reps;
1060
89.6k
          if (!BrotliSafeReadBits(br, code, &reps)) {
1061
66
            s->code = code;
1062
66
            s->context_index = context_index;
1063
66
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1064
66
          }
1065
89.6k
          reps += 1U << code;
1066
89.6k
          BROTLI_LOG_UINT(reps);
1067
89.6k
          if (context_index + reps > context_map_size) {
1068
98
            return
1069
98
                BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
1070
98
          }
1071
987k
          do {
1072
987k
            context_map[context_index++] = 0;
1073
987k
          } while (--reps);
1074
89.5k
        }
1075
89.5k
      }
1076
      /* No break, continue to next state. */
1077
2.78k
    }
1078
1079
2.54k
    case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
1080
2.54k
      uint32_t bits;
1081
2.54k
      if (!BrotliSafeReadBits(br, 1, &bits)) {
1082
13
        s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
1083
13
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1084
13
      }
1085
2.53k
      if (bits != 0) {
1086
2.26k
        InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
1087
2.26k
      }
1088
2.53k
      s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
1089
2.53k
      return BROTLI_DECODER_SUCCESS;
1090
2.54k
    }
1091
1092
0
    default:
1093
0
      return
1094
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1095
59.2k
  }
1096
59.2k
}
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
2.26M
    int safe, BrotliDecoderState* s, int tree_type) {
1102
2.26M
  uint32_t max_block_type = s->num_block_types[tree_type];
1103
2.26M
  const HuffmanCode* type_tree = &s->block_type_trees[
1104
2.26M
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
1105
2.26M
  const HuffmanCode* len_tree = &s->block_len_trees[
1106
2.26M
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
1107
2.26M
  BrotliBitReader* br = &s->br;
1108
2.26M
  uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
1109
2.26M
  uint32_t block_type;
1110
2.26M
  if (max_block_type <= 1) {
1111
0
    return BROTLI_FALSE;
1112
0
  }
1113
1114
  /* Read 0..15 + 3..39 bits. */
1115
2.26M
  if (!safe) {
1116
2.23M
    block_type = ReadSymbol(type_tree, br);
1117
2.23M
    s->block_length[tree_type] = ReadBlockLength(len_tree, br);
1118
2.23M
  } else {
1119
30.5k
    BrotliBitReaderState memento;
1120
30.5k
    BrotliBitReaderSaveState(br, &memento);
1121
30.5k
    if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
1122
30.4k
    if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
1123
439
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
1124
439
      BrotliBitReaderRestoreState(br, &memento);
1125
439
      return BROTLI_FALSE;
1126
439
    }
1127
30.4k
  }
1128
1129
2.26M
  if (block_type == 1) {
1130
123k
    block_type = ringbuffer[1] + 1;
1131
2.14M
  } else if (block_type == 0) {
1132
1.88M
    block_type = ringbuffer[0];
1133
1.88M
  } else {
1134
256k
    block_type -= 2;
1135
256k
  }
1136
2.26M
  if (block_type >= max_block_type) {
1137
37.6k
    block_type -= max_block_type;
1138
37.6k
  }
1139
2.26M
  ringbuffer[0] = ringbuffer[1];
1140
2.26M
  ringbuffer[1] = block_type;
1141
2.26M
  return BROTLI_TRUE;
1142
2.26M
}
1143
1144
static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
1145
29.5k
    BrotliDecoderState* s) {
1146
29.5k
  size_t i;
1147
265k
  for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
1148
120k
  for (i = 0; i < s->num_block_types[0]; i++) {
1149
90.5k
    size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
1150
90.5k
    size_t error = 0;
1151
90.5k
    size_t sample = s->context_map[offset];
1152
90.5k
    size_t j;
1153
1.53M
    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
1154
1.44M
      BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
1155
1.44M
    }
1156
90.5k
    if (error == 0) {
1157
73.4k
      s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
1158
73.4k
    }
1159
90.5k
  }
1160
29.5k
}
1161
1162
335k
static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
1163
335k
  uint8_t context_mode;
1164
335k
  size_t trivial;
1165
335k
  uint32_t block_type = s->block_type_rb[1];
1166
335k
  uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
1167
335k
  s->context_map_slice = s->context_map + context_offset;
1168
335k
  trivial = s->trivial_literal_contexts[block_type >> 5];
1169
335k
  s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
1170
335k
  s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
1171
335k
  context_mode = s->context_modes[block_type] & 3;
1172
335k
  s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
1173
335k
}
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
306k
    int safe, BrotliDecoderState* s) {
1179
306k
  if (!DecodeBlockTypeAndLength(safe, s, 0)) {
1180
216
    return BROTLI_FALSE;
1181
216
  }
1182
306k
  PrepareLiteralDecoding(s);
1183
306k
  return BROTLI_TRUE;
1184
306k
}
1185
1186
294k
static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
1187
294k
  DecodeLiteralBlockSwitchInternal(0, s);
1188
294k
}
1189
1190
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
1191
12.5k
    BrotliDecoderState* s) {
1192
12.5k
  return DecodeLiteralBlockSwitchInternal(1, s);
1193
12.5k
}
1194
1195
/* Block switch for insert/copy length.
1196
   Reads 3..54 bits. */
1197
static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
1198
1.72M
    int safe, BrotliDecoderState* s) {
1199
1.72M
  if (!DecodeBlockTypeAndLength(safe, s, 1)) {
1200
131
    return BROTLI_FALSE;
1201
131
  }
1202
1.72M
  s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
1203
1.72M
  return BROTLI_TRUE;
1204
1.72M
}
1205
1206
1.71M
static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
1207
1.71M
  DecodeCommandBlockSwitchInternal(0, s);
1208
1.71M
}
1209
1210
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
1211
8.95k
    BrotliDecoderState* s) {
1212
8.95k
  return DecodeCommandBlockSwitchInternal(1, s);
1213
8.95k
}
1214
1215
/* Block switch for distance codes.
1216
   Reads 3..54 bits. */
1217
static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
1218
238k
    int safe, BrotliDecoderState* s) {
1219
238k
  if (!DecodeBlockTypeAndLength(safe, s, 2)) {
1220
194
    return BROTLI_FALSE;
1221
194
  }
1222
237k
  s->dist_context_map_slice = s->dist_context_map +
1223
237k
      (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
1224
237k
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1225
237k
  return BROTLI_TRUE;
1226
238k
}
1227
1228
229k
static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
1229
229k
  DecodeDistanceBlockSwitchInternal(0, s);
1230
229k
}
1231
1232
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
1233
9.12k
    BrotliDecoderState* s) {
1234
9.12k
  return DecodeDistanceBlockSwitchInternal(1, s);
1235
9.12k
}
1236
1237
18.2k
static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
1238
18.2k
  size_t pos = wrap && s->pos > s->ringbuffer_size ?
1239
17.3k
      (size_t)s->ringbuffer_size : (size_t)(s->pos);
1240
18.2k
  size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
1241
18.2k
  return partial_pos_rb - s->partial_pos_out;
1242
18.2k
}
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
18.2k
    size_t* total_out, BROTLI_BOOL force) {
1250
18.2k
  uint8_t* start =
1251
18.2k
      s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
1252
18.2k
  size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
1253
18.2k
  size_t num_written = *available_out;
1254
18.2k
  if (num_written > to_write) {
1255
13.9k
    num_written = to_write;
1256
13.9k
  }
1257
18.2k
  if (s->meta_block_remaining_len < 0) {
1258
242
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
1259
242
  }
1260
18.0k
  if (next_out && !*next_out) {
1261
0
    *next_out = start;
1262
18.0k
  } else {
1263
18.0k
    if (next_out) {
1264
18.0k
      memcpy(*next_out, start, num_written);
1265
18.0k
      *next_out += num_written;
1266
18.0k
    }
1267
18.0k
  }
1268
18.0k
  *available_out -= num_written;
1269
18.0k
  BROTLI_LOG_UINT(to_write);
1270
18.0k
  BROTLI_LOG_UINT(num_written);
1271
18.0k
  s->partial_pos_out += num_written;
1272
18.0k
  if (total_out) {
1273
18.0k
    *total_out = s->partial_pos_out;
1274
18.0k
  }
1275
18.0k
  if (num_written < to_write) {
1276
1.64k
    if (s->ringbuffer_size == (1 << s->window_bits) || force) {
1277
1.60k
      return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
1278
1.60k
    } else {
1279
40
      return BROTLI_DECODER_SUCCESS;
1280
40
    }
1281
1.64k
  }
1282
  /* Wrap ring buffer only if it has reached its maximal size. */
1283
16.4k
  if (s->ringbuffer_size == (1 << s->window_bits) &&
1284
13.5k
      s->pos >= s->ringbuffer_size) {
1285
13.1k
    s->pos -= s->ringbuffer_size;
1286
13.1k
    s->rb_roundtrips++;
1287
13.1k
    s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
1288
13.1k
  }
1289
16.4k
  return BROTLI_DECODER_SUCCESS;
1290
18.0k
}
1291
1292
12.6k
static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
1293
12.6k
  if (s->should_wrap_ringbuffer) {
1294
895
    memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
1295
895
    s->should_wrap_ringbuffer = 0;
1296
895
  }
1297
12.6k
}
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
39.8k
    BrotliDecoderState* s) {
1308
39.8k
  uint8_t* old_ringbuffer = s->ringbuffer;
1309
39.8k
  if (s->ringbuffer_size == s->new_ringbuffer_size) {
1310
32.9k
    return BROTLI_TRUE;
1311
32.9k
  }
1312
1313
6.85k
  s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
1314
6.85k
      (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
1315
6.85k
  if (s->ringbuffer == 0) {
1316
    /* Restore previous value. */
1317
0
    s->ringbuffer = old_ringbuffer;
1318
0
    return BROTLI_FALSE;
1319
0
  }
1320
6.85k
  s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
1321
6.85k
  s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
1322
1323
6.85k
  if (!!old_ringbuffer) {
1324
679
    memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
1325
679
    BROTLI_DECODER_FREE(s, old_ringbuffer);
1326
679
  }
1327
1328
6.85k
  s->ringbuffer_size = s->new_ringbuffer_size;
1329
6.85k
  s->ringbuffer_mask = s->new_ringbuffer_size - 1;
1330
6.85k
  s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
1331
1332
6.85k
  return BROTLI_TRUE;
1333
6.85k
}
1334
1335
static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
1336
    size_t* available_out, uint8_t** next_out, size_t* total_out,
1337
11.2k
    BrotliDecoderState* s) {
1338
  /* TODO: avoid allocation for single uncompressed block. */
1339
11.2k
  if (!BrotliEnsureRingBuffer(s)) {
1340
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
1341
0
  }
1342
1343
  /* State machine */
1344
11.8k
  for (;;) {
1345
11.8k
    switch (s->substate_uncompressed) {
1346
11.8k
      case BROTLI_STATE_UNCOMPRESSED_NONE: {
1347
11.8k
        int nbytes = (int)BrotliGetRemainingBytes(&s->br);
1348
11.8k
        if (nbytes > s->meta_block_remaining_len) {
1349
11.0k
          nbytes = s->meta_block_remaining_len;
1350
11.0k
        }
1351
11.8k
        if (s->pos + nbytes > s->ringbuffer_size) {
1352
563
          nbytes = s->ringbuffer_size - s->pos;
1353
563
        }
1354
        /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
1355
11.8k
        BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
1356
11.8k
        s->pos += nbytes;
1357
11.8k
        s->meta_block_remaining_len -= nbytes;
1358
11.8k
        if (s->pos < 1 << s->window_bits) {
1359
11.2k
          if (s->meta_block_remaining_len == 0) {
1360
11.0k
            return BROTLI_DECODER_SUCCESS;
1361
11.0k
          }
1362
249
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
1363
11.2k
        }
1364
567
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
1365
        /* No break, continue to next state. */
1366
567
      }
1367
1368
567
      case BROTLI_STATE_UNCOMPRESSED_WRITE: {
1369
567
        BrotliDecoderErrorCode result;
1370
567
        result = WriteRingBuffer(
1371
567
            s, available_out, next_out, total_out, BROTLI_FALSE);
1372
567
        if (result != BROTLI_DECODER_SUCCESS) {
1373
5
          return result;
1374
5
        }
1375
562
        if (s->ringbuffer_size == 1 << s->window_bits) {
1376
562
          s->max_distance = s->max_backward_distance;
1377
562
        }
1378
562
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
1379
562
        break;
1380
567
      }
1381
11.8k
    }
1382
11.8k
  }
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
41.6k
    BrotliDecoderState* s) {
1394
41.6k
  int window_size = 1 << s->window_bits;
1395
41.6k
  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
41.6k
  int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
1399
41.6k
  int output_size;
1400
1401
  /* If maximum is already reached, no further extension is retired. */
1402
41.6k
  if (s->ringbuffer_size == window_size) {
1403
4.97k
    return;
1404
4.97k
  }
1405
1406
  /* Metadata blocks does not touch ring buffer. */
1407
36.7k
  if (s->is_metadata) {
1408
0
    return;
1409
0
  }
1410
1411
36.7k
  if (!s->ringbuffer) {
1412
7.74k
    output_size = 0;
1413
28.9k
  } else {
1414
28.9k
    output_size = s->pos;
1415
28.9k
  }
1416
36.7k
  output_size += s->meta_block_remaining_len;
1417
36.7k
  min_size = min_size < output_size ? output_size : min_size;
1418
1419
36.7k
  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
167k
    while ((new_ringbuffer_size >> 1) >= min_size) {
1424
131k
      new_ringbuffer_size >>= 1;
1425
131k
    }
1426
36.7k
  }
1427
1428
36.7k
  s->new_ringbuffer_size = new_ringbuffer_size;
1429
36.7k
}
1430
1431
/* Reads 1..256 2-bit context modes. */
1432
29.8k
static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
1433
29.8k
  BrotliBitReader* br = &s->br;
1434
29.8k
  int i = s->loop_counter;
1435
1436
128k
  while (i < (int)s->num_block_types[0]) {
1437
98.6k
    uint32_t bits;
1438
98.6k
    if (!BrotliSafeReadBits(br, 2, &bits)) {
1439
43
      s->loop_counter = i;
1440
43
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
1441
43
    }
1442
98.6k
    s->context_modes[i] = (uint8_t)bits;
1443
98.6k
    BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
1444
98.6k
    i++;
1445
98.6k
  }
1446
29.7k
  return BROTLI_DECODER_SUCCESS;
1447
29.8k
}
1448
1449
95.8M
static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
1450
95.8M
  if (s->distance_code == 0) {
1451
26.8M
    --s->dist_rb_idx;
1452
26.8M
    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
1453
    /* Compensate double distance-ring-buffer roll for dictionary items. */
1454
26.8M
    s->distance_context = 1;
1455
68.9M
  } else {
1456
68.9M
    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
68.9M
    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
68.9M
    const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
1463
68.9M
    int v = (s->dist_rb_idx +
1464
68.9M
        (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
1465
68.9M
    s->distance_code = s->dist_rb[v];
1466
68.9M
    v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
1467
68.9M
    if ((distance_code & 0x3) != 0) {
1468
23.4M
      s->distance_code += v;
1469
45.4M
    } else {
1470
45.4M
      s->distance_code -= v;
1471
45.4M
      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
45.4M
    }
1477
68.9M
  }
1478
95.8M
}
1479
1480
static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
1481
432M
    BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
1482
432M
  if (n_bits != 0) {
1483
41.1k
    return BrotliSafeReadBits(br, n_bits, val);
1484
432M
  } else {
1485
432M
    *val = 0;
1486
432M
    return BROTLI_TRUE;
1487
432M
  }
1488
432M
}
1489
1490
/* Precondition: s->distance_code < 0. */
1491
static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
1492
108M
    int safe, BrotliDecoderState* s, BrotliBitReader* br) {
1493
108M
  int distval;
1494
108M
  BrotliBitReaderState memento;
1495
108M
  HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
1496
108M
  if (!safe) {
1497
27.5M
    s->distance_code = (int)ReadSymbol(distance_tree, br);
1498
80.7M
  } else {
1499
80.7M
    uint32_t code;
1500
80.7M
    BrotliBitReaderSaveState(br, &memento);
1501
80.7M
    if (!SafeReadSymbol(distance_tree, br, &code)) {
1502
61
      return BROTLI_FALSE;
1503
61
    }
1504
80.7M
    s->distance_code = (int)code;
1505
80.7M
  }
1506
  /* Convert the distance code to the actual distance by possibly
1507
     looking up past distances from the s->ringbuffer. */
1508
108M
  s->distance_context = 0;
1509
108M
  if ((s->distance_code & ~0xF) == 0) {
1510
95.8M
    TakeDistanceFromRingBuffer(s);
1511
95.8M
    --s->block_length[2];
1512
95.8M
    return BROTLI_TRUE;
1513
95.8M
  }
1514
12.5M
  distval = s->distance_code - (int)s->num_direct_distance_codes;
1515
12.5M
  if (distval >= 0) {
1516
7.23M
    uint32_t nbits;
1517
7.23M
    int postfix;
1518
7.23M
    int offset;
1519
7.23M
    if (!safe && (s->distance_postfix_bits == 0)) {
1520
134k
      nbits = ((uint32_t)distval >> 1) + 1;
1521
134k
      offset = ((2 + (distval & 1)) << nbits) - 4;
1522
134k
      s->distance_code = (int)s->num_direct_distance_codes + offset +
1523
134k
                         (int)BrotliReadBits(br, nbits);
1524
7.09M
    } else {
1525
      /* This branch also works well when s->distance_postfix_bits == 0. */
1526
7.09M
      uint32_t bits;
1527
7.09M
      postfix = distval & s->distance_postfix_mask;
1528
7.09M
      distval >>= s->distance_postfix_bits;
1529
7.09M
      nbits = ((uint32_t)distval >> 1) + 1;
1530
7.09M
      if (safe) {
1531
13.1k
        if (!SafeReadBits(br, nbits, &bits)) {
1532
404
          s->distance_code = -1;  /* Restore precondition. */
1533
404
          BrotliBitReaderRestoreState(br, &memento);
1534
404
          return BROTLI_FALSE;
1535
404
        }
1536
7.08M
      } else {
1537
7.08M
        bits = BrotliReadBits(br, nbits);
1538
7.08M
      }
1539
7.09M
      offset = ((2 + (distval & 1)) << nbits) - 4;
1540
7.09M
      s->distance_code = (int)s->num_direct_distance_codes +
1541
7.09M
          ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
1542
7.09M
    }
1543
7.23M
  }
1544
12.5M
  s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
1545
12.5M
  --s->block_length[2];
1546
12.5M
  return BROTLI_TRUE;
1547
12.5M
}
1548
1549
static BROTLI_INLINE void ReadDistance(
1550
27.5M
    BrotliDecoderState* s, BrotliBitReader* br) {
1551
27.5M
  ReadDistanceInternal(0, s, br);
1552
27.5M
}
1553
1554
static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
1555
80.7M
    BrotliDecoderState* s, BrotliBitReader* br) {
1556
80.7M
  return ReadDistanceInternal(1, s, br);
1557
80.7M
}
1558
1559
static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
1560
296M
    int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1561
296M
  uint32_t cmd_code;
1562
296M
  uint32_t insert_len_extra = 0;
1563
296M
  uint32_t copy_length;
1564
296M
  CmdLutElement v;
1565
296M
  BrotliBitReaderState memento;
1566
296M
  if (!safe) {
1567
80.2M
    cmd_code = ReadSymbol(s->htree_command, br);
1568
216M
  } else {
1569
216M
    BrotliBitReaderSaveState(br, &memento);
1570
216M
    if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
1571
57
      return BROTLI_FALSE;
1572
57
    }
1573
216M
  }
1574
296M
  v = kCmdLut[cmd_code];
1575
296M
  s->distance_code = v.distance_code;
1576
296M
  s->distance_context = v.context;
1577
296M
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1578
296M
  *insert_length = v.insert_len_offset;
1579
296M
  if (!safe) {
1580
80.2M
    if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
1581
663k
      insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
1582
663k
    }
1583
80.2M
    copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
1584
216M
  } else {
1585
216M
    if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
1586
216M
        !SafeReadBits(br, v.copy_len_extra_bits, &copy_length)) {
1587
388
      BrotliBitReaderRestoreState(br, &memento);
1588
388
      return BROTLI_FALSE;
1589
388
    }
1590
216M
  }
1591
296M
  s->copy_length = (int)copy_length + v.copy_len_offset;
1592
296M
  --s->block_length[1];
1593
296M
  *insert_length += (int)insert_len_extra;
1594
296M
  return BROTLI_TRUE;
1595
296M
}
1596
1597
static BROTLI_INLINE void ReadCommand(
1598
80.2M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1599
80.2M
  ReadCommandInternal(0, s, br, insert_length);
1600
80.2M
}
1601
1602
static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
1603
216M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1604
216M
  return ReadCommandInternal(1, s, br, insert_length);
1605
216M
}
1606
1607
static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
1608
2.17G
    int safe, BrotliBitReader* const br, size_t num) {
1609
2.17G
  if (safe) {
1610
1.44G
    return BROTLI_TRUE;
1611
1.44G
  }
1612
728M
  return BrotliCheckInputAmount(br, num);
1613
2.17G
}
1614
1615
#define BROTLI_SAFE(METHOD)                       \
1616
407M
  {                                               \
1617
407M
    if (safe) {                                   \
1618
297M
      if (!Safe##METHOD) {                        \
1619
1.45k
        result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
1620
1.45k
        goto saveStateAndReturn;                  \
1621
1.45k
      }                                           \
1622
297M
    } else {                                      \
1623
110M
      METHOD;                                     \
1624
110M
    }                                             \
1625
407M
  }
1626
1627
static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
1628
48.3k
    int safe, BrotliDecoderState* s) {
1629
48.3k
  int pos = s->pos;
1630
48.3k
  int i = s->loop_counter;
1631
48.3k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
1632
48.3k
  BrotliBitReader* br = &s->br;
1633
1634
48.3k
  if (!CheckInputAmount(safe, br, 28)) {
1635
5.42k
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1636
5.42k
    goto saveStateAndReturn;
1637
5.42k
  }
1638
42.8k
  if (!safe) {
1639
35.7k
    BROTLI_UNUSED(BrotliWarmupBitReader(br));
1640
35.7k
  }
1641
1642
  /* Jump into state machine. */
1643
42.8k
  if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
1644
30.5k
    goto CommandBegin;
1645
30.5k
  } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
1646
5.87k
    goto CommandInner;
1647
6.46k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
1648
1.44k
    goto CommandPostDecodeLiterals;
1649
5.01k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
1650
5.01k
    goto CommandPostWrapCopy;
1651
5.01k
  } else {
1652
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1653
0
  }
1654
1655
298M
CommandBegin:
1656
298M
  if (safe) {
1657
216M
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1658
216M
  }
1659
298M
  if (!CheckInputAmount(safe, br, 28)) {  /* 156 bits + 7 bytes */
1660
789
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1661
789
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1662
789
    goto saveStateAndReturn;
1663
789
  }
1664
298M
  if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
1665
1.72M
    BROTLI_SAFE(DecodeCommandBlockSwitch(s));
1666
1.72M
    goto CommandBegin;
1667
1.72M
  }
1668
  /* Read the insert/copy length in the command. */
1669
296M
  BROTLI_SAFE(ReadCommand(s, br, &i));
1670
296M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
1671
296M
              pos, i, s->copy_length));
1672
296M
  if (i == 0) {
1673
191M
    goto CommandPostDecodeLiterals;
1674
191M
  }
1675
105M
  s->meta_block_remaining_len -= i;
1676
1677
105M
CommandInner:
1678
105M
  if (safe) {
1679
75.2M
    s->state = BROTLI_STATE_COMMAND_INNER;
1680
75.2M
  }
1681
  /* Read the literals in the command. */
1682
105M
  if (s->trivial_literal_context) {
1683
87.5M
    uint32_t bits;
1684
87.5M
    uint32_t value;
1685
87.5M
    PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1686
1.76G
    do {
1687
1.76G
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1688
642
        s->state = BROTLI_STATE_COMMAND_INNER;
1689
642
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1690
642
        goto saveStateAndReturn;
1691
642
      }
1692
1.76G
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1693
39.0k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1694
38.8k
        PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1695
38.8k
        if (!s->trivial_literal_context) goto CommandInner;
1696
38.8k
      }
1697
1.76G
      if (!safe) {
1698
568M
        s->ringbuffer[pos] =
1699
568M
            (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
1700
1.19G
      } else {
1701
1.19G
        uint32_t literal;
1702
1.19G
        if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
1703
131
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1704
131
          goto saveStateAndReturn;
1705
131
        }
1706
1.19G
        s->ringbuffer[pos] = (uint8_t)literal;
1707
1.19G
      }
1708
1.76G
      --s->block_length[0];
1709
1.76G
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
1710
1.76G
      ++pos;
1711
1.76G
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1712
3.36k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1713
3.36k
        --i;
1714
3.36k
        goto saveStateAndReturn;
1715
3.36k
      }
1716
1.76G
    } while (--i != 0);
1717
87.5M
  } else {
1718
17.8M
    uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
1719
17.8M
    uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
1720
107M
    do {
1721
107M
      const HuffmanCode* hc;
1722
107M
      uint8_t context;
1723
107M
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1724
285
        s->state = BROTLI_STATE_COMMAND_INNER;
1725
285
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1726
285
        goto saveStateAndReturn;
1727
285
      }
1728
107M
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1729
267k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1730
267k
        if (s->trivial_literal_context) goto CommandInner;
1731
267k
      }
1732
107M
      context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
1733
107M
      BROTLI_LOG_UINT(context);
1734
107M
      hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
1735
107M
      p2 = p1;
1736
107M
      if (!safe) {
1737
77.6M
        p1 = (uint8_t)ReadSymbol(hc, br);
1738
77.6M
      } else {
1739
29.8M
        uint32_t literal;
1740
29.8M
        if (!SafeReadSymbol(hc, br, &literal)) {
1741
64
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1742
64
          goto saveStateAndReturn;
1743
64
        }
1744
29.8M
        p1 = (uint8_t)literal;
1745
29.8M
      }
1746
107M
      s->ringbuffer[pos] = p1;
1747
107M
      --s->block_length[0];
1748
107M
      BROTLI_LOG_UINT(s->context_map_slice[context]);
1749
107M
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
1750
107M
      ++pos;
1751
107M
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1752
3.25k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1753
3.25k
        --i;
1754
3.25k
        goto saveStateAndReturn;
1755
3.25k
      }
1756
107M
    } while (--i != 0);
1757
17.8M
  }
1758
105M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1759
105M
  if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
1760
10.8k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1761
10.8k
    goto saveStateAndReturn;
1762
10.8k
  }
1763
1764
296M
CommandPostDecodeLiterals:
1765
296M
  if (safe) {
1766
216M
    s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
1767
216M
  }
1768
296M
  if (s->distance_code >= 0) {
1769
    /* Implicit distance case. */
1770
188M
    s->distance_context = s->distance_code ? 0 : 1;
1771
188M
    --s->dist_rb_idx;
1772
188M
    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
1773
188M
  } else {
1774
    /* Read distance code in the command, unless it was implicitly zero. */
1775
108M
    if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
1776
238k
      BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
1777
237k
    }
1778
108M
    BROTLI_SAFE(ReadDistance(s, br));
1779
108M
  }
1780
296M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
1781
296M
              pos, s->distance_code));
1782
296M
  if (s->max_distance != s->max_backward_distance) {
1783
294M
    s->max_distance =
1784
294M
        (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
1785
294M
  }
1786
296M
  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
296M
  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
334k
    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
334k
    if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
1800
334k
        i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
1801
334k
      int address = s->distance_code - s->max_distance - 1;
1802
334k
      const BrotliDictionary* words = s->dictionary;
1803
334k
      const BrotliTransforms* transforms = s->transforms;
1804
334k
      int offset = (int)s->dictionary->offsets_by_length[i];
1805
334k
      uint32_t shift = s->dictionary->size_bits_by_length[i];
1806
1807
334k
      int mask = (int)BitMask(shift);
1808
334k
      int word_idx = address & mask;
1809
334k
      int transform_idx = address >> shift;
1810
      /* Compensate double distance-ring-buffer roll. */
1811
334k
      s->dist_rb_idx += s->distance_context;
1812
334k
      offset += word_idx * i;
1813
334k
      if (BROTLI_PREDICT_FALSE(!words->data)) {
1814
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
1815
0
      }
1816
334k
      if (transform_idx < (int)transforms->num_transforms) {
1817
334k
        const uint8_t* word = &words->data[offset];
1818
334k
        int len = i;
1819
334k
        if (transform_idx == transforms->cutOffTransforms[0]) {
1820
302k
          memcpy(&s->ringbuffer[pos], word, (size_t)len);
1821
302k
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
1822
302k
                      len, word));
1823
302k
        } else {
1824
31.8k
          len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
1825
31.8k
              transforms, transform_idx);
1826
31.8k
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
1827
31.8k
                      " transform_idx = %d, transformed: [%.*s]\n",
1828
31.8k
                      i, word, transform_idx, len, &s->ringbuffer[pos]));
1829
31.8k
        }
1830
334k
        pos += len;
1831
334k
        s->meta_block_remaining_len -= len;
1832
334k
        if (pos >= s->ringbuffer_size) {
1833
1.23k
          s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
1834
1.23k
          goto saveStateAndReturn;
1835
1.23k
        }
1836
334k
      } else {
1837
159
        BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1838
159
            "len: %d bytes left: %d\n",
1839
159
            pos, s->distance_code, i, s->meta_block_remaining_len));
1840
159
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
1841
159
      }
1842
334k
    } else {
1843
196
      BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1844
196
          "len: %d bytes left: %d\n",
1845
196
          pos, s->distance_code, i, s->meta_block_remaining_len));
1846
196
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
1847
196
    }
1848
296M
  } else {
1849
296M
    int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
1850
296M
    uint8_t* copy_dst = &s->ringbuffer[pos];
1851
296M
    uint8_t* copy_src = &s->ringbuffer[src_start];
1852
296M
    int dst_end = pos + i;
1853
296M
    int src_end = src_start + i;
1854
    /* Update the recent distances cache. */
1855
296M
    s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
1856
296M
    ++s->dist_rb_idx;
1857
296M
    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
296M
    memmove16(copy_dst, copy_src);
1862
296M
    if (src_end > pos && dst_end > src_start) {
1863
      /* Regions intersect. */
1864
71.2M
      goto CommandPostWrapCopy;
1865
71.2M
    }
1866
224M
    if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
1867
      /* At least one region wraps. */
1868
6.72k
      goto CommandPostWrapCopy;
1869
6.72k
    }
1870
224M
    pos += i;
1871
224M
    if (i > 16) {
1872
253k
      if (i > 32) {
1873
148k
        memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
1874
148k
      } else {
1875
        /* This branch covers about 45% cases.
1876
           Fixed size short copy allows more compiler optimizations. */
1877
105k
        memmove16(copy_dst + 16, copy_src + 16);
1878
105k
      }
1879
253k
    }
1880
224M
  }
1881
225M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1882
225M
  if (s->meta_block_remaining_len <= 0) {
1883
    /* Next metablock, if any. */
1884
12.0k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1885
12.0k
    goto saveStateAndReturn;
1886
225M
  } else {
1887
225M
    goto CommandBegin;
1888
225M
  }
1889
71.2M
CommandPostWrapCopy:
1890
71.2M
  {
1891
71.2M
    int wrap_guard = s->ringbuffer_size - pos;
1892
1.38G
    while (--i >= 0) {
1893
1.31G
      s->ringbuffer[pos] =
1894
1.31G
          s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
1895
1.31G
      ++pos;
1896
1.31G
      if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
1897
5.25k
        s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
1898
5.25k
        goto saveStateAndReturn;
1899
5.25k
      }
1900
1.31G
    }
1901
71.2M
  }
1902
71.2M
  if (s->meta_block_remaining_len <= 0) {
1903
    /* Next metablock, if any. */
1904
3.09k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1905
3.09k
    goto saveStateAndReturn;
1906
71.2M
  } else {
1907
71.2M
    goto CommandBegin;
1908
71.2M
  }
1909
1910
47.8k
saveStateAndReturn:
1911
47.8k
  s->pos = pos;
1912
47.8k
  s->loop_counter = i;
1913
47.8k
  return result;
1914
71.2M
}
1915
1916
#undef BROTLI_SAFE
1917
1918
static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
1919
41.1k
    BrotliDecoderState* s) {
1920
41.1k
  return ProcessCommandsInternal(0, s);
1921
41.1k
}
1922
1923
static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
1924
7.13k
    BrotliDecoderState* s) {
1925
7.13k
  return ProcessCommandsInternal(1, s);
1926
7.13k
}
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
11.9k
    uint8_t* decoded_buffer) {
1946
11.9k
  BrotliDecoderState s;
1947
11.9k
  BrotliDecoderResult result;
1948
11.9k
  size_t total_out = 0;
1949
11.9k
  size_t available_in = encoded_size;
1950
11.9k
  const uint8_t* next_in = encoded_buffer;
1951
11.9k
  size_t available_out = *decoded_size;
1952
11.9k
  uint8_t* next_out = decoded_buffer;
1953
11.9k
  if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
1954
0
    return BROTLI_DECODER_RESULT_ERROR;
1955
0
  }
1956
11.9k
  result = BrotliDecoderDecompressStream(
1957
11.9k
      &s, &available_in, &next_in, &available_out, &next_out, &total_out);
1958
11.9k
  *decoded_size = total_out;
1959
11.9k
  BrotliDecoderStateCleanup(&s);
1960
11.9k
  if (result != BROTLI_DECODER_RESULT_SUCCESS) {
1961
9.35k
    result = BROTLI_DECODER_RESULT_ERROR;
1962
9.35k
  }
1963
11.9k
  return result;
1964
11.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
11.9k
    size_t* available_out, uint8_t** next_out, size_t* total_out) {
1980
11.9k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
1981
11.9k
  BrotliBitReader* br = &s->br;
1982
  /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
1983
11.9k
  if (total_out) {
1984
11.9k
    *total_out = s->partial_pos_out;
1985
11.9k
  }
1986
  /* Do not try to process further in a case of unrecoverable error. */
1987
11.9k
  if ((int)s->error_code < 0) {
1988
0
    return BROTLI_DECODER_RESULT_ERROR;
1989
0
  }
1990
11.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
11.9k
  if (!*available_out) next_out = 0;
1995
11.9k
  if (s->buffer_length == 0) {  /* Just connect bit reader to input stream. */
1996
11.9k
    br->avail_in = *available_in;
1997
11.9k
    br->next_in = *next_in;
1998
11.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
1.10M
  for (;;) {
2007
1.10M
    if (result != BROTLI_DECODER_SUCCESS) {
2008
      /* Error, needs more input/output. */
2009
9.35k
      if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2010
7.04k
        if (s->ringbuffer != 0) {  /* Pro-actively push output. */
2011
2.09k
          BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
2012
2.09k
              available_out, next_out, total_out, BROTLI_TRUE);
2013
          /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
2014
2.09k
          if ((int)intermediate_result < 0) {
2015
30
            result = intermediate_result;
2016
30
            break;
2017
30
          }
2018
2.09k
        }
2019
7.01k
        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
7.01k
        } else {  /* Input stream doesn't contain enough input. */
2045
          /* Copy tail to internal buffer and return. */
2046
7.01k
          *next_in = br->next_in;
2047
7.01k
          *available_in = br->avail_in;
2048
7.08k
          while (*available_in) {
2049
73
            s->buffer.u8[s->buffer_length] = **next_in;
2050
73
            s->buffer_length++;
2051
73
            (*next_in)++;
2052
73
            (*available_in)--;
2053
73
          }
2054
7.01k
          break;
2055
7.01k
        }
2056
        /* Unreachable. */
2057
7.01k
      }
2058
2059
      /* Fail or needs more output. */
2060
2061
2.31k
      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.31k
      } 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.31k
        BrotliBitReaderUnload(br);
2070
2.31k
        *available_in = br->avail_in;
2071
2.31k
        *next_in = br->next_in;
2072
2.31k
      }
2073
2.31k
      break;
2074
9.35k
    }
2075
1.10M
    switch (s->state) {
2076
11.9k
      case BROTLI_STATE_UNINITED:
2077
        /* Prepare to the first read. */
2078
11.9k
        if (!BrotliWarmupBitReader(br)) {
2079
3.42k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2080
3.42k
          break;
2081
3.42k
        }
2082
        /* Decode window size. */
2083
8.52k
        result = DecodeWindowBits(s, br);  /* Reads 1..8 bits. */
2084
8.52k
        if (result != BROTLI_DECODER_SUCCESS) {
2085
10
          break;
2086
10
        }
2087
8.51k
        if (s->large_window) {
2088
0
          s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
2089
0
          break;
2090
0
        }
2091
8.51k
        s->state = BROTLI_STATE_INITIALIZE;
2092
8.51k
        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.51k
      case BROTLI_STATE_INITIALIZE:
2108
8.51k
        BROTLI_LOG_UINT(s->window_bits);
2109
        /* Maximum distance, see section 9.1. of the spec. */
2110
8.51k
        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.51k
        s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
2114
8.51k
            sizeof(HuffmanCode) * 3 *
2115
8.51k
                (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
2116
8.51k
        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.51k
        s->block_len_trees =
2121
8.51k
            s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
2122
2123
8.51k
        s->state = BROTLI_STATE_METABLOCK_BEGIN;
2124
        /* No break, continue to next state. */
2125
2126
287k
      case BROTLI_STATE_METABLOCK_BEGIN:
2127
287k
        BrotliDecoderStateMetablockBegin(s);
2128
287k
        BROTLI_LOG_UINT(s->pos);
2129
287k
        s->state = BROTLI_STATE_METABLOCK_HEADER;
2130
        /* No break, continue to next state. */
2131
2132
287k
      case BROTLI_STATE_METABLOCK_HEADER:
2133
287k
        result = DecodeMetaBlockLength(s, br);  /* Reads 2 - 31 bits. */
2134
287k
        if (result != BROTLI_DECODER_SUCCESS) {
2135
605
          break;
2136
605
        }
2137
287k
        BROTLI_LOG_UINT(s->is_last_metablock);
2138
287k
        BROTLI_LOG_UINT(s->meta_block_remaining_len);
2139
287k
        BROTLI_LOG_UINT(s->is_metadata);
2140
287k
        BROTLI_LOG_UINT(s->is_uncompressed);
2141
287k
        if (s->is_metadata || s->is_uncompressed) {
2142
256k
          if (!BrotliJumpToByteBoundary(br)) {
2143
66
            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
2144
66
            break;
2145
66
          }
2146
256k
        }
2147
287k
        if (s->is_metadata) {
2148
244k
          s->state = BROTLI_STATE_METADATA;
2149
244k
          break;
2150
244k
        }
2151
42.4k
        if (s->meta_block_remaining_len == 0) {
2152
802
          s->state = BROTLI_STATE_METABLOCK_DONE;
2153
802
          break;
2154
802
        }
2155
41.6k
        BrotliCalculateRingBufferSize(s);
2156
41.6k
        if (s->is_uncompressed) {
2157
11.2k
          s->state = BROTLI_STATE_UNCOMPRESSED;
2158
11.2k
          break;
2159
11.2k
        }
2160
30.4k
        s->loop_counter = 0;
2161
30.4k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2162
30.4k
        break;
2163
2164
11.2k
      case BROTLI_STATE_UNCOMPRESSED: {
2165
11.2k
        result = CopyUncompressedBlockToOutput(
2166
11.2k
            available_out, next_out, total_out, s);
2167
11.2k
        if (result != BROTLI_DECODER_SUCCESS) {
2168
254
          break;
2169
254
        }
2170
11.0k
        s->state = BROTLI_STATE_METABLOCK_DONE;
2171
11.0k
        break;
2172
11.2k
      }
2173
2174
244k
      case BROTLI_STATE_METADATA:
2175
2.16M
        for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
2176
1.92M
          uint32_t bits;
2177
          /* Read one byte and ignore it. */
2178
1.92M
          if (!BrotliSafeReadBits(br, 8, &bits)) {
2179
95
            result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2180
95
            break;
2181
95
          }
2182
1.92M
        }
2183
244k
        if (result == BROTLI_DECODER_SUCCESS) {
2184
244k
          s->state = BROTLI_STATE_METABLOCK_DONE;
2185
244k
        }
2186
244k
        break;
2187
2188
120k
      case BROTLI_STATE_HUFFMAN_CODE_0:
2189
120k
        if (s->loop_counter >= 3) {
2190
29.8k
          s->state = BROTLI_STATE_METABLOCK_HEADER_2;
2191
29.8k
          break;
2192
29.8k
        }
2193
        /* Reads 1..11 bits. */
2194
90.4k
        result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
2195
90.4k
        if (result != BROTLI_DECODER_SUCCESS) {
2196
33
          break;
2197
33
        }
2198
90.4k
        s->num_block_types[s->loop_counter]++;
2199
90.4k
        BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
2200
90.4k
        if (s->num_block_types[s->loop_counter] < 2) {
2201
72.0k
          s->loop_counter++;
2202
72.0k
          break;
2203
72.0k
        }
2204
18.4k
        s->state = BROTLI_STATE_HUFFMAN_CODE_1;
2205
        /* No break, continue to next state. */
2206
2207
18.4k
      case BROTLI_STATE_HUFFMAN_CODE_1: {
2208
18.4k
        uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
2209
18.4k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
2210
18.4k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2211
18.4k
            &s->block_type_trees[tree_offset], NULL, s);
2212
18.4k
        if (result != BROTLI_DECODER_SUCCESS) break;
2213
18.0k
        s->state = BROTLI_STATE_HUFFMAN_CODE_2;
2214
        /* No break, continue to next state. */
2215
18.0k
      }
2216
2217
18.0k
      case BROTLI_STATE_HUFFMAN_CODE_2: {
2218
18.0k
        uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
2219
18.0k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2220
18.0k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2221
18.0k
            &s->block_len_trees[tree_offset], NULL, s);
2222
18.0k
        if (result != BROTLI_DECODER_SUCCESS) break;
2223
17.9k
        s->state = BROTLI_STATE_HUFFMAN_CODE_3;
2224
        /* No break, continue to next state. */
2225
17.9k
      }
2226
2227
17.9k
      case BROTLI_STATE_HUFFMAN_CODE_3: {
2228
17.9k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2229
17.9k
        if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
2230
17.9k
            &s->block_len_trees[tree_offset], br)) {
2231
46
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2232
46
          break;
2233
46
        }
2234
17.8k
        BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
2235
17.8k
        s->loop_counter++;
2236
17.8k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2237
17.8k
        break;
2238
17.9k
      }
2239
2240
29.8k
      case BROTLI_STATE_METABLOCK_HEADER_2: {
2241
29.8k
        uint32_t bits;
2242
29.8k
        if (!BrotliSafeReadBits(br, 6, &bits)) {
2243
22
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2244
22
          break;
2245
22
        }
2246
29.8k
        s->distance_postfix_bits = bits & BitMask(2);
2247
29.8k
        bits >>= 2;
2248
29.8k
        s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
2249
29.8k
            (bits << s->distance_postfix_bits);
2250
29.8k
        BROTLI_LOG_UINT(s->num_direct_distance_codes);
2251
29.8k
        BROTLI_LOG_UINT(s->distance_postfix_bits);
2252
29.8k
        s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
2253
29.8k
        s->context_modes =
2254
29.8k
            (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
2255
29.8k
        if (s->context_modes == 0) {
2256
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
2257
0
          break;
2258
0
        }
2259
29.8k
        s->loop_counter = 0;
2260
29.8k
        s->state = BROTLI_STATE_CONTEXT_MODES;
2261
        /* No break, continue to next state. */
2262
29.8k
      }
2263
2264
29.8k
      case BROTLI_STATE_CONTEXT_MODES:
2265
29.8k
        result = ReadContextModes(s);
2266
29.8k
        if (result != BROTLI_DECODER_SUCCESS) {
2267
43
          break;
2268
43
        }
2269
29.7k
        s->state = BROTLI_STATE_CONTEXT_MAP_1;
2270
        /* No break, continue to next state. */
2271
2272
29.7k
      case BROTLI_STATE_CONTEXT_MAP_1:
2273
29.7k
        result = DecodeContextMap(
2274
29.7k
            s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
2275
29.7k
            &s->num_literal_htrees, &s->context_map, s);
2276
29.7k
        if (result != BROTLI_DECODER_SUCCESS) {
2277
291
          break;
2278
291
        }
2279
29.5k
        DetectTrivialLiteralBlockTypes(s);
2280
29.5k
        s->state = BROTLI_STATE_CONTEXT_MAP_2;
2281
        /* No break, continue to next state. */
2282
2283
29.5k
      case BROTLI_STATE_CONTEXT_MAP_2: {
2284
29.5k
        uint32_t num_direct_codes =
2285
29.5k
            s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
2286
29.5k
        uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
2287
29.5k
            num_direct_codes, s->distance_postfix_bits,
2288
29.5k
            (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
2289
29.5k
                               BROTLI_MAX_DISTANCE_BITS));
2290
29.5k
        uint32_t max_distance_symbol = (s->large_window ?
2291
0
            BrotliMaxDistanceSymbol(
2292
0
                num_direct_codes, s->distance_postfix_bits) :
2293
29.5k
            num_distance_codes);
2294
29.5k
        BROTLI_BOOL allocation_success = BROTLI_TRUE;
2295
29.5k
        result = DecodeContextMap(
2296
29.5k
            s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
2297
29.5k
            &s->num_dist_htrees, &s->dist_context_map, s);
2298
29.5k
        if (result != BROTLI_DECODER_SUCCESS) {
2299
131
          break;
2300
131
        }
2301
29.3k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2302
29.3k
            s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
2303
29.3k
            BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
2304
29.3k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2305
29.3k
            s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
2306
29.3k
            BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
2307
29.3k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2308
29.3k
            s, &s->distance_hgroup, num_distance_codes,
2309
29.3k
            max_distance_symbol, s->num_dist_htrees);
2310
29.3k
        if (!allocation_success) {
2311
0
          return SaveErrorCode(s,
2312
0
              BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
2313
0
        }
2314
29.3k
        s->loop_counter = 0;
2315
29.3k
        s->state = BROTLI_STATE_TREE_GROUP;
2316
        /* No break, continue to next state. */
2317
29.3k
      }
2318
2319
87.0k
      case BROTLI_STATE_TREE_GROUP: {
2320
87.0k
        HuffmanTreeGroup* hgroup = NULL;
2321
87.0k
        switch (s->loop_counter) {
2322
29.3k
          case 0: hgroup = &s->literal_hgroup; break;
2323
28.9k
          case 1: hgroup = &s->insert_copy_hgroup; break;
2324
28.7k
          case 2: hgroup = &s->distance_hgroup; break;
2325
0
          default: return SaveErrorCode(s, BROTLI_FAILURE(
2326
0
              BROTLI_DECODER_ERROR_UNREACHABLE));
2327
87.0k
        }
2328
87.0k
        result = HuffmanTreeGroupDecode(hgroup, s);
2329
87.0k
        if (result != BROTLI_DECODER_SUCCESS) break;
2330
86.2k
        s->loop_counter++;
2331
86.2k
        if (s->loop_counter >= 3) {
2332
28.5k
          PrepareLiteralDecoding(s);
2333
28.5k
          s->dist_context_map_slice = s->dist_context_map;
2334
28.5k
          s->htree_command = s->insert_copy_hgroup.htrees[0];
2335
28.5k
          if (!BrotliEnsureRingBuffer(s)) {
2336
0
            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
2337
0
            break;
2338
0
          }
2339
28.5k
          s->state = BROTLI_STATE_COMMAND_BEGIN;
2340
28.5k
        }
2341
86.2k
        break;
2342
86.2k
      }
2343
2344
86.2k
      case BROTLI_STATE_COMMAND_BEGIN:
2345
34.7k
      case BROTLI_STATE_COMMAND_INNER:
2346
36.1k
      case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
2347
41.1k
      case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
2348
41.1k
        result = ProcessCommands(s);
2349
41.1k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2350
7.13k
          result = SafeProcessCommands(s);
2351
7.13k
        }
2352
41.1k
        break;
2353
2354
6.61k
      case BROTLI_STATE_COMMAND_INNER_WRITE:
2355
7.85k
      case BROTLI_STATE_COMMAND_POST_WRITE_1:
2356
13.1k
      case BROTLI_STATE_COMMAND_POST_WRITE_2:
2357
13.1k
        result = WriteRingBuffer(
2358
13.1k
            s, available_out, next_out, total_out, BROTLI_FALSE);
2359
13.1k
        if (result != BROTLI_DECODER_SUCCESS) {
2360
450
          break;
2361
450
        }
2362
12.6k
        WrapRingBuffer(s);
2363
12.6k
        if (s->ringbuffer_size == 1 << s->window_bits) {
2364
12.6k
          s->max_distance = s->max_backward_distance;
2365
12.6k
        }
2366
12.6k
        if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
2367
1.19k
          if (s->meta_block_remaining_len == 0) {
2368
            /* Next metablock, if any. */
2369
3
            s->state = BROTLI_STATE_METABLOCK_DONE;
2370
1.19k
          } else {
2371
1.19k
            s->state = BROTLI_STATE_COMMAND_BEGIN;
2372
1.19k
          }
2373
1.19k
          break;
2374
11.4k
        } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
2375
5.01k
          s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
2376
6.44k
        } else {  /* BROTLI_STATE_COMMAND_INNER_WRITE */
2377
6.44k
          if (s->loop_counter == 0) {
2378
1.49k
            if (s->meta_block_remaining_len == 0) {
2379
49
              s->state = BROTLI_STATE_METABLOCK_DONE;
2380
1.44k
            } else {
2381
1.44k
              s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
2382
1.44k
            }
2383
1.49k
            break;
2384
1.49k
          }
2385
4.94k
          s->state = BROTLI_STATE_COMMAND_INNER;
2386
4.94k
        }
2387
9.96k
        break;
2388
2389
282k
      case BROTLI_STATE_METABLOCK_DONE:
2390
282k
        if (s->meta_block_remaining_len < 0) {
2391
432
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
2392
432
          break;
2393
432
        }
2394
282k
        BrotliDecoderStateCleanupAfterMetablock(s);
2395
282k
        if (!s->is_last_metablock) {
2396
279k
          s->state = BROTLI_STATE_METABLOCK_BEGIN;
2397
279k
          break;
2398
279k
        }
2399
2.68k
        if (!BrotliJumpToByteBoundary(br)) {
2400
86
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
2401
86
          break;
2402
86
        }
2403
2.59k
        if (s->buffer_length == 0) {
2404
2.59k
          BrotliBitReaderUnload(br);
2405
2.59k
          *available_in = br->avail_in;
2406
2.59k
          *next_in = br->next_in;
2407
2.59k
        }
2408
2.59k
        s->state = BROTLI_STATE_DONE;
2409
        /* No break, continue to next state. */
2410
2411
2.59k
      case BROTLI_STATE_DONE:
2412
2.59k
        if (s->ringbuffer != 0) {
2413
2.53k
          result = WriteRingBuffer(
2414
2.53k
              s, available_out, next_out, total_out, BROTLI_TRUE);
2415
2.53k
          if (result != BROTLI_DECODER_SUCCESS) {
2416
11
            break;
2417
11
          }
2418
2.53k
        }
2419
2.58k
        return SaveErrorCode(s, result);
2420
1.10M
    }
2421
1.10M
  }
2422
9.35k
  return SaveErrorCode(s, result);
2423
11.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