CERT правила C++
Описание и список CERT правила стандарта C++ поддержаны в Polyspace®
CERT C++ является набором инструкций для разработчиков программного обеспечения. Эти инструкции используются для безопасного кодирования на языке C++. Они были разработаны после основанного на сообществе процесса разработки. Инструкции отображены на сообществе CERT Wiki.
Используя эти инструкции, можно устранить построения с неопределенным поведением, которое может привести к неожиданным результатам во времени выполнения и представить слабые места безопасности.
Polyspace может проверять ваш код по CERT стандарт C++. Используйте аналитическую опцию Check SEI CERT-C++ (-cert-cpp)
, чтобы активировать подмножества правил.
Результаты Polyspace
развернуть все
01. Объявления и инициализация (DCL)
03. Целые числа (INT)
CERT C++: INT30-C | Гарантируйте, что операции беззнаковых целых чисел не переносятся |
CERT C++: INT31-C | Гарантируйте, что целочисленные преобразования не приводят к потерянным или неправильно истолкованным данным |
CERT C++: INT32-C | Гарантируйте, что операции на целых числах со знаком не приводят к переполнению |
CERT C++: INT33-C | Гарантируйте, что деление и операции остатка не приводят к ошибкам деления на нуль |
CERT C++: INT34-C | Не переключайте выражение отрицательным числом битов или большим, чем или равняйтесь количеству битов, которые существуют в операнде |
CERT C++: INT35-C | Используйте правильную целочисленную точность |
CERT C++: INT36-C | Преобразование указателя на целое число или целое число к указателю |
04. Контейнеры (CTR)
CERT C++: ARR30-C | Не формируйте или используйте за пределы индексы массивов или указатели |
CERT C++: ARR37-C | Не добавляйте или вычитайте целое число к указателю на объект немассивов |
CERT C++: ARR38-C | Гарантируйте, что библиотечные функции не формируют недопустимые указатели |
CERT C++: ARR39-C | Не добавляйте или вычитайте масштабированное целое число к указателю |
CERT C++: CTR50-CPP | Гарантируйте, что контейнерные индексы и итераторы в допустимой области значений |
05. Символы и строки (STR)
CERT C++: STR30-C | Не пытайтесь изменить строковые литералы |
CERT C++: STR31-C | Гарантируйте, что устройство хранения данных для строк имеет достаточный пробел для символьных данных и пустого терминатора строки |
CERT C++: STR32-C | Не передавайте не пустую отключенную последовательность символов библиотечной функции, которая ожидает строку |
CERT C++: STR34-C | Бросьте символы к char без знака прежде, чем преобразовать в большие целочисленные размеры |
CERT C++: STR37-C | Аргументы к обрабатывающим символ функциям должны быть представимыми как char без знака |
CERT C++: STR38-C | Не путайте строки узкого и широкого символа и функции |
CERT C++: STR50-CPP | Гарантируйте, что устройство хранения данных для строк имеет достаточный пробел для символьных данных и пустого терминатора строки |
CERT C++: STR53-CPP | Доступ к элементу проверки диапазона |
06. Управление памятью (MEM)
07. Ввод-вывод (FIO)
CERT C++: FIO30-C | Исключите ввод данных пользователем из строк формата |
CERT C++: FIO32-C | Не выполняйте операции на устройствах, которые только подходят для файлов |
CERT C++: FIO34-C | Различайте символы, считанные из файла и EOF или WEOF |
CERT C++: FIO37-C | Не принимайте, что fgets () или fgetws () возвращает непустую строку, когда успешный |
CERT C++: FIO38-C | Не копируйте объект FILE |
CERT C++: FIO39-C | Не делайте поочередно ввода и вывода от потока без прошедшего сброса или располагающий вызов |
CERT C++: FIO40-C | Сбросьте строки на fgets () или fgetws () отказ |
CERT C++: FIO41-C | Не вызывайте getc (), putc (), getwc (), или putwc () с потоковым аргументом, который имеет побочные эффекты |
CERT C++: FIO42-C | Закройте файлы, когда они больше не будут необходимы |
CERT C++: FIO44-C | Только используйте значения для fsetpos (), которые возвращены в fgetpos () |
CERT C++: FIO45-C | Избегайте условий состязания TOCTOU при доступе к файлам |
CERT C++: FIO46-C | Не получайте доступ к закрытому файлу |
CERT C++: FIO47-C | Используйте строки допустимого формата |
CERT C++: FIO50-CPP | Не делайте поочередно ввода и вывода от потока файла без вызова расположения вмешательства |
CERT C++: FIO51-CPP | Закройте файлы, когда они больше не будут необходимы |
08. Исключения и обработка ошибок (ERR)
CERT C++: ERR30-C | Обнулите errno прежде, чем вызвать библиотечную функцию, которая, как известно, установила errno и проверять errno только после того, как функция возвратит отказ указания значения |
CERT C++: ERR32-C | Не полагайтесь на неопределенные значения errno |
CERT C++: ERR33-C | Обнаружьте и обработайте стандартные ошибки библиотеки |
CERT C++: ERR34-C | Обнаружьте ошибки при преобразовании строки в номер |
CERT C++: ERR50-CPP | Резко не отключайте программу |
CERT C++: ERR51-CPP | Обработайте все исключения |
CERT C++: ERR52-CPP | Не используйте setjmp () или longjmp () |
CERT C++: ERR53-CPP | Не ссылайтесь на базовые классы или элементы данных класса в конструкторе или обработчике функционального блока попытки деструктора |
CERT C++: ERR54-CPP | Обработчики выгоды должны заказать свои типы параметра от наиболее выведенного до наименее выведенного |
09. Объектно-ориентированное программирование (OOP)
49. Разное (MSC) - ENV30-C к FLP37-C
CERT C++: ENV30-C | Не изменяйте объект, на который ссылается возвращаемое значение определенных функций |
CERT C++: ENV31-C | Не полагайтесь на указатель среды после операции, которая может делать недействительным его |
CERT C++: ENV32-C | Все выходные обработчики должны обычно возвращаться |
CERT C++: ENV33-C | Не вызывайте систему () |
CERT C++: ENV34-C | Не храните указатели, возвращенные определенными функциями |
CERT C++: FLP30-C | Не используйте переменные с плавающей точкой в качестве счетчиков цикла |
CERT C++: FLP32-C | Предотвратите или обнаружьте область и ошибки области значений в математических функциях |
CERT C++: FLP34-C | Гарантируйте, что преобразования с плавающей точкой в области значений нового типа |
CERT C++: FLP36-C | Сохраните точность при преобразовании интегральных значений в тип с плавающей точкой |
CERT C++: FLP37-C | Не используйте объектные представления, чтобы сравнить значения с плавающей точкой |
49. Разное (MSC) - MSC30-C к SIG35-C