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