vlc | branch: master | Pierre Ynard <[email protected]> | Sun Feb 5 03:29:47 2012 +0100| [7ed3e0e4fa7b2e1d33f78eebab2b1b4fa9201049] | committer: Pierre Ynard
rtp sout: fix integer overflow This became likely to happen using VoD. Thanks to Denis Charmet for pointing out this issue. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=7ed3e0e4fa7b2e1d33f78eebab2b1b4fa9201049 --- modules/stream_out/rtp.c | 11 ++++++++--- 1 files changed, 8 insertions(+), 3 deletions(-) diff --git a/modules/stream_out/rtp.c b/modules/stream_out/rtp.c index d2b6500..5900172 100644 --- a/modules/stream_out/rtp.c +++ b/modules/stream_out/rtp.c @@ -946,9 +946,14 @@ rtp_set_ptime (sout_stream_id_t *id, unsigned ptime_ms, size_t bytes) uint32_t rtp_compute_ts( unsigned i_clock_rate, int64_t i_pts ) { - /* NOTE: this plays nice with offsets because the calculations are - * linear. */ - return i_pts * (int64_t)i_clock_rate / CLOCK_FREQ; + /* This is an overflow-proof way of doing: + * return i_pts * (int64_t)i_clock_rate / CLOCK_FREQ; + * + * NOTE: this plays nice with offsets because the (equivalent) + * calculations are linear. */ + lldiv_t q = lldiv(i_pts, CLOCK_FREQ); + return q.quot * (int64_t)i_clock_rate + + q.rem * (int64_t)i_clock_rate / CLOCK_FREQ; } /** Add an ES as a new RTP stream */ _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
