diff --git a/libavcodec/webp.c b/libavcodec/webp.c index 2c918eac33..2843b953bd 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -341,6 +341,18 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, len_counts[len]++; } + if (get_bits1(&s->gb)) { + int bits = 2 + 2 * get_bits(&s->gb, 3); + max_symbol = 2 + get_bits(&s->gb, bits); + if (max_symbol > alphabet_size) { + av_log(s->avctx, AV_LOG_ERROR, "max symbol %d > alphabet size %d\n", + max_symbol, alphabet_size); + return AVERROR_INVALIDDATA; + } + } else { + max_symbol = alphabet_size; + } + ret = huff_reader_build_canonical(&code_len_hc, code_length_code_lengths, len_counts, NUM_CODE_LENGTH_CODES, s->avctx); if (ret < 0) @@ -352,19 +364,6 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, goto finish; } - if (get_bits1(&s->gb)) { - int bits = 2 + 2 * get_bits(&s->gb, 3); - max_symbol = 2 + get_bits(&s->gb, bits); - if (max_symbol > alphabet_size) { - av_log(s->avctx, AV_LOG_ERROR, "max symbol %d > alphabet size %d\n", - max_symbol, alphabet_size); - ret = AVERROR_INVALIDDATA; - goto finish; - } - } else { - max_symbol = alphabet_size; - } - prev_code_len = 8; symbol = 0; memset(len_counts, 0, sizeof(len_counts));