summaryrefslogtreecommitdiff
path: root/libavcodec/xsubdec.c
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2015-05-31 14:55:44 +0200
committerLuca Barbato <lu_zero@gentoo.org>2015-05-31 15:03:31 +0200
commit522d971c7f5921bebcea2fc50e67056afdabb951 (patch)
tree6852e8ffae7f629cae2f50155f6f66fca1636507 /libavcodec/xsubdec.c
parent83797da6e36c1aadd85f41ca237dce823fc7bfa1 (diff)
xsub: Check memory allocation
Diffstat (limited to 'libavcodec/xsubdec.c')
-rw-r--r--libavcodec/xsubdec.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/libavcodec/xsubdec.c b/libavcodec/xsubdec.c
index d01b410829..a7dd7ee628 100644
--- a/libavcodec/xsubdec.c
+++ b/libavcodec/xsubdec.c
@@ -95,7 +95,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
// allocate sub and set values
sub->rects = av_mallocz(sizeof(*sub->rects));
+ if (!sub->rects)
+ return AVERROR(ENOMEM);
sub->rects[0] = av_mallocz(sizeof(*sub->rects[0]));
+ if (!sub->rects[0]) {
+ av_freep(&sub->rects);
+ return AVERROR(ENOMEM);
+ }
sub->num_rects = 1;
sub->rects[0]->x = x; sub->rects[0]->y = y;
sub->rects[0]->w = w; sub->rects[0]->h = h;
@@ -104,6 +110,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *data_size,
sub->rects[0]->pict.data[0] = av_malloc(w * h);
sub->rects[0]->nb_colors = 4;
sub->rects[0]->pict.data[1] = av_mallocz(AVPALETTE_SIZE);
+ if (!sub->rects[0]->pict.data[0] || !sub->rects[0]->pict.data[1]) {
+ av_freep(&sub->rects[0]->pict.data[1]);
+ av_freep(&sub->rects[0]->pict.data[0]);
+ av_freep(&sub->rects[0]);
+ av_freep(&sub->rects);
+ return AVERROR(ENOMEM);
+ }
// read palette
for (i = 0; i < sub->rects[0]->nb_colors; i++)