bpo-44954: Fix wrong result in float.fromhex corner case (GH-27834)

(cherry picked from commit 60b93d9e4922eeae25052bc15909d1f4152babde)

Co-authored-by: Mark Dickinson <mdickinson@enthought.com>
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--)