Skip to content

Commit

Permalink
bpo-37976: Prevent shadowing of TypeError in zip() (pythonGH-15592)
Browse files Browse the repository at this point in the history
  • Loading branch information
sir-sigurd authored and rhettinger committed Aug 30, 2019
1 parent 496058f commit 6a650aa
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 8 deletions.
12 changes: 12 additions & 0 deletions Lib/test/test_builtin.py
Original file line number Diff line number Diff line change
Expand Up @@ -1477,6 +1477,18 @@ def test_zip_pickle(self):
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
Expand Down
12 changes: 12 additions & 0 deletions Lib/test/test_itertools.py
Original file line number Diff line number Diff line change
Expand Up @@ -971,6 +971,18 @@ def test_zip_longest_pickling(self):
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:
Expand Down
4 changes: 0 additions & 4 deletions Modules/itertoolsmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
4 changes: 0 additions & 4 deletions Python/bltinmodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down

0 comments on commit 6a650aa

Please sign in to comment.