Fortify表示这是越界读取:
if (strncmp("test string", "less than 32 char", 32) == 0)
{
...
}
它表示函数从
less than 32 char
的界限之外读取数据。如果
strncmp
超过32个字符,而第二个字符串小于32个字符,是否真的有发现? 最佳答案
tl;dr-strncmp()
将继续比较字符串元素,直到字符串或32个元素(字符)的结尾(以较少的为准)。
(ny)字符串总是以空结尾,遇到空终止符时,不会执行进一步的比较。你的密码是安全的。
引用C11
,第7.24.4.4章(重点矿山)
int strncmp(const char *s1, const char *s2, size_t n);
strncmp
函数比较不超过n
个字符(在不比较空字符)从
s1
指向的数组到指向的数组通过
s2
。关于c - 这种strncmp用法是否包含超出范围的读取?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38878195/