Coverage Report

Created: 2024-09-08 06:07

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