http://bbs.zzu.edu.cn/ZZU/con?B=BBSDev&F=M.1103785881.A在环顾四方和本站使用者列表里如果查看了一个已经不存在的用户,比如刚被站务坎掉但还没退出bbs的,进程就会被终止。
原因是这两个地方调用 t_query 的时候没有对要查看的用户不存在做处理,对方不存在的时候调用t_query会返回 -1 ,其它正常情况下都是 0 。所以检查一下返回值就可以了。
而调用这个 do_query 函数的
choose(YEA, 0, print_title, deal_key, show_userlist, do_query);
里面有一个检查 if ((*read) (page, num) == -1) return num; 的,所以可以让用户不存在时do_query返回 -1 。
修改list.c的 do_query() 和 do_query2() 两个函数
diff list.c list.c~
1022c1022
< if (t_query(user_record[curr]->userid)) return -1;
---
> t_query(user_record[curr]->userid);
1035c1035
< if (t_query(user_data[curr - star].userid)) return -1;
---
> t_query(user_data[curr - star].userid);
另外 talk.c 和 list.c 里的一些权限检查不对,比如呼叫,应该把判断 !strcmp(userinfo->userid, "guest" 的改成 !USERPERM(&uin, PERM_PAGE) ,不光是guest不能被呼叫。还有 deal_key 里“变换昵称”那个,至少应该判断一下当前用户有没有基本权限吧。。。现在是已经死了的人也能在那去改昵称~
--
FROM 222.22.10.*