diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2014-12-17 16:02:08 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-12 17:10:35 +0100 |
commit | 8acbba0ec3b267512842537011172457c57361ba (patch) | |
tree | d91b7ff9a5cf2e917a8148d516c3b117a6aa99e2 | |
parent | 9e9cde6afab06674b2ae6e4fd7f74fef740bda30 (diff) | |
download | ffmpeg-8acbba0ec3b267512842537011172457c57361ba.tar.gz |
vp8: improve memory allocation checks
Check memory earlier, check one more allocation and clean up on error.
CC: libav-stable@libav.org
Bug-Id: CID 1257773
(cherry picked from commit 014b6b416fec89777cb9cff61bcf7896eaf7cf39)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
-rw-r--r-- | libavcodec/vp8.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libavcodec/vp8.c b/libavcodec/vp8.c index 6ad26f3a7b..5d3123d4c2 100644 --- a/libavcodec/vp8.c +++ b/libavcodec/vp8.c @@ -176,19 +176,25 @@ int update_dimensions(VP8Context *s, int width, int height, int is_vp7) s->top_border = av_mallocz((s->mb_width + 1) * sizeof(*s->top_border)); s->thread_data = av_mallocz(MAX_THREADS * sizeof(VP8ThreadData)); + if (!s->macroblocks_base || !s->top_nnz || !s->top_border || + !s->thread_data || (!s->intra4x4_pred_mode_top && !s->mb_layout)) { + free_buffers(s); + return AVERROR(ENOMEM); + } + for (i = 0; i < MAX_THREADS; i++) { s->thread_data[i].filter_strength = av_mallocz(s->mb_width * sizeof(*s->thread_data[0].filter_strength)); + if (!s->thread_data[i].filter_strength) { + free_buffers(s); + return AVERROR(ENOMEM); + } #if HAVE_THREADS pthread_mutex_init(&s->thread_data[i].lock, NULL); pthread_cond_init(&s->thread_data[i].cond, NULL); #endif } - if (!s->macroblocks_base || !s->top_nnz || !s->top_border || - (!s->intra4x4_pred_mode_top && !s->mb_layout)) - return AVERROR(ENOMEM); - s->macroblocks = s->macroblocks_base + 1; return 0; |