[FFmpeg-cvslog] lavf/cafdec: Do not fail for unknown atoms with negative size.

Carl Eugen Hoyos git at videolan.org
Sun Jan 27 15:17:30 EET 2019


ffmpeg | branch: master | Carl Eugen Hoyos <ceffmpeg at gmail.com> | Tue Jan 15 00:22:50 2019 +0100| [8a788ff5d635c7fdd8104d82970eb0ae29ae799e] | committer: Carl Eugen Hoyos

lavf/cafdec: Do not fail for unknown atoms with negative size.

The specification requires the demuxer to only read the data
atom up to its given size, this is necessary as atoms are
allowed at the end of the file.
This patch duplicates the behaviour of the QuickTime player.

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

 libavformat/cafdec.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/libavformat/cafdec.c b/libavformat/cafdec.c
index 7652d9e238..20956bcf97 100644
--- a/libavformat/cafdec.c
+++ b/libavformat/cafdec.c
@@ -310,6 +310,8 @@ static int read_header(AVFormatContext *s)
                    "skipping CAF chunk: %08"PRIX32" (%s), size %"PRId64"\n",
                    tag, av_fourcc2str(av_bswap32(tag)), size);
         case MKBETAG('f','r','e','e'):
+            if (size < 0 && found_data)
+                goto found_data;
             if (size < 0)
                 return AVERROR_INVALIDDATA;
             break;
@@ -325,6 +327,7 @@ static int read_header(AVFormatContext *s)
     if (!found_data)
         return AVERROR_INVALIDDATA;
 
+found_data:
     if (caf->bytes_per_packet > 0 && caf->frames_per_packet > 0) {
         if (caf->data_size > 0)
             st->nb_frames = (caf->data_size / caf->bytes_per_packet) * caf->frames_per_packet;



More information about the ffmpeg-cvslog mailing list