Skip to content

Commit ee8a0f5

Browse files
Merge pull request #438 from Distributive-Network/philippe/fix-435
Detect exception in iterator next call and StopIteration
2 parents 2cf0918 + 9c9ecf9 commit ee8a0f5

File tree

2 files changed

+19
-0
lines changed

2 files changed

+19
-0
lines changed

src/JSObjectProxy.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,9 @@ PyObject *JSObjectProxyMethodDefinitions::JSObjectProxy_iter_next(JSObjectProxy
320320

321321
PyObject *retVal = JSFunctionProxyMethodDefinitions::JSFunctionProxy_call(nextFunction, PyTuple_New(0), NULL);
322322
Py_DECREF(nextFunction);
323+
if (retVal == NULL) {
324+
return NULL;
325+
}
323326

324327
// check if end of iteration
325328
key = PyUnicode_FromString("done");

tests/python/test_dict_methods.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -555,3 +555,19 @@ def test_next_operator():
555555
assert (True)
556556
fourth = next(myit, 'default')
557557
assert fourth == 'default'
558+
559+
560+
def test_next_operator_non_iterator():
561+
make_js_generator = pm.eval("""
562+
function* sliceGenerator(pyIter)
563+
{
564+
yield python.eval('lambda x: next(x)')(pyIter);
565+
}
566+
sliceGenerator;
567+
""")
568+
569+
try:
570+
next(make_js_generator(range(0,5)))
571+
assert (False)
572+
except pm.SpiderMonkeyError as e:
573+
assert "'range' object is not an iterator" in str(e)

0 commit comments

Comments
 (0)