[FFmpeg-devel] [PATCH] Workaround for MPEG-TS crashes
Baptiste Coudurier
baptiste.coudurier
Mon Sep 14 20:52:39 CEST 2009
Hi,
On 09/14/2009 10:25 AM, Dan Dennedy wrote:
> Hi
>
> On Sun, Sep 13, 2009 at 3:00 AM, Ivan Schreter<schreter at gmx.net> wrote:
>> Hi Baptiste,
>>
>> several people reported crashes when working with MPEG-TS files. I suppose,
>> those files are either really or subtly broken and MPEG-TS format handler
>> doesn't handle them gracefully.
>>
>> With this patch, the crashes in the samples I have seem to be gone:
>>
>
> In addition, I ran into some small negative lengths passed to memcpy:
>
> Index: libavformat/mpegts.c
> ===================================================================
> --- libavformat/mpegts.c (revision 19804)
> +++ libavformat/mpegts.c (working copy)
> @@ -915,10 +915,12 @@
> len = PES_START_SIZE - pes->data_index;
> if (len> buf_size)
> len = buf_size;
> - memcpy(pes->header + pes->data_index, p, len);
> - pes->data_index += len;
> - p += len;
> - buf_size -= len;
> + if (len> 0) {
> + memcpy(pes->header + pes->data_index, p, len);
> + pes->data_index += len;
> + p += len;
> + buf_size -= len;
> + }
Well, len < 0 is an error IMHO. I'd like to have a sample though,
this should not happen.
> [...]
>
> if (pes->data_index == PES_START_SIZE) {
> /* we got all the PES or section header. We can now
> decide */
>
>> However, it's IMHO just a workaround and the real root cause of the problem
>> should be found. At this time, pes->buffer is NULL, but data for PES packet
>> are coming in => crash.
>>
>> Crashing sample is here:
>> http://dennedy.org/~ddennedy/dvgrab-2009.03.28_19-07-22.m2t
>> Playable sample is here:
>> http://dennedy.org/~ddennedy/dvgrab-2009.03.28_19-06-41.m2t
>>
>> Both samples seem to be seriously broken at the beginning. They originated
>> from a HDV-capable camcorder (MPEG-TS containing MPEG-2 video).
>
> Last night, after some serious testing and soul searching, I
> discovered some file system corruption or bad file transfers when
> archiving this material to external HDD. There were some HDV test
> samples that were failing that I _know_ had worked well in the past. I
> had a backup of those on my network, and when I tested them over the
> network, they worked fine! An e2fsck on that disk did indeed find some
> problems that the "automatic repair" option could not fix.
>
> So, the samples above are definitely not to be considered playable,
> but I can confirm older versions of ffmpeg (0.5) at least did not
> segfault on this corrupt input. With these two changes, it is much
> more stable.
>
These 2 files can be played if MAX_RESYNC_SIZE is increased to 65536.
Note that mplayer reads them.
Is 65k reasonable ?
Besides, these files do not segv with latest svn
--
Baptiste COUDURIER
Key fingerprint 8D77134D20CC9220201FC5DB0AC9325C5C1ABAAA
FFmpeg maintainer http://www.ffmpeg.org
More information about the ffmpeg-devel
mailing list