Check the return value of ff_rv34_decode_init() in rv30.c and rv40.c
authorCarl Eugen Hoyos <cehoyos@ag.or.at>
Sun, 7 Jul 2013 22:34:58 +0000 (00:34 +0200)
committerCarl Eugen Hoyos <cehoyos@ag.or.at>
Mon, 8 Jul 2013 09:56:16 +0000 (11:56 +0200)
Avoids possible null pointer dereferences on oom.

Fixes ticket #2727.

libavcodec/rv30.c
libavcodec/rv40.c

index f40870e..48d7691 100644 (file)
@@ -248,9 +248,12 @@ static void rv30_loop_filter(RV34DecContext *r, int row)
 static av_cold int rv30_decode_init(AVCodecContext *avctx)
 {
     RV34DecContext *r = avctx->priv_data;
+    int ret;
 
     r->rv30 = 1;
-    ff_rv34_decode_init(avctx);
+    ret = ff_rv34_decode_init(avctx);
+    if (ret < 0)
+        return ret;
     if(avctx->extradata_size < 2){
         av_log(avctx, AV_LOG_ERROR, "Extradata is too small.\n");
         return -1;
index d6dfc5e..17574ee 100644 (file)
@@ -547,9 +547,12 @@ static void rv40_loop_filter(RV34DecContext *r, int row)
 static av_cold int rv40_decode_init(AVCodecContext *avctx)
 {
     RV34DecContext *r = avctx->priv_data;
+    int ret;
 
     r->rv30 = 0;
-    ff_rv34_decode_init(avctx);
+    ret = ff_rv34_decode_init(avctx);
+    if (ret < 0)
+        return ret;
     if(!aic_top_vlc.bits)
         rv40_init_tables();
     r->parse_slice_header = rv40_parse_slice_header;