summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Smith <eric@trueblade.com>2008-07-19 00:24:05 (GMT)
committerEric Smith <eric@trueblade.com>2008-07-19 00:24:05 (GMT)
commitf032a002711083610bf732bdfc5034e3af739ebe (patch)
treec8f0f0d4ad8a1873a410f7a268189e28aa0e4a05
parent1e8fba729e218bc4b2e1ed3104f8cdbd88fdb21a (diff)
downloadcpython-f032a002711083610bf732bdfc5034e3af739ebe.zip
cpython-f032a002711083610bf732bdfc5034e3af739ebe.tar.gz
cpython-f032a002711083610bf732bdfc5034e3af739ebe.tar.bz2
Fix issue 3411: default float format spec fails on negative numbers.
-rw-r--r--Lib/test/test_types.py6
-rw-r--r--Python/pystrtod.c4
2 files changed, 10 insertions, 0 deletions
diff --git a/Lib/test/test_types.py b/Lib/test/test_types.py
index 03f2ff8..10ad634 100644
--- a/Lib/test/test_types.py
+++ b/Lib/test/test_types.py
@@ -570,6 +570,12 @@ class TypesTests(unittest.TestCase):
test(0.01, '', '0.01')
test(0.01, 'g', '0.01')
+ # test for issue 3411
+ test(1.23, '1', '1.23')
+ test(-1.23, '1', '-1.23')
+ test(1.23, '1g', '1.23')
+ test(-1.23, '1g', '-1.23')
+
test( 1.0, ' g', ' 1')
test(-1.0, ' g', '-1')
test( 1.0, '+g', '+1')
diff --git a/Python/pystrtod.c b/Python/pystrtod.c
index 01c1c42..302e012 100644
--- a/Python/pystrtod.c
+++ b/Python/pystrtod.c
@@ -302,6 +302,10 @@ ensure_decimal_point(char* buffer, size_t buf_size)
/* search for the first non-digit character */
char *p = buffer;
+ if (*p == '-' || *p == '+')
+ /* Skip leading sign, if present. I think this could only
+ ever be '-', but it can't hurt to check for both. */
+ ++p;
while (*p && isdigit(Py_CHARMASK(*p)))
++p;