diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2015-02-22 13:43:52 +0100 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2015-02-22 13:45:19 +0100 |
commit | 48214956b2f115e9cadfcdf1ff06a2477c87a295 (patch) | |
tree | 99ba591e630256ca47a78056b09cec136678c740 /libavcodec/jpeglsenc.c | |
parent | f9d24ee1dc8e16312af059c716d489b7de689822 (diff) | |
download | ffmpeg-48214956b2f115e9cadfcdf1ff06a2477c87a295.tar.gz |
avcodec/jpeglsenc: Check for memory allocation failures
Fixes CID1271044
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Diffstat (limited to 'libavcodec/jpeglsenc.c')
-rw-r--r-- | libavcodec/jpeglsenc.c | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/libavcodec/jpeglsenc.c b/libavcodec/jpeglsenc.c index 2f02332a34..4273aa70ca 100644 --- a/libavcodec/jpeglsenc.c +++ b/libavcodec/jpeglsenc.c @@ -253,8 +253,9 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, const int near = avctx->prediction_method; PutBitContext pb, pb2; GetBitContext gb; - uint8_t *buf2, *zero, *cur, *last; - JLSState *state; + uint8_t *buf2 = NULL; + uint8_t *zero, *cur, *last; + JLSState *state = NULL; int i, size, ret; int comps; @@ -269,6 +270,8 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, return ret; buf2 = av_malloc(pkt->size); + if (!buf2) + goto fail; init_put_bits(&pb, pkt->data, pkt->size); init_put_bits(&pb2, buf2, pkt->size); @@ -299,6 +302,8 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, put_bits(&pb, 8, 0); // point transform: none state = av_mallocz(sizeof(JLSState)); + if (!state) + goto fail; /* initialize JPEG-LS state from JPEG parameters */ state->near = near; state->bpp = (avctx->pix_fmt == AV_PIX_FMT_GRAY16) ? 16 : 8; @@ -308,10 +313,9 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, ls_store_lse(state, &pb); zero = av_mallocz(FFABS(p->linesize[0])); - if (!zero) { - av_free(state); - return AVERROR(ENOMEM); - } + if (!zero) + goto fail; + last = zero; cur = p->data[0]; if (avctx->pix_fmt == AV_PIX_FMT_GRAY8) { @@ -384,7 +388,7 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, } } avpriv_align_put_bits(&pb); - av_free(buf2); + av_freep(&buf2); /* End of image */ put_marker(&pb, EOI); @@ -396,6 +400,11 @@ static int encode_picture_ls(AVCodecContext *avctx, AVPacket *pkt, pkt->flags |= AV_PKT_FLAG_KEY; *got_packet = 1; return 0; +fail: + av_freep(&buf2); + av_freep(&state); + + return AVERROR(ENOMEM); } static av_cold int encode_close(AVCodecContext *avctx) |