Index: Objects/longobject.c =================================================================== --- Objects/longobject.c (revisión: 60076) +++ Objects/longobject.c (copia de trabajo) @@ -1685,8 +1685,6 @@ ++str; sign = -1; } - while (*str != '\0' && isspace(Py_CHARMASK(*str))) - str++; if (base == 0) { if (str[0] != '0') base = 10; Index: Misc/NEWS =================================================================== --- Misc/NEWS (revisión: 60076) +++ Misc/NEWS (copia de trabajo) @@ -12,6 +12,8 @@ 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. Index: Lib/test/test_builtin.py =================================================================== --- Lib/test/test_builtin.py (revisión: 60076) +++ Lib/test/test_builtin.py (copia de trabajo) @@ -49,7 +49,7 @@ def write(self, line): pass -L = [ +test_conv_no_sign = [ ('0', 0), ('1', 1), ('9', 9), @@ -71,6 +71,28 @@ (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 @@ # 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