[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 メーリングリストの案内