[FFmpeg-cvslog] shorten: check for realloc failure
Reimar Döffinger
Reimar.Doeffinger at gmx.de
Fri Oct 21 10:20:22 CEST 2011
On 21 Oct 2011, at 02:37, git at videolan.org (Justin Ruggles) wrote:
> ffmpeg | branch: master | Justin Ruggles <justin.ruggles at gmail.com> | Thu Sep 15 18:08:52 2011 -0400| [9e5e2c2d010c05c10337e9c1ec9d0d61495e0c9c] | committer: Justin Ruggles
>
> shorten: check for realloc failure
>
>> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9e5e2c2d010c05c10337e9c1ec9d0d61495e0c9c
> ---
>
> libavcodec/shorten.c | 20 +++++++++++++++++---
> 1 files changed, 17 insertions(+), 3 deletions(-)
>
> diff --git a/libavcodec/shorten.c b/libavcodec/shorten.c
> index 52bf2b2..ad274b4 100644
> --- a/libavcodec/shorten.c
> +++ b/libavcodec/shorten.c
> @@ -116,6 +116,7 @@ static int allocate_buffers(ShortenContext *s)
> {
> int i, chan;
> int *coeffs;
> + void *tmp_ptr;
>
> for (chan=0; chan<s->channels; chan++) {
> if(FFMAX(1, s->nmean) >= UINT_MAX/sizeof(int32_t)){
> @@ -127,9 +128,15 @@ static int allocate_buffers(ShortenContext *s)
> return -1;
> }
>
> - s->offset[chan] = av_realloc(s->offset[chan], sizeof(int32_t)*FFMAX(1, s->nmean));
> + tmp_ptr = av_realloc(s->offset[chan], sizeof(int32_t)*FFMAX(1, s->nmean));
> + if (!tmp_ptr)
> + return AVERROR(ENOMEM);
> + s->offset[chan] = tmp_ptr;
>
> - s->decoded[chan] = av_realloc(s->decoded[chan], sizeof(int32_t)*(s->blocksize + s->nwrap));
> + tmp_ptr = av_realloc(s->decoded[chan], sizeof(int32_t)*(s->blocksize + s->nwrap));
> + if (!tmp_ptr)
> + return AVERROR(ENOMEM);
> + s->decoded[chan] = tmp_ptr;
> for (i=0; i<s->nwrap; i++)
> s->decoded[chan][i] = 0;
> s->decoded[chan] += s->nwrap;
> @@ -376,8 +383,15 @@ static int shorten_decode_frame(AVCodecContext *avctx,
> int i, input_buf_size = 0;
> int16_t *samples = data;
> if(s->max_framesize == 0){
> + void *tmp_ptr;
> s->max_framesize= 1024; // should hopefully be enough for the first header
> - s->bitstream= av_fast_realloc(s->bitstream, &s->allocated_bitstream_size, s->max_framesize);
> + tmp_ptr = av_fast_realloc(s->bitstream, &s->allocated_bitstream_size,
> + s->max_framesize);
> + if (!tmp_ptr) {
> + av_log(avctx, AV_LOG_ERROR, "error allocating bitstream buffer\n");
> + return AVERROR(ENOMEM);
> + }
> + s->bitstream = tmp_ptr;
Couldn't this use av_fast_malloc, which would simplify error handling?
More information about the ffmpeg-cvslog
mailing list