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:
Christopher Faulet 2023-07-17 08:35:11 +02:00
parent 46e5876035
commit b982fc2177

View File

@ -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;