Avoids freeing lateron.
Showing the changes to libavcodec (1 of 1 file). Show all
Unified · Split
| @@ -341,30 +341,29 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, · 340 unmodified lines | ||
| 341 | 341 | len_counts[len]++; |
| 342 | 342 | } |
| 343 | 343 | |
| 344 | − ret = huff_reader_build_canonical(&code_len_hc, code_length_code_lengths, len_counts, | |
| 345 | − NUM_CODE_LENGTH_CODES, s->avctx); | |
| 346 | − if (ret < 0) | |
| 347 | − return ret; | |
| 348 | − | |
| 349 | − code_lengths = av_malloc(alphabet_size); | |
| 350 | − if (!code_lengths) { | |
| 351 | − ret = AVERROR(ENOMEM); | |
| 352 | − goto finish; | |
| 353 | − } | |
| 354 | − | |
| 355 | 344 | if (get_bits1(&s->gb)) { |
| 356 | 345 | int bits = 2 + 2 * get_bits(&s->gb, 3); |
| 357 | 346 | max_symbol = 2 + get_bits(&s->gb, bits); |
| 358 | 347 | if (max_symbol > alphabet_size) { |
| 359 | 348 | av_log(s->avctx, AV_LOG_ERROR, "max symbol %d > alphabet size %d\n", |
| 360 | 349 | max_symbol, alphabet_size); |
| 361 | − ret = AVERROR_INVALIDDATA; | |
| 362 | − goto finish; | |
| 350 | + return AVERROR_INVALIDDATA; | |
| 363 | 351 | } |
| 364 | 352 | } else { |
| 365 | 353 | max_symbol = alphabet_size; |
| 366 | 354 | } |
| 367 | 355 | |
| 356 | + ret = huff_reader_build_canonical(&code_len_hc, code_length_code_lengths, len_counts, | |
| 357 | + NUM_CODE_LENGTH_CODES, s->avctx); | |
| 358 | + if (ret < 0) | |
| 359 | + return ret; | |
| 360 | + | |
| 361 | + code_lengths = av_malloc(alphabet_size); | |
| 362 | + if (!code_lengths) { | |
| 363 | + ret = AVERROR(ENOMEM); | |
| 364 | + goto finish; | |
| 365 | + } | |
| 366 | + | |
| 368 | 367 | prev_code_len = 8; |
| 369 | 368 | symbol = 0; |
| 370 | 369 | memset(len_counts, 0, sizeof(len_counts)); |