Improve handling allocated buffers in Xan decoder
authorKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 19 Dec 2009 17:04:30 +0000 (17:04 +0000)
committerKostya Shishkov <kostya.shishkov@gmail.com>
Sat, 19 Dec 2009 17:04:30 +0000 (17:04 +0000)
Originally committed as revision 20899 to svn://svn.ffmpeg.org/ffmpeg/trunk

libavcodec/xan.c

index e0bd780..c11f60d 100644 (file)
@@ -76,10 +76,14 @@ static av_cold int xan_decode_init(AVCodecContext *avctx)
 
     s->buffer1_size = avctx->width * avctx->height;
     s->buffer1 = av_malloc(s->buffer1_size);
 
     s->buffer1_size = avctx->width * avctx->height;
     s->buffer1 = av_malloc(s->buffer1_size);
+    if (!s->buffer1)
+        return -1;
     s->buffer2_size = avctx->width * avctx->height;
     s->buffer2 = av_malloc(s->buffer2_size + 130);
     s->buffer2_size = avctx->width * avctx->height;
     s->buffer2 = av_malloc(s->buffer2_size + 130);
-    if (!s->buffer1 || !s->buffer2)
+    if (!s->buffer2) {
+        av_freep(&s->buffer1);
         return -1;
         return -1;
+    }
 
     return 0;
 }
 
     return 0;
 }
@@ -405,8 +409,8 @@ static av_cold int xan_decode_end(AVCodecContext *avctx)
     if (s->current_frame.data[0])
         avctx->release_buffer(avctx, &s->current_frame);
 
     if (s->current_frame.data[0])
         avctx->release_buffer(avctx, &s->current_frame);
 
-    av_free(s->buffer1);
-    av_free(s->buffer2);
+    av_freep(&s->buffer1);
+    av_freep(&s->buffer2);
 
     return 0;
 }
 
     return 0;
 }