comparison avpacket.c @ 10673:158f0ea08e82 libavcodec

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.
author michael
date Fri, 11 Dec 2009 21:49:30 +0000
parents e30999f7a631
children f04468776158
comparison
equal deleted inserted replaced
10672:2aab93afc826 10673:158f0ea08e82
45 pkt->destruct= NULL; 45 pkt->destruct= NULL;
46 } 46 }
47 47
48 int av_new_packet(AVPacket *pkt, int size) 48 int av_new_packet(AVPacket *pkt, int size)
49 { 49 {
50 uint8_t *data; 50 uint8_t *data= NULL;
51 if((unsigned)size > (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE) 51 if((unsigned)size < (unsigned)size + FF_INPUT_BUFFER_PADDING_SIZE)
52 return AVERROR(ENOMEM);
53 data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE); 52 data = av_malloc(size + FF_INPUT_BUFFER_PADDING_SIZE);
54 if (!data) 53 if (data){
55 return AVERROR(ENOMEM);
56 memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE); 54 memset(data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
55 }else
56 size=0;
57 57
58 av_init_packet(pkt); 58 av_init_packet(pkt);
59 pkt->data = data; 59 pkt->data = data;
60 pkt->size = size; 60 pkt->size = size;
61 pkt->destruct = av_destruct_packet; 61 pkt->destruct = av_destruct_packet;
62 if(!data)
63 return AVERROR(ENOMEM);
62 return 0; 64 return 0;
63 } 65 }
64 66
65 void av_shrink_packet(AVPacket *pkt, int size) 67 void av_shrink_packet(AVPacket *pkt, int size)
66 { 68 {