diff src/sha256.c @ 27752:c1d1639b52dd v8.2.4402

patch 8.2.4402: missing parenthesis may cause unexpected problems Commit: https://github.com/vim/vim/commit/ae6f1d8b14c2f63811ee83ef14e32086fb3e9b83 Author: kylo252 <59826753+kylo252@users.noreply.github.com> Date: Wed Feb 16 19:24:07 2022 +0000 patch 8.2.4402: missing parenthesis may cause unexpected problems Problem: Missing parenthesis may cause unexpected problems. Solution: Add more parenthesis is macros. (closes https://github.com/vim/vim/issues/9788)
author Bram Moolenaar <Bram@vim.org>
date Wed, 16 Feb 2022 20:30:03 +0100
parents d34ec6fe207d
children
line wrap: on
line diff
--- a/src/sha256.c
+++ b/src/sha256.c
@@ -79,8 +79,8 @@ sha256_process(context_sha256_T *ctx, ch
     GET_UINT32(W[14], data, 56);
     GET_UINT32(W[15], data, 60);
 
-#define  SHR(x, n) ((x & 0xFFFFFFFF) >> n)
-#define ROTR(x, n) (SHR(x, n) | (x << (32 - n)))
+#define  SHR(x, n) (((x) & 0xFFFFFFFF) >> (n))
+#define ROTR(x, n) (SHR(x, n) | ((x) << (32 - (n))))
 
 #define S0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^  SHR(x, 3))
 #define S1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^  SHR(x, 10))
@@ -88,20 +88,20 @@ sha256_process(context_sha256_T *ctx, ch
 #define S2(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
 #define S3(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
 
-#define F0(x, y, z) ((x & y) | (z & (x | y)))
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F0(x, y, z) (((x) & (y)) | ((z) & ((x) | (y))))
+#define F1(x, y, z) ((z) ^ ((x) & ((y) ^ (z))))
 
 #define R(t)				\
 (					\
-    W[t] = S1(W[t -  2]) + W[t -  7] +	\
-	   S0(W[t - 15]) + W[t - 16]	\
+    W[t] = S1(W[(t) -  2]) + W[(t) -  7] +	\
+	   S0(W[(t) - 15]) + W[(t) - 16]	\
 )
 
 #define P(a,b,c,d,e,f,g,h,x,K)		     \
 {					     \
-    temp1 = h + S3(e) + F1(e, f, g) + K + x; \
+    temp1 = (h) + S3(e) + F1(e, f, g) + (K) + (x); \
     temp2 = S2(a) + F0(a, b, c);	     \
-    d += temp1; h = temp1 + temp2;	     \
+    (d) += temp1; (h) = temp1 + temp2;	     \
 }
 
     A = ctx->state[0];