Changeset 436
- Timestamp:
- 11/15/08 02:49:36 (3 years ago)
- Location:
- microregex/trunk
- Files:
-
- 3 edited
-
ChangeLog (modified) (1 diff)
-
microregex_internal.h (modified) (1 diff)
-
microregex_parser.c (modified) (14 diffs)
Legend:
- Unmodified
- Added
- Removed
-
microregex/trunk/ChangeLog
r433 r436 1 11/15/2008: 2 * Fixed double free issue by adding reference counting. (ticket #66) 3 1 4 11/9/2008: 2 5 * Fixed capture issues with '?' character. -
microregex/trunk/microregex_internal.h
r433 r436 54 54 char *character_class; 55 55 int invert, loop_from, loop_to; 56 int ref; 56 57 57 58 struct microregex_nfa_t *next1, *next2; -
microregex/trunk/microregex_parser.c
r433 r436 41 41 if (!*nfa) 42 42 { 43 end->ref++; 43 44 *nfa = end; 44 45 return; … … 59 60 ret->character_class = NULL; 60 61 ret->invert = 0; 62 ret->ref = 0; 61 63 ret->loop_to = backtrack; 62 64 ret->next1 = NULL; … … 72 74 ret->character_class = NULL; 73 75 ret->invert = 0; 76 ret->ref = 0; 74 77 ret->next1 = next1; 75 78 ret->next2 = next2; … … 84 87 ret->character_class = NULL; 85 88 ret->invert = 0; 89 ret->ref = 0; 86 90 ret->next1 = NULL; 87 91 ret->next2 = NULL; … … 96 100 ret->character_class = NULL; 97 101 ret->invert = 0; 102 ret->ref = 0; 98 103 ret->next1 = NULL; 99 104 ret->next2 = NULL; … … 108 113 ret->character_class = NULL; 109 114 ret->invert = 0; 115 ret->ref = 0; 110 116 ret->next1 = NULL; 111 117 ret->next2 = NULL; … … 120 126 ret->character_class = NULL; 121 127 ret->invert = 0; 128 ret->ref = 0; 122 129 ret->loop_from = from; 123 130 ret->loop_to = to; … … 134 141 ret->character_class = NULL; 135 142 ret->invert = 0; 143 ret->ref = 0; 136 144 ret->next1 = NULL; 137 145 ret->next2 = NULL; … … 146 154 ret->character_class = NULL; 147 155 ret->invert = 0; 156 ret->ref = 0; 148 157 ret->next1 = NULL; 149 158 ret->next2 = NULL; … … 158 167 ret->character_class = NULL; 159 168 ret->invert = 0; 169 ret->ref = 0; 160 170 ret->next1 = NULL; 161 171 ret->next2 = NULL; … … 170 180 ret->character_class = NULL; 171 181 ret->invert = 0; 182 ret->ref = 0; 172 183 ret->next1 = NULL; 173 184 ret->next2 = NULL; … … 182 193 ret->character_class = NULL; 183 194 ret->invert = 0; 195 ret->ref = 0; 184 196 ret->next1 = NULL; 185 197 ret->next2 = NULL; … … 395 407 ret->character_class = NULL; 396 408 ret->invert = 0; 409 ret->ref = 0; 397 410 ret->next1 = NULL; 398 411 ret->next2 = NULL; … … 544 557 } 545 558 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 } 548 565 *regex_obj = NULL; 549 566 }
Note: See TracChangeset
for help on using the changeset viewer.
