-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
значение.
По мнению верификации, окружение указатели:
Не может иметь NULL
значение.
Точки в допустимых границах.
Включите эту опцию во время фазы интегрирования. На этой фазе вы предоставляете полный код для верификации. Даже если оранжевая проверка происходит из внешних источников, вы, вероятно, разместите защиты от небезопасных указателей из таких источников. Например, если вы получаете указатель из неизвестного источника, вы проверяете указатель на NULL
значение.
Отключите эту опцию на фазе модульного тестирования. На этой фазе вы фокусируетесь на ошибках, исходящих от вашего модуля.
Если вы проверяете реализацию кода runnables AUTOSAR, Code Prover принимает, что аргументы указателя на runnables и указатели, возвращенные из Rte_
функции не NULL
. Вы не можете использовать эту опцию, чтобы изменить предположение. Смотрите Run Polyspace на коде AUTOSAR с консервативными допущениями.
Если включить эту опцию, количество оранжевых чеков в коде может увеличиться.
Окружения указатели безопасны | Небезопасные указатели на окружение |
---|---|
Проверка Illegally dereferenced pointer зеленая. Эта верификация принимает, что int func (int *env_ptr) {
return *env_ptr;
} | Проверка Illegally dereferenced pointer оранжевая. Эта верификация принимает, что int func (int *env_ptr) {
return *env_ptr;
} |
Если включить эту опцию, количество серых проверок может уменьшиться.
Окружения указатели безопасны | Небезопасные указатели на окружение |
---|---|
Эта верификация принимает, что #include <stdlib.h>
int func (int *env_ptr) {
if(env_ptr!=NULL)
return *env_ptr;
else
return 0;
} | Эта верификация принимает, что #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 |
Пример (Код Prover Server): Полипространство -code-prover-server -sources |