]> git.sesse.net Git - x264/commitdiff
Fix possible division by zero in mkv and flv muxers on close
authorAnton Mitrofanov <BugMaster@narod.ru>
Mon, 31 Jan 2011 21:43:03 +0000 (00:43 +0300)
committerFiona Glaser <fiona@x264.com>
Sat, 5 Feb 2011 23:10:05 +0000 (15:10 -0800)
This could crash if anything failed before output.set_param (for example, incorrect params refused by x264_encoder_open).
Bug introduced in r1873.

output/flv.c
output/matroska.c

index abda3bd6180a06aa2905923487ffba7550944074..87335b83d8860f1d643b4bd88a59f347286568e5 100644 (file)
@@ -310,7 +310,7 @@ static int close_file( hnd_t handle, int64_t largest_pts, int64_t second_largest
 
     double total_duration = (2 * largest_pts - second_largest_pts) * p_flv->d_timebase;
 
-    if( x264_is_regular_file( c->fp ) )
+    if( x264_is_regular_file( c->fp ) && total_duration > 0 )
     {
         double framerate;
         uint64_t filesize = ftell( c->fp );
index f31a6a5b610475c1bcee603d3524b9bc7d1d98ad..0d8666cb4a1d433d8d094068d1e2dee9f3fb61c5 100644 (file)
@@ -202,7 +202,7 @@ static int close_file( hnd_t handle, int64_t largest_pts, int64_t second_largest
     int ret;
     int64_t i_last_delta;
 
-    i_last_delta = (int64_t)(((largest_pts - second_largest_pts) * p_mkv->i_timebase_num / p_mkv->i_timebase_den) + 0.5);
+    i_last_delta = p_mkv->i_timebase_den ? (int64_t)(((largest_pts - second_largest_pts) * p_mkv->i_timebase_num / p_mkv->i_timebase_den) + 0.5) : 0;
 
     ret = mk_close( p_mkv->w, i_last_delta );