Commit 58d13cea authored by Derek Buitenhuis's avatar Derek Buitenhuis

h264: Check all allocations

Signed-off-by: 's avatarDerek Buitenhuis <derek.buitenhuis@gmail.com>
parent 9510d768
...@@ -1605,19 +1605,24 @@ static void copy_picture_range(Picture **to, Picture **from, int count, ...@@ -1605,19 +1605,24 @@ static void copy_picture_range(Picture **to, Picture **from, int count,
} }
} }
static void copy_parameter_set(void **to, void **from, int count, int size) static int copy_parameter_set(void **to, void **from, int count, int size)
{ {
int i; int i;
for (i = 0; i < count; i++) { for (i = 0; i < count; i++) {
if (to[i] && !from[i]) if (to[i] && !from[i]) {
av_freep(&to[i]); av_freep(&to[i]);
else if (from[i] && !to[i]) } else if (from[i] && !to[i]) {
to[i] = av_malloc(size); to[i] = av_malloc(size);
if (!to[i])
return AVERROR(ENOMEM);
}
if (from[i]) if (from[i])
memcpy(to[i], from[i], size); memcpy(to[i], from[i], size);
} }
return 0;
} }
static int decode_init_thread_copy(AVCodecContext *avctx) static int decode_init_thread_copy(AVCodecContext *avctx)
...@@ -1781,11 +1786,15 @@ static int decode_update_thread_context(AVCodecContext *dst, ...@@ -1781,11 +1786,15 @@ static int decode_update_thread_context(AVCodecContext *dst,
h->is_avc = h1->is_avc; h->is_avc = h1->is_avc;
// SPS/PPS // SPS/PPS
copy_parameter_set((void **)h->sps_buffers, (void **)h1->sps_buffers, if ((ret = copy_parameter_set((void **)h->sps_buffers,
MAX_SPS_COUNT, sizeof(SPS)); (void **)h1->sps_buffers,
MAX_SPS_COUNT, sizeof(SPS))) < 0)
return ret;
h->sps = h1->sps; h->sps = h1->sps;
copy_parameter_set((void **)h->pps_buffers, (void **)h1->pps_buffers, if ((ret = copy_parameter_set((void **)h->pps_buffers,
MAX_PPS_COUNT, sizeof(PPS)); (void **)h1->pps_buffers,
MAX_PPS_COUNT, sizeof(PPS))) < 0)
return ret;
h->pps = h1->pps; h->pps = h1->pps;
// Dequantization matrices // Dequantization matrices
...@@ -3154,6 +3163,8 @@ static int h264_slice_header_init(H264Context *h, int reinit) ...@@ -3154,6 +3163,8 @@ static int h264_slice_header_init(H264Context *h, int reinit)
for (i = 1; i < h->slice_context_count; i++) { for (i = 1; i < h->slice_context_count; i++) {
H264Context *c; H264Context *c;
c = h->thread_context[i] = av_mallocz(sizeof(H264Context)); c = h->thread_context[i] = av_mallocz(sizeof(H264Context));
if (!c)
return AVERROR(ENOMEM);
c->avctx = h->avctx; c->avctx = h->avctx;
c->dsp = h->dsp; c->dsp = h->dsp;
c->vdsp = h->vdsp; c->vdsp = h->vdsp;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment