summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2016-09-22 16:41:20 (GMT)
committerSerhiy Storchaka <storchaka@gmail.com>2016-09-22 16:41:20 (GMT)
commit63dc548109c4f5e17280382831b93fb8e9da9207 (patch)
tree84948c6fe6dbb4db020fed4458b5aef220b42adb
parent5ed548715a2115ec73fce92074ac97ed832d2e19 (diff)
downloadcpython-63dc548109c4f5e17280382831b93fb8e9da9207.zip
cpython-63dc548109c4f5e17280382831b93fb8e9da9207.tar.gz
cpython-63dc548109c4f5e17280382831b93fb8e9da9207.tar.bz2
Issue #28086: Single var-positional argument of tuple subtype was passed
unscathed to the C-defined function. Now it is converted to exact tuple.
-rw-r--r--Lib/test/test_getargs2.py2
-rw-r--r--Misc/NEWS3
-rw-r--r--Python/ceval.c4
3 files changed, 6 insertions, 3 deletions
diff --git a/Lib/test/test_getargs2.py b/Lib/test/test_getargs2.py
index 5750bfa..8a194aa 100644
--- a/Lib/test/test_getargs2.py
+++ b/Lib/test/test_getargs2.py
@@ -471,7 +471,7 @@ class Tuple_TestCase(unittest.TestCase):
ret = get_args(*TupleSubclass([1, 2]))
self.assertEqual(ret, (1, 2))
- self.assertIsInstance(ret, tuple)
+ self.assertIs(type(ret), tuple)
ret = get_args()
self.assertIn(ret, ((), None))
diff --git a/Misc/NEWS b/Misc/NEWS
index aca0ba0..2f531a8 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -10,6 +10,9 @@ What's New in Python 3.6.0 beta 2
Core and Builtins
-----------------
+- Issue #28086: Single var-positional argument of tuple subtype was passed
+ unscathed to the C-defined function. Now it is converted to exact tuple.
+
- Issue #28214: Now __set_name__ is looked up on the class instead of the
instance.
diff --git a/Python/ceval.c b/Python/ceval.c
index ff36d36..39cf330 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -3310,7 +3310,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
}
callargs = POP();
func = TOP();
- if (!PyTuple_Check(callargs)) {
+ if (!PyTuple_CheckExact(callargs)) {
if (Py_TYPE(callargs)->tp_iter == NULL &&
!PySequence_Check(callargs)) {
PyErr_Format(PyExc_TypeError,
@@ -3327,7 +3327,7 @@ _PyEval_EvalFrameDefault(PyFrameObject *f, int throwflag)
goto error;
}
}
- assert(PyTuple_Check(callargs));
+ assert(PyTuple_CheckExact(callargs));
result = do_call_core(func, callargs, kwargs);
Py_DECREF(func);