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

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 this
char *res = strncpy(addr->name, name, MAX_DATA);
// demonstrate the strncpy bug
if(!res) die("Name copy failed");
res = strncpy(addr->email, email, MAX_DATA);
if(!res) die("Email copy failed");
}

ibeautiful
浏览 120回答 2
2回答

慕沐林林

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

烙印99

应该是指针越界吧,email的容量比MAX_DATA小的时候,就越界了,add->email同理有溢出漏洞应该在复制之前比较两个字符串的容量
打开App,查看更多内容
随时随地看视频慕课网APP