[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