[FFmpeg-cvslog] avformat/wavdec: Dont trust the fact chunk for PCM
Michael Niedermayer
git at videolan.org
Thu Oct 24 11:58:57 CEST 2013
ffmpeg | branch: release/0.11 | Michael Niedermayer <michaelni at gmx.at> | Wed Oct 9 21:43:06 2013 +0200| [5df35d9a21d55e69126757ad32df88764d4f27f0] | committer: Carl Eugen Hoyos
avformat/wavdec: Dont trust the fact chunk for PCM
Fixes Ticket3033
Signed-off-by: Michael Niedermayer <michaelni at gmx.at>
(cherry picked from commit 83fc6c822b06688e572333299927d93eb3c6c426)
Conflicts:
libavformat/wav.c
(cherry picked from commit 89b5f5f494a2387541de8960839c2539a73a31fa)
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=5df35d9a21d55e69126757ad32df88764d4f27f0
---
libavformat/wav.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/libavformat/wav.c b/libavformat/wav.c
index 5bd76a9..08637f7 100644
--- a/libavformat/wav.c
+++ b/libavformat/wav.c
@@ -532,8 +532,15 @@ break_loop:
avio_seek(pb, data_ofs, SEEK_SET);
- if (!sample_count && st->codec->channels && av_get_bits_per_sample(st->codec->codec_id))
- sample_count = (data_size<<3) / (st->codec->channels * (uint64_t)av_get_bits_per_sample(st->codec->codec_id));
+ if (!sample_count || av_get_exact_bits_per_sample(st->codec->codec_id) > 0)
+ if ( st->codec->channels
+ && data_size
+ && av_get_bits_per_sample(st->codec->codec_id)
+ && wav->data_end <= avio_size(pb))
+ sample_count = (data_size << 3)
+ /
+ (st->codec->channels * (uint64_t)av_get_bits_per_sample(st->codec->codec_id));
+
if (sample_count)
st->duration = sample_count;
More information about the ffmpeg-cvslog
mailing list