char []和char *

时间:2015-11-28 12:41:48

标签: c arrays char buffer overflow

当我对char []执行strcpy:

char buf[100];

strcpy(buf[], largeInput);

如果largeInput超过100个字节,则会出现缓冲区溢出。

但是我有一个问题,如果buf,而不是char[]char指针,那么是否会出现缓冲区溢出?

我认为,如果largeInput足够长,则在复制到char *buf时,它可能会到达另一个变量的内存区域。但是,我不确定这是一个漏洞。

我使用了flawfinder并指责这样的代码是缓冲区溢出漏洞

char *buf;

strcpy(buf, largeInput);

我不确定这是否是误报。

2 个答案:

答案 0 :(得分:2)

如果我们看到只是这部分代码

char *buf;
strcpy(buf, largeInput);

它是undefined behavior因为,你正在尝试写入单位化指针。

即使您之前已将内存分配给buflargeInput的内容多于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);