From: Vsevolod Stakhov Date: Wed, 14 Sep 2016 22:53:01 +0000 (+0100) Subject: [Minor] Improve constant memcmp function X-Git-Tag: 1.4.0~425 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2c70f249488615dee2e25a4c0062c981128b6f0b;p=thirdparty%2Frspamd.git [Minor] Improve constant memcmp function --- diff --git a/src/libutil/util.c b/src/libutil/util.c index 65756693c7..7e76140052 100644 --- a/src/libutil/util.c +++ b/src/libutil/util.c @@ -2372,7 +2372,8 @@ gboolean rspamd_constant_memcmp (const guchar *a, const guchar *b, gsize len) { gsize lena, lenb, i; - gint acc = 0; + guint16 d, r = 0, m; + guint16 v; if (len == 0) { lena = strlen (a); @@ -2386,10 +2387,13 @@ rspamd_constant_memcmp (const guchar *a, const guchar *b, gsize len) } for (i = 0; i < len; i++) { - acc |= a[i] ^ b[i]; + v = ((guint16)(guint8)r) + 255; + m = v / 256 - 1; + d = (guint16)((int)a[i] - (int)b[i]); + r |= (d & m); } - return acc == 0; + return (((gint32)(guint16)((guint32)r + 0x8000) - 0x8000) == 0); } #if !defined(LIBEVENT_VERSION_NUMBER) || LIBEVENT_VERSION_NUMBER < 0x02000000UL