]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Fixes a bug in community set delete.
authorOndrej Zajicek <santiago@crfreenet.org>
Sat, 11 Sep 2010 18:14:53 +0000 (20:14 +0200)
committerOndrej Zajicek <santiago@crfreenet.org>
Sat, 11 Sep 2010 18:14:53 +0000 (20:14 +0200)
filter/filter.c

index 322fe0921dba85d962251e150b16e8988f2cbe28..971d230303ada8b0f57fb7cbb6a074d6c045c69a 100644 (file)
@@ -919,6 +919,9 @@ interpret(struct f_inst *what)
       runtime("Can't add/delete to non-clist");
 
     struct f_val dummy;
+    u16 op = what->aux;
+    i = 0;
+
     if ((v2.type == T_PAIR) || (v2.type == T_QUAD))
       i = v2.val.i;
 #ifndef IPV6
@@ -926,13 +929,13 @@ interpret(struct f_inst *what)
     else if (v2.type == T_IP)
       i = ipa_to_u32(v2.val.px.ip);
 #endif
-    else if ((v2.type == T_SET) && (what->aux == 'd') && clist_set_type(v2.val.t, &dummy))
-      what->aux = 'D';
+    else if ((v2.type == T_SET) && (op == 'd') && clist_set_type(v2.val.t, &dummy))
+      op = 'D';
     else
       runtime("Can't add/delete non-pair");
 
     res.type = T_CLIST;
-    switch (what->aux) {
+    switch (op) {
     case 'a': res.val.ad = int_set_add(f_pool, v1.val.ad, i); break;
     case 'd': res.val.ad = int_set_del(f_pool, v1.val.ad, i); break;
     case 'D': res.val.ad = clist_del_matching(f_pool, v1.val.ad, v2.val.t); break;