vlc | branch: master | Francois Cartegnie <[email protected]> | Sat Apr 29 11:44:12 2017 +0200| [d5f75c1dafa0afe9d515f9dc0646ef635b7b7b86] | committer: Francois Cartegnie
demux: mp4: check fragments > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=d5f75c1dafa0afe9d515f9dc0646ef635b7b7b86 --- modules/demux/mp4/fragments.c | 17 ++++++++++------- modules/demux/mp4/fragments.h | 2 +- modules/demux/mp4/mp4.c | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/modules/demux/mp4/fragments.c b/modules/demux/mp4/fragments.c index e83ea9d3c7..15c6297248 100644 --- a/modules/demux/mp4/fragments.c +++ b/modules/demux/mp4/fragments.c @@ -22,6 +22,7 @@ #endif #include "fragments.h" +#include <limits.h> void MP4_Fragments_Index_Delete( mp4_fragments_index_t *p_index ) { @@ -35,10 +36,12 @@ void MP4_Fragments_Index_Delete( mp4_fragments_index_t *p_index ) mp4_fragments_index_t * MP4_Fragments_Index_New( unsigned i_tracks, unsigned i_num ) { + if( !i_tracks || !i_num || SIZE_MAX / i_num < i_tracks ) + return NULL; mp4_fragments_index_t *p_index = malloc( sizeof(*p_index) ); if( p_index ) { - p_index->p_times = calloc( i_num * i_tracks, sizeof(*p_index->p_times) ); + p_index->p_times = calloc( (size_t)i_num * i_tracks, sizeof(*p_index->p_times) ); p_index->pi_pos = calloc( i_num, sizeof(*p_index->pi_pos) ); if( !p_index->p_times || !p_index->pi_pos ) { @@ -65,7 +68,7 @@ stime_t MP4_Fragment_Index_GetTrackStartTime( mp4_fragments_index_t *p_index, stime_t MP4_Fragment_Index_GetTrackDuration( mp4_fragments_index_t *p_index, unsigned i ) { - return p_index->p_times[(p_index->i_entries - 1) * p_index->i_tracks + i]; + return p_index->p_times[(size_t)(p_index->i_entries - 1) * p_index->i_tracks + i]; } bool MP4_Fragments_Index_Lookup( mp4_fragments_index_t *p_index, stime_t *pi_time, @@ -85,14 +88,14 @@ bool MP4_Fragments_Index_Lookup( mp4_fragments_index_t *p_index, stime_t *pi_tim } } - *pi_time = p_index->p_times[(p_index->i_entries - 1) * p_index->i_tracks]; + *pi_time = p_index->p_times[(size_t)(p_index->i_entries - 1) * p_index->i_tracks]; *pi_pos = p_index->pi_pos[p_index->i_entries - 1]; return true; } #ifdef MP4_VERBOSE void MP4_Fragments_Index_Dump( vlc_object_t *p_obj, const mp4_fragments_index_t *p_index, - uint32_t i_movie_timescale, unsigned i_tracks ) + uint32_t i_movie_timescale ) { for( size_t i=0; i<p_index->i_entries; i++ ) { @@ -102,14 +105,14 @@ void MP4_Fragments_Index_Dump( vlc_object_t *p_obj, const mp4_fragments_index_t if( i + 1 == p_index->i_entries ) i_end = p_index->i_last_time; else - i_end = p_index->p_times[(i + 1) * i_tracks]; + i_end = p_index->p_times[(i + 1) * p_index->i_tracks]; - for( unsigned j=0; j<i_tracks; j++ ) + for( unsigned j=0; j<p_index->i_tracks; j++ ) { char *psz_start = NULL; if( 0 < asprintf( &psz_start, "%s [%u]%"PRId64"ms ", (psz_starts) ? psz_starts : "", j, - INT64_C( 1000 ) * p_index->p_times[i * i_tracks + j] / i_movie_timescale ) ) + INT64_C( 1000 ) * p_index->p_times[i * p_index->i_tracks + j] / i_movie_timescale ) ) { free( psz_starts ); psz_starts = psz_start; diff --git a/modules/demux/mp4/fragments.h b/modules/demux/mp4/fragments.h index 623a07819e..4e4455b0f2 100644 --- a/modules/demux/mp4/fragments.h +++ b/modules/demux/mp4/fragments.h @@ -44,7 +44,7 @@ bool MP4_Fragments_Index_Lookup( mp4_fragments_index_t *p_index, #ifdef MP4_VERBOSE void MP4_Fragments_Index_Dump( vlc_object_t *p_obj, const mp4_fragments_index_t *p_index, - uint32_t i_movie_timescale, unsigned i_tracks ); + uint32_t i_movie_timescale ); #endif #endif diff --git a/modules/demux/mp4/mp4.c b/modules/demux/mp4/mp4.c index 8d04635afe..bb1749afb2 100644 --- a/modules/demux/mp4/mp4.c +++ b/modules/demux/mp4/mp4.c @@ -4110,7 +4110,7 @@ static int ProbeFragments( demux_t *p_demux, bool b_force, bool *pb_fragmented ) free( pi_track_times ); #ifdef MP4_VERBOSE - MP4_Fragments_Index_Dump( VLC_OBJECT(p_demux), p_sys->p_fragsindex, p_sys->i_timescale, p_sys->i_tracks ); + MP4_Fragments_Index_Dump( VLC_OBJECT(p_demux), p_sys->p_fragsindex, p_sys->i_timescale ); #endif } } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
