setjmp и longjmp причина отклонения от нормального потока управления
Этот дефект возникает, когда вы используете комбинацию setjmp и longjmp или sigsetjmp и siglongjmp чтобы отклониться от нормального потока управления и выполнить нелокальные переходы в коде.
Использование setjmp и longjmp, или sigsetjmp и siglongjmp имеет следующие риски:
Нелокальные переходы уязвимы для атак, которые используют общие ошибки, такие как переполнение буфера. Злоумышленники могут перенаправить поток управления и потенциально выполнить произвольный код.
Ресурсы, такие как динамически выделенная память и открытые файлы, могут не быть закрыты, что приводит к утечке ресурсов.
Если вы используете setjmp и longjmp в комбинации с обработчиком сигнала может возникнуть неожиданный поток управления. POSIX® не указывает, setjmp сохраняет маску сигнала.
Использование setjmp и longjmp или sigsetjmp и siglongjmp затрудняет понимание и обслуживание вашей программы.
Выполните нелокальные переходы в коде, используя setjmp/longjmp или sigsetjmp/siglongjmp только в контекстах, где такие переходы могут выполняться безопасно. Кроме того, по возможности используйте потоки POSIX.
В C++, чтобы симулировать броски и улавливание исключений, используйте стандартные идиомы, такие как throw выражения и catch операторы.
| Группа: Хорошая практика |
| Язык: C | C++ |
| По умолчанию: Off |
Синтаксис командной строки: SETJMP_LONGJMP_USE |
| Влияние: Низкое |
| ИДЕНТИФИКАТОР CWE: 691 |