avutil/softfloat: Fix overflow in av_div_sf()
authorMichael Niedermayer <michael@niedermayer.cc>
Sat, 6 May 2017 19:31:49 +0000 (21:31 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sat, 6 May 2017 21:23:39 +0000 (23:23 +0200)
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavutil/softfloat.h

index 5d376e4..32b33d9 100644 (file)
@@ -113,8 +113,15 @@ static inline av_const SoftFloat av_mul_sf(SoftFloat a, SoftFloat b){
  * @return Will not be more denormalized than a.
  */
 static inline av_const SoftFloat av_div_sf(SoftFloat a, SoftFloat b){
+    int64_t temp = (int64_t)a.mant * (1<<(ONE_BITS+1));
+    temp /= b.mant;
     a.exp -= b.exp;
-    a.mant = ((int64_t)a.mant<<(ONE_BITS+1)) / b.mant;
+    a.mant = temp;
+    while (a.mant != temp) {
+        temp /= 2;
+        a.exp--;
+        a.mant = temp;
+    }
     a = av_normalize1_sf(a);
     if (!a.mant || a.exp < MIN_EXP)
         return FLOAT_0;