Fix crash on numeric comparison again (ref #2825)
The decNumber library subtracts the exponents of two numbers, we make sure to limit the number of digits not to make it overflows. Since the maximum adjusted exponent is `emax` and the minimum is `emin - digits + 1`, we follow `emax - (emin - digits + 1) <= INT32_MAX`.
This commit is contained in:
1 parent
f86566b263
commit
3fa10e8cc1
2 files changed
+18
-2
No files matched your search
@@ -528,7 +528,7 @@ static decContext* tsd_dec_ctx_get(pthread_key_t *key) {
|
||||
if (key == &dec_ctx_key)
|
||||
{
|
||||
decContextDefault(ctx, DEC_INIT_BASE);
|
||||
ctx->digits = DEC_MAX_DIGITS - 1;
|
||||
ctx->digits = INT32_MAX - (ctx->emax - ctx->emin - 1);
|
||||
ctx->traps = 0; /*no errors*/
|
||||
}
|
||||
else if (key == &dec_ctx_dbl_key)
|
||||
|
||||
+17
-1
@@ -556,8 +556,24 @@ null
|
||||
null
|
||||
1e+17
|
||||
|
||||
5E500000000>5E-5000000000
|
||||
9E999999999, 9999999999E999999990, 1E-999999999, 0.000000001E-999999990
|
||||
null
|
||||
9E+999999999
|
||||
9.999999999E+999999999
|
||||
1E-999999999
|
||||
1E-999999999
|
||||
|
||||
5E500000000 > 5E-5000000000, 10000E500000000 > 10000E-5000000000
|
||||
null
|
||||
true
|
||||
true
|
||||
|
||||
# #2825
|
||||
(1e999999999, 10e999999999) > (1e-1147483648, 0.1e-1147483648)
|
||||
null
|
||||
true
|
||||
true
|
||||
true
|
||||
true
|
||||
|
||||
25 % 7
|
||||
|
||||
Reference in new issue
Block a user