Browse Source

bpo-37976: Prevent shadowing of TypeError in zip() (GH-15592)

pull/15621/head
Sergey Fedoseev 6 years ago
committed by Raymond Hettinger
parent
commit
6a650aaf77
  1. 12
      Lib/test/test_builtin.py
  2. 12
      Lib/test/test_itertools.py
  3. 4
      Modules/itertoolsmodule.c
  4. 4
      Python/bltinmodule.c

12
Lib/test/test_builtin.py

@ -1477,6 +1477,18 @@ class BuiltinTest(unittest.TestCase):
z1 = zip(a, b)
self.check_iter_pickle(z1, t, proto)
def test_zip_bad_iterable(self):
exception = TypeError()
class BadIterable:
def __iter__(self):
raise exception
with self.assertRaises(TypeError) as cm:
zip(BadIterable())
self.assertIs(cm.exception, exception)
def test_format(self):
# Test the basic machinery of the format() builtin. Don't test
# the specifics of the various formatters

12
Lib/test/test_itertools.py

@ -971,6 +971,18 @@ class TestBasicOps(unittest.TestCase):
self.pickletest(proto, zip_longest("abc", "defgh", fillvalue=1))
self.pickletest(proto, zip_longest("", "defgh"))
def test_zip_longest_bad_iterable(self):
exception = TypeError()
class BadIterable:
def __iter__(self):
raise exception
with self.assertRaises(TypeError) as cm:
zip_longest(BadIterable())
self.assertIs(cm.exception, exception)
def test_bug_7244(self):
class Repeater:

4
Modules/itertoolsmodule.c

@ -4442,10 +4442,6 @@ zip_longest_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *item = PyTuple_GET_ITEM(args, i);
PyObject *it = PyObject_GetIter(item);
if (it == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError))
PyErr_Format(PyExc_TypeError,
"zip_longest argument #%zd must support iteration",
i+1);
Py_DECREF(ittuple);
return NULL;
}

4
Python/bltinmodule.c

@ -2548,10 +2548,6 @@ zip_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
PyObject *item = PyTuple_GET_ITEM(args, i);
PyObject *it = PyObject_GetIter(item);
if (it == NULL) {
if (PyErr_ExceptionMatches(PyExc_TypeError))
PyErr_Format(PyExc_TypeError,
"zip argument #%zd must support iteration",
i+1);
Py_DECREF(ittuple);
return NULL;
}

Loading…
Cancel
Save