memcmp
сравнивает данные, хранимые в строках после пустого терминатора строки
Этот дефект происходит когда:
Вы сравниваете два байта байтом строк с memcmp
функция.
Количество сравненных байтов таково, что вы сравниваете бессмысленные данные, хранимые после пустого терминатора строки.
Например:
memcmp(string1, string2, sizeof(string1))
Пустой терминатор строки показывает конец строки. Сравнение байтов после пустого терминатора строки бессмысленно. Вы можете сделать ложный вывод, что две строки не равны, даже если байты перед пустым хранилищем терминатора строки то же значение.
Используйте strcmp
для сравнения строк. Функция сравнивает строки только до пустого терминатора строки.
Если вы используете memcmp
для сравнения байта байтом двух строк избегайте сравнения байтов после пустого терминатора строки. Определите количество байтов, чтобы выдержать сравнение при помощи strlen
функция.
Группа: Программирование |
Язык: C | C++ |
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода |
Синтаксис командной строки: MEMCMP_STRINGS |
Удар: носитель |
ID CWE: 188 |
Find defects (-checkers)
| Memory comparison of padding data