From: Michael Niedermayer Date: Fri, 11 Dec 2009 21:49:30 +0000 (+0000) Subject: Make sure av_new_packet() initializes the data and destruct pointers. X-Git-Tag: v0.6~2377 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a0b468f5db92daf1854c49d920169ed39e9cfb1b;p=coroid%2Flibav_saccubus.git Make sure av_new_packet() initializes the data and destruct pointers. Some code does call av_free_packet() on failed av_new_packets(), this prevents the freeing of uninitialized pointers. Originally committed as revision 20801 to svn://svn.ffmpeg.org/ffmpeg/trunk --- diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 5bea639d6..5a8032538 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -47,18 +47,20 @@ void av_init_packet(AVPacket *pkt) int av_new_packet(AVPacket *pkt, int size) { - uint8_t *data; - if((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE) - return AVERROR(ENOMEM); + uint8_t *data= NULL; + if((unsigned)size < (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE) data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); - if (!data) - return AVERROR(ENOMEM); + if (data){ memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); + }else + size=0; av_init_packet(pkt); pkt->data = data; pkt->size = size; pkt->destruct = av_destruct_packet; + if(!data) + return AVERROR(ENOMEM); return 0; }