[FFmpeg-devel] [PATCH 1/3] ffmdec: reset packet_end in case of failure

Michael Niedermayer michael at niedermayer.cc
Sun Jan 3 15:52:29 CET 2016


On Sat, Jan 02, 2016 at 07:43:03PM +0100, Andreas Cadhalpun wrote:
> On 02.01.2016 19:14, Michael Niedermayer wrote:
> > On Sat, Jan 02, 2016 at 04:51:17PM +0100, Andreas Cadhalpun wrote:
> >> This fixes segmentation faults caused by passing a packet_ptr of NULL to
> >> memcpy.
> >>
> >> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> >> ---
> >>  libavformat/ffmdec.c | 8 ++++++--
> >>  1 file changed, 6 insertions(+), 2 deletions(-)
> >>
> >> diff --git a/libavformat/ffmdec.c b/libavformat/ffmdec.c
> >> index 9fe4155..7b2d0d7 100644
> >> --- a/libavformat/ffmdec.c
> >> +++ b/libavformat/ffmdec.c
> >> @@ -123,8 +123,10 @@ static int ffm_read_data(AVFormatContext *s,
> >>              frame_offset = avio_rb16(pb);
> >>              avio_read(pb, ffm->packet, ffm->packet_size - FFM_HEADER_SIZE);
> >>              ffm->packet_end = ffm->packet + (ffm->packet_size - FFM_HEADER_SIZE - fill_size);
> >> -            if (ffm->packet_end < ffm->packet || frame_offset < 0)
> >> +            if (ffm->packet_end < ffm->packet || frame_offset < 0) {
> >> +                ffm->packet_end = ffm->packet_ptr;
> > 
> > doesnt this imply that packet_end was set to a invalid pointer?
> 
> Yes, if you use a strict definition of a valid pointer.
> (It could still point to a valid memory address, but from a different
> memory allocation than packet_ptr.)
> 
> By the way, the check for frame_offset < 0 is pointless, because
> avio_rb16 returns an unsigned int.
> 
> > (that is undefined behavior)
> 
> Yes, but ubsan didn't catch it. ;)
> 
> Anyway, attached is an updated patch avoiding this problem.
> 
> Best regards,
> Andreas

>  ffmdec.c |    9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
> 1600298d54df3b7c7c74d4437521405b38342c60  0001-ffmdec-reset-packet_end-in-case-of-failure.patch
> From a0faebf31ab37083e140c6d276b16dd024f97ffb Mon Sep 17 00:00:00 2001
> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> Date: Sat, 2 Jan 2016 16:27:02 +0100
> Subject: [PATCH 1/3] ffmdec: reset packet_end in case of failure
> 
> This fixes segmentation faults caused by passing a packet_ptr of NULL to
> memcpy.
> 
> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>

should be ok

thx

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Rewriting code that is poorly written but fully understood is good.
Rewriting code that one doesnt understand is a sign that one is less smart
then the original author, trying to rewrite it will not make it better.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160103/d441495d/attachment.sig>


More information about the ffmpeg-devel mailing list