Я только что заметил, что используемый мной bash
(4.2.25 (1)) не защищен от бесконечной рекурсии функций. В таком случае происходит Segfault (и процесс bash
завершается). Чтобы проверить это на вашем bash
, просто наберите:
$ bash
$ f() { f; }
$ f
(Запуск сначала подоболочки (первая строка) дает нам кандидата, с которым мы можем поэкспериментировать, не подвергая опасности оболочку терминала; без первой строки окно вашего терминала, вероятно, закроется так быстро, что вы не увидите ничего интересного.)
Я понимаю причину этого явления, я думаю; это, вероятно, переполнение стека, которое приводит к тому, что bash
пытается записать в области памяти, которые не назначены его процессу.
Что меня интересует, так это две вещи:
Разве в
bash
не должно быть проверки, чтобы защитить его от таких ситуаций? Более приличное сообщение об ошибке типа "Переполнение стека в функции оболочки", безусловно, будет лучше, чем простое бесполезное Segfault.Может ли это быть проблемой безопасности? Перед тем, как этот метод записывает в части памяти, которые не назначены процессу (что приводит к Segfault), он может перезаписать другие части, которые не предназначены для использования в стеке
bash
.