Объект, объявленный со спецификатором const, изменяется
Запись в const, квалифицированный объект происходит, когда вы выполняете одно из следующих действий:
Используйте const - квалифицированный объект как место назначения присвоения.
Передайте const - квалифицированный объект к функции, которая изменяет аргумент.
Например, дефект может произойти в следующих ситуациях:
Вы передаете const - квалифицированный объект в качестве первого аргумента одной из следующих функций:
mkstemp
mkostemp
mkostemps
mkdtemp
Вы передаете const - квалифицированный объект в качестве целевого аргумента одной из следующих функций:
strcpy
strncpy
strcat
memset
Вы выполняете операцию записи на const - квалифицированный объект.
Риск зависит от модификаций, сделанных к const - квалифицированный объект.
| Ситуация | Риск |
|---|---|
Передавая mkstemp, mkostemp, mkostemps, mkdtemp, и так далее. | Эти функции заменяют последние шесть символов своего первого аргумента со строкой. Поэтому они ожидают модифицируемый массив char в качестве своего первого аргумента. |
Передавая strcpy, strncpy, strcat, memset и так далее. | Эти функции изменяют свой целевой аргумент. Поэтому они ожидают модифицируемый массив char в качестве своего целевого аргумента. |
| Запись в объект | Спецификатор const подразумевает соглашение, что значение объекта не будет изменено. Путем записи в const - квалифицированный объект, вы расторгаете соглашение. Результат операции не определен. |
Фиксация зависит от модификации, сделанной к const - квалифицированный объект.
| Ситуация | Фиксация |
|---|---|
Передавая mkstemp, mkostemp, mkostemps, mkdtemp, и так далее. | Передайте объект non-const в качестве первого аргумента функции. |
Передавая strcpy, strncpy, strcat, memset и так далее. | Передайте объект non-const в качестве целевого аргумента функции. |
| Запись в объект | Выполните операцию записи на объекте non-const. |
Смотрите примеры мер ниже.
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Комментарии.
| Группа: Программирование |
| Язык: C | C++ |
| Значение по умолчанию: на |
Синтаксис командной строки: CONSTANT_OBJECT_WRITE |
| Влияние: высоко |
| ID CWE: 227, 471, 686 |