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/

10-10 03:44