[FFmpeg-cvslog] avcodec/dvbsubdec: Return proper error codes from more functions

Michael Niedermayer git at videolan.org
Sat Jan 10 19:39:16 CET 2015


ffmpeg | branch: master | Michael Niedermayer <michaelni at gmx.at> | Sat Jan 10 19:24:27 2015 +0100| [1bf747ae84fc7b1339ab4459d9d9ba2e9c341616] | committer: Michael Niedermayer

avcodec/dvbsubdec: Return proper error codes from more functions

Signed-off-by: Michael Niedermayer <michaelni at gmx.at>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1bf747ae84fc7b1339ab4459d9d9ba2e9c341616
---

 libavcodec/dvbsubdec.c |   27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/libavcodec/dvbsubdec.c b/libavcodec/dvbsubdec.c
index 5099852..ce68425 100644
--- a/libavcodec/dvbsubdec.c
+++ b/libavcodec/dvbsubdec.c
@@ -1149,7 +1149,7 @@ static int dvbsub_parse_clut_segment(AVCodecContext *avctx,
 }
 
 
-static void dvbsub_parse_region_segment(AVCodecContext *avctx,
+static int dvbsub_parse_region_segment(AVCodecContext *avctx,
                                         const uint8_t *buf, int buf_size)
 {
     DVBSubContext *ctx = avctx->priv_data;
@@ -1163,7 +1163,7 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
     int fill;
 
     if (buf_size < 10)
-        return;
+        return AVERROR_INVALIDDATA;
 
     region_id = *buf++;
 
@@ -1172,7 +1172,7 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
     if (!region) {
         region = av_mallocz(sizeof(DVBSubRegion));
         if (!region)
-            return;
+            return AVERROR(ENOMEM);
 
         region->id = region_id;
         region->version = -1;
@@ -1265,9 +1265,11 @@ static void dvbsub_parse_region_segment(AVCodecContext *avctx,
         display->object_list_next = object->display_list;
         object->display_list = display;
     }
+
+    return 0;
 }
 
-static void dvbsub_parse_page_segment(AVCodecContext *avctx,
+static int dvbsub_parse_page_segment(AVCodecContext *avctx,
                                         const uint8_t *buf, int buf_size, AVSubtitle *sub, int *got_output)
 {
     DVBSubContext *ctx = avctx->priv_data;
@@ -1281,14 +1283,14 @@ static void dvbsub_parse_page_segment(AVCodecContext *avctx,
     int version;
 
     if (buf_size < 1)
-        return;
+        return AVERROR_INVALIDDATA;
 
     timeout = *buf++;
     version = ((*buf)>>4) & 15;
     page_state = ((*buf++) >> 2) & 3;
 
     if (ctx->version == version) {
-        return;
+        return 0;
     }
 
     ctx->time_out = timeout;
@@ -1346,6 +1348,7 @@ static void dvbsub_parse_page_segment(AVCodecContext *avctx,
         av_freep(&display);
     }
 
+    return 0;
 }
 
 
@@ -1444,7 +1447,7 @@ static void save_display_set(DVBSubContext *ctx)
 }
 #endif
 
-static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
+static int dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
                                                     const uint8_t *buf,
                                                     int buf_size)
 {
@@ -1453,19 +1456,19 @@ static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
     int dds_version, info_byte;
 
     if (buf_size < 5)
-        return;
+        return AVERROR_INVALIDDATA;
 
     info_byte   = bytestream_get_byte(&buf);
     dds_version = info_byte >> 4;
     if (display_def && display_def->version == dds_version)
-        return; // already have this display definition version
+        return 0; // already have this display definition version
 
     if (!display_def) {
         display_def             = av_mallocz(sizeof(*display_def));
         ctx->display_definition = display_def;
     }
     if (!display_def)
-        return;
+        return AVERROR(ENOMEM);
 
     display_def->version = dds_version;
     display_def->x       = 0;
@@ -1478,7 +1481,7 @@ static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
     }
 
     if (buf_size < 13)
-        return;
+        return 0;
 
     if (info_byte & 1<<3) { // display_window_flag
         display_def->x = bytestream_get_be16(&buf);
@@ -1486,6 +1489,8 @@ static void dvbsub_parse_display_definition_segment(AVCodecContext *avctx,
         display_def->y = bytestream_get_be16(&buf);
         display_def->height = bytestream_get_be16(&buf) - display_def->y + 1;
     }
+
+    return 0;
 }
 
 static void dvbsub_display_end_segment(AVCodecContext *avctx, const uint8_t *buf,



More information about the ffmpeg-cvslog mailing list