Mercurial > libavcodec.hg
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 { |