[FFmpeg-cvslog] avcodec/webp: Check before allocations
Andreas Rheinhardt
git at videolan.org
Sat Apr 26 01:15:11 EEST 2025
ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at 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.rheinhardt at 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));
More information about the ffmpeg-cvslog
mailing list