Coverage Report

Created: 2025-12-28 06:20

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/brunsli/_deps/brotli-src/c/dec/decode.c
Line
Count
Source
1
/* Copyright 2013 Google Inc. All Rights Reserved.
2
3
   Distributed under MIT license.
4
   See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5
*/
6
7
#include <brotli/decode.h>
8
9
#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.64k
#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.21k
#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
7.38k
    brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
79
7.38k
  BrotliDecoderState* state = 0;
80
7.38k
  if (!alloc_func && !free_func) {
81
7.38k
    state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
82
7.38k
  } else if (alloc_func && free_func) {
83
0
    state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
84
0
  }
85
7.38k
  if (state == 0) {
86
0
    BROTLI_DUMP();
87
0
    return 0;
88
0
  }
89
7.38k
  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
7.38k
  return state;
99
7.38k
}
100
101
/* Deinitializes and frees BrotliDecoderState instance. */
102
7.38k
void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
103
7.38k
  if (!state) {
104
0
    return;
105
7.38k
  } else {
106
7.38k
    brotli_free_func free_func = state->free_func;
107
7.38k
    void* opaque = state->memory_manager_opaque;
108
7.38k
    BrotliDecoderStateCleanup(state);
109
7.38k
    free_func(opaque, state);
110
7.38k
  }
111
7.38k
}
112
113
/* Saves error code and converts it to BrotliDecoderResult. */
114
static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
115
621k
    BrotliDecoderState* s, BrotliDecoderErrorCode e) {
116
621k
  s->error_code = (int)e;
117
621k
  switch (e) {
118
361
    case BROTLI_DECODER_SUCCESS:
119
361
      return BROTLI_DECODER_RESULT_SUCCESS;
120
121
263k
    case BROTLI_DECODER_NEEDS_MORE_INPUT:
122
263k
      return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
123
124
356k
    case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
125
356k
      return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
126
127
1.64k
    default:
128
1.64k
      return BROTLI_DECODER_RESULT_ERROR;
129
621k
  }
130
621k
}
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
7.02k
                                               BrotliBitReader* br) {
136
7.02k
  uint32_t n;
137
7.02k
  BROTLI_BOOL large_window = s->large_window;
138
7.02k
  s->large_window = BROTLI_FALSE;
139
7.02k
  BrotliTakeBits(br, 1, &n);
140
7.02k
  if (n == 0) {
141
4.76k
    s->window_bits = 16;
142
4.76k
    return BROTLI_DECODER_SUCCESS;
143
4.76k
  }
144
2.26k
  BrotliTakeBits(br, 3, &n);
145
2.26k
  if (n != 0) {
146
1.25k
    s->window_bits = 17 + n;
147
1.25k
    return BROTLI_DECODER_SUCCESS;
148
1.25k
  }
149
1.01k
  BrotliTakeBits(br, 3, &n);
150
1.01k
  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
1.01k
  if (n != 0) {
163
906
    s->window_bits = 8 + n;
164
906
    return BROTLI_DECODER_SUCCESS;
165
906
  }
166
108
  s->window_bits = 17;
167
108
  return BROTLI_DECODER_SUCCESS;
168
1.01k
}
169
170
754M
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
754M
  uint32_t buffer[4];
175
754M
  memcpy(buffer, src, 16);
176
754M
  memcpy(dst, buffer, 16);
177
754M
#endif
178
754M
}
179
180
/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
181
static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
182
86.6k
    BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
183
86.6k
  uint32_t bits;
184
86.6k
  switch (s->substate_decode_uint8) {
185
84.0k
    case BROTLI_STATE_DECODE_UINT8_NONE:
186
84.0k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
187
4.71k
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
188
4.71k
      }
189
79.3k
      if (bits == 0) {
190
71.1k
        *value = 0;
191
71.1k
        return BROTLI_DECODER_SUCCESS;
192
71.1k
      }
193
    /* Fall through. */
194
195
9.84k
    case BROTLI_STATE_DECODE_UINT8_SHORT:
196
9.84k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
197
1.73k
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
198
1.73k
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
199
1.73k
      }
200
8.11k
      if (bits == 0) {
201
3.61k
        *value = 1;
202
3.61k
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
203
3.61k
        return BROTLI_DECODER_SUCCESS;
204
3.61k
      }
205
      /* Use output value as a temporary storage. It MUST be persisted. */
206
4.50k
      *value = bits;
207
    /* Fall through. */
208
209
5.42k
    case BROTLI_STATE_DECODE_UINT8_LONG:
210
5.42k
      if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
211
970
        s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
212
970
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
213
970
      }
214
4.45k
      *value = (1U << *value) + bits;
215
4.45k
      s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
216
4.45k
      return BROTLI_DECODER_SUCCESS;
217
218
0
    default:
219
0
      return
220
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
221
86.6k
  }
222
86.6k
}
223
224
/* Decodes a metablock length and flags by reading 2 - 31 bits. */
225
static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
226
50.5k
    BrotliDecoderState* s, BrotliBitReader* br) {
227
50.5k
  uint32_t bits;
228
50.5k
  int i;
229
80.0k
  for (;;) {
230
80.0k
    switch (s->substate_metablock_header) {
231
28.5k
      case BROTLI_STATE_METABLOCK_HEADER_NONE:
232
28.5k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
233
2.81k
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
234
2.81k
        }
235
25.7k
        s->is_last_metablock = bits ? 1 : 0;
236
25.7k
        s->meta_block_remaining_len = 0;
237
25.7k
        s->is_uncompressed = 0;
238
25.7k
        s->is_metadata = 0;
239
25.7k
        if (!s->is_last_metablock) {
240
23.8k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
241
23.8k
          break;
242
23.8k
        }
243
1.92k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
244
      /* Fall through. */
245
246
1.94k
      case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
247
1.94k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
248
32
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
249
32
        }
250
1.90k
        if (bits) {
251
293
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
252
293
          return BROTLI_DECODER_SUCCESS;
253
293
        }
254
1.61k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
255
      /* Fall through. */
256
257
27.8k
      case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
258
27.8k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
259
2.48k
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
260
2.48k
        }
261
25.3k
        s->size_nibbles = (uint8_t)(bits + 4);
262
25.3k
        s->loop_counter = 0;
263
25.3k
        if (bits == 3) {
264
5.66k
          s->is_metadata = 1;
265
5.66k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
266
5.66k
          break;
267
5.66k
        }
268
19.7k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
269
      /* Fall through. */
270
271
37.4k
      case BROTLI_STATE_METABLOCK_HEADER_SIZE:
272
37.4k
        i = s->loop_counter;
273
119k
        for (; i < (int)s->size_nibbles; ++i) {
274
99.4k
          if (!BrotliSafeReadBits(br, 4, &bits)) {
275
17.9k
            s->loop_counter = i;
276
17.9k
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
277
17.9k
          }
278
81.5k
          if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 4 &&
279
1.95k
              bits == 0) {
280
12
            return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
281
12
          }
282
81.5k
          s->meta_block_remaining_len |= (int)(bits << (i * 4));
283
81.5k
        }
284
19.5k
        s->substate_metablock_header =
285
19.5k
            BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
286
      /* Fall through. */
287
288
19.6k
      case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
289
19.6k
        if (!s->is_last_metablock) {
290
18.2k
          if (!BrotliSafeReadBits(br, 1, &bits)) {
291
137
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
292
137
          }
293
18.1k
          s->is_uncompressed = bits ? 1 : 0;
294
18.1k
        }
295
19.5k
        ++s->meta_block_remaining_len;
296
19.5k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
297
19.5k
        return BROTLI_DECODER_SUCCESS;
298
299
6.36k
      case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
300
6.36k
        if (!BrotliSafeReadBits(br, 1, &bits)) {
301
704
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
302
704
        }
303
5.66k
        if (bits != 0) {
304
19
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
305
19
        }
306
5.64k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
307
      /* Fall through. */
308
309
5.97k
      case BROTLI_STATE_METABLOCK_HEADER_BYTES:
310
5.97k
        if (!BrotliSafeReadBits(br, 2, &bits)) {
311
339
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
312
339
        }
313
5.63k
        if (bits == 0) {
314
4.17k
          s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
315
4.17k
          return BROTLI_DECODER_SUCCESS;
316
4.17k
        }
317
1.46k
        s->size_nibbles = (uint8_t)bits;
318
1.46k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
319
      /* Fall through. */
320
321
2.11k
      case BROTLI_STATE_METABLOCK_HEADER_METADATA:
322
2.11k
        i = s->loop_counter;
323
3.89k
        for (; i < (int)s->size_nibbles; ++i) {
324
2.47k
          if (!BrotliSafeReadBits(br, 8, &bits)) {
325
684
            s->loop_counter = i;
326
684
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
327
684
          }
328
1.78k
          if (i + 1 == (int)s->size_nibbles && s->size_nibbles > 1 &&
329
297
              bits == 0) {
330
7
            return BROTLI_FAILURE(
331
7
                BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
332
7
          }
333
1.77k
          s->meta_block_remaining_len |= (int)(bits << (i * 8));
334
1.77k
        }
335
1.42k
        ++s->meta_block_remaining_len;
336
1.42k
        s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
337
1.42k
        return BROTLI_DECODER_SUCCESS;
338
339
0
      default:
340
0
        return
341
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
342
80.0k
    }
343
80.0k
  }
344
50.5k
}
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
852M
                                           BrotliBitReader* br) {
353
852M
  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);
354
852M
  BROTLI_HC_ADJUST_TABLE_INDEX(table, bits & HUFFMAN_TABLE_MASK);
355
852M
  if (BROTLI_HC_FAST_LOAD_BITS(table) > HUFFMAN_TABLE_BITS) {
356
13.9k
    uint32_t nbits = BROTLI_HC_FAST_LOAD_BITS(table) - HUFFMAN_TABLE_BITS;
357
13.9k
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
358
13.9k
    BROTLI_HC_ADJUST_TABLE_INDEX(table,
359
13.9k
        BROTLI_HC_FAST_LOAD_VALUE(table) +
360
13.9k
        ((bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits)));
361
13.9k
  }
362
852M
  BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(table));
363
852M
  return BROTLI_HC_FAST_LOAD_VALUE(table);
364
852M
}
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
113M
                                         BrotliBitReader* br) {
370
113M
  return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
371
113M
}
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.71G
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
377
2.71G
  uint32_t val;
378
2.71G
  uint32_t available_bits = BrotliGetAvailableBits(br);
379
2.71G
  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);
380
2.71G
  if (available_bits == 0) {
381
139M
    if (BROTLI_HC_FAST_LOAD_BITS(table) == 0) {
382
139M
      *result = BROTLI_HC_FAST_LOAD_VALUE(table);
383
139M
      return BROTLI_TRUE;
384
139M
    }
385
13.8k
    return BROTLI_FALSE;  /* No valid bits at all. */
386
139M
  }
387
2.57G
  val = (uint32_t)BrotliGetBitsUnmasked(br);
388
2.57G
  BROTLI_HC_ADJUST_TABLE_INDEX(table, val & HUFFMAN_TABLE_MASK);
389
2.57G
  if (BROTLI_HC_FAST_LOAD_BITS(table) <= HUFFMAN_TABLE_BITS) {
390
2.57G
    if (BROTLI_HC_FAST_LOAD_BITS(table) <= available_bits) {
391
2.57G
      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(table));
392
2.57G
      *result = BROTLI_HC_FAST_LOAD_VALUE(table);
393
2.57G
      return BROTLI_TRUE;
394
2.57G
    } else {
395
4.92k
      return BROTLI_FALSE;  /* Not enough bits for the first level. */
396
4.92k
    }
397
2.57G
  }
398
3.66k
  if (available_bits <= HUFFMAN_TABLE_BITS) {
399
2.37k
    return BROTLI_FALSE;  /* Not enough bits to move to the second level. */
400
2.37k
  }
401
402
  /* Speculatively drop HUFFMAN_TABLE_BITS. */
403
1.29k
  val = (val & BitMask(BROTLI_HC_FAST_LOAD_BITS(table))) >> HUFFMAN_TABLE_BITS;
404
1.29k
  available_bits -= HUFFMAN_TABLE_BITS;
405
1.29k
  BROTLI_HC_ADJUST_TABLE_INDEX(table, BROTLI_HC_FAST_LOAD_VALUE(table) + val);
406
1.29k
  if (available_bits < BROTLI_HC_FAST_LOAD_BITS(table)) {
407
474
    return BROTLI_FALSE;  /* Not enough bits for the second level. */
408
474
  }
409
410
819
  BrotliDropBits(br, HUFFMAN_TABLE_BITS + BROTLI_HC_FAST_LOAD_BITS(table));
411
819
  *result = BROTLI_HC_FAST_LOAD_VALUE(table);
412
819
  return BROTLI_TRUE;
413
1.29k
}
414
415
static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
416
3.45G
    const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
417
3.45G
  uint32_t val;
418
3.45G
  if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
419
738M
    *result = DecodeSymbol(val, table, br);
420
738M
    return BROTLI_TRUE;
421
738M
  }
422
2.71G
  return SafeDecodeSymbol(table, br, result);
423
3.45G
}
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.11G
                                        uint32_t* value) {
431
1.11G
  if (safe) {
432
663M
    return;
433
663M
  }
434
449M
  BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(table);
435
449M
  BROTLI_HC_ADJUST_TABLE_INDEX(table, BrotliGetBits(br, HUFFMAN_TABLE_BITS));
436
449M
  *bits = BROTLI_HC_FAST_LOAD_BITS(table);
437
449M
  *value = BROTLI_HC_FAST_LOAD_VALUE(table);
438
449M
}
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
373M
                                                  uint32_t* value) {
446
373M
  uint32_t result = *value;
447
373M
  if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
448
1.21k
    uint32_t val = BrotliGet16BitsUnmasked(br);
449
1.21k
    const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
450
1.21k
    uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
451
1.21k
    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(ext);
452
1.21k
    BrotliDropBits(br, HUFFMAN_TABLE_BITS);
453
1.21k
    BROTLI_HC_ADJUST_TABLE_INDEX(ext, (val >> HUFFMAN_TABLE_BITS) & mask);
454
1.21k
    BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(ext));
455
1.21k
    result = BROTLI_HC_FAST_LOAD_VALUE(ext);
456
373M
  } else {
457
373M
    BrotliDropBits(br, *bits);
458
373M
  }
459
373M
  PreloadSymbol(0, table, br, bits, value);
460
373M
  return result;
461
373M
}
462
463
100k
static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
464
100k
  uint32_t result = 0;
465
873k
  while (x) {
466
773k
    x >>= 1;
467
773k
    ++result;
468
773k
  }
469
100k
  return result;
470
100k
}
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
100k
    BrotliDecoderState* s) {
478
  /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
479
100k
  BrotliBitReader* br = &s->br;
480
100k
  BrotliMetablockHeaderArena* h = &s->arena.header;
481
100k
  uint32_t max_bits = Log2Floor(alphabet_size_max - 1);
482
100k
  uint32_t i = h->sub_loop_counter;
483
100k
  uint32_t num_symbols = h->symbol;
484
199k
  while (i <= num_symbols) {
485
134k
    uint32_t v;
486
134k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
487
35.3k
      h->sub_loop_counter = i;
488
35.3k
      h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
489
35.3k
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
490
35.3k
    }
491
99.1k
    if (v >= alphabet_size_limit) {
492
30
      return
493
30
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
494
30
    }
495
99.1k
    h->symbols_lists_array[i] = (uint16_t)v;
496
99.1k
    BROTLI_LOG_UINT(h->symbols_lists_array[i]);
497
99.1k
    ++i;
498
99.1k
  }
499
500
99.0k
  for (i = 0; i < num_symbols; ++i) {
501
33.6k
    uint32_t k = i + 1;
502
87.0k
    for (; k <= num_symbols; ++k) {
503
53.3k
      if (h->symbols_lists_array[i] == h->symbols_lists_array[k]) {
504
20
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
505
20
      }
506
53.3k
    }
507
33.6k
  }
508
509
65.3k
  return BROTLI_DECODER_SUCCESS;
510
65.3k
}
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
264k
    uint16_t* code_length_histo, int* next_symbol) {
522
264k
  *repeat = 0;
523
264k
  if (code_len != 0) {  /* code_len == 1..15 */
524
258k
    symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
525
258k
    next_symbol[code_len] = (int)(*symbol);
526
258k
    *prev_code_len = code_len;
527
258k
    *space -= 32768U >> code_len;
528
258k
    code_length_histo[code_len]++;
529
258k
    BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
530
258k
        (int)*symbol, (int)code_len));
531
258k
  }
532
264k
  (*symbol)++;
533
264k
}
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.82k
    uint16_t* code_length_histo, int* next_symbol) {
550
6.82k
  uint32_t old_repeat;
551
6.82k
  uint32_t extra_bits = 3;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
552
6.82k
  uint32_t new_len = 0;  /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
553
6.82k
  if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
554
4.23k
    new_len = *prev_code_len;
555
4.23k
    extra_bits = 2;
556
4.23k
  }
557
6.82k
  if (*repeat_code_len != new_len) {
558
1.72k
    *repeat = 0;
559
1.72k
    *repeat_code_len = new_len;
560
1.72k
  }
561
6.82k
  old_repeat = *repeat;
562
6.82k
  if (*repeat > 0) {
563
1.17k
    *repeat -= 2;
564
1.17k
    *repeat <<= extra_bits;
565
1.17k
  }
566
6.82k
  *repeat += repeat_delta + 3U;
567
6.82k
  repeat_delta = *repeat - old_repeat;
568
6.82k
  if (*symbol + repeat_delta > alphabet_size) {
569
124
    BROTLI_DUMP();
570
124
    *symbol = alphabet_size;
571
124
    *space = 0xFFFFF;
572
124
    return;
573
124
  }
574
6.70k
  BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
575
6.70k
      (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
576
6.70k
  if (*repeat_code_len != 0) {
577
4.16k
    unsigned last = *symbol + repeat_delta;
578
4.16k
    int next = next_symbol[*repeat_code_len];
579
47.7k
    do {
580
47.7k
      symbol_lists[next] = (uint16_t)*symbol;
581
47.7k
      next = (int)*symbol;
582
47.7k
    } while (++(*symbol) != last);
583
4.16k
    next_symbol[*repeat_code_len] = next;
584
4.16k
    *space -= repeat_delta << (15 - *repeat_code_len);
585
4.16k
    code_length_histo[*repeat_code_len] =
586
4.16k
        (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
587
4.16k
  } else {
588
2.53k
    *symbol += repeat_delta;
589
2.53k
  }
590
6.70k
}
591
592
/* Reads and decodes symbol codelengths. */
593
static BrotliDecoderErrorCode ReadSymbolCodeLengths(
594
36.7k
    uint32_t alphabet_size, BrotliDecoderState* s) {
595
36.7k
  BrotliBitReader* br = &s->br;
596
36.7k
  BrotliMetablockHeaderArena* h = &s->arena.header;
597
36.7k
  uint32_t symbol = h->symbol;
598
36.7k
  uint32_t repeat = h->repeat;
599
36.7k
  uint32_t space = h->space;
600
36.7k
  uint32_t prev_code_len = h->prev_code_len;
601
36.7k
  uint32_t repeat_code_len = h->repeat_code_len;
602
36.7k
  uint16_t* symbol_lists = h->symbol_lists;
603
36.7k
  uint16_t* code_length_histo = h->code_length_histo;
604
36.7k
  int* next_symbol = h->next_symbol;
605
36.7k
  if (!BrotliWarmupBitReader(br)) {
606
1.93k
    return BROTLI_DECODER_NEEDS_MORE_INPUT;
607
1.93k
  }
608
152k
  while (symbol < alphabet_size && space > 0) {
609
148k
    const HuffmanCode* p = h->table;
610
148k
    uint32_t code_len;
611
148k
    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(p);
612
148k
    if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
613
30.5k
      h->symbol = symbol;
614
30.5k
      h->repeat = repeat;
615
30.5k
      h->prev_code_len = prev_code_len;
616
30.5k
      h->repeat_code_len = repeat_code_len;
617
30.5k
      h->space = space;
618
30.5k
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
619
30.5k
    }
620
117k
    BrotliFillBitWindow16(br);
621
117k
    BROTLI_HC_ADJUST_TABLE_INDEX(p, BrotliGetBitsUnmasked(br) &
622
117k
        BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH));
623
117k
    BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p));  /* Use 1..5 bits. */
624
117k
    code_len = BROTLI_HC_FAST_LOAD_VALUE(p);  /* code_len == 0..17 */
625
117k
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
626
114k
      ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
627
114k
          &prev_code_len, symbol_lists, code_length_histo, next_symbol);
628
114k
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
629
3.25k
      uint32_t extra_bits =
630
3.25k
          (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
631
3.25k
      uint32_t repeat_delta =
632
3.25k
          (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
633
3.25k
      BrotliDropBits(br, extra_bits);
634
3.25k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
635
3.25k
          &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
636
3.25k
          symbol_lists, code_length_histo, next_symbol);
637
3.25k
    }
638
117k
  }
639
4.32k
  h->space = space;
640
4.32k
  return BROTLI_DECODER_SUCCESS;
641
34.8k
}
642
643
static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
644
32.4k
    uint32_t alphabet_size, BrotliDecoderState* s) {
645
32.4k
  BrotliBitReader* br = &s->br;
646
32.4k
  BrotliMetablockHeaderArena* h = &s->arena.header;
647
32.4k
  BROTLI_BOOL get_byte = BROTLI_FALSE;
648
235k
  while (h->symbol < alphabet_size && h->space > 0) {
649
230k
    const HuffmanCode* p = h->table;
650
230k
    uint32_t code_len;
651
230k
    uint32_t available_bits;
652
230k
    uint32_t bits = 0;
653
230k
    BROTLI_HC_MARK_TABLE_FOR_FAST_LOAD(p);
654
230k
    if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
655
202k
    get_byte = BROTLI_FALSE;
656
202k
    available_bits = BrotliGetAvailableBits(br);
657
202k
    if (available_bits != 0) {
658
177k
      bits = (uint32_t)BrotliGetBitsUnmasked(br);
659
177k
    }
660
202k
    BROTLI_HC_ADJUST_TABLE_INDEX(p,
661
202k
        bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH));
662
202k
    if (BROTLI_HC_FAST_LOAD_BITS(p) > available_bits) {
663
47.6k
      get_byte = BROTLI_TRUE;
664
47.6k
      continue;
665
47.6k
    }
666
155k
    code_len = BROTLI_HC_FAST_LOAD_VALUE(p);  /* code_len == 0..17 */
667
155k
    if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
668
150k
      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p));
669
150k
      ProcessSingleCodeLength(code_len, &h->symbol, &h->repeat, &h->space,
670
150k
          &h->prev_code_len, h->symbol_lists, h->code_length_histo,
671
150k
          h->next_symbol);
672
150k
    } else {  /* code_len == 16..17, extra_bits == 2..3 */
673
5.21k
      uint32_t extra_bits = code_len - 14U;
674
5.21k
      uint32_t repeat_delta = (bits >> BROTLI_HC_FAST_LOAD_BITS(p)) &
675
5.21k
          BitMask(extra_bits);
676
5.21k
      if (available_bits < BROTLI_HC_FAST_LOAD_BITS(p) + extra_bits) {
677
1.64k
        get_byte = BROTLI_TRUE;
678
1.64k
        continue;
679
1.64k
      }
680
3.57k
      BrotliDropBits(br, BROTLI_HC_FAST_LOAD_BITS(p) + extra_bits);
681
3.57k
      ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
682
3.57k
          &h->symbol, &h->repeat, &h->space, &h->prev_code_len,
683
3.57k
          &h->repeat_code_len, h->symbol_lists, h->code_length_histo,
684
3.57k
          h->next_symbol);
685
3.57k
    }
686
155k
  }
687
4.84k
  return BROTLI_DECODER_SUCCESS;
688
32.4k
}
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
21.2k
static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
693
21.2k
  BrotliBitReader* br = &s->br;
694
21.2k
  BrotliMetablockHeaderArena* h = &s->arena.header;
695
21.2k
  uint32_t num_codes = h->repeat;
696
21.2k
  unsigned space = h->space;
697
21.2k
  uint32_t i = h->sub_loop_counter;
698
96.4k
  for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
699
95.7k
    const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
700
95.7k
    uint32_t ix;
701
95.7k
    uint32_t v;
702
95.7k
    if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
703
20.2k
      uint32_t available_bits = BrotliGetAvailableBits(br);
704
20.2k
      if (available_bits != 0) {
705
12.1k
        ix = BrotliGetBitsUnmasked(br) & 0xF;
706
12.1k
      } else {
707
8.12k
        ix = 0;
708
8.12k
      }
709
20.2k
      if (kCodeLengthPrefixLength[ix] > available_bits) {
710
11.5k
        h->sub_loop_counter = i;
711
11.5k
        h->repeat = num_codes;
712
11.5k
        h->space = space;
713
11.5k
        h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
714
11.5k
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
715
11.5k
      }
716
20.2k
    }
717
84.2k
    v = kCodeLengthPrefixValue[ix];
718
84.2k
    BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
719
84.2k
    h->code_length_code_lengths[code_len_idx] = (uint8_t)v;
720
84.2k
    BROTLI_LOG_ARRAY_INDEX(h->code_length_code_lengths, code_len_idx);
721
84.2k
    if (v != 0) {
722
48.2k
      space = space - (32U >> v);
723
48.2k
      ++num_codes;
724
48.2k
      ++h->code_length_histo[v];
725
48.2k
      if (space - 1U >= 32U) {
726
        /* space is 0 or wrapped around. */
727
9.03k
        break;
728
9.03k
      }
729
48.2k
    }
730
84.2k
  }
731
9.66k
  if (!(num_codes == 1 || space == 0)) {
732
180
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
733
180
  }
734
9.48k
  return BROTLI_DECODER_SUCCESS;
735
9.66k
}
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
162k
                                              BrotliDecoderState* s) {
753
162k
  BrotliBitReader* br = &s->br;
754
162k
  BrotliMetablockHeaderArena* h = &s->arena.header;
755
  /* State machine. */
756
172k
  for (;;) {
757
172k
    switch (h->substate_huffman) {
758
82.5k
      case BROTLI_STATE_HUFFMAN_NONE:
759
82.5k
        if (!BrotliSafeReadBits(br, 2, &h->sub_loop_counter)) {
760
6.73k
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
761
6.73k
        }
762
75.7k
        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
75.7k
        if (h->sub_loop_counter != 1) {
767
10.1k
          h->space = 32;
768
10.1k
          h->repeat = 0;  /* num_codes */
769
10.1k
          memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo[0]) *
770
10.1k
              (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
771
10.1k
          memset(&h->code_length_code_lengths[0], 0,
772
10.1k
              sizeof(h->code_length_code_lengths));
773
10.1k
          h->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
774
10.1k
          continue;
775
10.1k
        }
776
      /* Fall through. */
777
778
71.0k
      case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
779
        /* Read symbols, codes & code lengths directly. */
780
71.0k
        if (!BrotliSafeReadBits(br, 2, &h->symbol)) {  /* num_symbols */
781
5.46k
          h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
782
5.46k
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
783
5.46k
        }
784
65.5k
        h->sub_loop_counter = 0;
785
      /* Fall through. */
786
787
100k
      case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
788
100k
        BrotliDecoderErrorCode result =
789
100k
            ReadSimpleHuffmanSymbols(alphabet_size_max, alphabet_size_limit, s);
790
100k
        if (result != BROTLI_DECODER_SUCCESS) {
791
35.4k
          return result;
792
35.4k
        }
793
100k
      }
794
      /* Fall through. */
795
796
65.9k
      case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
797
65.9k
        uint32_t table_size;
798
65.9k
        if (h->symbol == 3) {
799
6.02k
          uint32_t bits;
800
6.02k
          if (!BrotliSafeReadBits(br, 1, &bits)) {
801
587
            h->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
802
587
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
803
587
          }
804
5.43k
          h->symbol += bits;
805
5.43k
        }
806
65.3k
        BROTLI_LOG_UINT(h->symbol);
807
65.3k
        table_size = BrotliBuildSimpleHuffmanTable(
808
65.3k
            table, HUFFMAN_TABLE_BITS, h->symbols_lists_array, h->symbol);
809
65.3k
        if (opt_table_size) {
810
54.7k
          *opt_table_size = table_size;
811
54.7k
        }
812
65.3k
        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
813
65.3k
        return BROTLI_DECODER_SUCCESS;
814
65.9k
      }
815
816
      /* Decode Huffman-coded code lengths. */
817
21.2k
      case BROTLI_STATE_HUFFMAN_COMPLEX: {
818
21.2k
        uint32_t i;
819
21.2k
        BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
820
21.2k
        if (result != BROTLI_DECODER_SUCCESS) {
821
11.7k
          return result;
822
11.7k
        }
823
9.48k
        BrotliBuildCodeLengthsHuffmanTable(h->table,
824
9.48k
                                           h->code_length_code_lengths,
825
9.48k
                                           h->code_length_histo);
826
9.48k
        memset(&h->code_length_histo[0], 0, sizeof(h->code_length_histo));
827
161k
        for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
828
151k
          h->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
829
151k
          h->symbol_lists[h->next_symbol[i]] = 0xFFFF;
830
151k
        }
831
832
9.48k
        h->symbol = 0;
833
9.48k
        h->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
834
9.48k
        h->repeat = 0;
835
9.48k
        h->repeat_code_len = 0;
836
9.48k
        h->space = 32768;
837
9.48k
        h->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
838
9.48k
      }
839
      /* Fall through. */
840
841
36.7k
      case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
842
36.7k
        uint32_t table_size;
843
36.7k
        BrotliDecoderErrorCode result = ReadSymbolCodeLengths(
844
36.7k
            alphabet_size_limit, s);
845
36.7k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
846
32.4k
          result = SafeReadSymbolCodeLengths(alphabet_size_limit, s);
847
32.4k
        }
848
36.7k
        if (result != BROTLI_DECODER_SUCCESS) {
849
27.6k
          return result;
850
27.6k
        }
851
852
9.16k
        if (h->space != 0) {
853
271
          BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)h->space));
854
271
          return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
855
271
        }
856
8.89k
        table_size = BrotliBuildHuffmanTable(
857
8.89k
            table, HUFFMAN_TABLE_BITS, h->symbol_lists, h->code_length_histo);
858
8.89k
        if (opt_table_size) {
859
7.52k
          *opt_table_size = table_size;
860
7.52k
        }
861
8.89k
        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
862
8.89k
        return BROTLI_DECODER_SUCCESS;
863
9.16k
      }
864
865
0
      default:
866
0
        return
867
0
            BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
868
172k
    }
869
172k
  }
870
162k
}
871
872
/* Decodes a block length by reading 3..39 bits. */
873
static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
874
35.3k
                                              BrotliBitReader* br) {
875
35.3k
  uint32_t code;
876
35.3k
  uint32_t nbits;
877
35.3k
  code = ReadSymbol(table, br);
878
35.3k
  nbits = _kBrotliPrefixCodeRanges[code].nbits;  /* nbits == 2..24 */
879
35.3k
  return _kBrotliPrefixCodeRanges[code].offset + BrotliReadBits24(br, nbits);
880
35.3k
}
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
63.7k
    BrotliBitReader* br) {
887
63.7k
  uint32_t index;
888
63.7k
  if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
889
62.9k
    if (!SafeReadSymbol(table, br, &index)) {
890
5.56k
      return BROTLI_FALSE;
891
5.56k
    }
892
62.9k
  } else {
893
809
    index = s->block_length_index;
894
809
  }
895
58.2k
  {
896
58.2k
    uint32_t bits;
897
58.2k
    uint32_t nbits = _kBrotliPrefixCodeRanges[index].nbits;
898
58.2k
    uint32_t offset = _kBrotliPrefixCodeRanges[index].offset;
899
58.2k
    if (!BrotliSafeReadBits(br, nbits, &bits)) {
900
15.0k
      s->block_length_index = index;
901
15.0k
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
902
15.0k
      return BROTLI_FALSE;
903
15.0k
    }
904
43.1k
    *result = offset + bits;
905
43.1k
    s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
906
43.1k
    return BROTLI_TRUE;
907
58.2k
  }
908
58.2k
}
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
1.44k
    uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
926
  /* Reinitialize elements that could have been changed. */
927
1.44k
  uint32_t i = 1;
928
1.44k
  uint32_t upper_bound = state->mtf_upper_bound;
929
1.44k
  uint32_t* mtf = &state->mtf[1];  /* Make mtf[-1] addressable. */
930
1.44k
  uint8_t* mtf_u8 = (uint8_t*)mtf;
931
  /* Load endian-aware constant. */
932
1.44k
  const uint8_t b0123[4] = {0, 1, 2, 3};
933
1.44k
  uint32_t pattern;
934
1.44k
  memcpy(&pattern, &b0123, 4);
935
936
  /* Initialize list using 4 consequent values pattern. */
937
1.44k
  mtf[0] = pattern;
938
30.6k
  do {
939
30.6k
    pattern += 0x04040404;  /* Advance all 4 values by 4. */
940
30.6k
    mtf[i] = pattern;
941
30.6k
    i++;
942
30.6k
  } while (i <= upper_bound);
943
944
  /* Transform the input. */
945
1.44k
  upper_bound = 0;
946
224k
  for (i = 0; i < v_len; ++i) {
947
222k
    int index = v[i];
948
222k
    uint8_t value = mtf_u8[index];
949
222k
    upper_bound |= v[i];
950
222k
    v[i] = value;
951
222k
    mtf_u8[-1] = value;
952
8.08M
    do {
953
8.08M
      index--;
954
8.08M
      mtf_u8[index + 1] = mtf_u8[index];
955
8.08M
    } while (index >= 0);
956
222k
  }
957
  /* Remember amount of elements to be reinitialized. */
958
1.44k
  state->mtf_upper_bound = upper_bound >> 2;
959
1.44k
}
960
961
/* Decodes a series of Huffman table using ReadHuffmanCode function. */
962
static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
963
118k
    HuffmanTreeGroup* group, BrotliDecoderState* s) {
964
118k
  BrotliMetablockHeaderArena* h = &s->arena.header;
965
118k
  if (h->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
966
44.0k
    h->next = group->codes;
967
44.0k
    h->htree_index = 0;
968
44.0k
    h->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
969
44.0k
  }
970
180k
  while (h->htree_index < group->num_htrees) {
971
137k
    uint32_t table_size;
972
137k
    BrotliDecoderErrorCode result = ReadHuffmanCode(group->alphabet_size_max,
973
137k
        group->alphabet_size_limit, h->next, &table_size, s);
974
137k
    if (result != BROTLI_DECODER_SUCCESS) return result;
975
62.2k
    group->htrees[h->htree_index] = h->next;
976
62.2k
    h->next += table_size;
977
62.2k
    ++h->htree_index;
978
62.2k
  }
979
42.9k
  h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
980
42.9k
  return BROTLI_DECODER_SUCCESS;
981
118k
}
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
44.6k
                                               BrotliDecoderState* s) {
995
44.6k
  BrotliBitReader* br = &s->br;
996
44.6k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
997
44.6k
  BrotliMetablockHeaderArena* h = &s->arena.header;
998
999
44.6k
  switch ((int)h->substate_context_map) {
1000
35.5k
    case BROTLI_STATE_CONTEXT_MAP_NONE:
1001
35.5k
      result = DecodeVarLenUint8(s, br, num_htrees);
1002
35.5k
      if (result != BROTLI_DECODER_SUCCESS) {
1003
4.71k
        return result;
1004
4.71k
      }
1005
30.8k
      (*num_htrees)++;
1006
30.8k
      h->context_index = 0;
1007
30.8k
      BROTLI_LOG_UINT(context_map_size);
1008
30.8k
      BROTLI_LOG_UINT(*num_htrees);
1009
30.8k
      *context_map_arg =
1010
30.8k
          (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
1011
30.8k
      if (*context_map_arg == 0) {
1012
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
1013
0
      }
1014
30.8k
      if (*num_htrees <= 1) {
1015
27.8k
        memset(*context_map_arg, 0, (size_t)context_map_size);
1016
27.8k
        return BROTLI_DECODER_SUCCESS;
1017
27.8k
      }
1018
2.94k
      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
1019
    /* Fall through. */
1020
1021
3.70k
    case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
1022
3.70k
      uint32_t bits;
1023
      /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
1024
         to peek 4 bits ahead. */
1025
3.70k
      if (!BrotliSafeGetBits(br, 5, &bits)) {
1026
810
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1027
810
      }
1028
2.89k
      if ((bits & 1) != 0) { /* Use RLE for zeros. */
1029
401
        h->max_run_length_prefix = (bits >> 1) + 1;
1030
401
        BrotliDropBits(br, 5);
1031
2.49k
      } else {
1032
2.49k
        h->max_run_length_prefix = 0;
1033
2.49k
        BrotliDropBits(br, 1);
1034
2.49k
      }
1035
2.89k
      BROTLI_LOG_UINT(h->max_run_length_prefix);
1036
2.89k
      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
1037
2.89k
    }
1038
    /* Fall through. */
1039
1040
6.21k
    case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
1041
6.21k
      uint32_t alphabet_size = *num_htrees + h->max_run_length_prefix;
1042
6.21k
      result = ReadHuffmanCode(alphabet_size, alphabet_size,
1043
6.21k
                               h->context_map_table, NULL, s);
1044
6.21k
      if (result != BROTLI_DECODER_SUCCESS) return result;
1045
2.76k
      h->code = 0xFFFF;
1046
2.76k
      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
1047
2.76k
    }
1048
    /* Fall through. */
1049
1050
7.57k
    case BROTLI_STATE_CONTEXT_MAP_DECODE: {
1051
7.57k
      uint32_t context_index = h->context_index;
1052
7.57k
      uint32_t max_run_length_prefix = h->max_run_length_prefix;
1053
7.57k
      uint8_t* context_map = *context_map_arg;
1054
7.57k
      uint32_t code = h->code;
1055
7.57k
      BROTLI_BOOL skip_preamble = (code != 0xFFFF);
1056
312k
      while (context_index < context_map_size || skip_preamble) {
1057
309k
        if (!skip_preamble) {
1058
308k
          if (!SafeReadSymbol(h->context_map_table, br, &code)) {
1059
3.95k
            h->code = 0xFFFF;
1060
3.95k
            h->context_index = context_index;
1061
3.95k
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1062
3.95k
          }
1063
304k
          BROTLI_LOG_UINT(code);
1064
1065
304k
          if (code == 0) {
1066
64.4k
            context_map[context_index++] = 0;
1067
64.4k
            continue;
1068
64.4k
          }
1069
240k
          if (code > max_run_length_prefix) {
1070
236k
            context_map[context_index++] =
1071
236k
                (uint8_t)(code - max_run_length_prefix);
1072
236k
            continue;
1073
236k
          }
1074
240k
        } else {
1075
938
          skip_preamble = BROTLI_FALSE;
1076
938
        }
1077
        /* RLE sub-stage. */
1078
5.07k
        {
1079
5.07k
          uint32_t reps;
1080
5.07k
          if (!BrotliSafeReadBits(br, code, &reps)) {
1081
1.06k
            h->code = code;
1082
1.06k
            h->context_index = context_index;
1083
1.06k
            return BROTLI_DECODER_NEEDS_MORE_INPUT;
1084
1.06k
          }
1085
4.00k
          reps += 1U << code;
1086
4.00k
          BROTLI_LOG_UINT(reps);
1087
4.00k
          if (context_index + reps > context_map_size) {
1088
56
            return
1089
56
                BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
1090
56
          }
1091
302k
          do {
1092
302k
            context_map[context_index++] = 0;
1093
302k
          } while (--reps);
1094
3.95k
        }
1095
3.95k
      }
1096
7.57k
    }
1097
    /* Fall through. */
1098
1099
2.67k
    case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
1100
2.67k
      uint32_t bits;
1101
2.67k
      if (!BrotliSafeReadBits(br, 1, &bits)) {
1102
212
        h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
1103
212
        return BROTLI_DECODER_NEEDS_MORE_INPUT;
1104
212
      }
1105
2.46k
      if (bits != 0) {
1106
1.44k
        InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
1107
1.44k
      }
1108
2.46k
      h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
1109
2.46k
      return BROTLI_DECODER_SUCCESS;
1110
2.67k
    }
1111
1112
0
    default:
1113
0
      return
1114
0
          BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1115
44.6k
  }
1116
44.6k
}
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
95.9k
    int safe, BrotliDecoderState* s, int tree_type) {
1122
95.9k
  uint32_t max_block_type = s->num_block_types[tree_type];
1123
95.9k
  const HuffmanCode* type_tree = &s->block_type_trees[
1124
95.9k
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
1125
95.9k
  const HuffmanCode* len_tree = &s->block_len_trees[
1126
95.9k
      tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
1127
95.9k
  BrotliBitReader* br = &s->br;
1128
95.9k
  uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
1129
95.9k
  uint32_t block_type;
1130
95.9k
  if (max_block_type <= 1) {
1131
3
    return BROTLI_FALSE;
1132
3
  }
1133
1134
  /* Read 0..15 + 3..39 bits. */
1135
95.9k
  if (!safe) {
1136
35.3k
    block_type = ReadSymbol(type_tree, br);
1137
35.3k
    s->block_length[tree_type] = ReadBlockLength(len_tree, br);
1138
60.6k
  } else {
1139
60.6k
    BrotliBitReaderState memento;
1140
60.6k
    BrotliBitReaderSaveState(br, &memento);
1141
60.6k
    if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
1142
58.2k
    if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
1143
19.5k
      s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
1144
19.5k
      BrotliBitReaderRestoreState(br, &memento);
1145
19.5k
      return BROTLI_FALSE;
1146
19.5k
    }
1147
58.2k
  }
1148
1149
74.0k
  if (block_type == 1) {
1150
23.1k
    block_type = ringbuffer[1] + 1;
1151
50.8k
  } else if (block_type == 0) {
1152
14.9k
    block_type = ringbuffer[0];
1153
35.9k
  } else {
1154
35.9k
    block_type -= 2;
1155
35.9k
  }
1156
74.0k
  if (block_type >= max_block_type) {
1157
9.64k
    block_type -= max_block_type;
1158
9.64k
  }
1159
74.0k
  ringbuffer[0] = ringbuffer[1];
1160
74.0k
  ringbuffer[1] = block_type;
1161
74.0k
  return BROTLI_TRUE;
1162
95.9k
}
1163
1164
static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
1165
15.2k
    BrotliDecoderState* s) {
1166
15.2k
  size_t i;
1167
137k
  for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
1168
42.0k
  for (i = 0; i < s->num_block_types[0]; i++) {
1169
26.7k
    size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
1170
26.7k
    size_t error = 0;
1171
26.7k
    size_t sample = s->context_map[offset];
1172
26.7k
    size_t j;
1173
455k
    for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
1174
428k
      BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
1175
428k
    }
1176
26.7k
    if (error == 0) {
1177
23.2k
      s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
1178
23.2k
    }
1179
26.7k
  }
1180
15.2k
}
1181
1182
51.8k
static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
1183
51.8k
  uint8_t context_mode;
1184
51.8k
  size_t trivial;
1185
51.8k
  uint32_t block_type = s->block_type_rb[1];
1186
51.8k
  uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
1187
51.8k
  s->context_map_slice = s->context_map + context_offset;
1188
51.8k
  trivial = s->trivial_literal_contexts[block_type >> 5];
1189
51.8k
  s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
1190
51.8k
  s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
1191
51.8k
  context_mode = s->context_modes[block_type] & 3;
1192
51.8k
  s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
1193
51.8k
}
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
46.2k
    int safe, BrotliDecoderState* s) {
1199
46.2k
  if (!DecodeBlockTypeAndLength(safe, s, 0)) {
1200
8.46k
    return BROTLI_FALSE;
1201
8.46k
  }
1202
37.7k
  PrepareLiteralDecoding(s);
1203
37.7k
  return BROTLI_TRUE;
1204
46.2k
}
1205
1206
21.1k
static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
1207
21.1k
  DecodeLiteralBlockSwitchInternal(0, s);
1208
21.1k
}
1209
1210
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
1211
25.0k
    BrotliDecoderState* s) {
1212
25.0k
  return DecodeLiteralBlockSwitchInternal(1, s);
1213
25.0k
}
1214
1215
/* Block switch for insert/copy length.
1216
   Reads 3..54 bits. */
1217
static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
1218
24.3k
    int safe, BrotliDecoderState* s) {
1219
24.3k
  if (!DecodeBlockTypeAndLength(safe, s, 1)) {
1220
6.60k
    return BROTLI_FALSE;
1221
6.60k
  }
1222
17.7k
  s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
1223
17.7k
  return BROTLI_TRUE;
1224
24.3k
}
1225
1226
7.13k
static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
1227
7.13k
  DecodeCommandBlockSwitchInternal(0, s);
1228
7.13k
}
1229
1230
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
1231
17.2k
    BrotliDecoderState* s) {
1232
17.2k
  return DecodeCommandBlockSwitchInternal(1, s);
1233
17.2k
}
1234
1235
/* Block switch for distance codes.
1236
   Reads 3..54 bits. */
1237
static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
1238
25.3k
    int safe, BrotliDecoderState* s) {
1239
25.3k
  if (!DecodeBlockTypeAndLength(safe, s, 2)) {
1240
6.84k
    return BROTLI_FALSE;
1241
6.84k
  }
1242
18.5k
  s->dist_context_map_slice = s->dist_context_map +
1243
18.5k
      (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
1244
18.5k
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1245
18.5k
  return BROTLI_TRUE;
1246
25.3k
}
1247
1248
7.03k
static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
1249
7.03k
  DecodeDistanceBlockSwitchInternal(0, s);
1250
7.03k
}
1251
1252
static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
1253
18.3k
    BrotliDecoderState* s) {
1254
18.3k
  return DecodeDistanceBlockSwitchInternal(1, s);
1255
18.3k
}
1256
1257
1.38M
static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
1258
1.38M
  size_t pos = wrap && s->pos > s->ringbuffer_size ?
1259
1.26M
      (size_t)s->ringbuffer_size : (size_t)(s->pos);
1260
1.38M
  size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
1261
1.38M
  return partial_pos_rb - s->partial_pos_out;
1262
1.38M
}
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.38M
    size_t* total_out, BROTLI_BOOL force) {
1270
1.38M
  uint8_t* start =
1271
1.38M
      s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
1272
1.38M
  size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
1273
1.38M
  size_t num_written = *available_out;
1274
1.38M
  if (num_written > to_write) {
1275
538k
    num_written = to_write;
1276
538k
  }
1277
1.38M
  if (s->meta_block_remaining_len < 0) {
1278
185
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
1279
185
  }
1280
1.38M
  if (next_out && !*next_out) {
1281
538k
    *next_out = start;
1282
847k
  } else {
1283
847k
    if (next_out) {
1284
0
      memcpy(*next_out, start, num_written);
1285
0
      *next_out += num_written;
1286
0
    }
1287
847k
  }
1288
1.38M
  *available_out -= num_written;
1289
1.38M
  BROTLI_LOG_UINT(to_write);
1290
1.38M
  BROTLI_LOG_UINT(num_written);
1291
1.38M
  s->partial_pos_out += num_written;
1292
1.38M
  if (total_out) {
1293
0
    *total_out = s->partial_pos_out;
1294
0
  }
1295
1.38M
  if (num_written < to_write) {
1296
463k
    if (s->ringbuffer_size == (1 << s->window_bits) || force) {
1297
463k
      return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
1298
463k
    } else {
1299
41
      return BROTLI_DECODER_SUCCESS;
1300
41
    }
1301
463k
  }
1302
  /* Wrap ring buffer only if it has reached its maximal size. */
1303
923k
  if (s->ringbuffer_size == (1 << s->window_bits) &&
1304
802k
      s->pos >= s->ringbuffer_size) {
1305
293k
    s->pos -= s->ringbuffer_size;
1306
293k
    s->rb_roundtrips++;
1307
293k
    s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
1308
293k
  }
1309
923k
  return BROTLI_DECODER_SUCCESS;
1310
1.38M
}
1311
1312
830k
static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
1313
830k
  if (s->should_wrap_ringbuffer) {
1314
62.5k
    memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
1315
62.5k
    s->should_wrap_ringbuffer = 0;
1316
62.5k
  }
1317
830k
}
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
81.3k
    BrotliDecoderState* s) {
1328
81.3k
  uint8_t* old_ringbuffer = s->ringbuffer;
1329
81.3k
  if (s->ringbuffer_size == s->new_ringbuffer_size) {
1330
76.6k
    return BROTLI_TRUE;
1331
76.6k
  }
1332
1333
4.70k
  s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
1334
4.70k
      (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
1335
4.70k
  if (s->ringbuffer == 0) {
1336
    /* Restore previous value. */
1337
0
    s->ringbuffer = old_ringbuffer;
1338
0
    return BROTLI_FALSE;
1339
0
  }
1340
4.70k
  s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
1341
4.70k
  s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
1342
1343
4.70k
  if (!!old_ringbuffer) {
1344
423
    memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
1345
423
    BROTLI_DECODER_FREE(s, old_ringbuffer);
1346
423
  }
1347
1348
4.70k
  s->ringbuffer_size = s->new_ringbuffer_size;
1349
4.70k
  s->ringbuffer_mask = s->new_ringbuffer_size - 1;
1350
4.70k
  s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
1351
1352
4.70k
  return BROTLI_TRUE;
1353
4.70k
}
1354
1355
static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
1356
    size_t* available_out, uint8_t** next_out, size_t* total_out,
1357
67.2k
    BrotliDecoderState* s) {
1358
  /* TODO: avoid allocation for single uncompressed block. */
1359
67.2k
  if (!BrotliEnsureRingBuffer(s)) {
1360
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
1361
0
  }
1362
1363
  /* State machine */
1364
69.4k
  for (;;) {
1365
69.4k
    switch (s->substate_uncompressed) {
1366
67.2k
      case BROTLI_STATE_UNCOMPRESSED_NONE: {
1367
67.2k
        int nbytes = (int)BrotliGetRemainingBytes(&s->br);
1368
67.2k
        if (nbytes > s->meta_block_remaining_len) {
1369
1.80k
          nbytes = s->meta_block_remaining_len;
1370
1.80k
        }
1371
67.2k
        if (s->pos + nbytes > s->ringbuffer_size) {
1372
2.12k
          nbytes = s->ringbuffer_size - s->pos;
1373
2.12k
        }
1374
        /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
1375
67.2k
        BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
1376
67.2k
        s->pos += nbytes;
1377
67.2k
        s->meta_block_remaining_len -= nbytes;
1378
67.2k
        if (s->pos < 1 << s->window_bits) {
1379
65.0k
          if (s->meta_block_remaining_len == 0) {
1380
2.59k
            return BROTLI_DECODER_SUCCESS;
1381
2.59k
          }
1382
62.4k
          return BROTLI_DECODER_NEEDS_MORE_INPUT;
1383
65.0k
        }
1384
2.20k
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
1385
2.20k
      }
1386
      /* Fall through. */
1387
1388
4.40k
      case BROTLI_STATE_UNCOMPRESSED_WRITE: {
1389
4.40k
        BrotliDecoderErrorCode result;
1390
4.40k
        result = WriteRingBuffer(
1391
4.40k
            s, available_out, next_out, total_out, BROTLI_FALSE);
1392
4.40k
        if (result != BROTLI_DECODER_SUCCESS) {
1393
2.20k
          return result;
1394
2.20k
        }
1395
2.20k
        if (s->ringbuffer_size == 1 << s->window_bits) {
1396
2.20k
          s->max_distance = s->max_backward_distance;
1397
2.20k
        }
1398
2.20k
        s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
1399
2.20k
        break;
1400
4.40k
      }
1401
69.4k
    }
1402
69.4k
  }
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
19.5k
    BrotliDecoderState* s) {
1414
19.5k
  int window_size = 1 << s->window_bits;
1415
19.5k
  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
19.5k
  int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
1419
19.5k
  int output_size;
1420
1421
  /* If maximum is already reached, no further extension is retired. */
1422
19.5k
  if (s->ringbuffer_size == window_size) {
1423
2.72k
    return;
1424
2.72k
  }
1425
1426
  /* Metadata blocks does not touch ring buffer. */
1427
16.8k
  if (s->is_metadata) {
1428
0
    return;
1429
0
  }
1430
1431
16.8k
  if (!s->ringbuffer) {
1432
6.44k
    output_size = 0;
1433
10.3k
  } else {
1434
10.3k
    output_size = s->pos;
1435
10.3k
  }
1436
16.8k
  output_size += s->meta_block_remaining_len;
1437
16.8k
  min_size = min_size < output_size ? output_size : min_size;
1438
1439
16.8k
  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
91.2k
    while ((new_ringbuffer_size >> 1) >= min_size) {
1444
74.4k
      new_ringbuffer_size >>= 1;
1445
74.4k
    }
1446
16.8k
  }
1447
1448
16.8k
  s->new_ringbuffer_size = new_ringbuffer_size;
1449
16.8k
}
1450
1451
/* Reads 1..256 2-bit context modes. */
1452
17.3k
static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
1453
17.3k
  BrotliBitReader* br = &s->br;
1454
17.3k
  int i = s->loop_counter;
1455
1456
51.7k
  while (i < (int)s->num_block_types[0]) {
1457
36.1k
    uint32_t bits;
1458
36.1k
    if (!BrotliSafeReadBits(br, 2, &bits)) {
1459
1.69k
      s->loop_counter = i;
1460
1.69k
      return BROTLI_DECODER_NEEDS_MORE_INPUT;
1461
1.69k
    }
1462
34.4k
    s->context_modes[i] = (uint8_t)bits;
1463
34.4k
    BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
1464
34.4k
    i++;
1465
34.4k
  }
1466
15.6k
  return BROTLI_DECODER_SUCCESS;
1467
17.3k
}
1468
1469
120M
static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
1470
120M
  int offset = s->distance_code - 3;
1471
120M
  if (s->distance_code <= 3) {
1472
    /* Compensate double distance-ring-buffer roll for dictionary items. */
1473
41.3M
    s->distance_context = 1 >> s->distance_code;
1474
41.3M
    s->distance_code = s->dist_rb[(s->dist_rb_idx - offset) & 3];
1475
41.3M
    s->dist_rb_idx -= s->distance_context;
1476
79.2M
  } else {
1477
79.2M
    int index_delta = 3;
1478
79.2M
    int delta;
1479
79.2M
    int base = s->distance_code - 10;
1480
79.2M
    if (s->distance_code < 10) {
1481
50.2M
      base = s->distance_code - 4;
1482
50.2M
    } else {
1483
28.9M
      index_delta = 2;
1484
28.9M
    }
1485
    /* Unpack one of six 4-bit values. */
1486
79.2M
    delta = ((0x605142 >> (4 * base)) & 0xF) - 3;
1487
79.2M
    s->distance_code = s->dist_rb[(s->dist_rb_idx + index_delta) & 0x3] + delta;
1488
79.2M
    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
44
      s->distance_code = 0x7FFFFFFF;
1492
44
    }
1493
79.2M
  }
1494
120M
}
1495
1496
static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
1497
1.42G
    BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
1498
1.42G
  if (n_bits != 0) {
1499
35.1k
    return BrotliSafeReadBits(br, n_bits, val);
1500
1.42G
  } else {
1501
1.42G
    *val = 0;
1502
1.42G
    return BROTLI_TRUE;
1503
1.42G
  }
1504
1.42G
}
1505
1506
static BROTLI_INLINE BROTLI_BOOL SafeReadBits32(
1507
356M
    BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
1508
356M
  if (n_bits != 0) {
1509
19.0k
    return BrotliSafeReadBits32(br, n_bits, val);
1510
356M
  } else {
1511
356M
    *val = 0;
1512
356M
    return BROTLI_TRUE;
1513
356M
  }
1514
356M
}
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
14.0k
static void CalculateDistanceLut(BrotliDecoderState* s) {
1584
14.0k
  BrotliMetablockBodyArena* b = &s->arena.body;
1585
14.0k
  uint32_t npostfix = s->distance_postfix_bits;
1586
14.0k
  uint32_t ndirect = s->num_direct_distance_codes;
1587
14.0k
  uint32_t alphabet_size_limit = s->distance_hgroup.alphabet_size_limit;
1588
14.0k
  uint32_t postfix = 1u << npostfix;
1589
14.0k
  uint32_t j;
1590
14.0k
  uint32_t bits = 1;
1591
14.0k
  uint32_t half = 0;
1592
1593
  /* Skip short codes. */
1594
14.0k
  uint32_t i = BROTLI_NUM_DISTANCE_SHORT_CODES;
1595
1596
  /* Fill direct codes. */
1597
292k
  for (j = 0; j < ndirect; ++j) {
1598
278k
    b->dist_extra_bits[i] = 0;
1599
278k
    b->dist_offset[i] = j + 1;
1600
278k
    ++i;
1601
278k
  }
1602
1603
  /* Fill regular distance codes. */
1604
688k
  while (i < alphabet_size_limit) {
1605
674k
    uint32_t base = ndirect + ((((2 + half) << bits) - 4) << npostfix) + 1;
1606
    /* Always fill the complete group. */
1607
2.45M
    for (j = 0; j < postfix; ++j) {
1608
1.78M
      b->dist_extra_bits[i] = (uint8_t)bits;
1609
1.78M
      b->dist_offset[i] = base + j;
1610
1.78M
      ++i;
1611
1.78M
    }
1612
674k
    bits = bits + half;
1613
674k
    half = half ^ 1;
1614
674k
  }
1615
14.0k
}
1616
1617
/* Precondition: s->distance_code < 0. */
1618
static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
1619
478M
    int safe, BrotliDecoderState* s, BrotliBitReader* br) {
1620
478M
  BrotliMetablockBodyArena* b = &s->arena.body;
1621
478M
  uint32_t code;
1622
478M
  uint32_t bits;
1623
478M
  BrotliBitReaderState memento;
1624
478M
  HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
1625
478M
  if (!safe) {
1626
10.3M
    code = ReadSymbol(distance_tree, br);
1627
467M
  } else {
1628
467M
    BrotliBitReaderSaveState(br, &memento);
1629
467M
    if (!SafeReadSymbol(distance_tree, br, &code)) {
1630
1.14k
      return BROTLI_FALSE;
1631
1.14k
    }
1632
467M
  }
1633
478M
  --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
478M
  s->distance_context = 0;
1637
478M
  if ((code & ~0xFu) == 0) {
1638
120M
    s->distance_code = (int)code;
1639
120M
    TakeDistanceFromRingBuffer(s);
1640
120M
    return BROTLI_TRUE;
1641
120M
  }
1642
357M
  if (!safe) {
1643
1.12M
    bits = BrotliReadBits32(br, b->dist_extra_bits[code]);
1644
356M
  } else {
1645
356M
    if (!SafeReadBits32(br, b->dist_extra_bits[code], &bits)) {
1646
8.49k
      ++s->block_length[2];
1647
8.49k
      BrotliBitReaderRestoreState(br, &memento);
1648
8.49k
      return BROTLI_FALSE;
1649
8.49k
    }
1650
356M
  }
1651
357M
  s->distance_code =
1652
357M
      (int)(b->dist_offset[code] + (bits << s->distance_postfix_bits));
1653
357M
  return BROTLI_TRUE;
1654
357M
}
1655
1656
static BROTLI_INLINE void ReadDistance(
1657
10.3M
    BrotliDecoderState* s, BrotliBitReader* br) {
1658
10.3M
  ReadDistanceInternal(0, s, br);
1659
10.3M
}
1660
1661
static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
1662
467M
    BrotliDecoderState* s, BrotliBitReader* br) {
1663
467M
  return ReadDistanceInternal(1, s, br);
1664
467M
}
1665
1666
static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
1667
792M
    int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1668
792M
  uint32_t cmd_code;
1669
792M
  uint32_t insert_len_extra = 0;
1670
792M
  uint32_t copy_length;
1671
792M
  CmdLutElement v;
1672
792M
  BrotliBitReaderState memento;
1673
792M
  if (!safe) {
1674
82.4M
    cmd_code = ReadSymbol(s->htree_command, br);
1675
710M
  } else {
1676
710M
    BrotliBitReaderSaveState(br, &memento);
1677
710M
    if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
1678
3.43k
      return BROTLI_FALSE;
1679
3.43k
    }
1680
710M
  }
1681
792M
  v = kCmdLut[cmd_code];
1682
792M
  s->distance_code = v.distance_code;
1683
792M
  s->distance_context = v.context;
1684
792M
  s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
1685
792M
  *insert_length = v.insert_len_offset;
1686
792M
  if (!safe) {
1687
82.4M
    if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
1688
23.1k
      insert_len_extra = BrotliReadBits24(br, v.insert_len_extra_bits);
1689
23.1k
    }
1690
82.4M
    copy_length = BrotliReadBits24(br, v.copy_len_extra_bits);
1691
710M
  } else {
1692
710M
    if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
1693
710M
        !SafeReadBits(br, v.copy_len_extra_bits, &copy_length)) {
1694
11.2k
      BrotliBitReaderRestoreState(br, &memento);
1695
11.2k
      return BROTLI_FALSE;
1696
11.2k
    }
1697
710M
  }
1698
792M
  s->copy_length = (int)copy_length + v.copy_len_offset;
1699
792M
  --s->block_length[1];
1700
792M
  *insert_length += (int)insert_len_extra;
1701
792M
  return BROTLI_TRUE;
1702
792M
}
1703
1704
static BROTLI_INLINE void ReadCommand(
1705
82.4M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1706
82.4M
  ReadCommandInternal(0, s, br, insert_length);
1707
82.4M
}
1708
1709
static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
1710
710M
    BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
1711
710M
  return ReadCommandInternal(1, s, br, insert_length);
1712
710M
}
1713
1714
static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
1715
3.46G
    int safe, BrotliBitReader* const br, size_t num) {
1716
3.46G
  if (safe) {
1717
2.98G
    return BROTLI_TRUE;
1718
2.98G
  }
1719
477M
  return BrotliCheckInputAmount(br, num);
1720
3.46G
}
1721
1722
#define BROTLI_SAFE(METHOD)                       \
1723
1.27G
  {                                               \
1724
1.27G
    if (safe) {                                   \
1725
1.17G
      if (!Safe##METHOD) {                        \
1726
46.2k
        result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
1727
46.2k
        goto saveStateAndReturn;                  \
1728
46.2k
      }                                           \
1729
1.17G
    } else {                                      \
1730
92.7M
      METHOD;                                     \
1731
92.7M
    }                                             \
1732
1.27G
  }
1733
1734
static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
1735
683k
    int safe, BrotliDecoderState* s) {
1736
683k
  int pos = s->pos;
1737
683k
  int i = s->loop_counter;
1738
683k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
1739
683k
  BrotliBitReader* br = &s->br;
1740
1741
683k
  if (!CheckInputAmount(safe, br, 28)) {
1742
294k
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1743
294k
    goto saveStateAndReturn;
1744
294k
  }
1745
388k
  if (!safe) {
1746
60.1k
    BROTLI_UNUSED(BrotliWarmupBitReader(br));
1747
60.1k
  }
1748
1749
  /* Jump into state machine. */
1750
388k
  if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
1751
128k
    goto CommandBegin;
1752
260k
  } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
1753
78.3k
    goto CommandInner;
1754
182k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
1755
62.1k
    goto CommandPostDecodeLiterals;
1756
120k
  } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
1757
120k
    goto CommandPostWrapCopy;
1758
120k
  } else {
1759
0
    return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
1760
0
  }
1761
1762
792M
CommandBegin:
1763
792M
  if (safe) {
1764
710M
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1765
710M
  }
1766
792M
  if (!CheckInputAmount(safe, br, 28)) {  /* 156 bits + 7 bytes */
1767
14.5k
    s->state = BROTLI_STATE_COMMAND_BEGIN;
1768
14.5k
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1769
14.5k
    goto saveStateAndReturn;
1770
14.5k
  }
1771
792M
  if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
1772
24.3k
    BROTLI_SAFE(DecodeCommandBlockSwitch(s));
1773
17.7k
    goto CommandBegin;
1774
24.3k
  }
1775
  /* Read the insert/copy length in the command. */
1776
792M
  BROTLI_SAFE(ReadCommand(s, br, &i));
1777
792M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
1778
792M
              pos, i, s->copy_length));
1779
792M
  if (i == 0) {
1780
41.2M
    goto CommandPostDecodeLiterals;
1781
41.2M
  }
1782
751M
  s->meta_block_remaining_len -= i;
1783
1784
751M
CommandInner:
1785
751M
  if (safe) {
1786
674M
    s->state = BROTLI_STATE_COMMAND_INNER;
1787
674M
  }
1788
  /* Read the literals in the command. */
1789
751M
  if (s->trivial_literal_context) {
1790
739M
    uint32_t bits;
1791
739M
    uint32_t value;
1792
739M
    PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1793
2.57G
    do {
1794
2.57G
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1795
7.16k
        s->state = BROTLI_STATE_COMMAND_INNER;
1796
7.16k
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1797
7.16k
        goto saveStateAndReturn;
1798
7.16k
      }
1799
2.57G
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1800
31.6k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1801
26.2k
        PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
1802
26.2k
        if (!s->trivial_literal_context) goto CommandInner;
1803
26.2k
      }
1804
2.57G
      if (!safe) {
1805
373M
        s->ringbuffer[pos] =
1806
373M
            (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
1807
2.20G
      } else {
1808
2.20G
        uint32_t literal;
1809
2.20G
        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.20G
        s->ringbuffer[pos] = (uint8_t)literal;
1814
2.20G
      }
1815
2.57G
      --s->block_length[0];
1816
2.57G
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
1817
2.57G
      ++pos;
1818
2.57G
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1819
71.6k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1820
71.6k
        --i;
1821
71.6k
        goto saveStateAndReturn;
1822
71.6k
      }
1823
2.57G
    } while (--i != 0);
1824
739M
  } else {
1825
11.7M
    uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
1826
11.7M
    uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
1827
91.0M
    do {
1828
91.0M
      const HuffmanCode* hc;
1829
91.0M
      uint8_t context;
1830
91.0M
      if (!CheckInputAmount(safe, br, 28)) {  /* 162 bits + 7 bytes */
1831
12.5k
        s->state = BROTLI_STATE_COMMAND_INNER;
1832
12.5k
        result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1833
12.5k
        goto saveStateAndReturn;
1834
12.5k
      }
1835
91.0M
      if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
1836
14.5k
        BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
1837
11.4k
        if (s->trivial_literal_context) goto CommandInner;
1838
11.4k
      }
1839
91.0M
      context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
1840
91.0M
      BROTLI_LOG_UINT(context);
1841
91.0M
      hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
1842
91.0M
      p2 = p1;
1843
91.0M
      if (!safe) {
1844
21.1M
        p1 = (uint8_t)ReadSymbol(hc, br);
1845
69.8M
      } else {
1846
69.8M
        uint32_t literal;
1847
69.8M
        if (!SafeReadSymbol(hc, br, &literal)) {
1848
4.04k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
1849
4.04k
          goto saveStateAndReturn;
1850
4.04k
        }
1851
69.8M
        p1 = (uint8_t)literal;
1852
69.8M
      }
1853
91.0M
      s->ringbuffer[pos] = p1;
1854
91.0M
      --s->block_length[0];
1855
91.0M
      BROTLI_LOG_UINT(s->context_map_slice[context]);
1856
91.0M
      BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
1857
91.0M
      ++pos;
1858
91.0M
      if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
1859
20.7k
        s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
1860
20.7k
        --i;
1861
20.7k
        goto saveStateAndReturn;
1862
20.7k
      }
1863
91.0M
    } while (--i != 0);
1864
11.7M
  }
1865
751M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1866
751M
  if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
1867
7.51k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1868
7.51k
    goto saveStateAndReturn;
1869
7.51k
  }
1870
1871
792M
CommandPostDecodeLiterals:
1872
792M
  if (safe) {
1873
710M
    s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
1874
710M
  }
1875
792M
  if (s->distance_code >= 0) {
1876
    /* Implicit distance case. */
1877
314M
    s->distance_context = s->distance_code ? 0 : 1;
1878
314M
    --s->dist_rb_idx;
1879
314M
    s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
1880
478M
  } else {
1881
    /* Read distance code in the command, unless it was implicitly zero. */
1882
478M
    if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
1883
25.3k
      BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
1884
18.5k
    }
1885
478M
    BROTLI_SAFE(ReadDistance(s, br));
1886
478M
  }
1887
792M
  BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
1888
792M
              pos, s->distance_code));
1889
792M
  if (s->max_distance != s->max_backward_distance) {
1890
224M
    s->max_distance =
1891
224M
        (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
1892
224M
  }
1893
792M
  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
792M
  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
37.9M
    if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
1901
44
      BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1902
44
          "len: %d bytes left: %d\n",
1903
44
          pos, s->distance_code, i, s->meta_block_remaining_len));
1904
44
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
1905
44
    }
1906
37.9M
    if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
1907
37.9M
        i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
1908
37.9M
      int address = s->distance_code - s->max_distance - 1;
1909
37.9M
      const BrotliDictionary* words = s->dictionary;
1910
37.9M
      const BrotliTransforms* transforms = s->transforms;
1911
37.9M
      int offset = (int)s->dictionary->offsets_by_length[i];
1912
37.9M
      uint32_t shift = s->dictionary->size_bits_by_length[i];
1913
1914
37.9M
      int mask = (int)BitMask(shift);
1915
37.9M
      int word_idx = address & mask;
1916
37.9M
      int transform_idx = address >> shift;
1917
      /* Compensate double distance-ring-buffer roll. */
1918
37.9M
      s->dist_rb_idx += s->distance_context;
1919
37.9M
      offset += word_idx * i;
1920
37.9M
      if (BROTLI_PREDICT_FALSE(!words->data)) {
1921
0
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
1922
0
      }
1923
37.9M
      if (transform_idx < (int)transforms->num_transforms) {
1924
37.9M
        const uint8_t* word = &words->data[offset];
1925
37.9M
        int len = i;
1926
37.9M
        if (transform_idx == transforms->cutOffTransforms[0]) {
1927
37.9M
          memcpy(&s->ringbuffer[pos], word, (size_t)len);
1928
37.9M
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
1929
37.9M
                      len, word));
1930
37.9M
        } else {
1931
42.5k
          len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
1932
42.5k
              transforms, transform_idx);
1933
42.5k
          BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
1934
42.5k
                      " transform_idx = %d, transformed: [%.*s]\n",
1935
42.5k
                      i, word, transform_idx, len, &s->ringbuffer[pos]));
1936
42.5k
        }
1937
37.9M
        pos += len;
1938
37.9M
        s->meta_block_remaining_len -= len;
1939
37.9M
        if (pos >= s->ringbuffer_size) {
1940
78.9k
          s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
1941
78.9k
          goto saveStateAndReturn;
1942
78.9k
        }
1943
37.9M
      } else {
1944
135
        BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1945
135
            "len: %d bytes left: %d\n",
1946
135
            pos, s->distance_code, i, s->meta_block_remaining_len));
1947
135
        return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
1948
135
      }
1949
37.9M
    } else {
1950
98
      BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
1951
98
          "len: %d bytes left: %d\n",
1952
98
          pos, s->distance_code, i, s->meta_block_remaining_len));
1953
98
      return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
1954
98
    }
1955
754M
  } else {
1956
754M
    int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
1957
754M
    uint8_t* copy_dst = &s->ringbuffer[pos];
1958
754M
    uint8_t* copy_src = &s->ringbuffer[src_start];
1959
754M
    int dst_end = pos + i;
1960
754M
    int src_end = src_start + i;
1961
    /* Update the recent distances cache. */
1962
754M
    s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
1963
754M
    ++s->dist_rb_idx;
1964
754M
    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
754M
    memmove16(copy_dst, copy_src);
1969
754M
    if (src_end > pos && dst_end > src_start) {
1970
      /* Regions intersect. */
1971
266M
      goto CommandPostWrapCopy;
1972
266M
    }
1973
487M
    if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
1974
      /* At least one region wraps. */
1975
165k
      goto CommandPostWrapCopy;
1976
165k
    }
1977
487M
    pos += i;
1978
487M
    if (i > 16) {
1979
3.78k
      if (i > 32) {
1980
1.21k
        memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
1981
2.56k
      } else {
1982
        /* This branch covers about 45% cases.
1983
           Fixed size short copy allows more compiler optimizations. */
1984
2.56k
        memmove16(copy_dst + 16, copy_src + 16);
1985
2.56k
      }
1986
3.78k
    }
1987
487M
  }
1988
525M
  BROTLI_LOG_UINT(s->meta_block_remaining_len);
1989
525M
  if (s->meta_block_remaining_len <= 0) {
1990
    /* Next metablock, if any. */
1991
1.61k
    s->state = BROTLI_STATE_METABLOCK_DONE;
1992
1.61k
    goto saveStateAndReturn;
1993
525M
  } else {
1994
525M
    goto CommandBegin;
1995
525M
  }
1996
266M
CommandPostWrapCopy:
1997
266M
  {
1998
266M
    int wrap_guard = s->ringbuffer_size - pos;
1999
3.23G
    while (--i >= 0) {
2000
2.96G
      s->ringbuffer[pos] =
2001
2.96G
          s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
2002
2.96G
      ++pos;
2003
2.96G
      if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
2004
120k
        s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
2005
120k
        goto saveStateAndReturn;
2006
120k
      }
2007
2.96G
    }
2008
266M
  }
2009
266M
  if (s->meta_block_remaining_len <= 0) {
2010
    /* Next metablock, if any. */
2011
1.99k
    s->state = BROTLI_STATE_METABLOCK_DONE;
2012
1.99k
    goto saveStateAndReturn;
2013
266M
  } else {
2014
266M
    goto CommandBegin;
2015
266M
  }
2016
2017
683k
saveStateAndReturn:
2018
683k
  s->pos = pos;
2019
683k
  s->loop_counter = i;
2020
683k
  return result;
2021
266M
}
2022
2023
#undef BROTLI_SAFE
2024
2025
static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
2026
354k
    BrotliDecoderState* s) {
2027
354k
  return ProcessCommandsInternal(0, s);
2028
354k
}
2029
2030
static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
2031
328k
    BrotliDecoderState* s) {
2032
328k
  return ProcessCommandsInternal(1, s);
2033
328k
}
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
621k
    size_t* available_out, uint8_t** next_out, size_t* total_out) {
2072
621k
  BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
2073
621k
  BrotliBitReader* br = &s->br;
2074
  /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
2075
621k
  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
621k
  if ((int)s->error_code < 0) {
2080
0
    return BROTLI_DECODER_RESULT_ERROR;
2081
0
  }
2082
621k
  if (*available_out && (!next_out || !*next_out)) {
2083
0
    return SaveErrorCode(
2084
0
        s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
2085
0
  }
2086
621k
  if (!*available_out) next_out = 0;
2087
621k
  if (s->buffer_length == 0) {  /* Just connect bit reader to input stream. */
2088
612k
    br->avail_in = *available_in;
2089
612k
    br->next_in = *next_in;
2090
612k
  } 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
9.78k
    result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2095
9.78k
    br->next_in = &s->buffer.u8[0];
2096
9.78k
  }
2097
  /* State machine */
2098
1.99M
  for (;;) {
2099
1.99M
    if (result != BROTLI_DECODER_SUCCESS) {
2100
      /* Error, needs more input/output. */
2101
636k
      if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2102
278k
        if (s->ringbuffer != 0) {  /* Pro-actively push output. */
2103
197k
          BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
2104
197k
              available_out, next_out, total_out, BROTLI_TRUE);
2105
          /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
2106
197k
          if ((int)intermediate_result < 0) {
2107
9
            result = intermediate_result;
2108
9
            break;
2109
9
          }
2110
197k
        }
2111
278k
        if (s->buffer_length != 0) {  /* Used with internal buffer. */
2112
17.8k
          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.38k
            s->buffer_length = 0;
2117
            /* Switch to input stream and restart. */
2118
5.38k
            result = BROTLI_DECODER_SUCCESS;
2119
5.38k
            br->avail_in = *available_in;
2120
5.38k
            br->next_in = *next_in;
2121
5.38k
            continue;
2122
12.4k
          } else if (*available_in != 0) {
2123
            /* Not enough data in buffer, but can take one more byte from
2124
               input stream. */
2125
9.78k
            result = BROTLI_DECODER_SUCCESS;
2126
9.78k
            s->buffer.u8[s->buffer_length] = **next_in;
2127
9.78k
            s->buffer_length++;
2128
9.78k
            br->avail_in = s->buffer_length;
2129
9.78k
            (*next_in)++;
2130
9.78k
            (*available_in)--;
2131
            /* Retry with more data in buffer. */
2132
9.78k
            continue;
2133
9.78k
          }
2134
          /* Can't finish reading and no more input. */
2135
2.68k
          break;
2136
260k
        } else {  /* Input stream doesn't contain enough input. */
2137
          /* Copy tail to internal buffer and return. */
2138
260k
          *next_in = br->next_in;
2139
260k
          *available_in = br->avail_in;
2140
267k
          while (*available_in) {
2141
7.25k
            s->buffer.u8[s->buffer_length] = **next_in;
2142
7.25k
            s->buffer_length++;
2143
7.25k
            (*next_in)++;
2144
7.25k
            (*available_in)--;
2145
7.25k
          }
2146
260k
          break;
2147
260k
        }
2148
        /* Unreachable. */
2149
278k
      }
2150
2151
      /* Fail or needs more output. */
2152
2153
358k
      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.71k
        s->buffer_length = 0;
2157
356k
      } 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
356k
        BrotliBitReaderUnload(br);
2162
356k
        *available_in = br->avail_in;
2163
356k
        *next_in = br->next_in;
2164
356k
      }
2165
358k
      break;
2166
636k
    }
2167
1.35M
    switch (s->state) {
2168
11.5k
      case BROTLI_STATE_UNINITED:
2169
        /* Prepare to the first read. */
2170
11.5k
        if (!BrotliWarmupBitReader(br)) {
2171
4.50k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2172
4.50k
          break;
2173
4.50k
        }
2174
        /* Decode window size. */
2175
7.02k
        result = DecodeWindowBits(s, br);  /* Reads 1..8 bits. */
2176
7.02k
        if (result != BROTLI_DECODER_SUCCESS) {
2177
2
          break;
2178
2
        }
2179
7.02k
        if (s->large_window) {
2180
0
          s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
2181
0
          break;
2182
0
        }
2183
7.02k
        s->state = BROTLI_STATE_INITIALIZE;
2184
7.02k
        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
7.02k
      case BROTLI_STATE_INITIALIZE:
2200
7.02k
        BROTLI_LOG_UINT(s->window_bits);
2201
        /* Maximum distance, see section 9.1. of the spec. */
2202
7.02k
        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
7.02k
        s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
2206
7.02k
            sizeof(HuffmanCode) * 3 *
2207
7.02k
                (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
2208
7.02k
        if (s->block_type_trees == 0) {
2209
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
2210
0
          break;
2211
0
        }
2212
7.02k
        s->block_len_trees =
2213
7.02k
            s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
2214
2215
7.02k
        s->state = BROTLI_STATE_METABLOCK_BEGIN;
2216
      /* Fall through. */
2217
2218
25.8k
      case BROTLI_STATE_METABLOCK_BEGIN:
2219
25.8k
        BrotliDecoderStateMetablockBegin(s);
2220
25.8k
        BROTLI_LOG_UINT(s->pos);
2221
25.8k
        s->state = BROTLI_STATE_METABLOCK_HEADER;
2222
      /* Fall through. */
2223
2224
50.5k
      case BROTLI_STATE_METABLOCK_HEADER:
2225
50.5k
        result = DecodeMetaBlockLength(s, br);  /* Reads 2 - 31 bits. */
2226
50.5k
        if (result != BROTLI_DECODER_SUCCESS) {
2227
25.1k
          break;
2228
25.1k
        }
2229
25.4k
        BROTLI_LOG_UINT(s->is_last_metablock);
2230
25.4k
        BROTLI_LOG_UINT(s->meta_block_remaining_len);
2231
25.4k
        BROTLI_LOG_UINT(s->is_metadata);
2232
25.4k
        BROTLI_LOG_UINT(s->is_uncompressed);
2233
25.4k
        if (s->is_metadata || s->is_uncompressed) {
2234
8.59k
          if (!BrotliJumpToByteBoundary(br)) {
2235
43
            result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
2236
43
            break;
2237
43
          }
2238
8.59k
        }
2239
25.3k
        if (s->is_metadata) {
2240
5.57k
          s->state = BROTLI_STATE_METADATA;
2241
5.57k
          break;
2242
5.57k
        }
2243
19.8k
        if (s->meta_block_remaining_len == 0) {
2244
293
          s->state = BROTLI_STATE_METABLOCK_DONE;
2245
293
          break;
2246
293
        }
2247
19.5k
        BrotliCalculateRingBufferSize(s);
2248
19.5k
        if (s->is_uncompressed) {
2249
2.98k
          s->state = BROTLI_STATE_UNCOMPRESSED;
2250
2.98k
          break;
2251
2.98k
        }
2252
16.5k
        s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER;
2253
      /* Fall through. */
2254
2255
16.5k
      case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_HEADER: {
2256
16.5k
        BrotliMetablockHeaderArena* h = &s->arena.header;
2257
16.5k
        s->loop_counter = 0;
2258
        /* Initialize compressed metablock header arena. */
2259
16.5k
        h->sub_loop_counter = 0;
2260
        /* Make small negative indexes addressable. */
2261
16.5k
        h->symbol_lists =
2262
16.5k
            &h->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
2263
16.5k
        h->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
2264
16.5k
        h->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
2265
16.5k
        h->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
2266
16.5k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2267
16.5k
      }
2268
      /* Fall through. */
2269
2270
66.8k
      case BROTLI_STATE_HUFFMAN_CODE_0:
2271
66.8k
        if (s->loop_counter >= 3) {
2272
15.7k
          s->state = BROTLI_STATE_METABLOCK_HEADER_2;
2273
15.7k
          break;
2274
15.7k
        }
2275
        /* Reads 1..11 bits. */
2276
51.1k
        result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
2277
51.1k
        if (result != BROTLI_DECODER_SUCCESS) {
2278
2.69k
          break;
2279
2.69k
        }
2280
48.4k
        s->num_block_types[s->loop_counter]++;
2281
48.4k
        BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
2282
48.4k
        if (s->num_block_types[s->loop_counter] < 2) {
2283
43.3k
          s->loop_counter++;
2284
43.3k
          break;
2285
43.3k
        }
2286
5.11k
        s->state = BROTLI_STATE_HUFFMAN_CODE_1;
2287
      /* Fall through. */
2288
2289
8.84k
      case BROTLI_STATE_HUFFMAN_CODE_1: {
2290
8.84k
        uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
2291
8.84k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
2292
8.84k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2293
8.84k
            &s->block_type_trees[tree_offset], NULL, s);
2294
8.84k
        if (result != BROTLI_DECODER_SUCCESS) break;
2295
4.70k
        s->state = BROTLI_STATE_HUFFMAN_CODE_2;
2296
4.70k
      }
2297
      /* Fall through. */
2298
2299
9.56k
      case BROTLI_STATE_HUFFMAN_CODE_2: {
2300
9.56k
        uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
2301
9.56k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2302
9.56k
        result = ReadHuffmanCode(alphabet_size, alphabet_size,
2303
9.56k
            &s->block_len_trees[tree_offset], NULL, s);
2304
9.56k
        if (result != BROTLI_DECODER_SUCCESS) break;
2305
4.48k
        s->state = BROTLI_STATE_HUFFMAN_CODE_3;
2306
4.48k
      }
2307
      /* Fall through. */
2308
2309
5.53k
      case BROTLI_STATE_HUFFMAN_CODE_3: {
2310
5.53k
        int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
2311
5.53k
        if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
2312
5.53k
            &s->block_len_trees[tree_offset], br)) {
2313
1.14k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2314
1.14k
          break;
2315
1.14k
        }
2316
4.39k
        BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
2317
4.39k
        s->loop_counter++;
2318
4.39k
        s->state = BROTLI_STATE_HUFFMAN_CODE_0;
2319
4.39k
        break;
2320
5.53k
      }
2321
2322
67.2k
      case BROTLI_STATE_UNCOMPRESSED: {
2323
67.2k
        result = CopyUncompressedBlockToOutput(
2324
67.2k
            available_out, next_out, total_out, s);
2325
67.2k
        if (result != BROTLI_DECODER_SUCCESS) {
2326
64.6k
          break;
2327
64.6k
        }
2328
2.59k
        s->state = BROTLI_STATE_METABLOCK_DONE;
2329
2.59k
        break;
2330
67.2k
      }
2331
2332
20.2k
      case BROTLI_STATE_METADATA:
2333
683k
        for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
2334
677k
          uint32_t bits;
2335
          /* Read one byte and ignore it. */
2336
677k
          if (!BrotliSafeReadBits(br, 8, &bits)) {
2337
14.8k
            result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2338
14.8k
            break;
2339
14.8k
          }
2340
677k
        }
2341
20.2k
        if (result == BROTLI_DECODER_SUCCESS) {
2342
5.45k
          s->state = BROTLI_STATE_METABLOCK_DONE;
2343
5.45k
        }
2344
20.2k
        break;
2345
2346
22.3k
      case BROTLI_STATE_METABLOCK_HEADER_2: {
2347
22.3k
        uint32_t bits;
2348
22.3k
        if (!BrotliSafeReadBits(br, 6, &bits)) {
2349
6.70k
          result = BROTLI_DECODER_NEEDS_MORE_INPUT;
2350
6.70k
          break;
2351
6.70k
        }
2352
15.6k
        s->distance_postfix_bits = bits & BitMask(2);
2353
15.6k
        bits >>= 2;
2354
15.6k
        s->num_direct_distance_codes = bits << s->distance_postfix_bits;
2355
15.6k
        BROTLI_LOG_UINT(s->num_direct_distance_codes);
2356
15.6k
        BROTLI_LOG_UINT(s->distance_postfix_bits);
2357
15.6k
        s->context_modes =
2358
15.6k
            (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
2359
15.6k
        if (s->context_modes == 0) {
2360
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
2361
0
          break;
2362
0
        }
2363
15.6k
        s->loop_counter = 0;
2364
15.6k
        s->state = BROTLI_STATE_CONTEXT_MODES;
2365
15.6k
      }
2366
      /* Fall through. */
2367
2368
17.3k
      case BROTLI_STATE_CONTEXT_MODES:
2369
17.3k
        result = ReadContextModes(s);
2370
17.3k
        if (result != BROTLI_DECODER_SUCCESS) {
2371
1.69k
          break;
2372
1.69k
        }
2373
15.6k
        s->state = BROTLI_STATE_CONTEXT_MAP_1;
2374
      /* Fall through. */
2375
2376
26.4k
      case BROTLI_STATE_CONTEXT_MAP_1:
2377
26.4k
        result = DecodeContextMap(
2378
26.4k
            s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
2379
26.4k
            &s->num_literal_htrees, &s->context_map, s);
2380
26.4k
        if (result != BROTLI_DECODER_SUCCESS) {
2381
11.1k
          break;
2382
11.1k
        }
2383
15.2k
        DetectTrivialLiteralBlockTypes(s);
2384
15.2k
        s->state = BROTLI_STATE_CONTEXT_MAP_2;
2385
      /* Fall through. */
2386
2387
18.1k
      case BROTLI_STATE_CONTEXT_MAP_2: {
2388
18.1k
        uint32_t npostfix = s->distance_postfix_bits;
2389
18.1k
        uint32_t ndirect = s->num_direct_distance_codes;
2390
18.1k
        uint32_t distance_alphabet_size_max = BROTLI_DISTANCE_ALPHABET_SIZE(
2391
18.1k
            npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
2392
18.1k
        uint32_t distance_alphabet_size_limit = distance_alphabet_size_max;
2393
18.1k
        BROTLI_BOOL allocation_success = BROTLI_TRUE;
2394
18.1k
        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
18.1k
        result = DecodeContextMap(
2402
18.1k
            s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
2403
18.1k
            &s->num_dist_htrees, &s->dist_context_map, s);
2404
18.1k
        if (result != BROTLI_DECODER_SUCCESS) {
2405
3.08k
          break;
2406
3.08k
        }
2407
15.0k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2408
15.0k
            s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
2409
15.0k
            BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
2410
15.0k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2411
15.0k
            s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
2412
15.0k
            BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
2413
15.0k
        allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
2414
15.0k
            s, &s->distance_hgroup, distance_alphabet_size_max,
2415
15.0k
            distance_alphabet_size_limit, s->num_dist_htrees);
2416
15.0k
        if (!allocation_success) {
2417
0
          return SaveErrorCode(s,
2418
0
              BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
2419
0
        }
2420
15.0k
        s->loop_counter = 0;
2421
15.0k
        s->state = BROTLI_STATE_TREE_GROUP;
2422
15.0k
      }
2423
      /* Fall through. */
2424
2425
118k
      case BROTLI_STATE_TREE_GROUP: {
2426
118k
        HuffmanTreeGroup* hgroup = NULL;
2427
118k
        switch (s->loop_counter) {
2428
51.5k
          case 0: hgroup = &s->literal_hgroup; break;
2429
32.3k
          case 1: hgroup = &s->insert_copy_hgroup; break;
2430
34.3k
          case 2: hgroup = &s->distance_hgroup; break;
2431
0
          default: return SaveErrorCode(s, BROTLI_FAILURE(
2432
0
              BROTLI_DECODER_ERROR_UNREACHABLE));
2433
118k
        }
2434
118k
        result = HuffmanTreeGroupDecode(hgroup, s);
2435
118k
        if (result != BROTLI_DECODER_SUCCESS) break;
2436
42.9k
        s->loop_counter++;
2437
42.9k
        if (s->loop_counter < 3) {
2438
28.9k
          break;
2439
28.9k
        }
2440
14.0k
        s->state = BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY;
2441
14.0k
      }
2442
      /* Fall through. */
2443
2444
14.0k
      case BROTLI_STATE_BEFORE_COMPRESSED_METABLOCK_BODY:
2445
14.0k
        PrepareLiteralDecoding(s);
2446
14.0k
        s->dist_context_map_slice = s->dist_context_map;
2447
14.0k
        s->htree_command = s->insert_copy_hgroup.htrees[0];
2448
14.0k
        if (!BrotliEnsureRingBuffer(s)) {
2449
0
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
2450
0
          break;
2451
0
        }
2452
14.0k
        CalculateDistanceLut(s);
2453
14.0k
        s->state = BROTLI_STATE_COMMAND_BEGIN;
2454
      /* Fall through. */
2455
2456
113k
      case BROTLI_STATE_COMMAND_BEGIN:
2457
      /* Fall through. */
2458
172k
      case BROTLI_STATE_COMMAND_INNER:
2459
      /* Fall through. */
2460
234k
      case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
2461
      /* Fall through. */
2462
354k
      case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
2463
354k
        result = ProcessCommands(s);
2464
354k
        if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
2465
328k
          result = SafeProcessCommands(s);
2466
328k
        }
2467
354k
        break;
2468
2469
184k
      case BROTLI_STATE_COMMAND_INNER_WRITE:
2470
      /* Fall through. */
2471
405k
      case BROTLI_STATE_COMMAND_POST_WRITE_1:
2472
      /* Fall through. */
2473
646k
      case BROTLI_STATE_COMMAND_POST_WRITE_2:
2474
646k
        result = WriteRingBuffer(
2475
646k
            s, available_out, next_out, total_out, BROTLI_FALSE);
2476
646k
        if (result != BROTLI_DECODER_SUCCESS) {
2477
354k
          break;
2478
354k
        }
2479
291k
        WrapRingBuffer(s);
2480
291k
        if (s->ringbuffer_size == 1 << s->window_bits) {
2481
291k
          s->max_distance = s->max_backward_distance;
2482
291k
        }
2483
291k
        if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
2484
78.8k
          if (s->meta_block_remaining_len == 0) {
2485
            /* Next metablock, if any. */
2486
32
            s->state = BROTLI_STATE_METABLOCK_DONE;
2487
78.8k
          } else {
2488
78.8k
            s->state = BROTLI_STATE_COMMAND_BEGIN;
2489
78.8k
          }
2490
78.8k
          break;
2491
212k
        } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
2492
120k
          s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
2493
120k
        } else {  /* BROTLI_STATE_COMMAND_INNER_WRITE */
2494
92.2k
          if (s->loop_counter == 0) {
2495
46.6k
            if (s->meta_block_remaining_len == 0) {
2496
262
              s->state = BROTLI_STATE_METABLOCK_DONE;
2497
46.4k
            } else {
2498
46.4k
              s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
2499
46.4k
            }
2500
46.6k
            break;
2501
46.6k
          }
2502
45.5k
          s->state = BROTLI_STATE_COMMAND_INNER;
2503
45.5k
        }
2504
165k
        break;
2505
2506
165k
      case BROTLI_STATE_METABLOCK_DONE:
2507
19.7k
        if (s->meta_block_remaining_len < 0) {
2508
494
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
2509
494
          break;
2510
494
        }
2511
19.2k
        BrotliDecoderStateCleanupAfterMetablock(s);
2512
19.2k
        if (!s->is_last_metablock) {
2513
18.8k
          s->state = BROTLI_STATE_METABLOCK_BEGIN;
2514
18.8k
          break;
2515
18.8k
        }
2516
424
        if (!BrotliJumpToByteBoundary(br)) {
2517
45
          result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
2518
45
          break;
2519
45
        }
2520
379
        if (s->buffer_length == 0) {
2521
378
          BrotliBitReaderUnload(br);
2522
378
          *available_in = br->avail_in;
2523
378
          *next_in = br->next_in;
2524
378
        }
2525
379
        s->state = BROTLI_STATE_DONE;
2526
      /* Fall through. */
2527
2528
400
      case BROTLI_STATE_DONE:
2529
400
        if (s->ringbuffer != 0) {
2530
62
          result = WriteRingBuffer(
2531
62
              s, available_out, next_out, total_out, BROTLI_TRUE);
2532
62
          if (result != BROTLI_DECODER_SUCCESS) {
2533
39
            break;
2534
39
          }
2535
62
        }
2536
361
        return SaveErrorCode(s, result);
2537
1.35M
    }
2538
1.35M
  }
2539
621k
  return SaveErrorCode(s, result);
2540
621k
}
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
620k
const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
2552
620k
  uint8_t* result = 0;
2553
620k
  size_t available_out = *size ? *size : 1u << 24;
2554
620k
  size_t requested_out = available_out;
2555
620k
  BrotliDecoderErrorCode status;
2556
620k
  if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
2557
81.2k
    *size = 0;
2558
81.2k
    return 0;
2559
81.2k
  }
2560
538k
  WrapRingBuffer(s);
2561
538k
  status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
2562
  /* Either WriteRingBuffer returns those "success" codes... */
2563
538k
  if (status == BROTLI_DECODER_SUCCESS ||
2564
538k
      status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
2565
538k
    *size = requested_out - available_out;
2566
538k
  } 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
538k
  return result;
2574
620k
}
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