Browse code

fix handling of bfs_last (bb#713)

git-svn: trunk@3381

Tomasz Kojm authored on 2007/12/07 00:24:03
Showing 2 changed files
... ...
@@ -1,3 +1,7 @@
1
+Thu Dec  6 15:39:11 CET 2007 (tk)
2
+---------------------------------
3
+  * libclamav/matcher-ac.c: fix handling of bfs_last (bb#713)
4
+
1 5
 Thu Dec  6 15:29:00 CET 2007 (tk)
2 6
 ---------------------------------
3 7
   * libclamav/others.c: bump f-level
... ...
@@ -204,7 +204,7 @@ static int bfs_enqueue(struct bfs_list **bfs, struct bfs_list **last, struct cli
204 204
     return CL_SUCCESS;
205 205
 }
206 206
 
207
-static struct cli_ac_node *bfs_dequeue(struct bfs_list **bfs)
207
+static struct cli_ac_node *bfs_dequeue(struct bfs_list **bfs, struct bfs_list **last)
208 208
 {
209 209
 	struct bfs_list *lpt;
210 210
 	struct cli_ac_node *pt;
... ...
@@ -215,6 +215,8 @@ static struct cli_ac_node *bfs_dequeue(struct bfs_list **bfs)
215 215
     } else {
216 216
 	*bfs = (*bfs)->next;
217 217
 	pt = lpt->node;
218
+	if(lpt == *last)
219
+	    *last = NULL;
218 220
 	free(lpt);
219 221
 	return pt;
220 222
     }
... ...
@@ -239,7 +241,7 @@ static int ac_maketrans(struct cli_matcher *root)
239 239
 	}
240 240
     }
241 241
 
242
-    while((node = bfs_dequeue(&bfs))) {
242
+    while((node = bfs_dequeue(&bfs, &bfs_last))) {
243 243
 	if(node->leaf)
244 244
 	    continue;
245 245