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 |