Changeset 436


Ignore:
Timestamp:
11/15/08 02:49:36 (3 years ago)
Author:
mooneer
Message:

Fixed double free issue by adding reference counting. (ticket #66)

Location:
microregex/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • microregex/trunk/ChangeLog

    r433 r436  
     111/15/2008: 
     2    * Fixed double free issue by adding reference counting. (ticket #66) 
     3 
    1411/9/2008: 
    25    * Fixed capture issues with '?' character. 
  • microregex/trunk/microregex_internal.h

    r433 r436  
    5454    char *character_class; 
    5555    int invert, loop_from, loop_to; 
     56    int ref; 
    5657 
    5758    struct microregex_nfa_t *next1, *next2; 
  • microregex/trunk/microregex_parser.c

    r433 r436  
    4141    if (!*nfa) 
    4242    { 
     43        end->ref++; 
    4344        *nfa = end; 
    4445        return; 
     
    5960    ret->character_class = NULL; 
    6061    ret->invert = 0; 
     62    ret->ref = 0; 
    6163    ret->loop_to = backtrack; 
    6264    ret->next1 = NULL; 
     
    7274    ret->character_class = NULL; 
    7375    ret->invert = 0; 
     76    ret->ref = 0; 
    7477    ret->next1 = next1; 
    7578    ret->next2 = next2; 
     
    8487    ret->character_class = NULL; 
    8588    ret->invert = 0; 
     89    ret->ref = 0; 
    8690    ret->next1 = NULL; 
    8791    ret->next2 = NULL; 
     
    96100    ret->character_class = NULL; 
    97101    ret->invert = 0; 
     102    ret->ref = 0; 
    98103    ret->next1 = NULL; 
    99104    ret->next2 = NULL; 
     
    108113    ret->character_class = NULL; 
    109114    ret->invert = 0; 
     115    ret->ref = 0; 
    110116    ret->next1 = NULL; 
    111117    ret->next2 = NULL; 
     
    120126    ret->character_class = NULL; 
    121127    ret->invert = 0; 
     128    ret->ref = 0; 
    122129    ret->loop_from = from; 
    123130    ret->loop_to = to; 
     
    134141    ret->character_class = NULL; 
    135142    ret->invert = 0; 
     143    ret->ref = 0; 
    136144    ret->next1 = NULL; 
    137145    ret->next2 = NULL; 
     
    146154    ret->character_class = NULL; 
    147155    ret->invert = 0; 
     156    ret->ref = 0; 
    148157    ret->next1 = NULL; 
    149158    ret->next2 = NULL; 
     
    158167    ret->character_class = NULL; 
    159168    ret->invert = 0; 
     169    ret->ref = 0; 
    160170    ret->next1 = NULL; 
    161171    ret->next2 = NULL; 
     
    170180    ret->character_class = NULL; 
    171181    ret->invert = 0; 
     182    ret->ref = 0; 
    172183    ret->next1 = NULL; 
    173184    ret->next2 = NULL; 
     
    182193    ret->character_class = NULL; 
    183194    ret->invert = 0; 
     195    ret->ref = 0; 
    184196    ret->next1 = NULL; 
    185197    ret->next2 = NULL; 
     
    395407    ret->character_class = NULL; 
    396408    ret->invert = 0; 
     409    ret->ref = 0; 
    397410    ret->next1 = NULL; 
    398411    ret->next2 = NULL; 
     
    544557    } 
    545558 
    546     free((*regex_obj)->character_class); 
    547     free(*regex_obj); 
     559    (*regex_obj)->ref--; 
     560    if ((*regex_obj)->ref <= 0) 
     561    { 
     562        free((*regex_obj)->character_class); 
     563        free(*regex_obj); 
     564    } 
    548565    *regex_obj = NULL; 
    549566} 
Note: See TracChangeset for help on using the changeset viewer.