summaryrefslogtreecommitdiff
path: root/libavformat
diff options
context:
space:
mode:
authorMichael Niedermayer <michael@niedermayer.cc>2015-07-19 11:22:57 +0200
committerMichael Niedermayer <michael@niedermayer.cc>2015-07-19 11:23:01 +0200
commitf509c9503a8fdb0ae7c5b0e6e932d3bc66249fcc (patch)
treeed745fd290f7d6d79d97c92dbb2499ccb324c0c9 /libavformat
parent54882156dd091ce3113a2ad5d977f93a1acd7907 (diff)
parent406627287e015ce381795e85e2557b12bf60ca35 (diff)
Merge commit '406627287e015ce381795e85e2557b12bf60ca35'
* commit '406627287e015ce381795e85e2557b12bf60ca35': asfdec: do not read replicated data when their length is 0 Merged-by: Michael Niedermayer <michael@niedermayer.cc>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/asfdec_o.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/libavformat/asfdec_o.c b/libavformat/asfdec_o.c
index b85e2f7ad0..69c9a50b57 100644
--- a/libavformat/asfdec_o.c
+++ b/libavformat/asfdec_o.c
@@ -1123,17 +1123,19 @@ static int asf_read_multiple_payload(AVFormatContext *s, AVPacket *pkt,
if ((ret = asf_read_subpayload(s, pkt, 1)) < 0)
return ret;
} else {
- if (!asf_pkt->data_size) {
- asf_pkt->data_size = asf_pkt->size_left = avio_rl32(pb); // read media object size
- if (asf_pkt->data_size <= 0)
- return AVERROR_EOF;
- if ((ret = av_new_packet(&asf_pkt->avpkt, asf_pkt->data_size)) < 0)
- return ret;
- } else
- avio_skip(pb, 4); // reading of media object size is already done
- asf_pkt->dts = avio_rl32(pb); // read presentation time
- if ((asf->rep_data_len - 8) > 0)
- avio_skip(pb, asf->rep_data_len - 8); // skip replicated data
+ if (asf->rep_data_len) {
+ if (!asf_pkt->data_size) {
+ asf_pkt->data_size = asf_pkt->size_left = avio_rl32(pb); // read media object size
+ if (asf_pkt->data_size <= 0)
+ return AVERROR_EOF;
+ if ((ret = av_new_packet(&asf_pkt->avpkt, asf_pkt->data_size)) < 0)
+ return ret;
+ } else
+ avio_skip(pb, 4); // reading of media object size is already done
+ asf_pkt->dts = avio_rl32(pb); // read presentation time
+ if (asf->rep_data_len && ((asf->rep_data_len - 8) > 0))
+ avio_skip(pb, asf->rep_data_len - 8); // skip replicated data
+ }
pay_len = avio_rl16(pb); // payload length should be WORD
if (pay_len > asf->packet_size) {
av_log(s, AV_LOG_ERROR,