Обновить

Комментарии 4

А проверяется ли потенциальная глубокая рекурсия, зависящая от внешних данных? В JSON парсерах, реализованных через рекурсивный спуск, возможно переполнение стека, если злоумышленник подсунет JSON с очень большой глубиной вложенности объектов.

К сожалению, при анализе рекурсии неизбежно возникает проблема останова, которая не решается за полиноминальное время. Возможно, если смотреть определенные паттерны, то получится покрыть некоторое количество частных случаев, но гарантировать нахождение ошибки не получится.

Анализировать рекурсию не надо. Детектировать рекурсивные функции можно анализом графа вызовов (за исключением случаев с вызовами через указатель, что случается редко). А когда известно, что такая-то функция рекурсивная, можно просто выдавать предупреждение, если ей передаются непроверенные данные.

Я вас понимаю. Я привел аргумент с рекрсивными функциями потому, что парсеры, реализованые методом рекурсивного спуска в общем случае всегда будут делать эти рекурсивные вызовы. И, кроме того, как раз все данные, которые парсятся, приходят извне. При такой реализации (без нализа именно бесконечной рекурсии), велика вероятность насыпать ложными срабатываниями.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
pvs-studio.ru
Дата регистрации
Дата основания
2008
Численность
51–100 человек
Местоположение
Россия
Представитель
Андрей Карпов