summaryrefslogtreecommitdiff
path: root/libavformat/cafdec.c
diff options
context:
space:
mode:
Diffstat (limited to 'libavformat/cafdec.c')
-rw-r--r--libavformat/cafdec.c3
1 files changed, 3 insertions, 0 deletions
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;