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