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 |
| Удар: низко |
| ID CWE: 691 |