例子:字符串copy
迭代一
对字面字符串copy,没有超过buffer数组的长度,不存在风险。
#inc1ude <cstring>
int main (int argc, char **argv)
{
char buff[10];
strcpy(buff,"overflow");
return 0;
}
迭代二
输入可变
#inc1ude <cstring>
int main (int argc, char **argv)
{
char buff[10];
strcpy(buff, argv[1]);
return 0;
}
存在的问题:
- 对argv下标取值,可能越界访问
- 将argv[1]的内容copy到buff中,argv[1]的内容可能超出最大可存储长度10,存在缓冲区溢出风险
迭代三 修正
#inc1ude <cstring>
int main (int argc, char **argv)
{
if (argc < 2)
return -1;
char buff[10];
if (strlen(argv[1]) >= sizeof(buff)/sizeof(char))
return -1;
strcpy(buff, argv[1]);
return 0;
}