diff options
author | Mark Dickinson <mdickinson@enthought.com> | 2021-08-20 10:40:11 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-08-20 10:40:11 (GMT) |
commit | 60b93d9e4922eeae25052bc15909d1f4152babde (patch) | |
tree | cc4b4b829ba5a2e8a5a4d8b97b99bea473d8f58c /Objects | |
parent | d26dbba9297adb59bc49a6583c647804ef56fc58 (diff) | |
download | cpython-60b93d9e4922eeae25052bc15909d1f4152babde.zip cpython-60b93d9e4922eeae25052bc15909d1f4152babde.tar.gz cpython-60b93d9e4922eeae25052bc15909d1f4152babde.tar.bz2 |
bpo-44954: Fix wrong result in float.fromhex corner case (GH-27834)
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/floatobject.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/Objects/floatobject.c b/Objects/floatobject.c index 7e78132..92faa7c 100644 --- a/Objects/floatobject.c +++ b/Objects/floatobject.c @@ -1463,8 +1463,8 @@ float_fromhex(PyTypeObject *type, PyObject *string) bits lsb, lsb-2, lsb-3, lsb-4, ... is 1. */ if ((digit & half_eps) != 0) { round_up = 0; - if ((digit & (3*half_eps-1)) != 0 || - (half_eps == 8 && (HEX_DIGIT(key_digit+1) & 1) != 0)) + if ((digit & (3*half_eps-1)) != 0 || (half_eps == 8 && + key_digit+1 < ndigits && (HEX_DIGIT(key_digit+1) & 1) != 0)) round_up = 1; else for (i = key_digit-1; i >= 0; i--) |