diff --git a/vm/src/stdlib/sys.rs b/vm/src/stdlib/sys.rs index c05984084..2e3e8d5c8 100644 --- a/vm/src/stdlib/sys.rs +++ b/vm/src/stdlib/sys.rs @@ -479,7 +479,7 @@ mod sys { })?; let recursion_depth = vm.current_recursion_depth(); - if recursion_limit > recursion_depth + 1 { + if recursion_limit > recursion_depth { vm.recursion_limit.set(recursion_limit); Ok(()) } else { diff --git a/vm/src/vm.rs b/vm/src/vm.rs index f2f22552e..124347056 100644 --- a/vm/src/vm.rs +++ b/vm/src/vm.rs @@ -538,8 +538,9 @@ impl VirtualMachine { self.with_frame(frame, |f| f.run(self)) } + // To be called right before raising the recursion depth. fn check_recursive_call(&self, _where: &str) -> PyResult<()> { - if self.recursion_depth.get() > self.recursion_limit.get() { + if self.recursion_depth.get() >= self.recursion_limit.get() { Err(self.new_recursion_error(format!("maximum recursion depth exceeded {}", _where))) } else { Ok(())