Author: Anar
Email: [EMAIL PROTECTED]
Message:
mnogosearch v3.2.1
i think i've found where is the problem in the code (sql.c) :
(gdb) next
2879 Server.tag
=strdup(UDM_EMPTY2NULL(UdmSQLValue(res,i,3)));
(gdb) next
Program received signal SIGSEGV, Segmentation fault.
0x400a39fd in __strdup (s=0x0) at strdup.c:42
42 strdup.c: No such file or directory.
well, the same would be with category and charset if they are empty in the table..
why do you use UDM_EMPTY2NULL ? cant strdup work with NULL argument
then, I've set tag,category and charset to some nonempty value in my table.
but there is still a segfault..
below is something from gdb, note plz:
1.basic_auth is empty in my table, why do program step lines 2885-2891?
2. well, there is a call of UdmSQLValue in line 2893, but why it steps
twise thru this func? (the same in previous calls of func - lines 2877..and then)
3.well, proxy is empty also, and the same thing - segfault
(now, unlike tag,charset or category i cant set some stupid value for proxy - there
is NO proxy)
UdmLoadServerTable (Indexer=0x9195990, name=0xbfff3131 "servers2", flags=132) at
sql.c:2885
2885 if(Server.basic_auth){
(gdb)
2888 basic_auth=(char*)
UdmXmalloc(BASE64_LEN(strlen(Server.basic_auth)));
(gdb)
2889
udm_base64_encode(Server.basic_auth,basic_auth,strlen(Server.basic_auth));
(gdb)
2890 Server.basic_auth=basic_auth;
(gdb)
2891 }
(gdb)
2893 Server.proxy
=strdup(UDM_EMPTY2NULL(UdmSQLValue(res,i,8)));
(gdb)
Breakpoint 1, UdmSQLValue (res=0x918c8f0, i=0, j=8) at sql.c:2645
2645 if(res->lmysqlrow==0){
(gdb) next
2646 mysql_data_seek(res->mysqlres,(my_ulonglong)0);
(gdb)
2651 }else
(gdb)
2656 res->mysqlrow=mysql_fetch_row(res->mysqlres);
(gdb)
2658 res->lmysqlrow=i;
(gdb)
2659 if(res->mysqlrow)return(res->mysqlrow[j]?res->mysqlrow[j]:"");
(gdb)
2678 }
(gdb)
Breakpoint 1, UdmSQLValue (res=0x918c8f0, i=0, j=8) at sql.c:2645
2645 if(res->lmysqlrow==0){
(gdb)
2646 mysql_data_seek(res->mysqlres,(my_ulonglong)0);
(gdb)
2651 }else
(gdb)
2656 res->mysqlrow=mysql_fetch_row(res->mysqlres);
(gdb)
2658 res->lmysqlrow=i;
(gdb)
2659 if(res->mysqlrow)return(res->mysqlrow[j]?res->mysqlrow[j]:"");
(gdb)
2678 }
(gdb)
Program received signal SIGSEGV, Segmentation fault.
0x400a39fd in __strdup (s=0x0) at strdup.c:42
42 strdup.c: No such file or directory.
(gdb)
Program terminated with signal SIGSEGV, Segmentation fault.
The program no longer exists.
in the version 3.1.19 it was made this way:
sql.c:2020:
Server.url =sql_value(db->res,i,1);
Server.period =UDM_ATOI(sql_value(db->res,i,2));
Server.tag =sql_value(db->res,i,3);
Server.category =sql_value(db->res,i,4);
Server.charset =sql_value(db->res,i,5);
strncpy(Server.lang,UDM_NULL2EMPTY(sql_value(db->res,i,6)),2);Server.lang[2]='\0';
Server.basic_auth =UDM_EMPTY2NULL(sql_value(db->res,i,7));
if(Server.basic_auth){
char * basic_auth;
basic_auth=(char*)
UdmXmalloc(BASE64_LEN(strlen(Server.basic_auth)));
udm_base64_encode(Server.basic_auth,basic_auth,strlen(Server.basic_auth));
Server.basic_auth=basic_auth;
}
Server.proxy =UDM_EMPTY2NULL(sql_value(db->res,i,8));
Server.proxy_port =UDM_ATOI(sql_value(db->res,i,9));
Server.proxy_basic_auth =UDM_EMPTY2NULL(sql_value(db->res,i,10));
Server.maxhops =UDM_ATOI(sql_value(db->res,i,11));
Server.index =UDM_ATOI(sql_value(db->res,i,12));
Server.follow =UDM_ATOI(sql_value(db->res,i,13));
Server.deletebad =UDM_ATOI(sql_value(db->res,i,14));
and it does work
I am not C guru, of cause
so, something in my thougts may sound stupid
plz let me know what is a problem.
thnx
Reply: <http://www.mnogosearch.org/board/message.php?id=3282>
___________________________________________
If you want to unsubscribe send "unsubscribe general"
to [EMAIL PROTECTED]