upstream: Use int64_t for intermediate values in int32_MINMAX to
prevent signed 32-bit integer overflow. Found by and ok djm@ ok markus@ OpenBSD-Commit-ID: 4f0704768e34cf45fdd792bac4011c6971881bb3
This commit is contained in:
parent
5c1953bf98
commit
3d999be7b9
|
@ -0,0 +1,20 @@
|
||||||
|
/* $OpenBSD: int32_minmax.inc,v 1.1 2020/12/30 14:13:28 tobhe Exp $ */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Public Domain, Authors:
|
||||||
|
* - Daniel J. Bernstein
|
||||||
|
* - Chitchanok Chuengsatiansup
|
||||||
|
* - Tanja Lange
|
||||||
|
* - Christine van Vredendaal
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define int32_MINMAX(a,b) \
|
||||||
|
do { \
|
||||||
|
int64_t ab = (int64_t)b ^ (int64_t)a; \
|
||||||
|
int64_t c = (int64_t)b - (int64_t)a; \
|
||||||
|
c ^= ab & (c ^ b); \
|
||||||
|
c >>= 31; \
|
||||||
|
c &= ab; \
|
||||||
|
a ^= c; \
|
||||||
|
b ^= c; \
|
||||||
|
} while(0)
|
Loading…
Reference in New Issue