[英]Buffer overflow vulnerabilities with char[ ] and char *
当我对char []执行strcpy时:
char buf[100];
strcpy(buf[], largeInput);
如果largeInput超过100个字节,则会出现缓冲区溢出。
但是我有一个问题,如果是buf
,而不是char[]
是一个char
指针,那么还会有缓冲区溢出吗?
我认为,如果largeInput
足够长,当复制到char *buf
,它可能会到达另一个变量的内存区域。 但是我不确定这是一个漏洞。
我使用了flawfinder,它指责这样的代码是缓冲区溢出漏洞
char *buf;
strcpy(buf, largeInput);
我只是不确定它是否是误报。
如果我们只看到这部分代码
char *buf;
strcpy(buf, largeInput);
它是未定义的行为,因为,您正在尝试写入单元化指针。
即使您之前已经为buf
分配了内存,并且largeInput
的内容largeInput
buf
分配空间的内容,那么,是的,它也是UB。 buf
无法自动调整 。
但是,FWIW,你总是可以使用strdup()
来更安全。
如果要支持任意大小的输入,请根据大小为largeInput分配内存。
char* largeInput = "very long string...";
char *buf = malloc(strlen(largeInput) + 1);
strcpy(buf, largeInput);
/* do something with buf */
free(buf);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.