tiff: continue parsing on non fatal errors
authorMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Aug 2013 12:16:09 +0000 (14:16 +0200)
committerMichael Niedermayer <michaelni@gmx.at>
Sun, 11 Aug 2013 16:11:36 +0000 (18:11 +0200)
Reviewed-by: Thilo Borgmann <thilo.borgmann@mail.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavcodec/tiff.c

index f4ad773..2e06e3f 100644 (file)
@@ -710,7 +710,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
     if (type == 0 || type >= FF_ARRAY_ELEMS(type_sizes)) {
         av_log(s->avctx, AV_LOG_DEBUG, "Unknown tiff type (%u) encountered\n",
                type);
-        return 0;
+        goto end;
     }
 
     if (count == 1) {
@@ -928,7 +928,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
 #define ADD_METADATA(count, name, sep)\
     if ((ret = add_metadata(count, type, name, sep, s, frame)) < 0) {\
         av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");\
-        return ret;\
+        goto end;\
     }
     case TIFF_MODEL_PIXEL_SCALE:
         ADD_METADATA(count, "ModelPixelScaleTag", NULL);
@@ -955,7 +955,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
         if (!s->geotags) {
             av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
             s->geotag_count = 0;
-            return AVERROR(ENOMEM);
+            goto end;
         }
         for (i = 0; i < s->geotag_count; i++) {
             s->geotags[i].key    = tget_short(&s->gb, s->le);
@@ -976,7 +976,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
         dp = av_malloc(count * sizeof(double));
         if (!dp) {
             av_log(s->avctx, AV_LOG_ERROR, "Error allocating temporary buffer\n");
-            return AVERROR(ENOMEM);
+            goto end;
         }
         for (i = 0; i < count; i++)
             dp[i] = tget_double(&s->gb, s->le);
@@ -1064,6 +1064,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
             return AVERROR_INVALIDDATA;
         }
     }
+end:
     bytestream2_seek(&s->gb, start, SEEK_SET);
     return 0;
 }