summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_builtin.py38
-rw-r--r--Misc/NEWS2
-rw-r--r--Objects/longobject.c2
3 files changed, 37 insertions, 5 deletions
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index b10caf5..4cf5916 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -49,7 +49,7 @@ class BitBucket:
def write(self, line):
pass
-L = [
+test_conv_no_sign = [
('0', 0),
('1', 1),
('9', 9),
@@ -71,6 +71,28 @@ L = [
(chr(0x200), ValueError),
]
+test_conv_sign = [
+ ('0', 0),
+ ('1', 1),
+ ('9', 9),
+ ('10', 10),
+ ('99', 99),
+ ('100', 100),
+ ('314', 314),
+ (' 314', ValueError),
+ ('314 ', 314),
+ (' \t\t 314 \t\t ', ValueError),
+ (repr(sys.maxsize), sys.maxsize),
+ (' 1x', ValueError),
+ (' 1 ', ValueError),
+ (' 1\02 ', ValueError),
+ ('', ValueError),
+ (' ', ValueError),
+ (' \t\t ', ValueError),
+ (str(b'\u0663\u0661\u0664 ','raw-unicode-escape'), 314),
+ (chr(0x200), ValueError),
+]
+
class TestFailingBool:
def __bool__(self):
raise RuntimeError
@@ -641,8 +663,18 @@ class BuiltinTest(unittest.TestCase):
# Different base:
self.assertEqual(int("10",16), 16)
# Test conversion from strings and various anomalies
- for s, v in L:
- for sign in "", "+", "-":
+ # Testing with no sign at front
+ for s, v in test_conv_no_sign:
+ for prefix in "", " ", "\t", " \t\t ":
+ ss = prefix + s
+ vv = v
+ try:
+ self.assertEqual(int(ss), vv)
+ except v:
+ pass
+ # No whitespaces allowed between + or - sign and the number
+ for s, v in test_conv_sign:
+ for sign in "+", "-":
for prefix in "", " ", "\t", " \t\t ":
ss = prefix + sign + s
vv = v
diff --git a/Misc/NEWS b/Misc/NEWS
index c59efa1..cb6288a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,8 @@ What's New in Python 3.0a3?
Core and Builtins
-----------------
+- Issue #1769: Now int("- 1") is not allowed any more.
+
- Object/longobject.c: long(float('nan')) raises an OverflowError instead
of returning 0.
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 4b7eee0..18f158a 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -1685,8 +1685,6 @@ PyLong_FromString(char *str, char **pend, int base)
++str;
sign = -1;
}
- while (*str != '\0' && isspace(Py_CHARMASK(*str)))
- str++;
if (base == 0) {
if (str[0] != '0')
base = 10;