[FFmpeg-cvslog] r25004 - trunk/libavformat/a64.c

Benoit Fouet benoit.fouet
Tue Aug 31 10:45:38 CEST 2010


On Tue, 31 Aug 2010 09:15:11 +0200 (CEST) bindhammer wrote:
> Author: bindhammer
> Date: Tue Aug 31 09:15:11 2010
> New Revision: 25004
> 
> Log:
> Solving memory leak and initialization problem with prev_pkt / pkt.
> 
> Modified:
>    trunk/libavformat/a64.c
> 
> Modified: trunk/libavformat/a64.c
> ==============================================================================
> --- trunk/libavformat/a64.c	Tue Aug 31 09:14:47 2010	(r25003)
> +++ trunk/libavformat/a64.c	Tue Aug 31 09:15:11 2010	(r25004)
> @@ -125,8 +125,16 @@ static int a64_write_packet(struct AVFor
>              }
>              /* backup current packet for next turn */
>              if(pkt->data) {
> -                av_new_packet(&c->prev_pkt, pkt->size);
> -                memcpy(c->prev_pkt.data, pkt->data, pkt->size);
> +                /* no backup packet yet? create one! */
> +                if(!c->prev_pkt.data) av_new_packet(&c->prev_pkt, pkt->size);
> +                /* we have a packet and data is big enough, reuse it */
> +                if(c->prev_pkt.data && c->prev_pkt.size >= pkt->size) {
> +                    memcpy(c->prev_pkt.data, pkt->data, pkt->size);
> +                    c->prev_pkt.size = pkt->size;
> +                } else {
> +                    av_log(avctx, AV_LOG_ERROR, "Too less memory for prev_pkt.\n");
> +                    return AVERROR(ENOMEM);

can that happen?
If yes, maybe you should allocate another one in this case,
desctructing the previous one.
(BTW, the error message is not correct)

-- 
Ben



More information about the ffmpeg-cvslog mailing list