CERT C является набором инструкций для разработчиков программного обеспечения и используется для безопасного кодирования на языке C. Это было разработано на сообществе CERT Wiki после основанного на сообществе процесса разработки с первым выпуском, выпущенным в 2 008 и вторым выпуском, выпущенным в 2 014.
Инструкции помогают устранить построения с неопределенным поведением, которое может привести к неожиданным результатам во времени выполнения и отсоединить слабые места безопасности.
С 10 июля 2019, CERT C веб-сайт, при непрерывной разработке, перечисляет 121 правило и 187 рекомендаций.
Polyspace может проверять ваш код по CERT C стандарт. Используйте Check SEI CERT-C (-cert-c)
опция анализа, чтобы активировать подмножества правил и рекомендаций.
CERT C: Rule PRE30-C | Не создавайте универсальное имя персонажа посредством конкатенации |
CERT C: Rule PRE31-C | Избегайте побочных эффектов в аргументах к небезопасным макросам |
CERT C: Rule PRE32-C | Не используйте директивы препроцессору в вызовах подобных функции макросов |
CERT C: Rule DCL30-C | Объявите объекты с соответствующими продолжительностями хранения |
CERT C: Rule DCL31-C | Объявите идентификаторы перед использованием их |
CERT C: Rule DCL36-C | Не объявляйте идентификатор с конфликтными классификациями рычажных устройств |
CERT C: Rule DCL37-C | Не объявляйте или задавайте зарезервированный идентификатор |
CERT C: Rule DCL38-C | Используйте правильный синтаксис при объявлении члена массива с переменными границами |
CERT C: Rule DCL39-C | Избегайте утечки информации в дополнении структуры |
CERT C: Rule DCL40-C | Не создавайте несовместимые объявления той же функции или объекта |
CERT C: Rule DCL41-C | Не объявляйте переменные в операторе switch перед первой меткой случая |
CERT C: Rule EXP30-C | Не зависьте от порядка оценки для побочных эффектов |
CERT C: Rule EXP32-C | Не получайте доступ к энергозависимому объекту через энергонезависимую ссылку |
CERT C: Rule EXP33-C | Не читайте неинициализированную память |
CERT C: Rule EXP34-C | Не разыменовывайте нулевых указателей |
CERT C: Rule EXP35-C | Не изменяйте объекты с временным временем жизни |
CERT C: Rule EXP36-C | Не бросайте указатели в более строго выровненные типы указателей |
CERT C: Rule EXP37-C | Вызовите функции с правильным номером и типом аргументов |
CERT C: Rule EXP39-C | Не получайте доступ к переменной через указатель несовместимого типа |
CERT C: Rule EXP40-C | Не изменяйте постоянные объекты |
CERT C: Rule EXP42-C | Не сравнивайте дополнительные данные |
CERT C: Rule EXP43-C | Избегайте, чтобы неопределенное поведение при использовании ограничило - квалифицированные указатели |
CERT C: Rule EXP44-C | Не используйте побочные эффекты в операндах к sizeof, _Alignof, или _Generic |
CERT C: Rule EXP45-C | Не выполняйте присвоения в операторах выбора |
CERT C: Rule EXP46-C | Не используйте побитовый оператор с подобным булевской переменной операндом |
CERT C: Rule EXP47-C | Не вызывайте va_arg с аргументом неправильного типа |
CERT C: Rule INT30-C | Убедитесь, что операции беззнаковых целых чисел не переносятся |
CERT C: Rule INT31-C | Убедитесь, что целочисленные преобразования не приводят к потерянным или неправильно истолкованным данным |
CERT C: Rule INT32-C | Убедитесь, что операции на целых числах со знаком не приводят к переполнению |
CERT C: Rule INT33-C | Убедитесь, что деление и операции остатка не приводят к ошибкам деления на нуль |
CERT C: Rule INT34-C | Не переключайте выражение отрицательным числом битов или большим, чем или равняйтесь количеству битов, которые существуют в операнде |
CERT C: Rule INT35-C | Используйте правильную целочисленную точность |
CERT C: Rule INT36-C | Преобразование указателя на целое число или целое число к указателю |
CERT C: Rule FLP30-C | Не используйте переменные с плавающей точкой в качестве счетчиков цикла |
CERT C: Rule FLP32-C | Предотвратите или обнаружьте область и ошибки области значений в математических функциях |
CERT C: Rule FLP34-C | Убедитесь, что преобразования с плавающей точкой в области значений нового типа |
CERT C: Rule FLP36-C | Сохраните точность при преобразовании интегральных значений в тип с плавающей точкой |
CERT C: Rule FLP37-C | Не используйте объектные представления, чтобы сравнить значения с плавающей точкой |
CERT C: Rule ARR30-C | Не формируйте или используйте за пределы индексы массивов или указатели |
CERT C: Rule ARR32-C | Гарантируйте, что аргументы размера для массивов переменной длины находятся в допустимой области значений |
CERT C: Rule ARR36-C | Не вычитайте или сравнивайте два указателя, которые не относятся к тому же массиву |
CERT C: Rule ARR37-C | Не добавляйте или вычитайте целое число к указателю на объект немассивов |
CERT C: Rule ARR38-C | Гарантируйте, что библиотечные функции не формируют недопустимые указатели |
CERT C: Rule ARR39-C | Не добавляйте или вычитайте масштабированное целое число к указателю |
CERT C: Rule STR30-C | Не пытайтесь изменить строковые литералы |
CERT C: Rule STR31-C | Гарантируйте, что устройство хранения данных для строк имеет достаточный пробел для символьных данных и пустого терминатора строки |
CERT C: Rule STR32-C | Не передавайте не пустую отключенную последовательность символов библиотечной функции, которая ожидает строку |
CERT C: Rule STR34-C | Бросьте символы к char без знака прежде, чем преобразовать в большие целочисленные размеры |
CERT C: Rule STR37-C | Аргументы к обрабатывающим символ функциям должны быть представимыми как char без знака |
CERT C: Rule STR38-C | Не путайте строки узкого и широкого символа и функции |
CERT C: Rule MEM30-C | Не получайте доступ освобожденный память |
CERT C: Rule MEM31-C | Свободная динамически выделенная память, когда больше не необходимый |
CERT C: Rule MEM33-C | Выделите и скопируйте структуры, содержащие член массива с переменными границами динамически |
CERT C: Rule MEM34-C | Только свободная память, выделенная динамически |
CERT C: Rule MEM35-C | Выделите достаточную память для объекта |
CERT C: Rule MEM36-C | Не изменяйте выравнивание объектов путем вызова перевыделения () |
CERT C: Rule FIO30-C | Исключите ввод данных пользователем из строк формата |
CERT C: Rule FIO32-C | Не выполняйте операции на устройствах, которые только подходят для файлов |
CERT C: Rule FIO34-C | Различайте символы, считанные из файла и EOF или WEOF |
CERT C: Rule FIO37-C | Не принимайте, что fgets () или fgetws () возвращает непустую строку, когда успешный |
CERT C: Rule FIO38-C | Не копируйте объект FILE |
CERT C: Rule FIO39-C | Не делайте альтернативно ввода и вывода от потока без прошедшего сброса или располагающий вызов |
CERT C: Rule FIO40-C | Сбросьте строки на fgets () или fgetws () отказ |
CERT C: Rule FIO41-C | Не вызывайте getc (), putc (), getwc (), или putwc () с потоковым аргументом, который имеет побочные эффекты |
CERT C: Rule FIO42-C | Закройте файлы, когда они больше не будут необходимы |
CERT C: Rule FIO44-C | Только используйте значения для fsetpos (), которые возвращены в fgetpos () |
CERT C: Rule FIO45-C | Избегайте условий состязания TOCTOU при доступе к файлам |
CERT C: Rule FIO46-C | Не получайте доступ к закрытому файлу |
CERT C: Rule FIO47-C | Используйте строки допустимого формата |
CERT C: Rule ENV30-C | Не изменяйте объект, на который ссылается возвращаемое значение определенных функций |
CERT C: Rule ENV31-C | Не используйте указатель среды после операции, которая может делать недействительным его |
CERT C: Rule ENV32-C | Все выходные обработчики должны обычно возвращаться |
CERT C: Rule ENV33-C | Не вызывайте систему () |
CERT C: Rule ENV34-C | Не храните указатели, возвращенные определенными функциями |
CERT C: Rule SIG30-C | Вызовите только асинхронно-безопасные функции в обработчиках сигнала |
CERT C: Rule SIG31-C | Не получайте доступ к общим объектам в обработчиках сигнала |
CERT C: Rule SIG34-C | Не делайте позывного () из прерываемых обработчиков сигнала |
CERT C: Rule SIG35-C | Не возвращайтесь из вычислительного обработчика сигнала исключения |
CERT C: Rule ERR30-C | Обнулите errno прежде, чем вызвать библиотечную функцию, которая, как известно, установила errno и проверять errno только после того, как функция возвратит отказ указания значения |
CERT C: Rule ERR32-C | Не используйте неопределенные значения errno |
CERT C: Rule ERR33-C | Обнаружьте и обработайте стандартные ошибки библиотеки |
CERT C: Rule ERR34-C | Обнаружьте ошибки при преобразовании строки в номер |
CERT C: Rule CON30-C | Очистите специфичное для потока устройство хранения данных |
CERT C: Rule CON31-C | Не уничтожайте взаимное исключение, в то время как оно заблокировано |
CERT C: Rule CON32-C | Предотвратите гонки данных при доступе к битовым полям от нескольких потоков |
CERT C: Rule CON33-C | Избегайте условий состязания при использовании библиотечных функций |
CERT C: Rule CON34-C | Объявите объекты, совместно использованные потоками с соответствующими продолжительностями хранения |
CERT C: Rule CON35-C | Избегайте мертвой блокировки путем привязки предопределенного порядка |
CERT C: Rule CON36-C | Перенесите функции, которые могут побочно проснуться в цикле |
CERT C: Rule CON37-C | Не делайте позывного () в многопоточной программе |
CERT C: Rule CON38-C | Сохраните потокобезопасность и живучесть при использовании условных переменных |
CERT C: Rule CON39-C | Не соединяйте или отсоединяйте поток, к которому ранее соединили или отсоединили |
CERT C: Rule CON40-C | Не обращайтесь к атомарной переменной дважды в выражении |
CERT C: Rule CON41-C | Перенесите функции, которые могут перестать работать побочно в цикле |
CERT C: Rule CON43-C | Не позволяйте гонки данных в многопоточном коде |
CERT C: Rule MSC30-C | Не используйте rand () функция для генерации псевдослучайных чисел |
CERT C: Rule MSC32-C | Правильно отберите генераторы псевдослучайного числа |
CERT C: Rule MSC33-C | Не передавайте недопустимые данные asctime () функция |
CERT C: Rule MSC37-C | Убедитесь, что управление никогда не достигает конца непустой функции |
CERT C: Rule MSC38-C | Не обрабатывайте предопределенный идентификатор как объект, если это может только быть реализовано как макрос |
CERT C: Rule MSC39-C | Не вызывайте va_arg () на va_list, который имеет неопределенное значение |
CERT C: Rule MSC40-C | Не нарушайте ограничения |
CERT C: Rule MSC41-C | Никогда трудная кодозависимая информация |
CERT C: Rule POS30-C | Используйте readlink () функция правильно |
CERT C: Rule POS33-C | Не используйте vfork () |
CERT C: Rule POS34-C | Не вызывайте putenv () с указателем на автоматическую переменную в качестве аргумента |
CERT C: Rule POS35-C | Избегайте условий состязания при проверке на существование символьной ссылки |
CERT C: Rule POS36-C | Наблюдайте правильный порядок аннулирования при отказе от привилегий |
CERT C: Rule POS37-C | Убедитесь, что отказ привилегии успешен |
CERT C: Rule POS38-C | Остерегайтесь условий состязания при использовании ветвления и дескрипторов файлов |
CERT C: Rule POS39-C | Используйте правильный порядок байтов при передаче данных между системами |
CERT C: Rule POS44-C | Не используйте сигналы отключить потоки |
CERT C: Rule POS47-C | Не используйте потоки, которые могут быть отменены асинхронно |
CERT C: Rule POS48-C | Не разблокируйте или уничтожьте другое взаимное исключение потока POSIX |
CERT C: Rule POS49-C | Когда к данным должны получить доступ несколько потоков, обеспечьте взаимное исключение и гарантируйте, что ни к каким смежным данным также не получают доступ |
CERT C: Rule POS50-C | Объявите объекты, совместно использованные потоками POSIX с соответствующими продолжительностями хранения |
CERT C: Rule POS51-C | Избегайте мертвой блокировки с потоками POSIX путем привязки предопределенного порядка |
CERT C: Rule POS52-C | Не выполняйте операции, которые могут блокироваться при содержании блокировки POSIX |
CERT C: Rule POS53-C | Не используйте больше чем одно взаимное исключение для параллельных операций ожидания на условной переменной |
CERT C: Rule POS54-C | Обнаружьте и обработайте ошибки библиотеки POSIX |
CERT C: Rule WIN30-C | Правильно парные функции выделения и освобождения |
CERT C: Rec. PRE00-C | Предпочтите встроенные или статические функции подобным функции макросам |
CERT C: Rec. PRE01-C | Используйте круглые скобки в макросах вокруг названий параметра |
CERT C: Rec. PRE06-C | Заключите заголовочные файлы в защиту включения |
CERT C: Rec. PRE07-C | Избегайте использования повторенных вопросительных знаков |
CERT C: Rec. PRE09-C | Не заменяйте безопасные функции на или устаревающие функции устаревшие |
CERT C: Rec. PRE10-C | Перенесите составные макросы в цикл с условием продолжения |
CERT C: Rec. PRE11-C | Не завершайте макроопределения с точкой с запятой |
CERT C: Rec. DCL00-C | Const - квалифицирует неизменяемые объекты |
CERT C: Rec. DCL01-C | Не снова используйте имена переменных в подосциллографах |
CERT C: Rec. DCL02-C | Используйте визуально отличные идентификаторы |
CERT C: Rec. DCL06-C | Используйте значимые символьные константы, чтобы представлять литеральные значения |
CERT C: Rec. DCL07-C | Включайте соответствующую информацию о типе в функциональные операторы объявления |
CERT C: Rec. DCL10-C | Обеспечьте контракт между средством записи и вызывающей стороной функций variadic |
CERT C: Rec. DCL11-C | Изучите проблемы типа, сопоставленные с функциями variadic |
CERT C: Rec. DCL12-C | Реализуйте абстрактные типы данных с помощью непрозрачных типов |
CERT C: Rec. DCL13-C | Объявите параметры функции, которые являются указателями на значения, не измененные функцией как const |
CERT C: Rec. DCL15-C | Объявите объекты осциллографа файла или функции, для которых не нужно внешнее рычажное устройство как статическое |
CERT C: Rec. DCL16-C | Используйте 'L', не 'l', чтобы указать на долгое значение |
CERT C: Rec. DCL18-C | Не начинайте целочисленные константы с 0 при определении десятичного значения |
CERT C: Rec. DCL19-C | Минимизируйте осциллограф переменных и функций |
CERT C: Rec. DCL22-C | Используйте энергозависимый для данных, которые не могут кэшироваться |
CERT C: Rec. DCL23-C | Гарантируйте, что взаимно видимые идентификаторы уникальны |
CERT C: Rec. EXP00-C | Используйте круглые скобки для приоритета операции |
CERT C: Rec. EXP05-C | Не выбрасывайте проверку const |
CERT C: Rec. EXP08-C | Гарантируйте, что адресная арифметика с указателями используется правильно |
CERT C: Rec. EXP09-C | Используйте sizeof, чтобы определить размер типа или переменной |
CERT C: Rec. EXP10-C | Не зависьте от порядка оценки подвыражений или порядка, в котором происходят побочные эффекты |
CERT C: Rec. EXP12-C | Не игнорируйте значения, возвращенные функциями |
CERT C: Rec. EXP13-C | Обработайте операторы отношения и операторы равенства, как будто они были неассоциативны |
CERT C: Rec. EXP15-C | Не помещайте точку с запятой в ту же линию как если, поскольку, или в то время как оператор |
CERT C: Rec. EXP19-C | Используйте фигурные скобки для тела если, поскольку, или в то время как оператор |
CERT C: Rec. INT00-C | Изучите модель данных, используемую вашей реализацией (реализациями) |
CERT C: Rec. INT02-C | Изучите целочисленные правила преобразования |
CERT C: Rec. INT04-C | Осуществите пределы на целочисленных значениях, происходящих из испорченных источников |
CERT C: Rec. INT07-C | Используйте только явным образом подписанный или символьный тип без знака для числовых значений |
CERT C: Rec. INT08-C | Проверьте, что все целочисленные значения находятся в области значений |
CERT C: Rec. INT09-C | Гарантируйте, что константы перечисления сопоставляют с уникальными значениями |
CERT C: Rec. INT10-C | Не принимайте положительный остаток при использовании оператора % |
CERT C: Rec. INT12-C | Не делайте предположения о типе простого международного битового поля, когда используется в выражении |
CERT C: Rec. INT13-C | Используйте побитовые операторы только на операндах без знака |
CERT C: Rec. INT14-C | Постарайтесь не выполнять битовые и арифметические операции на тех же данных |
CERT C: Rec. INT18-C | Выполните целые выражения в большем размере прежде, чем сравнить или присвоить тому размеру |
CERT C: Rec. FLP00-C | Изучите ограничения чисел с плавающей запятой |
CERT C: Rec. FLP02-C | Избегайте использования чисел с плавающей запятой, когда точный расчет будет необходим |
CERT C: Rec. FLP03-C | Обнаружьте и обработайте ошибки с плавающей точкой |
CERT C: Rec. FLP06-C | Преобразуйте целые числа в плавающую точку для операций с плавающей точкой |
CERT C: Rec. ARR01-C | Не применяйте sizeof оператор к указателю при взятии размера массива |
CERT C: Rec. ARR02-C | Явным образом задайте границы массивов, даже если неявно заданный инициализатором |
CERT C: Rec. STR02-C | Санируйте данные, переданные комплексным подсистемам |
CERT C: Rec. STR03-C | Непреднамеренно не обрезайте строку |
CERT C: Rec. STR07-C | Используйте проверяющие границы интерфейсы для обработки строк |
CERT C: Rec. STR11-C | Не задавайте связанный из символьного массива, инициализированного строковым литералом |
CERT C: Rec. MEM00-C | Выделите и освободите память в том же модуле на том же уровне абстракции |
CERT C: Rec. MEM01-C | Сохраните новое значение в указателях сразу после свободный () |
CERT C: Rec. MEM02-C | Сразу бросьте результат вызова функции выделения памяти в указатель на выделенный тип |
CERT C: Rec. MEM03-C | Очистите уязвимую информацию, хранившую в допускающих повторное использование ресурсах |
CERT C: Rec. MEM04-C | Остерегайтесь выделений нулевой длины |
CERT C: Rec. MEM05-C | Избегайте больших выделений стека |
CERT C: Rec. MEM06-C | Убедитесь, что уязвимые данные не выписаны к диску |
CERT C: Rec. MEM11-C | Не принимайте бесконечное пространство "кучи" |
CERT C: Rec. MEM12-C | Рассмотрите использование goto цепи при отъезде функции при ошибке при использовании и высвобождении средств |
CERT C: Rec. FIO02-C | Канонизируйте пути, происходящие из испорченных источников |
CERT C: Rec. FIO11-C | Заботьтесь при определении параметра режима fopen () |
CERT C: Rec. FIO21-C | Не создавайте временные файлы в общих каталогах |
CERT C: Rec. FIO24-C | Не открывайте файл, который уже открыт |
CERT C: Rec. ENV01-C | Не делайте предположения о размере переменной окружения |
CERT C: Rec. ERR00-C | Примите и представьте сопоставимую и всестороннюю политику обработки ошибок |
CERT C: Rec. API04-C | Обеспечьте сопоставимый и применимый механизм проверки ошибок |
CERT C: Rec. CON01-C | Получите и выпустите примитивы синхронизации в том же модуле на том же уровне абстракции |
CERT C: Rec. CON05-C | Не выполняйте операции, которые могут блокироваться при содержании блокировки |
CERT C: Rec. MSC01-C | Боритесь за логическую полноту |
CERT C: Rec. MSC04-C | Используйте комментарии последовательно и читаемым способом |
CERT C: Rec. MSC12-C | Обнаружьте и удалите код, который не оказывает влияния или никогда не выполняется |
CERT C: Rec. MSC13-C | Обнаружьте и удалите неиспользованные значения |
CERT C: Rec. MSC15-C | Не зависьте от неопределенного поведения |
CERT C: Rec. MSC17-C | Закончите каждый набор операторов, сопоставленных с меткой случая с оператором завершения |
CERT C: Rec. MSC18-C | Будьте осторожны при обработке уязвимых данных, таких как пароли, в коде программы |
CERT C: Rec. MSC20-C | Не используйте оператор switch, чтобы передать управление в комплексный блок |
CERT C: Rec. MSC21-C | Используйте устойчивые условия выхода из цикла |
CERT C: Rec. MSC22-C | Используйте setjmp (), longjmp () средство надежно |
CERT C: Rec. MSC24-C | Не используйте удержанные от использования или устаревающие функции |
CERT C: Rec. POS05-C | Ограничьте доступ к файлам путем создания тюрьмы |
CERT C: Rec. WIN00-C | Будьте конкретны при динамичной загрузке библиотек |
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.