[FFmpeg-devel] [PATCH 7/9] avformat/wavdec: Fix s337m last packet parsing

Nicolas Gaullier nicolas.gaullier at cji.paris
Fri Jan 3 17:56:34 EET 2020


Fix reading beyond data_end.
---
 libavformat/wavdec.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavformat/wavdec.c b/libavformat/wavdec.c
index ccb9576b84..039ec1658e 100644
--- a/libavformat/wavdec.c
+++ b/libavformat/wavdec.c
@@ -643,8 +643,6 @@ static int wav_read_packet(AVFormatContext *s, AVPacket *pkt)
 
     if (CONFIG_SPDIF_DEMUXER && wav->spdif == 1)
         return ff_spdif_read_packet(s, pkt);
-    if (CONFIG_S337M_DEMUXER && wav->s337m == 1)
-        return ff_s337m_read_packet(s, pkt);
 
     if (wav->smv_data_ofs > 0) {
         int64_t audio_dts, video_dts;
@@ -712,6 +710,10 @@ smv_out:
         wav->data_end = avio_tell(s->pb) + left;
     }
 
+    if (CONFIG_S337M_DEMUXER && wav->s337m == 1) {
+        size = FFMIN(S337M_MAX_OFFSET, left);
+        ret  = ff_s337m_get_packet(s->pb, pkt, size, NULL, s, st->codecpar->bits_per_coded_sample);
+    } else {
     size = MAX_SIZE;
     if (st->codecpar->block_align > 1) {
         if (size < st->codecpar->block_align)
@@ -720,6 +722,8 @@ smv_out:
     }
     size = FFMIN(size, left);
     ret  = av_get_packet(s->pb, pkt, size);
+    }
+
     if (ret < 0)
         return ret;
     pkt->stream_index = 0;
-- 
2.14.1.windows.1



More information about the ffmpeg-devel mailing list