[FFmpeg-devel] [PATCH] Fix segfault when opening empty file

Michael Niedermayer michaelni
Sat Oct 17 22:32:07 CEST 2009


On Sat, Oct 17, 2009 at 10:22:30PM +0200, Vitor Sessak wrote:
> Michael Niedermayer wrote:
>> On Sat, Oct 17, 2009 at 01:55:14AM +0200, Vitor Sessak wrote:
>>> $subj, to reproduce
>>>
>>> $ touch /tmp/file
>>> $ ffmpeg -i /tmp/file
>>>
>>> -Vitor
>>>  utils.c |    6 ++++++
>>>  1 file changed, 6 insertions(+)
>>> a0e169553dcd39a60c329e8b67342afe6cee9e8b  empty_file_crash.diff
>>> Index: libavformat/utils.c
>>> ===================================================================
>>> --- libavformat/utils.c	(revision 20260)
>>> +++ libavformat/utils.c	(working copy)
>>> @@ -469,6 +469,12 @@
>>>              /* read probe data */
>>>              pd->buf= av_realloc(pd->buf, probe_size + 
>>> AVPROBE_PADDING_SIZE);
>>>              pd->buf_size = get_buffer(pb, pd->buf, probe_size);
>>> +
>>> +            if (pd->buf_size < 0) {
>>> +                err = pd->buf_size;
>>> +                goto fail;
>>> +            }
>> if its done like that, then AVProbeData.buf_size needs a comment making it
>> clear that buf_size must stay signed, or some "size signedness cleanup"
>> would break this
>
> Good point. Attached is slightly more ugly but more robust.
>
> -Vitor

>  utils.c |   10 +++++++++-
>  1 file changed, 9 insertions(+), 1 deletion(-)
> 1a0bd9be3e10e0369e96f1aa06c167f450049704  empty_file_crash2.diff
> Index: libavformat/utils.c
> ===================================================================
> --- libavformat/utils.c	(revision 20260)
> +++ libavformat/utils.c	(working copy)
> @@ -466,9 +466,17 @@
>  
>          for(probe_size= PROBE_BUF_MIN; probe_size<=PROBE_BUF_MAX && !fmt; probe_size<<=1){
>              int score= probe_size < PROBE_BUF_MAX ? AVPROBE_SCORE_MAX/4 : 0;
> +            int size;
>              /* read probe data */
>              pd->buf= av_realloc(pd->buf, probe_size + AVPROBE_PADDING_SIZE);
> -            pd->buf_size = get_buffer(pb, pd->buf, probe_size);
> +            size = get_buffer(pb, pd->buf, probe_size);
> +
> +            if (size < 0) {

hmm
if((int)pd->buf_size < 0)

should work too
and feel free to commit directly

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

In fact, the RIAA has been known to suggest that students drop out
of college or go to community college in order to be able to afford
settlements. -- The RIAA
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20091017/10153e45/attachment.pgp>



More information about the ffmpeg-devel mailing list