From 773305022f2124be6ec5be8a0ddffb07c66caacb Mon Sep 17 00:00:00 2001 From: Aphek Date: Fri, 15 Oct 2021 02:31:07 -0300 Subject: [PATCH] Guarantee recursion_depth is never higher than recursion_limit --- vm/src/stdlib/sys.rs | 2 +- vm/src/vm.rs | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) 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(())