ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinha...@outlook.com> | Sun Apr 20 20:32:20 2025 +0200| [1fc0ee484f09a7a3c9724c765c52879602449dab] | committer: Andreas Rheinhardt
avcodec/webp: Check before allocations Avoids freeing lateron. Signed-off-by: Andreas Rheinhardt <andreas.rheinha...@outlook.com> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1fc0ee484f09a7a3c9724c765c52879602449dab --- libavcodec/webp.c | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/libavcodec/webp.c b/libavcodec/webp.c index 2c918eac33..2843b953bd 100644 --- a/libavcodec/webp.c +++ b/libavcodec/webp.c @@ -341,30 +341,29 @@ static int read_huffman_code_normal(WebPContext *s, HuffReader *hc, len_counts[len]++; } - ret = huff_reader_build_canonical(&code_len_hc, code_length_code_lengths, len_counts, - NUM_CODE_LENGTH_CODES, s->avctx); - if (ret < 0) - return ret; - - code_lengths = av_malloc(alphabet_size); - if (!code_lengths) { - ret = AVERROR(ENOMEM); - 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; + 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) + return ret; + + code_lengths = av_malloc(alphabet_size); + if (!code_lengths) { + ret = AVERROR(ENOMEM); + goto finish; + } + prev_code_len = 8; symbol = 0; memset(len_counts, 0, sizeof(len_counts)); _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email ffmpeg-cvslog-requ...@ffmpeg.org with subject "unsubscribe".