From f26fccf3b294d538ddcfde00a35e0de2080c1cee Mon Sep 17 00:00:00 2001 From: James Zern Date: Wed, 4 May 2016 19:22:23 -0700 Subject: [PATCH] md5_utils,MD5Transform: don't check for unsigned overflow this transform is well-defined and relies on unsigned rollover Change-Id: Ia39f3a65a7a07ac871bf857d2684c9839862c2aa --- md5_utils.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/md5_utils.c b/md5_utils.c index f4f893a2d..a9b979a41 100644 --- a/md5_utils.c +++ b/md5_utils.c @@ -150,12 +150,23 @@ MD5Final(md5byte digest[16], struct MD5Context *ctx) { #define MD5STEP(f,w,x,y,z,in,s) \ (w += f(x,y,z) + in, w = (w<>(32-s)) + x) +#if defined(__clang__) && defined(__has_attribute) +#if __has_attribute(no_sanitize) +#define VPX_NO_UNSIGNED_OVERFLOW_CHECK \ + __attribute__((no_sanitize("unsigned-integer-overflow"))) +#endif +#endif + +#ifndef VPX_NO_UNSIGNED_OVERFLOW_CHECK +#define VPX_NO_UNSIGNED_OVERFLOW_CHECK +#endif + /* * The core of the MD5 algorithm, this alters an existing MD5 hash to * reflect the addition of 16 longwords of new data. MD5Update blocks * the data and converts bytes into longwords for this routine. */ -void +VPX_NO_UNSIGNED_OVERFLOW_CHECK void MD5Transform(UWORD32 buf[4], UWORD32 const in[16]) { register UWORD32 a, b, c, d; @@ -238,4 +249,6 @@ MD5Transform(UWORD32 buf[4], UWORD32 const in[16]) { buf[3] += d; } +#undef VPX_NO_UNSIGNED_OVERFLOW_CHECK + #endif -- 2.40.0