2

Я только что заметил, что используемый мной bash (4.2.25 (1)) не защищен от бесконечной рекурсии функций. В таком случае происходит Segfault (и процесс bash завершается). Чтобы проверить это на вашем bash , просто наберите:

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

(Запуск сначала подоболочки (первая строка) дает нам кандидата, с которым мы можем поэкспериментировать, не подвергая опасности оболочку терминала; без первой строки окно вашего терминала, вероятно, закроется так быстро, что вы не увидите ничего интересного.)

Я понимаю причину этого явления, я думаю; это, вероятно, переполнение стека, которое приводит к тому, что bash пытается записать в области памяти, которые не назначены его процессу.

Что меня интересует, так это две вещи:

  • Разве в bash не должно быть проверки, чтобы защитить его от таких ситуаций? Более приличное сообщение об ошибке типа "Переполнение стека в функции оболочки", безусловно, будет лучше, чем простое бесполезное Segfault.

  • Может ли это быть проблемой безопасности? Перед тем, как этот метод записывает в части памяти, которые не назначены процессу (что приводит к Segfault), он может перезаписать другие части, которые не предназначены для использования в стеке bash .

0