memset
или wmemset
используемый с возможно неправильными аргументами
Этот дефект происходит, когда Polyspace® Bug Finder™ обнаруживает использование memset
или wmemset
функция с возможно неправильными аргументами.
void *memset (void *ptr, int value, size_t num)
заполняет первый num
байты блока памяти, что ptr
точки к с заданным value
. Если аргумент value
является неправильным, блок памяти инициализируется непреднамеренным значением.
Непреднамеренная инициализация может произойти в следующих случаях.
Проблема | Риск | Возможная фиксация |
---|---|---|
Вторым аргументом является '0' вместо 0 или '\0' . | Значение ASCII символьного '0' 48 (десятичное число), 0x30 (шестнадцатеричный), 069 (восьмеричный), но не 0 (или '\0' ) . | Если вы хотите инициализировать '0' , используйте одно из значений ASCII. В противном случае используйте 0 или '\0' . |
Вторые и третьи аргументы, вероятно, инвертируются. Например, третий аргумент является литералом, и второй аргумент не является литералом. | Если порядок инвертируется, блок памяти непреднамеренного размера инициализируется неправильными аргументами. | Инвертируйте порядок аргументов. |
Второй аргумент не может быть представлен в байте. | Если второй аргумент не может быть представлен в байте, и вы ожидаете, что каждый байт блока памяти будет заполнен тем аргументом, инициализация не происходит, как предназначено. | Примените немного маски к аргументу, чтобы привести к перенесенному или усеченному результату, который может быть представлен в байте. Когда вы применяете немного маски, убедитесь, что она производит ожидаемый результат. Например, замените |
Фиксация зависит от первопричины дефекта. Часто детали результата показывают последовательность событий, которые привели к дефекту. Можно реализовать закрепление на любом событии в последовательности. Если детали результата не показывают историю события, можно проследить использование, щелкните правой кнопкой по опциям по исходному коду и смотрите предыдущие связанные события. См. также Интерпретируют Результаты Bug Finder в Пользовательском интерфейсе Рабочего стола Polyspace.
Смотрите примеры мер ниже.
Если вы не хотите устранять проблему, добавьте комментарии в свой результат или код, чтобы избежать другого анализа. Смотрите Результаты Polyspace Адреса Через Исправления ошибок или Выравнивания.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: Off |
Синтаксис командной строки: MEMSET_INVALID_VALUE |
Удар: низко |
ID CWE: 665, 683 |
Find defects (-checkers)
| Use of memset with size argument zero