Commit de16d374 authored by Francois Cartegnie's avatar Francois Cartegnie

demux: flac: align to avoid overflow on seek (fix #10000)

Align seek time on second to avoid overflow on seek.
parent 4d65e300
...@@ -312,6 +312,7 @@ static int ControlSetTime( demux_t *p_demux, int64_t i_time ) ...@@ -312,6 +312,7 @@ static int ControlSetTime( demux_t *p_demux, int64_t i_time )
int64_t i_delta_offset; int64_t i_delta_offset;
int64_t i_next_time; int64_t i_next_time;
int64_t i_next_offset; int64_t i_next_offset;
uint32_t i_time_align = 1;
if( i+1 < p_sys->i_seekpoint ) if( i+1 < p_sys->i_seekpoint )
{ {
...@@ -325,14 +326,19 @@ static int ControlSetTime( demux_t *p_demux, int64_t i_time ) ...@@ -325,14 +326,19 @@ static int ControlSetTime( demux_t *p_demux, int64_t i_time )
} }
i_delta_offset = 0; i_delta_offset = 0;
if ( INT64_MAX / i_delta_time < (i_next_offset - p_sys->seekpoint[i]->i_byte_offset) )
i_time_align = 1000000;
if( i_next_time-p_sys->seekpoint[i]->i_time_offset > 0 ) if( i_next_time-p_sys->seekpoint[i]->i_time_offset > 0 )
i_delta_offset = (i_next_offset - p_sys->seekpoint[i]->i_byte_offset) * i_delta_time / i_delta_offset = (i_next_offset - p_sys->seekpoint[i]->i_byte_offset) * (i_delta_time / i_time_align) /
(i_next_time-p_sys->seekpoint[i]->i_time_offset); ((i_next_time-p_sys->seekpoint[i]->i_time_offset) / i_time_align);
if( stream_Seek( p_demux->s, p_sys->seekpoint[i]->i_byte_offset+p_sys->i_data_pos + i_delta_offset ) ) if( stream_Seek( p_demux->s, p_sys->seekpoint[i]->i_byte_offset+p_sys->i_data_pos + i_delta_offset ) )
return VLC_EGENERIC; return VLC_EGENERIC;
p_sys->i_pts_start = p_sys->i_pts; p_sys->i_pts_start = p_sys->i_pts;
i_delta_time = ( i_delta_time / i_time_align ) * i_time_align;
p_sys->i_time_offset = (p_sys->seekpoint[i]->i_time_offset+i_delta_time) - p_sys->i_pts; p_sys->i_time_offset = (p_sys->seekpoint[i]->i_time_offset+i_delta_time) - p_sys->i_pts;
} }
return VLC_SUCCESS; return VLC_SUCCESS;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment