diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2017-09-09 04:53:04 (GMT) |
---|---|---|
committer | Mariatta <Mariatta@users.noreply.github.com> | 2017-09-09 04:53:04 (GMT) |
commit | a4baf1c543bca261c27e98ba296e42665f3cb872 (patch) | |
tree | 954fbc81fb080d4234f2fcee258803346a43d180 /Python/pytime.c | |
parent | 3892799668dbf2b123a52780fd1d78f8880fdeb7 (diff) | |
download | cpython-a4baf1c543bca261c27e98ba296e42665f3cb872.zip cpython-a4baf1c543bca261c27e98ba296e42665f3cb872.tar.gz cpython-a4baf1c543bca261c27e98ba296e42665f3cb872.tar.bz2 |
[3.6] bpo-26669: Fix nan arg value error in pytime.c (GH-3085) (GH-3467)
* Modify NaN check function and error message
* Fix pytime.c when arg is nan
* fix whitespace
(cherry picked from commit 829dacce4fca60fc3c3367980e75e21dfcdbe6be)
Diffstat (limited to 'Python/pytime.c')
-rw-r--r-- | Python/pytime.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/Python/pytime.c b/Python/pytime.c index 387657a..b416eff 100644 --- a/Python/pytime.c +++ b/Python/pytime.c @@ -133,6 +133,11 @@ _PyTime_ObjectToDenominator(PyObject *obj, time_t *sec, long *numerator, if (PyFloat_Check(obj)) { double d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + *numerator = 0; + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } return _PyTime_DoubleToDenominator(d, sec, numerator, denominator, round); } @@ -154,6 +159,11 @@ _PyTime_ObjectToTime_t(PyObject *obj, time_t *sec, _PyTime_round_t round) volatile double d; d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } + d = _PyTime_Round(d, round); (void)modf(d, &intpart); @@ -301,6 +311,10 @@ _PyTime_FromObject(_PyTime_t *t, PyObject *obj, _PyTime_round_t round, if (PyFloat_Check(obj)) { double d; d = PyFloat_AsDouble(obj); + if (Py_IS_NAN(d)) { + PyErr_SetString(PyExc_ValueError, "Invalid value NaN (not a number)"); + return -1; + } return _PyTime_FromFloatObject(t, d, round, unit_to_ns); } else { |