[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