[FFmpeg-devel] [PATCH 2/2] libschroedingerdec: fix leaking of framewithpts

Michael Niedermayer michael at niedermayer.cc
Wed Nov 16 14:21:34 EET 2016


On Tue, Nov 15, 2016 at 09:56:16PM +0100, Andreas Cadhalpun wrote:
> On 15.11.2016 03:18, Michael Niedermayer wrote:
> > On Sun, Nov 13, 2016 at 11:25:32PM +0100, Andreas Cadhalpun wrote:
> >> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> >> ---
> >>  libavcodec/libschroedingerdec.c | 26 +++++++++++++++++---------
> >>  1 file changed, 17 insertions(+), 9 deletions(-)
> >>
> >> diff --git a/libavcodec/libschroedingerdec.c b/libavcodec/libschroedingerdec.c
> >> index 1e392b3..83c790c 100644
> >> --- a/libavcodec/libschroedingerdec.c
> >> +++ b/libavcodec/libschroedingerdec.c
> >> @@ -218,6 +218,7 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
> >>      int outer = 1;
> >>      SchroParseUnitContext parse_ctx;
> >>      LibSchroFrameContext *framewithpts = NULL;
> >> +    int ret;
> >>  
> >>      *got_frame = 0;
> >>  
> >> @@ -236,7 +237,8 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
> >>              enc_buf->tag = schro_tag_new(av_malloc(sizeof(int64_t)), av_free);
> >>              if (!enc_buf->tag->value) {
> >>                  av_log(avctx, AV_LOG_ERROR, "Unable to allocate SchroTag\n");
> >> -                return AVERROR(ENOMEM);
> >> +                ret = AVERROR(ENOMEM);
> >> +                goto end;
> >>              }
> >>              AV_WN(64, enc_buf->tag->value, pts);
> >>              /* Push buffer into decoder. */
> >> @@ -267,8 +269,10 @@ static int libschroedinger_decode_frame(AVCodecContext *avctx,
> >>                  /* Decoder needs a frame - create one and push it in. */
> >>                  frame = ff_create_schro_frame(avctx,
> >>                                                p_schro_params->frame_format);
> >> -                if (!frame)
> >> -                    return AVERROR(ENOMEM);
> >> +                if (!frame) {
> >> +                    ret = AVERROR(ENOMEM);
> >> +                    goto end;
> >> +                }
> >>                  schro_decoder_add_output_picture(decoder, frame);
> >>                  break;
> >>  
> > 
> > this looks a bit strange
> > framewithpts is set to newly allocated memory below which is injected
> > into the que and IIUC that can occur multiple times
> > the free at the end for one of multiple such que entries feels wrong
> 
> Indeed, only the framewithpts returned from ff_schro_queue_pop needs to
> be freed. New patch is attached.
> 

> However, considering the sheer amount of crashes in libschroedinger and
> that it's apparently not maintained anymore, it might be better to
> simply remove this decoder.

id say decoders which crash should be marked as
AV_CODEC_CAP_EXPERIMENTAL


> 
> Best regards,
> Andreas

>  libschroedingerdec.c |   16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 6cc9768bea564b1bf50a25198deaf95adfa3151a  0001-libschroedingerdec-fix-leaking-of-framewithpts.patch
> From 9cf7226543e25e494bed768b73f39e67d89f25d1 Mon Sep 17 00:00:00 2001
> From: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>
> Date: Sun, 13 Nov 2016 23:10:06 +0100
> Subject: [PATCH] libschroedingerdec: fix leaking of framewithpts
> 
> Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun at googlemail.com>

should be ok

[...]

-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Why not whip the teacher when the pupil misbehaves? -- Diogenes of Sinope
-------------- 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/20161116/381784b7/attachment.sig>


More information about the ffmpeg-devel mailing list