flvenc: don't write random data if seek fails
authorBjörn Axelsson <bjorn.axelsson@intinor.se>
Thu, 13 Dec 2012 13:48:25 +0000 (14:48 +0100)
committerMichael Niedermayer <michaelni@gmx.at>
Thu, 13 Dec 2012 20:54:35 +0000 (21:54 +0100)
The FLV muxer tries to update the header in write_trailer, which is
impossible if writing to a pipe or network stream. Don't write header
data if seek to header fails.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
libavformat/flvenc.c

index c528bf5..6ee0dd3 100644 (file)
@@ -426,10 +426,14 @@ static int flv_write_trailer(AVFormatContext *s)
     file_size = avio_tell(pb);
 
     /* update information */
-    avio_seek(pb, flv->duration_offset, SEEK_SET);
-    put_amf_double(pb, flv->duration / (double)1000);
-    avio_seek(pb, flv->filesize_offset, SEEK_SET);
-    put_amf_double(pb, file_size);
+    if(avio_seek(pb, flv->duration_offset, SEEK_SET) < 0)
+        av_log(s, AV_LOG_WARNING, "Failed to update header with correct duration.\n");
+    else
+        put_amf_double(pb, flv->duration / (double)1000);
+    if(avio_seek(pb, flv->filesize_offset, SEEK_SET) < 0)
+        av_log(s, AV_LOG_WARNING, "Failed to update header with correct filesize.\n");
+    else
+        put_amf_double(pb, file_size);
 
     avio_seek(pb, file_size, SEEK_SET);
     return 0;