Coverage Report

Created: 2026-02-26 06:29

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