Use of a forbidden function

Функция появляется в черном списке запрещенных функций

Описание

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

  • Перечислите функции в XML-файле в определенном синтаксисе.

    Скопируйте файл шаблона code-behavior-specifications-template.xml от папки polyspaceroot\polyspace\verifier\cxx к перезаписываемому местоположению и изменяют файл. Введите каждую функцию в файл с помощью следующего синтаксиса после существующих подобных записей:

    <function name="funcname" behavior="FORBIDDEN_FUNC"/>
    где funcname имя функции, которое вы хотите поместить в черный список.

  • Задайте этот XML-файл в качестве аргумента для опции -code-behavior-specifications.

Даже если вы включаете это средство проверки с помощью опции Find defects (-checkers), если вы не задаете черный список функций, это средство проверки остается отключенным.

Риск

Функциональная сила быть помещенным в черный список по одной из этих причин:

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

    Можно поместить в черный список функции, которые явным образом не проверяются существующими средствами проверки, такими как Use of dangerous standard function или Use of obsolete standard function.

  • Функция удерживается от использования как часть миграции, например, с C++ 98 на C++ 11.

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

Фиксация

Замените помещенную в черный список функцию на утвержденную функцию.

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

Примеры

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

#include <csignal>
#include <iostream>

namespace
{
  volatile std::sig_atomic_t gSignalStatus;
}

void signal_handler(int signal)
{
  gSignalStatus = signal;
}

int main()
{
  // Install a signal handler
  std::signal(SIGINT, signal_handler);

  std::cout << "SignalValue: " << gSignalStatus << '\n';
  std::cout << "Sending signal " << SIGINT << '\n';
  std::raise(SIGINT);
  std::cout << "SignalValue: " << gSignalStatus << '\n';
}

Предположим, что вы хотите удержать от использования std::signal функция. Добавьте следующее в XML-файл шаблона после подобных существующих записей:

<function name="std::signal" behavior="FORBIDDEN_FUNC"/>
и задайте XML-файл с опцией -code-behavior-specifications.

В результатах анализа, всем использовании std::signal функция отмечается этим средством проверки.

class orderedPair {
        int var1;
        int var2;
    public:
        orderedPair() {
            var1 = 0;
            var2 = 0;
        }
        orderedPair(int arg1, int arg2) {
            var1 = arg1;
            var2 = arg2;
        }
        orderedPair& operator=(const orderedPair& rhs) {
            var1 = rhs.var1;
            var2 = rhs.var2;
            return *this;
        } 
        orderedPair& operator+(orderedPair& rhs) {
            var1 += rhs.var1;
            var2 += rhs.var2;
            return *this;
        }  
};

void main() {
    int one=1, zero=0, sum;
    orderedPair firstOrderedPair(one, one);
    orderedPair secondOrderedPair(zero, one);
    orderedPair sumPair;
    
    sum = zero + one;
    sumPair = firstOrderedPair + secondOrderedPair;    
}

Предположим, что вы хотите идентифицировать все местоположения где перегрузки оператора в orderedPair класс используется. Добавьте перегруженные операторы в XML-файл шаблона:

   <function name="orderedPair::operator=" behavior="FORBIDDEN_FUNC"/>
    <function name="orderedPair::operator+" behavior="FORBIDDEN_FUNC"/>
и задайте XML-файл с опцией -code-behavior-specifications.

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

Информация о результате

Группа: Хорошая практика
Язык: C | C++
Значение по умолчанию: Off
Синтаксис командной строки: FORBIDDEN_FUNC
Удар: низко
Введенный в R2020a