为了账号安全,请及时绑定邮箱和手机立即绑定

这段程序为什么会出现bug?strncpy应怎么修改才行?谢谢。

这段程序为什么会出现bug?strncpy应怎么修改才行?谢谢。

C
ibeautiful 2023-03-05 11:07:14
void Database_set(struct Connection *conn, int id, const char *name, const char *email){struct Address *addr = &conn->db->rows[id];if(addr->set) die("Already set, delete it first");addr->set = 1;// WARNING: bug, read the "How To Break It" and fix thischar *res = strncpy(addr->name, name, MAX_DATA);// demonstrate the strncpy bugif(!res) die("Name copy failed");res = strncpy(addr->email, email, MAX_DATA);if(!res) die("Email copy failed");}
查看完整描述

2 回答

?
慕沐林林

TA贡献2016条经验 获得超9个赞

strncpy的参数是char*,而这个函数Database_set,name,和email的类型的是const char*
所以会出错,因为strncpy里面的实现需要操作指针位移,但是const却限制不允许修改指针,
你可以编译这段代码,一定是编译出错,而且会提示const char* 转换char*失败的问题

查看完整回答
反对 回复 2023-03-08
?
烙印99

TA贡献1829条经验 获得超13个赞

应该是指针越界吧,email的容量比MAX_DATA小的时候,就越界了,add->email同理
有溢出漏洞
应该在复制之前比较两个字符串的容量

查看完整回答
反对 回复 2023-03-08
  • 2 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号