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
pull/101/merge
Vittorio Giovara 10 years ago
parent 54bc15d5eb
commit 014b6b416f
  1. 14
      libavcodec/vp8.c

@ -168,19 +168,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->top_border = av_mallocz((s->mb_width + 1) * sizeof(*s->top_border));
s->thread_data = av_mallocz(MAX_THREADS * sizeof(VP8ThreadData)); 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++) { for (i = 0; i < MAX_THREADS; i++) {
s->thread_data[i].filter_strength = s->thread_data[i].filter_strength =
av_mallocz(s->mb_width * sizeof(*s->thread_data[0].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 #if HAVE_THREADS
pthread_mutex_init(&s->thread_data[i].lock, NULL); pthread_mutex_init(&s->thread_data[i].lock, NULL);
pthread_cond_init(&s->thread_data[i].cond, NULL); pthread_cond_init(&s->thread_data[i].cond, NULL);
#endif #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; s->macroblocks = s->macroblocks_base + 1;
return 0; return 0;

Loading…
Cancel
Save