Группы дефектов Bug Finder

Для удобства дефектные шашки в Bug Finder классифицируются по различным группам.

В этом разделе представлен обзор различных групп.

Исключения C++

Эти дефекты связаны с обработкой исключений C++. Дефекты включают:

  • Необработанное исключение, излучаемое из noexcept функция

  • Неожиданное исключение, возникающее при построении объекта аргумента throw оператор

  • catch операторы, улавливающие исключения по значению, а не по ссылке

  • catch операторы, скрывающие последующие catch операторы.

Для получения дополнительной информации о конкретных дефектах смотрите C++ Exception Defects

Параметр командной строки : cpp_exceptions

Параллелизм

Эти дефекты связаны с многозадачным кодом.

Дефекты гонки данных

Дефекты гонки данных возникают, когда несколько задач работают с общей переменной или вызывают не входящую стандартную функцию библиотеки без защиты.

Конкретные дефекты см. в разделе Дефекты параллелизма.

Параметр командной строки : concurrency

Дефекты блокировки

Дефекты блокировки возникают, когда критические секции не настроены должным образом. Для примера:

  • Критические участки вовлечены в тупик.

  • Функция блокировки не имеет соответствующей функции разблокировки.

  • Функция блокировки вызывается дважды без промежуточного вызова функции разблокировки.

Критические разделы защищают общие переменные от параллельного доступа. Polyspace® ожидает, что критические разделы будут соответствовать определенному формату. Критический раздел должен находиться между вызовом функции блокировки и вызовом функции разблокировки.

Конкретные дефекты см. в разделе Дефекты параллелизма.

Параметр командной строки : concurrency

Криптография

Эти дефекты связаны с неправильным использованием стандартных программ криптографии из библиотеки OpenSSL. Для образца:

  • Использование криптографически слабых алгоритмов

  • Отсутствие существенных элементов, таких как ключ шифра или вектор инициализации

  • Неправильный порядок криптографических операций

Конкретные дефекты см. в разделе Дефекты криптографии.

Параметр командной строки : cryptography

Поток данных

Эти дефекты являются ошибками, связанными с тем, как информация перемещается по всему коду. Дефекты включают:

  • Мертвый или недоступный код

  • Неиспользованный код

  • Неинициализированная информация

Для конкретных дефектов см. «Дефекты потока данных».

Параметр командной строки : data_flow

Динамическая память

Эти дефекты являются ошибками, связанными с использованием памяти, когда память динамически выделяется. Дефекты включают:

  • Освобождение динамически выделенной памяти

  • Незащищенные выделения памяти

Для конкретных дефектов см. «Динамические дефекты памяти».

Параметр командной строки : dynamic_memory

Передовая практика

Эти дефекты позволяют вам наблюдать хорошие практики кодирования. Дефекты сами по себе могут не вызвать сбоя, но иногда они выделяют более серьезные логические ошибки в вашем коде. Дефекты также делают ваш код уязвимым для атак и трудным для обслуживания.

Дефекты включают:

  • Жестко закодированные константы, такой как buffer size и контур цикла

  • Неиспользованные параметры функции

Конкретные дефекты см. в разделе «Дефекты надлежащей практики».

Параметр командной строки : good_practice

Числовой

Эти дефекты являются ошибками, относящимися к переменным в вашем коде; их значения, типы данных и использование. Дефекты включают:

  • Математические операции

  • Переполнение преобразования

  • Оперативное переполнение

Конкретные дефекты см. в разделе «Численные дефекты».

Параметр командной строки : numerical

Объектно-ориентированный

Эти дефекты связаны с объектно-ориентированным аспектом программирования C++. Дефекты подсвечивают проблемы проекта классов или проблемы в иерархии наследования.

Дефекты включают:

  • Представитель данных не инициализирован или неправильно инициализирован в конструкторе

  • Неправильное переопределение методов базовых классов

  • Нарушение инкапсуляции данных

Для конкретных дефектов смотрите Объектно-ориентированные дефекты.

Параметр командной строки : object_oriented

Эффективность

Эти дефекты обнаруживают такие проблемы, как ненужные копии данных и неэффективные стандартные функции C++, которые могут привести к узким местам эффективности в коде С++.

Дефекты включают:

  • const параметры или возвращаемые значения принудительно копируют вместо операций перемещения

  • Неэффективные функции для вставки новой строки и расчета длины строки

Конкретные дефекты см. в разделе «Дефекты эффективности».

Параметр командной строки : performance

Программирование

Эти дефекты являются ошибками, относящимися к синтаксису программирования. Эти дефекты включают:

  • Операторы присвоения и равенства

  • Несоответствия между квалификаторами или объявлениями переменных

  • Плохо отформатированные строки

Для конкретных дефектов смотрите Программные дефекты.

Параметр командной строки : programming

Управление ресурсами

Эти дефекты связаны с обработкой файлов. Дефекты включают:

  • Незакрытый поток файлов

  • Операции с файлом потоком после его закрытия

Конкретные дефекты см. в разделе «Дефекты управления ресурсами».

Параметр командной строки : resource_management

Статическая память

Эти дефекты являются ошибками, связанными с использованием памяти, когда память статически выделена. Дефекты включают:

  • Доступ к массивам за пределами их границ

  • Пустые указатели

  • Приведение указателей

Для конкретных дефектов см. «Статические дефекты памяти».

Параметр командной строки : static_memory

Безопасность

Эти дефекты выделяют места в вашем коде, которые уязвимы для взлома или других атак безопасности. Многие из этих дефектов не вызывают ошибок во время выполнения, но вместо этого указывают на рискованные области в вашем коде. Дефекты включают:

  • Управление конфиденциальными данными

  • Использование опасных или устаревших функций

  • Генерация случайных чисел

  • Внешне управляемые пути и команды

Для получения дополнительной информации о конкретных дефектах см. «Дефекты безопасности».

Параметр командной строки : security

Испорченные данные

Эти дефекты подсвечивают элементы вашего кода, которые из незащищенных источников. Злоумышленники могут использовать входные данные или пути, чтобы атаковать вашу программу и вызвать отказы. Эти дефекты подсвечивают элементы вашего кода, которые уязвимы. Дефекты включают:

  • Использование тонированных переменных или указателей

  • Пути, управляемые извне

Для получения дополнительной информации о конкретных дефектах см. «Дефекты испорченных данных». Можно изменить поведение испорченных дефектов данных с помощью необязательной команды -consider-analysis-perimeter-as-trust-boundary. См. -consider-analysis-perimeter-as-trust-boundary.

Параметр командной строки : tainted_data

См. также