Module: libav
Branch: master
Commit: 406627287e015ce381795e85e2557b12bf60ca35

Author:    Alexandra Hájková <[email protected]>
Committer: Anton Khirnov <[email protected]>
Date:      Fri Jul 17 14:17:03 2015 +0200

asfdec: do not read replicated data when their length is 0

Signed-off-by: Anton Khirnov <[email protected]>

---

 libavformat/asfdec.c |   24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/libavformat/asfdec.c b/libavformat/asfdec.c
index 7af3728..371d480 100644
--- a/libavformat/asfdec.c
+++ b/libavformat/asfdec.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,

_______________________________________________
libav-commits mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-commits

Reply via email to