CERT C++ является набором инструкций для разработчиков программного обеспечения. Эти инструкции используются для безопасного кодирования на языке C++. Они были разработаны после основанного на сообществе процесса разработки. Инструкции отображены на сообществе CERT Wiki.
Используя эти инструкции, можно устранить построения с неопределенным поведением, которое может привести к неожиданным результатам во времени выполнения и отсоединить слабые места безопасности.
С 10 июля 2019, CERT веб-сайт C++, при непрерывной разработке, перечисляет 163 правила включая 80 CERT C, постановляет, что также применяются на C++.
Polyspace может проверять ваш код по CERT стандарт C++. Используйте Check SEI CERT-C++ (-cert-cpp)
аналитическая опция, чтобы активировать подмножества правил.
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++: DCL58-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++: MEM54-CPP | Предоставьте размещению, новому правильно выровненные указатели на достаточную емкость памяти |
CERT C++: MEM55-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++: ERR55-CPP | Соблюдайте технические требования исключения |
CERT C++: ERR58-CPP | Обработайте все исключения, выданные, прежде чем основной () начнет выполняться |
CERT C++: ERR61-CPP | Отловите исключения lvalue ссылкой |
CERT C++: OOP51-CPP | Не нарезайте производные объекты |
CERT C++: OOP52-CPP | Не удаляйте полиморфный объект без виртуального деструктора |
CERT C++: OOP53-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++: MSC41-C | Никогда трудная кодозависимая информация |
CERT C++: MSC50-CPP | Не используйте станд.:: rand () для генерации псевдослучайных чисел |
CERT C++: MSC51-CPP | Гарантируйте, что ваш генератор случайных чисел правильно отобран |
CERT C++: MSC52-CPP | Возвращающие значение функции должны возвратить значение от всех выходных путей |
CERT C++: MSC53-CPP | Не возвращайтесь из функции, объявил [[noreturn]] |
CERT C++: PRE30-C | Не создавайте универсальное имя персонажа посредством конкатенации |
CERT C++: PRE31-C | Избегайте побочных эффектов в аргументах к небезопасным макросам |
CERT C++: PRE32-C | Не используйте директивы препроцессору в вызовах подобных функции макросов |
CERT C++: SIG31-C | Не получайте доступ к общим объектам в обработчиках сигнала |
CERT C++: SIG34-C | Не делайте позывного () из прерываемых обработчиков сигнала |
CERT C++: SIG35-C | Не возвращайтесь из вычислительного обработчика сигнала исключения |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.