From b691bc424f53f76c0d3aef36b4c7acc15b3dc3e9 Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Mon, 29 Apr 2013 03:08:50 +0200 Subject: [PATCH] copy_packet_data: fix memleak This should fix gif fate memleaks Signed-off-by: Michael Niedermayer --- libavcodec/avpacket.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index 651036e85e..92f4fdfbe3 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -180,7 +180,7 @@ do { \ } while (0) /* Makes duplicates of data, side_data, but does not copy any other fields */ -static int copy_packet_data(AVPacket *pkt, AVPacket *src) +static int copy_packet_data(AVPacket *pkt, AVPacket *src, int dup) { pkt->data = NULL; pkt->side_data = NULL; @@ -196,8 +196,9 @@ static int copy_packet_data(AVPacket *pkt, AVPacket *src) #if FF_API_DESTRUCT_PACKET pkt->destruct = dummy_destruct_packet; #endif - - if (pkt->side_data_elems) { + if (pkt->side_data_elems && dup) + pkt->side_data = src->side_data; + if (pkt->side_data_elems && !dup) { int i; DUP_DATA(pkt->side_data, src->side_data, @@ -228,7 +229,7 @@ int av_dup_packet(AVPacket *pkt) #endif ) { tmp_pkt = *pkt; - return copy_packet_data(pkt, &tmp_pkt); + return copy_packet_data(pkt, &tmp_pkt, 1); } return 0; } @@ -236,7 +237,7 @@ int av_dup_packet(AVPacket *pkt) int av_copy_packet(AVPacket *dst, AVPacket *src) { *dst = *src; - return copy_packet_data(dst, src); + return copy_packet_data(dst, src, 0); } void av_free_packet(AVPacket *pkt)