summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2017-12-07 23:06:55 (GMT)
committerGitHub <noreply@github.com>2017-12-07 23:06:55 (GMT)
commitdd431b32f4a599fff9c9cddfe9d48cc66b347481 (patch)
treeb1cd5d6fa513296840f8d6883f6b302a98c1245d
parenta0374dd34aa25f0895195d388b5ceff43b121b00 (diff)
downloadcpython-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.c5
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");