当我对char []执行strcpy:
char buf[100];
strcpy(buf[], largeInput);
如果largeInput超过100个字节,则会出现缓冲区溢出。
但是我有一个问题,如果buf
,而不是char[]
是char
指针,那么是否会出现缓冲区溢出?
我认为,如果largeInput
足够长,则在复制到char *buf
时,它可能会到达另一个变量的内存区域。但是,我不确定这是一个漏洞。
我使用了flawfinder并指责这样的代码是缓冲区溢出漏洞
char *buf;
strcpy(buf, largeInput);
我不确定这是否是误报。
答案 0 :(得分:2)
如果我们看到只是这部分代码
char *buf;
strcpy(buf, largeInput);
它是undefined behavior因为,你正在尝试写入单位化指针。
即使您之前已将内存分配给buf
,largeInput
的内容多于buf
中已分配空间的内容,那么,是的,它也是UB 。 buf
无法自动调整 。
但是,FWIW,你总是可以使用strdup()
来保持更安全。
答案 1 :(得分:2)
如果要支持任意大小的输入,请根据大小为largeInput分配内存。
char* largeInput = "very long string...";
char *buf = malloc(strlen(largeInput) + 1);
strcpy(buf, largeInput);
/* do something with buf */
free(buf);