bash 因无限递归导致段错误

bash 因无限递归导致段错误

我刚刚注意到,bash我正在使用的 (4.2.25(1)) 没有针对无限函数递归的保护。在这种情况下,会发生段错误(并且进程bash终止)。要在您的 上检查这一点bash,只需输入:

$ bash
$ f() { f; }
$ f

(首先启动一个子 shell(第一行)为我们提供了一个候选对象,我们可以对其进行实验而不会危及终端的 shell;如果没有第一行,您的终端窗口可能会很快关闭,以至于您无法看到任何有趣的东西。)

我认为我理解这种现象的原因;它可能是堆栈溢出,导致bash尝试写入未分配给其进程的内存区域。

我想知道的是两件事:

  • 难道不应该进行检查来bash防止这种情况发生吗?像“shell 函数中的 Stack Overflow”这样更体面的错误消息肯定比简单无用的 Segfault 要好。

  • 这可能是一个安全问题吗?在此方法将未分配给进程的内存部分写入内存(导致段错误)之前,它可能会覆盖不用于bash内部堆栈的其他部分。

相关内容