Changeset 268

Show
Ignore:
Timestamp:
06/09/06 14:48:57 (6 years ago)
Author:
knok
Message:

Fixed segfault bug.

Location:
Search-Namazu/branches/0.96/Search-Namazu
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • Search-Namazu/branches/0.96/Search-Namazu/ChangeLog

    r264 r268  
     12006-06-09  NOKUBI Takatsugu  <knok@daionet.gr.jp> 
     2 
     3        * Namazu.xs: Fixed segfault bug on perl 5.005_03. 
     4          (Patched by Tadamasa Teranishi, thank you) 
     5 
    162006-06-06  NOKUBI Takatsugu  <knok@daionet.gr.jp> 
    27 
  • Search-Namazu/branches/0.96/Search-Namazu/Namazu.xs

    r264 r268  
    196196        PPCODE: 
    197197                char *qstr; 
     198                char buffer[BUFSIZE]; 
    198199                char cqstr[BUFSIZE * 2]; 
    199200                AV *retar; 
     
    201202 
    202203                qstr = SvPV(query, PL_na); 
    203                 nmz_codeconv_query(qstr); 
    204                 strcpy(cqstr, qstr); 
     204                strncpy(buffer, qstr, BUFSIZE); 
     205                buffer[BUFSIZE - 1] = '\0'; 
     206                nmz_codeconv_query(buffer); 
     207                strcpy(cqstr, buffer); 
    205208                retar = call_search_main_c(cqstr, maxget); 
    206209#if ! defined(PERL_VERSION) || (PERL_VERSION == 6 && PERL_SUBVERSION == 0) 
    207210                { /* workaround for only one result */ 
    208                         SV *ohlist = perl_eval_pv("new Search::Namazu::Result", TRUE); 
    209                         XPUSHs(ohlist); 
     211                        SPAGAIN; 
    210212                } 
    211213#endif /* PERL_VERSION */ 
    212214                while (av_len(retar) >= 0) { 
    213                         XPUSHs(av_pop(retar)); 
     215                        XPUSHs(av_shift(retar)); 
    214216                } 
    215217                nmz_free_internal(); 
     
    222224        CODE: 
    223225                char *qstr; 
     226                char buffer[BUFSIZE]; 
    224227                char cqstr[BUFSIZE * 2]; 
    225228                AV *retar; 
     
    227230 
    228231                qstr = SvPV(query, PL_na); 
    229                 nmz_codeconv_query(qstr); 
    230                 strcpy(cqstr, qstr); 
     232                strncpy(buffer, qstr, BUFSIZE); 
     233                buffer[BUFSIZE - 1] = '\0'; 
     234                nmz_codeconv_query(buffer); 
     235                strcpy(cqstr, buffer); 
    231236                retar = call_search_main_c(cqstr, maxget); 
    232237                nmz_free_internal(); 
     
    243248        CODE: 
    244249                char *qstr; 
     250                char buffer[BUFSIZE]; 
    245251                char cqstr[BUFSIZE * 2]; 
    246252                AV *retar; 
     
    250256                fields = (AV *) SvRV(fieldref); 
    251257                qstr = SvPV(query, PL_na); 
    252                 nmz_codeconv_query(qstr); 
    253                 strcpy(cqstr, qstr); 
     258                strncpy(buffer, qstr, BUFSIZE); 
     259                buffer[BUFSIZE - 1] = '\0'; 
     260                nmz_codeconv_query(buffer); 
     261                strcpy(cqstr, buffer); 
    254262                retar = call_search_main_fields_c(cqstr, maxget, fields); 
    255263                nmz_free_internal();