问题出在 mail.c 里的 set_mailgroup_key() 与 init_mailgroup() 函数
把 mailgroup_t 里的 id数组直接接传给 usercomplete() 函数造成溢出, id的数组长度只有IDLEN+1, 而usercomplete()要求的长度是 STRLEN
修复这个bug 可做如下修改:
static int init_mailgroup(mailgroup_list_t * mgl, int entry, mailgroup_t * users)
{
+ char tmpuserid[STRLEN];
mailgroup_t user;
int ret = 0;
+ tmpuserid[0]='\0';
clear();
move(0, 0);
prints("初始化群体信件组用户向导\n");
bzero(&user, sizeof(user));
move(1, 0);
- usercomplete("请输入要增加的用户代号: ", user.id);
+ usercomplete("请输入要增加的用户代号: ",tmpuserid);
+ strncpy(user.id,tmpuserid,IDLEN);
+ user.id[IDLEN]='\0';
if (user.id[0] != '\0') {
if (searchuser(user.id) <= 0) {
move(2, 0);
prints(MSG_ERR_USERID);
pressanykey();
} else {
move(2, 0);
getdata(2, 0, "请输入用户说明: ", user.exp, sizeof(user.exp), DOECHO, NULL, true);
add_mailgroup_user(mgl, entry, users, &user);
move(3, 0);
prints("初始化完成!\n");
pressanykey();
ret = 1;
}
}
return ret;
}
另一个函数的修改方法类似.
我们站已经修改好了.
说实话,以前从来没用过群组信件的功能,这东西是干啥用的?
【 在 nbysy (孩子他爸) 的大作中提到: 】
: 确切的说,是bug,不是hole.
--
FROM 60.178.69.*