[FFmpeg-cvslog] gifdec: return meaningful error codes.

Anton Khirnov git at videolan.org
Sun Jan 12 15:52:50 CET 2014


ffmpeg | branch: release/1.1 | Anton Khirnov <anton at khirnov.net> | Mon Nov 19 10:30:01 2012 +0100| [5e7a5dd70b519121973ca243a802ee4eef4ed961] | committer: Reinhard Tartler

gifdec: return meaningful error codes.

(cherry picked from commit 048ffb9bb26f30f1995400b8cd3809221ba03441)
Signed-off-by: Reinhard Tartler <siretart at tauware.de>

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

 libavcodec/gifdec.c |   29 +++++++++++++++--------------
 1 file changed, 15 insertions(+), 14 deletions(-)

diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c
index 8f1d694..2a962e5 100644
--- a/libavcodec/gifdec.c
+++ b/libavcodec/gifdec.c
@@ -207,13 +207,13 @@ static int gif_read_header1(GifState *s)
     int has_global_palette;
 
     if (s->bytestream_end < s->bytestream + 13)
-        return -1;
+        return AVERROR_INVALIDDATA;
 
     /* read gif signature */
     bytestream_get_buffer(&s->bytestream, sig, 6);
     if (memcmp(sig, gif87a_sig, 6) != 0 &&
         memcmp(sig, gif89a_sig, 6) != 0)
-        return -1;
+        return AVERROR_INVALIDDATA;
 
     /* read screen header */
     s->transparent_color_index = -1;
@@ -222,7 +222,7 @@ static int gif_read_header1(GifState *s)
     if(   (unsigned)s->screen_width  > 32767
        || (unsigned)s->screen_height > 32767){
         av_log(NULL, AV_LOG_ERROR, "picture size too large\n");
-        return -1;
+        return AVERROR_INVALIDDATA;
     }
 
     v = bytestream_get_byte(&s->bytestream);
@@ -239,7 +239,7 @@ static int gif_read_header1(GifState *s)
     if (has_global_palette) {
         n = 1 << s->bits_per_pixel;
         if (s->bytestream_end < s->bytestream + n * 3)
-            return -1;
+            return AVERROR_INVALIDDATA;
         bytestream_get_buffer(&s->bytestream, s->global_palette, n * 3);
     }
     return 0;
@@ -249,6 +249,7 @@ static int gif_parse_next_image(GifState *s)
 {
     while (s->bytestream < s->bytestream_end) {
         int code = bytestream_get_byte(&s->bytestream);
+        int ret;
 
         av_dlog(s->avctx, "gif: code=%02x '%c'\n", code, code);
 
@@ -256,17 +257,17 @@ static int gif_parse_next_image(GifState *s)
         case ',':
             return gif_read_image(s);
         case '!':
-            if (gif_read_extension(s) < 0)
-                return -1;
+            if ((ret = gif_read_extension(s)) < 0)
+                return ret;
             break;
         case ';':
             /* end of image */
         default:
             /* error or erroneous EOF */
-            return -1;
+            return AVERROR_INVALIDDATA;
         }
     }
-    return -1;
+    return AVERROR_INVALIDDATA;
 }
 
 static av_cold int gif_decode_init(AVCodecContext *avctx)
@@ -293,19 +294,19 @@ static int gif_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
 
     s->bytestream = buf;
     s->bytestream_end = buf + buf_size;
-    if (gif_read_header1(s) < 0)
-        return -1;
+    if ((ret = gif_read_header1(s)) < 0)
+        return ret;
 
     avctx->pix_fmt = AV_PIX_FMT_PAL8;
-    if (av_image_check_size(s->screen_width, s->screen_height, 0, avctx))
-        return -1;
+    if ((ret = av_image_check_size(s->screen_width, s->screen_height, 0, avctx)) < 0)
+        return ret;
     avcodec_set_dimensions(avctx, s->screen_width, s->screen_height);
 
     if (s->picture.data[0])
         avctx->release_buffer(avctx, &s->picture);
-    if (ff_get_buffer(avctx, &s->picture) < 0) {
+    if ((ret = ff_get_buffer(avctx, &s->picture)) < 0) {
         av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");
-        return -1;
+        return ret;
     }
     s->image_palette = (uint32_t *)s->picture.data[1];
     ret = gif_parse_next_image(s);



More information about the ffmpeg-cvslog mailing list