From e24ea4912f0a596119699859a17e8a87c6de703a Mon Sep 17 00:00:00 2001 From: snowapril Date: Fri, 1 Oct 2021 12:25:12 +0900 Subject: [PATCH] add `PyIter_Check` before using `iternext` As [cpython 3.8 implementation](https://github.com/python/cpython/blob/main/Python/bltinmodule.c#L1448), add `PyIter_Check` and its error message. Signed-off-by: snowapril --- vm/src/stdlib/builtins.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/vm/src/stdlib/builtins.rs b/vm/src/stdlib/builtins.rs index 8edfea618..ab4c6e591 100644 --- a/vm/src/stdlib/builtins.rs +++ b/vm/src/stdlib/builtins.rs @@ -513,6 +513,13 @@ mod builtins { default_value: OptionalArg, vm: &VirtualMachine, ) -> PyResult { + if !PyIter::check(&iterator) { + return Err(vm.new_type_error(format!( + "{} object is not an iterator", + iterator.class().name() + ))); + } + PyIter::new(iterator).next(vm).or_else(|err| { if err.isinstance(&vm.ctx.exceptions.stop_iteration) { default_value.ok_or(err)