[FFmpeg-cvslog] lavu/intmath.h: Fix UB in ff_ctz_c() and ff_ctzll_c()

Tomas Härdin git at videolan.org
Fri Jun 14 15:30:21 EEST 2024


ffmpeg | branch: master | Tomas Härdin <git at haerdin.se> | Thu May 16 18:10:58 2024 +0200| [be2cabce327b58a549500bbeb3a342530f2573e9] | committer: Tomas Härdin

lavu/intmath.h: Fix UB in ff_ctz_c() and ff_ctzll_c()

Found by value analysis

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=be2cabce327b58a549500bbeb3a342530f2573e9
---

 libavutil/intmath.h | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/libavutil/intmath.h b/libavutil/intmath.h
index c54d23b7bf..52e11a8d5f 100644
--- a/libavutil/intmath.h
+++ b/libavutil/intmath.h
@@ -119,7 +119,7 @@ static av_always_inline av_const int ff_ctz_c(int v)
         0, 1, 28, 2, 29, 14, 24, 3, 30, 22, 20, 15, 25, 17, 4, 8,
         31, 27, 13, 23, 21, 19, 16, 7, 26, 12, 18, 6, 11, 5, 10, 9
     };
-    return debruijn_ctz32[(uint32_t)((v & -v) * 0x077CB531U) >> 27];
+    return debruijn_ctz32[(uint32_t)((v & -(uint32_t)v) * 0x077CB531U) >> 27];
 }
 #endif
 
@@ -135,7 +135,7 @@ static av_always_inline av_const int ff_ctzll_c(long long v)
         63, 52, 6, 26, 37, 40, 33, 47, 61, 45, 43, 21, 23, 58, 17, 10,
         51, 25, 36, 32, 60, 20, 57, 16, 50, 31, 19, 15, 30, 14, 13, 12
     };
-    return debruijn_ctz64[(uint64_t)((v & -v) * 0x022FDD63CC95386DU) >> 58];
+    return debruijn_ctz64[(uint64_t)((v & -(uint64_t)v) * 0x022FDD63CC95386DU) >> 58];
 }
 #endif
 



More information about the ffmpeg-cvslog mailing list