[vlc-devel] [PATCH] darwin:thread: fix invalid nanosecond ticks conversion

Steve Lhomme robux4 at ycbcr.xyz
Thu Sep 27 08:23:16 CEST 2018


vlc_clock_conversion_factor.numer is assumed to be small so that date *
vlc_clock_conversion_factor.numer doesn't overflow in normal use.
---
 src/darwin/thread.c | 10 ++--------
 1 file changed, 2 insertions(+), 8 deletions(-)

diff --git a/src/darwin/thread.c b/src/darwin/thread.c
index f5eb4f234e7..1c2f121408b 100644
--- a/src/darwin/thread.c
+++ b/src/darwin/thread.c
@@ -516,14 +516,8 @@ vlc_tick_t vlc_tick_now (void)
     vlc_clock_setup();
     uint64_t date = mach_absolute_time();
 
-    /* denom is uint32_t, switch to 64 bits to prevent overflow. */
-    uint64_t denom = vlc_clock_conversion_factor.denom;
-
-    /* Switch to microsecs */
-    denom *= UINT64_C(1000);
-
-    /* Split the division to prevent overflow */
-    return vlc_tick_from_frac( date * vlc_clock_conversion_factor.numer, denom );
+    return VLC_TICK_FROM_US( (date * vlc_clock_conversion_factor.numer) /
+                             vlc_clock_conversion_factor.denom );
 }
 
 #undef vlc_tick_wait
-- 
2.19.0



More information about the vlc-devel mailing list