iptables: free xtables_match if found in need_protomatch
[project/firewall3.git] / iptables.c
index 9e8fa743c99f84222307128047d40d657916aa75..83308ec240bdc0e189db246ea1f7c81a56bec8e3 100644 (file)
@@ -709,12 +709,16 @@ init_match(struct fw3_ipt_rule *r, struct xtables_match *m, bool no_clone)
 static bool
 need_protomatch(struct fw3_ipt_rule *r, const char *pname)
 {
+       struct xtables_match *match;
+
        if (!pname)
                return false;
 
-       if (!xtables_find_match(pname, XTF_DONT_LOAD, NULL))
+       match = xtables_find_match(pname, XTF_DONT_LOAD, NULL);
+       if (!match)
                return true;
 
+       free(match);
        return !r->protocol_loaded;
 }
 
@@ -1022,7 +1026,7 @@ fw3_ipt_rule_icmptype(struct fw3_ipt_rule *r, struct fw3_icmptype *icmp)
 #endif
        {
                if (icmp->code_min == 0 && icmp->code_max == 0xFF)
-                       sprintf(buf, "%u", icmp->type);
+                       snprintf(buf, sizeof(buf), "%u", icmp->type);
                else
                        snprintf(buf, sizeof(buf), "%u/%u", icmp->type, icmp->code_min);