dtoa.c fix from upstream that fixes incorrectly rounded results for certain subnormals that are also halfway cases.
diff --git a/Python/dtoa.c b/Python/dtoa.c
index 6a93aef..4b2c6c3 100644
--- a/Python/dtoa.c
+++ b/Python/dtoa.c
@@ -2084,9 +2084,9 @@
             if (!odd)
                 break;
             if (dsign)
-                dval(&rv) += ulp(&rv);
+                dval(&rv) += sulp(&rv, &bc);
             else {
-                dval(&rv) -= ulp(&rv);
+                dval(&rv) -= sulp(&rv, &bc);
                 if (!dval(&rv)) {
                     if (bc.nd >nd)
                         break;