diff mbox

[FFmpeg-devel] avformat/matroskadec: retain error codes in matroska_resync() and matroska_read_packet()

Message ID 1475002829-11427-1-git-send-email-skw@google.com
State Accepted
Commit 8c83062acb222055a972bdf60b5add7f3c42b937
Headers show

Commit Message

Sophia Wang Sept. 27, 2016, 7 p.m. UTC
Signed-off-by: Sophia Wang <skw@google.com>
---
 libavformat/matroskadec.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

Comments

Michael Niedermayer Sept. 27, 2016, 11:12 p.m. UTC | #1
On Tue, Sep 27, 2016 at 12:00:29PM -0700, Sophia Wang wrote:
> Signed-off-by: Sophia Wang <skw@google.com>
> ---
>  libavformat/matroskadec.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)

applied

thanks

[...]
diff mbox

Patch

diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c
index 77b8a5d..7ee1c7a 100644
--- a/libavformat/matroskadec.c
+++ b/libavformat/matroskadec.c
@@ -738,13 +738,16 @@  static int matroska_read_close(AVFormatContext *s);
 static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
 {
     AVIOContext *pb = matroska->ctx->pb;
+    int64_t ret;
     uint32_t id;
     matroska->current_id = 0;
     matroska->num_levels = 0;
 
     /* seek to next position to resync from */
-    if (avio_seek(pb, last_pos + 1, SEEK_SET) < 0)
-        goto eof;
+    if ((ret = avio_seek(pb, last_pos + 1, SEEK_SET)) < 0) {
+        matroska->done = 1;
+        return ret;
+    }
 
     id = avio_rb32(pb);
 
@@ -760,7 +763,6 @@  static int matroska_resync(MatroskaDemuxContext *matroska, int64_t last_pos)
         id = (id << 8) | avio_r8(pb);
     }
 
-eof:
     matroska->done = 1;
     return AVERROR_EOF;
 }
@@ -3317,16 +3319,17 @@  static int matroska_parse_cluster(MatroskaDemuxContext *matroska)
 static int matroska_read_packet(AVFormatContext *s, AVPacket *pkt)
 {
     MatroskaDemuxContext *matroska = s->priv_data;
+    int ret = 0;
 
     while (matroska_deliver_packet(matroska, pkt)) {
         int64_t pos = avio_tell(matroska->ctx->pb);
         if (matroska->done)
-            return AVERROR_EOF;
+            return (ret < 0) ? ret : AVERROR_EOF;
         if (matroska_parse_cluster(matroska) < 0)
-            matroska_resync(matroska, pos);
+            ret = matroska_resync(matroska, pos);
     }
 
-    return 0;
+    return ret;
 }
 
 static int matroska_read_seek(AVFormatContext *s, int stream_index,