exponenta event banner

Считать указатели среды небезопасными (-stubbed-pointers-are-unsafe)

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

Описание

Этот параметр влияет только на анализ программы проверки кода.

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

Укажите, что при проверке указатели среды должны рассматриваться как небезопасные, если иное не ограничено. Указатели среды - это указатели, которым могут присваиваться значения вне кода.

Указатели среды включают в себя:

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

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

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

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

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

Задать опцию

Пользовательский интерфейс (только для настольных ПК): в конфигурации проекта эта опция доступна в узле Проверочные допущения.

файл командной строки и параметров: Использовать параметр -stubbed-pointers-are-unsafe. См. раздел Сведения о командной строке.

Зачем использовать этот параметр

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

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

Настройки

На

Проверка считает, что указатели среды могут иметь NULL значение.

Выкл. (по умолчанию)

Проверка считает, что указатели среды:

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

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

Совет

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

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

  • При проверке реализации кода runnables AUTOSAR средство проверки кода предполагает, что аргументы указателя на runnables и указатели возвращены из Rte_ функции не являются NULL. Этот параметр нельзя использовать для изменения предположения. См. раздел Запуск Polyspace по коду AUTOSAR с консервативными допущениями.

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

    Безопасность указателей средыНебезопасные указатели среды

    Флажок «Незаконно» имеет зеленый цвет. Проверка предполагает, что env_ptr не имеет NULL, и любая деэреференция находится в допустимых пределах. Проверка предполагает, что результат отмены привязки является полным диапазоном. Например, в этом случае возвращаемое значение имеет полный диапазон типов int.

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

    Проверка указателя «Незаконно» имеет оранжевый цвет. Проверка предполагает, что env_ptr может иметь значение NULL.

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

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

    Безопасность указателей средыНебезопасные указатели среды

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

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

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

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

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

    При индивидуальном ограничении указателя сначала задается режим инициализации, а затем с помощью параметра «Инициализация указателя» указывается, является ли указатель Null, Not Null, или Maybe Null. В зависимости от режима инициализации можно переопределить глобальную спецификацию для всех указателей среды или нет.

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

    • Если для параметра «Режим инициализации» задано значение MAIN GENERATOR, проверка использует вашу спецификацию для этой опции.

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

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

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

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

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

Параметр: -stubbed-pointers-are-unsafe
По умолчанию: Откл.
Пример (проверка кода): polyspace-code-prover -sources file_name -stubbed-pointers-are-unsafe
Пример (сервер проверки кода): polyspace-code-prover-server -sources file_name -stubbed-pointers-are-unsafe
Представлен в R2016b