[FFmpeg-cvslog] lavf/wav: Print an error if files >4G are written.

Carl Eugen Hoyos git at videolan.org
Sun May 17 03:05:04 CEST 2015


ffmpeg | branch: master | Carl Eugen Hoyos <cehoyos at ag.or.at> | Sat May 16 23:32:56 2015 +0200| [2608f11863918c7d82c3cb8928f6224d67e83bf1] | committer: Carl Eugen Hoyos

lavf/wav: Print an error if files >4G are written.

Additionally, don't write an incorrect shorter size for such files.

Fixes part of ticket #4543.

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=2608f11863918c7d82c3cb8928f6224d67e83bf1
---

 libavformat/wavenc.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavformat/wavenc.c b/libavformat/wavenc.c
index 74b5d56..f89c91e 100644
--- a/libavformat/wavenc.c
+++ b/libavformat/wavenc.c
@@ -425,7 +425,7 @@ static int wav_write_trailer(AVFormatContext *s)
     avio_flush(pb);
 
     if (s->pb->seekable) {
-        if (wav->write_peak != 2) {
+        if (wav->write_peak != 2 && avio_tell(pb) - wav->data < UINT32_MAX) {
             ff_end_tag(pb, wav->data);
             avio_flush(pb);
         }
@@ -440,12 +440,16 @@ static int wav_write_trailer(AVFormatContext *s)
         data_size = file_size - wav->data;
         if (wav->rf64 == RF64_ALWAYS || (wav->rf64 == RF64_AUTO && file_size - 8 > UINT32_MAX)) {
             rf64 = 1;
-        } else {
+        } else if (file_size - 8 <= UINT32_MAX) {
             avio_seek(pb, 4, SEEK_SET);
             avio_wl32(pb, (uint32_t)(file_size - 8));
             avio_seek(pb, file_size, SEEK_SET);
 
             avio_flush(pb);
+        } else {
+            av_log(s, AV_LOG_ERROR,
+                   "Filesize %"PRId64" invalid for wav, output file will be broken\n",
+                   file_size);
         }
 
         number_of_samples = av_rescale(wav->maxpts - wav->minpts + wav->last_duration,



More information about the ffmpeg-cvslog mailing list