Changeset 276

Show
Ignore:
Timestamp:
03/20/07 13:33:26 (5 years ago)
Author:
knok
Message:

Fixed segfault bug on perl 5.005_03.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Search-Namazu/trunk/Search-Namazu/Namazu.xs

    r263 r276  
    209209        PPCODE: 
    210210                char *qstr; 
     211                char buffer[BUFSIZE]; 
    211212                char cqstr[BUFSIZE * 2]; 
    212213                AV *retar; 
     
    214215 
    215216                qstr = SvPV(query, PL_na); 
    216                 nmz_codeconv_query(qstr); 
    217                 strcpy(cqstr, qstr); 
     217                strncpy(buffer, qstr, BUFSIZE); 
     218                buffer[BUFSIZE - 1] = '\0'; 
     219                nmz_codeconv_query(buffer); 
     220                strcpy(cqstr, buffer); 
    218221                retar = call_search_main_c(cqstr, maxget); 
    219222#if ! defined(PERL_VERSION) || (PERL_VERSION == 6 && PERL_SUBVERSION == 0) 
    220223                { /* workaround for only one result */ 
    221                         SV *ohlist = perl_eval_pv("new Search::Namazu::Result", TRUE); 
    222                         XPUSHs(ohlist); 
     224                        SPAGAIN; 
    223225                } 
    224226#endif /* PERL_VERSION */ 
    225227                while (av_len(retar) >= 0) { 
    226                         XPUSHs(av_pop(retar)); 
     228                        XPUSHs(av_shift(retar)); 
    227229                } 
    228230                nmz_free_internal(); 
     
    235237        CODE: 
    236238                char *qstr; 
     239                char buffer[BUFSIZE]; 
    237240                char cqstr[BUFSIZE * 2]; 
    238241                AV *retar; 
     
    240243 
    241244                qstr = SvPV(query, PL_na); 
    242                 nmz_codeconv_query(qstr); 
    243                 strcpy(cqstr, qstr); 
     245                strncpy(buffer, qstr, BUFSIZE); 
     246                buffer[BUFSIZE - 1] = '\0'; 
     247                nmz_codeconv_query(buffer); 
     248                strcpy(cqstr, buffer); 
    244249                retar = call_search_main_c(cqstr, maxget); 
    245250                nmz_free_internal(); 
     
    256261        CODE: 
    257262                char *qstr; 
     263                char buffer[BUFSIZE]; 
    258264                char cqstr[BUFSIZE * 2]; 
    259265                AV *retar; 
     
    263269                fields = (AV *) SvRV(fieldref); 
    264270                qstr = SvPV(query, PL_na); 
    265                 nmz_codeconv_query(qstr); 
    266                 strcpy(cqstr, qstr); 
     271                strncpy(buffer, qstr, BUFSIZE); 
     272                buffer[BUFSIZE - 1] = '\0'; 
     273                nmz_codeconv_query(buffer); 
     274                strcpy(cqstr, buffer); 
    267275                retar = call_search_main_fields_c(cqstr, maxget, fields); 
    268276                nmz_free_internal();