CERT правила C++

Описание и список CERT правила стандарта C++ поддержаны в Polyspace®

CERT C++ является набором инструкций для разработчиков программного обеспечения. Эти инструкции используются в безопасном кодировании на языке C++. Они были разработаны после основанного на сообществе процесса разработки. Инструкции отображены на сообществе CERT Wiki.

Используя эти инструкции, можно устранить построения с неопределенным поведением, которое может привести к неожиданным результатам во времени выполнения и отсоединить слабые места безопасности.

С 10 июля 2019, CERT веб-сайт C++, при непрерывной разработке, перечисляет 163 правила включая 80 CERT C, постановляет, что также применяются на C++.

Polyspace может проверять ваш код по CERT стандарт C++. Используйте Check SEI CERT-C++ (-cert-cpp) аналитическая опция, чтобы активировать подмножества правил.

Результаты Polyspace

развернуть все

CERT C++: DCL30-CОбъявите объекты с соответствующими продолжительностями хранения
CERT C++: DCL39-CИзбегайте утечки информации в дополнении структуры
CERT C++: DCL40-CНе создавайте несовместимые объявления той же функции или объекта
CERT C++: DCL50-CPPНе задавайте C-стиль variadic функция
CERT C++: DCL51-CPPНе объявляйте или задавайте зарезервированный идентификатор
CERT C++: DCL52-CPPНикогда не квалифицируйте ссылочный тип с const или энергозависимый
CERT C++: DCL53-CPPНе пишите синтаксически неоднозначные объявления
CERT C++: DCL54-CPPВыделение перегрузки и освобождение функционируют как пару в том же осциллографе
CERT C++: DCL57-CPPНе позволяйте исключениям сбежать из деструкторов или функций освобождения
CERT C++: DCL59-CPPНе задавайте пространство имен без имени в заголовочном файле
CERT C++: DCL60-CPPСоблюдите правило с одним определением
CERT C++: EXP34-CНе разыменовывайте нулевых указателей
CERT C++: EXP35-CНе изменяйте объекты с временным временем жизни
CERT C++: EXP36-CНе бросайте указатели в более строго выровненные типы указателей
CERT C++: EXP37-CВызовите функции с правильным номером и типом аргументов
CERT C++: EXP39-CНе получайте доступ к переменной через указатель несовместимого типа
CERT C++: EXP42-CНе сравнивайте дополнительные данные
CERT C++: EXP45-CНе выполняйте присвоения в операторах выбора
CERT C++: EXP46-CНе используйте побитовый оператор с подобным булевской переменной операндом
CERT C++: EXP47-CНе вызывайте va_arg с аргументом неправильного типа
CERT C++: EXP50-CPPНе зависьте от порядка оценки для побочных эффектов
CERT C++: EXP52-CPPНе используйте побочные эффекты в неоцененных операндах
CERT C++: EXP53-CPPНе читайте неинициализированную память
CERT C++: EXP54-CPPНе получайте доступ к объекту за пределами его времени жизни
CERT C++: EXP55-CPPНе получайте доступ к квалифицированному к cv объекту через дисквалифицированный cv тип
CERT C++: EXP57-CPPНе бросайте или удаляйте указатели на неполные классы
CERT C++: EXP58-CPPПередайте объект правильного типа к va_start
CERT C++: EXP59-CPPИспользуйте offsetof () на допустимых типах и участниках
CERT C++: EXP61-CPPОбъект lambda не должен переживать ни один из полученных объектов своей ссылки
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Преобразование указателя на целое число или целое число к указателю
CERT C++: ARR30-CНе формируйте или используйте за пределы индексы массивов или указатели
CERT C++: ARR37-CНе добавляйте или вычитайте целое число к указателю на объект немассивов
CERT C++: ARR38-CГарантируйте, что библиотечные функции не формируют недопустимые указатели
CERT C++: ARR39-CНе добавляйте или вычитайте масштабированное целое число к указателю
CERT C++: CTR50-CPPГарантируйте, что контейнерные индексы и итераторы в допустимой области значений
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Доступ к элементу проверки диапазона
CERT C++: MEM30-CНе получайте доступ освобожденный память
CERT C++: MEM31-CСвободная динамически выделенная память, когда больше не необходимый
CERT C++: MEM34-CТолько свободная память, выделенная динамически
CERT C++: MEM35-CВыделите достаточную память для объекта
CERT C++: MEM36-CНе изменяйте выравнивание объектов путем вызова перевыделения ()
CERT C++: MEM50-CPPНе получайте доступ освобожденный память
CERT C++: MEM51-CPPПравильно освободите динамически выделенные ресурсы
CERT C++: MEM52-CPPОбнаружьте и обработайте ошибки распределения памяти
CERT C++: MEM57-CPPИзбегайте использования оператора по умолчанию, нового для сверхвыровненных типов
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Закройте файлы, когда они больше не будут необходимы
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Обработчики выгоды должны заказать свои типы параметра от наиболее выведенного до наименее выведенного
CERT C++: ERR61-CPPОтловите исключения lvalue ссылкой
CERT C++: OOP51-CPPНе нарезайте производные объекты
CERT C++: OOP52-CPPНе удаляйте полиморфный объект без виртуального деструктора
CERT C++: OOP54-CPPКорректно обработайте присвоение самокопии
CERT C++: OOP57-CPPПредпочтите специальные функции членства и перегруженные операторы к Стандартным Библиотечным функциям C
CERT C++: OOP58-CPPОперации копии не должны видоизменять исходный объект
CERT C++: CON33-CИзбегайте условий состязания при использовании библиотечных функций
CERT C++: CON37-CНе делайте позывного () в многопоточной программе
CERT C++: CON40-CНе обращайтесь к атомарной переменной дважды в выражении
CERT C++: CON41-CПеренесите функции, которые могут перестать работать побочно в цикле
CERT C++: CON43-CНе позволяйте гонки данных в многопоточном коде
CERT C++: CON50-CPPНе уничтожайте взаимное исключение, в то время как оно заблокировано
CERT C++: CON52-CPPПредотвратите гонки данных при доступе к битовым полям от нескольких потоков
CERT C++: CON53-CPPИзбегайте мертвой блокировки путем привязки предопределенного порядка
CERT C++: CON54-CPPПеренесите функции, которые могут побочно проснуться в цикле
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Не используйте объектные представления, чтобы сравнить значения с плавающей точкой
CERT C++: MSC30-CНе используйте rand () функция для генерации псевдослучайных чисел
CERT C++: MSC32-CПравильно отберите генераторы псевдослучайного числа
CERT C++: MSC33-CНе передавайте недопустимые данные asctime () функция
CERT C++: MSC37-CУбедитесь, что управление никогда не достигает конца непустой функции
CERT C++: MSC38-CНе обрабатывайте предопределенный идентификатор как объект, если это может только быть реализовано как макрос
CERT C++: MSC39-CНе вызывайте va_arg () на va_list, который имеет неопределенное значение
CERT C++: MSC40-CНе нарушайте ограничения
CERT C++: MSC50-CPPНе используйте станд.:: rand () для генерации псевдослучайных чисел
CERT C++: MSC51-CPPГарантируйте, что ваш генератор случайных чисел правильно отобран
CERT C++: MSC52-CPPВозвращающие значение функции должны возвратить значение от всех выходных путей
CERT C++: PRE30-CНе создавайте универсальное имя персонажа посредством конкатенации
CERT C++: PRE31-CИзбегайте побочных эффектов в аргументах к небезопасным макросам
CERT C++: PRE32-CНе используйте директивы препроцессору в вызовах подобных функции макросов
CERT C++: SIG31-CНе получайте доступ к общим объектам в обработчиках сигнала
CERT C++: SIG34-CНе делайте позывного () из прерываемых обработчиков сигнала
CERT C++: SIG35-CНе возвращайтесь из вычислительного обработчика сигнала исключения