该程序定义了MAX_NEW_BOARD_NUM为100,如果有超过100个new board
就会产生内存越界
主要是因为load_boards2里面没有把个数超过最大数目作为终止条件
另外,顺便改两个参数类型不匹配的错误
Index: gennewboard.c
===================================================================
--- gennewboard.c (revision 171)
+++ gennewboard.c (working copy)
@@ -33,7 +33,7 @@
namelist=input_namelist;
titlelist=(const char**)malloc(sizeof(char**)*(pos+len-1));
indexlist=(int*)malloc(sizeof(int*)*(pos+len-1));
- for (n = 0; n < get_boardcount(); n++) {
+ for (n = 0; n < get_boardcount() && brdnum < len; n++) {
bptr = (struct boardheader *) getboard(n + 1);
if (!bptr)
continue;
@@ -109,7 +109,7 @@
int gen_newboards_xml()
{
FILE *fp = NULL;
- char* namelist[MAX_NEW_BOARD_NUM];
+ const char* namelist[MAX_NEW_BOARD_NUM];
struct newpostdata boarddata[MAX_NEW_BOARD_NUM];
int boardcount,i;
char title[STRLEN];
@@ -120,7 +120,7 @@
return -1;
}
- boardcount = load_boards2(&boarddata,NULL, -2, 1, MAX_NEW_BOARD_NUM, false, true, namelist);
+ boardcount = load_boards2(boarddata,NULL, -2, 1, MAX_NEW_BOARD_NUM, false, true, namelist);
printf("boardcount=%d\n",boardcount);
//return 0;
//boardcount = 0;
--
修改:lynch FROM 210.76.115.*
FROM 210.76.115.*