summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_int.py14
-rw-r--r--Misc/NEWS3
-rw-r--r--Objects/intobject.c8
-rw-r--r--Objects/longobject.c8
4 files changed, 19 insertions, 14 deletions
diff --git a/Lib/test/test_int.py b/Lib/test/test_int.py
index b3b12e6..365f9a2 100644
--- a/Lib/test/test_int.py
+++ b/Lib/test/test_int.py
@@ -60,6 +60,8 @@ class IntLongCommonTests(object):
self.assertEqual(self.ntype(x=1.2), 1)
self.assertEqual(self.ntype('100', base=2), 4)
self.assertEqual(self.ntype(x='100', base=2), 4)
+ self.assertRaises(TypeError, self.ntype, base=10)
+ self.assertRaises(TypeError, self.ntype, base=0)
class IntTestCases(IntLongCommonTests, unittest.TestCase):
@@ -365,18 +367,6 @@ class IntTestCases(IntLongCommonTests, unittest.TestCase):
def test_error_on_string_base(self):
self.assertRaises(TypeError, int, 100, base='foo')
- # Include the following because in contrast CPython raises no error
- # for bad integer bases when x is not given.
- self.assertRaises(TypeError, int, base='foo')
-
- # For example, PyPy 1.9.0 raised TypeError for these cases because it
- # expects x to be a string if base is given.
- @test_support.cpython_only
- def test_int_base_without_x_returns_0(self):
- self.assertEqual(int(base=6), 0)
- # Even invalid bases don't raise an exception.
- self.assertEqual(int(base=1), 0)
- self.assertEqual(int(base=1000), 0)
@test_support.cpython_only
def test_small_ints(self):
diff --git a/Misc/NEWS b/Misc/NEWS
index 38413bd..b718641 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -9,6 +9,9 @@ What's New in Python 2.7.4
Core and Builtins
-----------------
+- Issue #16761: Calling ``int()`` and ``long()`` with *base* argument only
+ now raises TypeError.
+
- Issue #16759: Support the full DWORD (unsigned long) range in Reg2Py
when retreiving a REG_DWORD value. This corrects functions like
winreg.QueryValueEx that may have been returning truncated values.
diff --git a/Objects/intobject.c b/Objects/intobject.c
index 74955ad..1ae8006 100644
--- a/Objects/intobject.c
+++ b/Objects/intobject.c
@@ -1059,8 +1059,14 @@ int_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
&x, &base))
return NULL;
- if (x == NULL)
+ if (x == NULL) {
+ if (base != -909) {
+ PyErr_SetString(PyExc_TypeError,
+ "int() missing string argument");
+ return NULL;
+ }
return PyInt_FromLong(0L);
+ }
if (base == -909)
return PyNumber_Int(x);
if (PyString_Check(x)) {
diff --git a/Objects/longobject.c b/Objects/longobject.c
index 9296ad4..5a6338f 100644
--- a/Objects/longobject.c
+++ b/Objects/longobject.c
@@ -3987,8 +3987,14 @@ long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
&x, &base))
return NULL;
- if (x == NULL)
+ if (x == NULL) {
+ if (base != -909) {
+ PyErr_SetString(PyExc_TypeError,
+ "long() missing string argument");
+ return NULL;
+ }
return PyLong_FromLong(0L);
+ }
if (base == -909)
return PyNumber_Long(x);
else if (PyString_Check(x)) {