mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2024-12-18 01:14:38 +00:00
BUG/MINOR: sample: Fix wrong overflow detection in add/sub conveters
When "add" or "sub" conveters are used, an overflow detection is performed. When 2 negative integers are added (or a positive integer is substracted to a positive one), we take care to not exceed the low limit (LLONG_MIN) and when 2 positive integers are added, we take care to not exceed the high limit (LLONG_MAX). However, because of a missing 'else' statement, if there is no overflow in the first case, we fall back on the second check (the one for positive adds) and LLONG_MAX is returned. It means that most of time, when 2 negative integers are added (or a positive integer is substracted to a negative one), LLONG_MAX is returned. This patch should solve the issue #2216. It must be backported to all stable versions.
This commit is contained in:
parent
46e5876035
commit
b982fc2177
@ -2990,12 +2990,12 @@ static inline long long int arith_add(long long int a, long long int b)
|
|||||||
* +------+----------+----------+
|
* +------+----------+----------+
|
||||||
*/
|
*/
|
||||||
if ((a ^ b) >= 0) {
|
if ((a ^ b) >= 0) {
|
||||||
/* signs are different. */
|
/* signs are same. */
|
||||||
if (a < 0) {
|
if (a < 0) {
|
||||||
if (LLONG_MIN - a > b)
|
if (LLONG_MIN - a > b)
|
||||||
return LLONG_MIN;
|
return LLONG_MIN;
|
||||||
}
|
}
|
||||||
if (LLONG_MAX - a < b)
|
else if (LLONG_MAX - a < b)
|
||||||
return LLONG_MAX;
|
return LLONG_MAX;
|
||||||
}
|
}
|
||||||
return a + b;
|
return a + b;
|
||||||
|
Loading…
Reference in New Issue
Block a user