From 2c870b305d3a22809cc0ce6d96e7add7bc46f858 Mon Sep 17 00:00:00 2001 From: Mahmoud Al-Qudsi Date: Tue, 25 Oct 2022 13:37:52 -0500 Subject: [PATCH] Add eval recursion overflow regression test This particular variant must be executed as a pexpect test since it relies on the interactive-only `$history` to trigger the recursion. Note that recursion is possible via other means (e.g. reading/writing a file), the usage of history here is just one such example. --- tests/pexpects/eval-stack-overflow.py | 34 +++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 tests/pexpects/eval-stack-overflow.py diff --git a/tests/pexpects/eval-stack-overflow.py b/tests/pexpects/eval-stack-overflow.py new file mode 100644 index 000000000..746da52af --- /dev/null +++ b/tests/pexpects/eval-stack-overflow.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +from pexpect_helper import SpawnedProc +import re +import os +import platform +import sys + +sp = SpawnedProc() +send, sendline, sleep, expect_prompt, expect_re, expect_str = ( + sp.send, + sp.sendline, + sp.sleep, + sp.expect_prompt, + sp.expect_re, + sp.expect_str, +) +expect_prompt() + +sendline("echo cat dog") +expect_prompt("cat dog") + +sendline("eval (string replace dog tiger -- $history[1])") +expect_prompt("cat tiger") + +sendline("eval (string replace dog tiger -- $history[1])") +expect_re("fish: The call stack limit has been exceeded.*" + + "\r\nin command substitution" + + "\r\nfish: Unable to evaluate string substitution" + + re.escape("\r\neval (string replace dog tiger -- $history[1])") + + "\r\n *\^~+\^\w*") +expect_prompt() + +sendline("\x04") # +sys.exit(0)