当我对char[]执行strcpy时:
char buf[100];
strcpy(buf[], largeInput);如果largeInput大于100个字节,则存在缓冲区溢出。
但是,我有一个问题,如果buf不是char[]是char指针,那么缓冲区溢出也会出现吗?
我认为,如果largeInput足够长,当复制到char *buf时,它可能会到达另一个变量的内存区域。但是,我不确定这是否是一个漏洞。
我使用了完美查找器,它指责这样的代码是缓冲区溢出漏洞。
char *buf;
strcpy(buf, largeInput);我只是不确定这是不是假阳性。
发布于 2015-11-28 12:44:31
如果我们只看到代码的这一部分
char *buf;
strcpy(buf, largeInput);它是未定义行为,因为您试图写入统一指针。
即使您以前已经将内存分配给buf,而且largeInput的内容比buf中分配的空间的内容更多,那么,是的,它也是UB。buf不可能自动调整。
但是,FWIW,您可以始终使用strdup()来保持安全。
发布于 2015-11-28 14:38:27
如果要支持任意大小的输入,则根据大小为largeInput分配内存。
char* largeInput = "very long string...";
char *buf = malloc(strlen(largeInput) + 1);
strcpy(buf, largeInput);
/* do something with buf */
free(buf);https://stackoverflow.com/questions/33971414
复制相似问题