[FFmpeg-devel] [PATCH] libavformat/mov.c : Avoid seek request with invalid seek offset ( 9223372036854775799 ) after EOS
Malviya, Janpriya
Janpriya_Malviya at bose.com
Tue Apr 26 06:09:41 EEST 2022
Hello ffmpeg Dev team,
Could you please help me to review this patch?
Janpriya.
From: Malviya, Janpriya<mailto:Janpriya_Malviya at bose.com>
Sent: 22 April 2022 02:07 PM
To: ffmpeg-devel at ffmpeg.org<mailto:ffmpeg-devel at ffmpeg.org>
Cc: Banerjee, Debasmit<mailto:Debasmit_Banerjee at bose.com>; Patel, Pratik<mailto:Pratik_Patel at bose.com>; Van Iderstine, David<mailto:David_Van_Iderstine at bose.com>
Subject: [FFmpeg-devel] [PATCH] libavformat/mov.c : Avoid seek request with invalid seek offset ( 9223372036854775799 ) after EOS
Hello ffmpeg Dev team,
While integrating FFmpeg for M4A , MP4 stream & facing issue that mov demuxer trying to request seek for invalid seek offset.
Issue details:-
- Modified doc/examples/demuxing_decoding.c example to support Custom IO call-back because we have our own mechanism to read data from source
- In custom IO seek call back , we do not support “whence” values AVSEEK_SIZE & SEEK_END , used to find stream size ( returning -1 in both the cases ).
- In attached screen shot , where we are observing seek with invalid seek offset and the seek requested after End of stream is detected
- Seek offset value 9223372036854775799 always the same ( I think INT64_MAX – 8 , 8 is length Atom type & size field )
- If we allow to return proper stream size in seek callback then this problem is not observed.
Fix :
In attached patch to verify EOS condition before going to parse atom data.
Signed-off-by: Janpriya Malviya <Janpriya_Malviya at bose.com>
---
libavformat/mov.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 6c847de..9704550 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -7556,6 +7556,10 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if (atom.size >= 8) {
a.size = avio_rb32(pb);
a.type = avio_rl32(pb);
+
+ if(avio_feof(pb))
+ continue;
+
if (((a.type == MKTAG('f','r','e','e') && c->moov_retry) ||
a.type == MKTAG('h','o','o','v')) &&
a.size >= 8 &&
--
2.7.4
More information about the ffmpeg-devel
mailing list