diff options
author | Michael Niedermayer <michael@niedermayer.cc> | 2016-09-12 13:13:42 +0200 |
---|---|---|
committer | Michael Niedermayer <michael@niedermayer.cc> | 2016-09-28 14:23:06 +0200 |
commit | c2087fc48b46ac478944b4e6c59ae2a3a05da0e1 (patch) | |
tree | b5a71160a61ced046729337a5acd78822e94b7c4 | |
parent | 21a979773783bb4e1baa2597150f25151328c93f (diff) | |
download | ffmpeg-c2087fc48b46ac478944b4e6c59ae2a3a05da0e1.tar.gz |
avcodec/avpacket: clear side_data_elems
Fixes null pointer dereference
Found-by: 连一汉 <lianyihan@360.cn>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
(cherry picked from commit 5e1bf9d8c0d2cdbbf17b06a5dfdf87a635b3203b)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
-rw-r--r-- | libavcodec/avpacket.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c index d70ee5d684..bb0fc6c189 100644 --- a/libavcodec/avpacket.c +++ b/libavcodec/avpacket.c @@ -199,6 +199,7 @@ static int copy_packet_data(AVPacket *pkt, const AVPacket *src, int dup) { pkt->data = NULL; pkt->side_data = NULL; + pkt->side_data_elems = 0; if (pkt->buf) { AVBufferRef *ref = av_buffer_ref(src->buf); if (!ref) @@ -208,9 +209,11 @@ static int copy_packet_data(AVPacket *pkt, const AVPacket *src, int dup) } else { DUP_DATA(pkt->data, src->data, pkt->size, 1, ALLOC_BUF); } - if (pkt->side_data_elems && dup) + if (src->side_data_elems && dup) { pkt->side_data = src->side_data; - if (pkt->side_data_elems && !dup) { + pkt->side_data_elems = src->side_data_elems; + } + if (src->side_data_elems && !dup) { return av_copy_packet_side_data(pkt, src); } return 0; |