memcmp сравнивает данные, хранящиеся в строках после null terminator
Этот дефект возникает, когда:
Вы сравниваете две строки байт за байтом с memcmp функция.
Количество сравниваемых байтов таково, что вы сравниваете бессмысленные данные, хранящиеся после null terminator.
Для образца:
memcmp(string1, string2, sizeof(string1))
null terminator означает конец строки. Сравнение байтов после терминатора строки бессмысленно. Вы можете прийти к ложному выводу, что две строки не равны, даже если байты перед null terminator хранят одно и то же значение.
Использование strcmp для сравнения строк. Функция сравнивает строки только с null terminator.
Если вы используете memcmp для сравнения байт/байт двух строк избегайте сравнения байтов после нулевого терминатора строки. Определите количество байтов для сравнения с помощью strlen функция.
| Группа: Программирование |
| Язык: C | C++ |
| По умолчанию: On для рукописного кода, off для сгенерированного кода |
Синтаксис командной строки: MEMCMP_STRINGS |
| Влияние: Средний |
| ИДЕНТИФИКАТОР CWE: 188 |