[Namazu-cvs 1492] r276 - Search-Namazu/trunk/Search-Namazu

cvsd @ vaj.namazu.org cvsd @ vaj.namazu.org
2007年 3月 20日 (火) 13:33:27 JST


Author: knok
Date: 2007-03-20 13:33:26 +0900 (Tue, 20 Mar 2007)
New Revision: 276

Modified:
   Search-Namazu/trunk/Search-Namazu/Namazu.xs
Log:
Fixed segfault bug on perl 5.005_03.


Modified: Search-Namazu/trunk/Search-Namazu/Namazu.xs
===================================================================
--- Search-Namazu/trunk/Search-Namazu/Namazu.xs	2006-09-19 08:22:20 UTC (rev 275)
+++ Search-Namazu/trunk/Search-Namazu/Namazu.xs	2007-03-20 04:33:26 UTC (rev 276)
@@ -208,22 +208,24 @@
 
 	PPCODE:
 		char *qstr;
+                char buffer[BUFSIZE];
 		char cqstr[BUFSIZE * 2];
 		AV *retar;
 		int i;
 
 		qstr = SvPV(query, PL_na);
-		nmz_codeconv_query(qstr);
-		strcpy(cqstr, qstr);
+                strncpy(buffer, qstr, BUFSIZE);
+                buffer[BUFSIZE - 1] = '\0';
+		nmz_codeconv_query(buffer);
+		strcpy(cqstr, buffer);
 		retar = call_search_main_c(cqstr, maxget);
 #if ! defined(PERL_VERSION) || (PERL_VERSION == 6 && PERL_SUBVERSION == 0)
 		{ /* workaround for only one result */
-			SV *ohlist = perl_eval_pv("new Search::Namazu::Result", TRUE);
-			XPUSHs(ohlist);
+                        SPAGAIN;
 		}
 #endif /* PERL_VERSION */
 		while (av_len(retar) >= 0) {
-			XPUSHs(av_pop(retar));
+			XPUSHs(av_shift(retar));
 		}
 		nmz_free_internal();
 
@@ -234,13 +236,16 @@
 
 	CODE:
 		char *qstr;
+                char buffer[BUFSIZE];
 		char cqstr[BUFSIZE * 2];
 		AV *retar;
 		int i;
 
 		qstr = SvPV(query, PL_na);
-		nmz_codeconv_query(qstr);
-		strcpy(cqstr, qstr);
+                strncpy(buffer, qstr, BUFSIZE);
+                buffer[BUFSIZE - 1] = '\0';
+                nmz_codeconv_query(buffer);
+                strcpy(cqstr, buffer);
 		retar = call_search_main_c(cqstr, maxget);
 		nmz_free_internal();
 		RETVAL = newRV_inc((SV*) retar);
@@ -255,6 +260,7 @@
 
 	CODE:
 		char *qstr;
+                char buffer[BUFSIZE];
 		char cqstr[BUFSIZE * 2];
 		AV *retar;
 		AV *fields;
@@ -262,8 +268,10 @@
 
 		fields = (AV *) SvRV(fieldref);
 		qstr = SvPV(query, PL_na);
-		nmz_codeconv_query(qstr);
-		strcpy(cqstr, qstr);
+                strncpy(buffer, qstr, BUFSIZE);
+                buffer[BUFSIZE - 1] = '\0';
+                nmz_codeconv_query(buffer);
+                strcpy(cqstr, buffer);
 		retar = call_search_main_fields_c(cqstr, maxget, fields);
 		nmz_free_internal();
 		RETVAL = newRV_inc((SV*) retar);




Namazu-cvs メーリングリストの案内