diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2017-12-07 23:06:55 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-12-07 23:06:55 (GMT) |
commit | dd431b32f4a599fff9c9cddfe9d48cc66b347481 (patch) | |
tree | b1cd5d6fa513296840f8d6883f6b302a98c1245d | |
parent | a0374dd34aa25f0895195d388b5ceff43b121b00 (diff) | |
download | cpython-dd431b32f4a599fff9c9cddfe9d48cc66b347481.zip cpython-dd431b32f4a599fff9c9cddfe9d48cc66b347481.tar.gz cpython-dd431b32f4a599fff9c9cddfe9d48cc66b347481.tar.bz2 |
PyLong_FromString(): fix Coverity CID 1424951 (#4738)
Explicitly cast digits (Py_ssize_t) to double to fix the following
false-alarm warning from Coverity:
"fsize_z = digits * log_base_BASE[base] + 1;"
CID 1424951: Incorrect expression (UNINTENDED_INTEGER_DIVISION)
Dividing integer expressions "9223372036854775783UL" and "4UL", and
then converting the integer quotient to type "double". Any remainder,
or fractional part of the quotient, is ignored.
-rw-r--r-- | Objects/longobject.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/Objects/longobject.c b/Objects/longobject.c index a7f4968..269d6cd 100644 --- a/Objects/longobject.c +++ b/Objects/longobject.c @@ -2267,7 +2267,6 @@ just 1 digit at the start, so that the copying code was exercised for every digit beyond the first. ***/ twodigits c; /* current input character */ - double fsize_z; Py_ssize_t size_z; Py_ssize_t digits = 0; int i; @@ -2331,8 +2330,8 @@ digit beyond the first. * need to initialize z->ob_digit -- no slot is read up before * being stored into. */ - fsize_z = digits * log_base_BASE[base] + 1; - if (fsize_z > MAX_LONG_DIGITS) { + double fsize_z = (double)digits * log_base_BASE[base] + 1.0; + if (fsize_z > (double)MAX_LONG_DIGITS) { /* The same exception as in _PyLong_New(). */ PyErr_SetString(PyExc_OverflowError, "too many digits in integer"); |