Consider environment pointers as unsafe (-stubbed-pointers-are-unsafe)

Задайте, что указатели окружения могут быть небезопасны для dereference, если не ограничено иное

Описание

Эта опция влияет только на анализ Code Prover.

Эта опция недоступна для кода, сгенерированного из MATLAB® код или Simulink® модели.

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

Указатели окружения включают:

  • Глобальный или extern указатели.

  • Указатели возвращаются из упрямых функций.

    Функция упрямится, если ваш код не содержит определения функции или вы переопределяете определение функции с помощью опции Functions to stub (-functions-to-stub).

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

    Вызов функции генерируется, если вы проверяете модуль или библиотеку, и модуль или библиотека не имеют явного вызова функции. Можно также принудительно сгенерировать вызов функции с помощью опции Functions to call (-main-generator-calls).

Задать опцию

Пользовательский интерфейс (только для настольных продуктов): В строении проекта опция доступна на узле Verification Assumptions.

Командная строка и файл опций: Используйте опцию -stubbed-pointers-are-unsafe. См. «Информация о командной строке».

Зачем использовать эту опцию

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

Если вы задаете эту опцию, верификация считает, что указатели на окружение могут иметь NULL значение. Если вы читаете указатель окружения, не проверяя на NULLпроверка Illegally dereferenced pointer показывает потенциальную ошибку оранжевого цвета. Сообщение, сопоставленное с оранжевой проверкой, показывает, что указатель может быть NULL.

Настройки

На

Верификация считает, что окружения указатели могут иметь NULL значение.

Off (по умолчанию)

По мнению верификации, окружение указатели:

  • Не может иметь NULL значение.

  • Точки в допустимых границах.

Совет

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

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

  • Если вы проверяете реализацию кода runnables AUTOSAR, Code Prover принимает, что аргументы указателя на runnables и указатели, возвращенные из Rte_ функции не NULL. Вы не можете использовать эту опцию, чтобы изменить предположение. Смотрите Run Polyspace на коде AUTOSAR с консервативными допущениями.

  • Если включить эту опцию, количество оранжевых чеков в коде может увеличиться.

    Окружения указатели безопасныНебезопасные указатели на окружение

    Проверка Illegally dereferenced pointer зеленая. Эта верификация принимает, что env_ptr не является NULL, и любое разыменование находится в допустимых границах. Эта верификация принимает, что результат dereference полон области значений. Для образца в этом случае возврата значение имеет полную область значений типа int.

      int func (int *env_ptr) {
          return *env_ptr;
      }

    Проверка Illegally dereferenced pointer оранжевая. Эта верификация принимает, что env_ptr может иметь значение NULL.

      int func (int *env_ptr) {
          return *env_ptr;
      }

    Если включить эту опцию, количество серых проверок может уменьшиться.

    Окружения указатели безопасныНебезопасные указатели на окружение

    Эта верификация принимает, что env_ptr не имеет значение NULL. The if условие всегда верно, и else блок недоступен.

      #include <stdlib.h>
      int func (int *env_ptr) {
          if(env_ptr!=NULL)
    	         return *env_ptr;
          else
    	         return 0;
      }

    Эта верификация принимает, что env_ptr может иметь значение NULL. The if условие не всегда верно, и else блок может быть достижимым.

      #include <stdlib.h>
      int func (int *env_ptr) {
          if(env_ptr!=NULL)
    	         return *env_ptr;
          else
    	         return 0;
      }

  • Вместо того, чтобы рассматривать все указатели окружения как безопасные или небезопасные, можно индивидуально ограничить некоторые указатели окружения. См. описание Initialize Pointer в разделе Внешние ограничения для анализа Polyspace.

    Когда вы индивидуально ограничиваете указатель, сначала задаете Init Mode, а затем через опцию Initialize Pointer задаете, является ли указатель Null, Not Null, или Maybe Null. В зависимости от Init Mode можно либо переопределить глобальную спецификацию для всех указателей окружения, либо нет.

    • Если вы задаете Init Mode указателя на INIT или PERMANENT, выбор для Initialize Pointer переопределяет спецификацию для этой опции. Например, если вы задаете Not NULL для указателя окружения ptr, верификация принимает, что ptr не является NULL, даже если вы задаете, что окружения указатели должны считаться небезопасными.

    • Если вы устанавливаете Init Mode равной MAIN GENERATOR, верификация использует вашу спецификацию для этой опции.

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

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

    Например, все дереференции считаются действительными в этом коде:

    int*** stub(void);
    
    void func2() {
            int ***ptr = stub();
            int **ptr2 = *ptr;
            int *ptr3 = *ptr2;
    }

Информация о командной строке

Параметр: -stubbed-pointers-are-unsafe
По умолчанию: Off
Пример (Code Prover): Polyspace Code Prover -sources file_name -упрямые-указатели-являются-небезопасными
Пример (Код Prover Server): Полипространство -code-prover-server -sources file_name -упрямые-указатели-являются-небезопасными
Введенный в R2016b