aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSean McGovern <gseanmcg@gmail.com>2017-03-24 13:36:51 -0400
committerSean McGovern <gseanmcg@gmail.com>2017-03-26 12:43:57 -0400
commitfe6eea99efac66839052af547426518efd970b24 (patch)
tree217d3f069208fa60c6878ebc8f9cff7013e716eb
parentd4f3c26b700ae847433ba3c67dc99c32bc1fd4a1 (diff)
downloadffmpeg-fe6eea99efac66839052af547426518efd970b24.tar.gz
nsvdec: don't ignore the return value of av_get_packet()
Fixes invalid reads with corrupted files. CC: libav-stable@libav.org Bug-Id: 1039
-rw-r--r--libavformat/nsvdec.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libavformat/nsvdec.c b/libavformat/nsvdec.c
index c91d2a15dd..924c8694b1 100644
--- a/libavformat/nsvdec.c
+++ b/libavformat/nsvdec.c
@@ -520,6 +520,7 @@ static int nsv_read_chunk(AVFormatContext *s, int fill_header)
uint32_t vsize;
uint16_t asize;
uint16_t auxsize;
+ int ret;
if (nsv->ahead[0].data || nsv->ahead[1].data)
return 0; //-1; /* hey! eat what you've in your plate first! */
@@ -571,7 +572,8 @@ null_chunk_retry:
if (vsize && st[NSV_ST_VIDEO]) {
nst = st[NSV_ST_VIDEO]->priv_data;
pkt = &nsv->ahead[NSV_ST_VIDEO];
- av_get_packet(pb, pkt, vsize);
+ if ((ret = av_get_packet(pb, pkt, vsize)) < 0)
+ return ret;
pkt->stream_index = st[NSV_ST_VIDEO]->index;//NSV_ST_VIDEO;
pkt->dts = nst->frame_offset;
pkt->flags |= nsv->state == NSV_HAS_READ_NSVS ? AV_PKT_FLAG_KEY : 0; /* keyframe only likely on a sync frame */
@@ -615,7 +617,8 @@ null_chunk_retry:
bps, channels, samplerate);
}
}
- av_get_packet(pb, pkt, asize);
+ if ((ret = av_get_packet(pb, pkt, asize)) < 0)
+ return ret;
pkt->stream_index = st[NSV_ST_AUDIO]->index;//NSV_ST_AUDIO;
pkt->flags |= nsv->state == NSV_HAS_READ_NSVS ? AV_PKT_FLAG_KEY : 0; /* keyframe only likely on a sync frame */
if( nsv->state == NSV_HAS_READ_NSVS && st[NSV_ST_VIDEO] ) {