X-Git-Url: http://git.archive.openwrt.org/?p=project%2Ffirewall3.git;a=blobdiff_plain;f=iptables.c;h=2684933970ef26d08bbbeaafffbaaa5fe0cf9fb8;hp=f39ed1ecd5b69a29e4749743974624f0fcb38c84;hb=35d57952d708007f5a08a72421fe55e775e3fd0f;hpb=1ce8986798f2003a9b2084a987971deedf52228e diff --git a/iptables.c b/iptables.c index f39ed1e..2684933 100644 --- a/iptables.c +++ b/iptables.c @@ -1162,7 +1162,7 @@ fw3_ipt_rule_append(struct fw3_ipt_rule *r, const char *fmt, ...) if (!em) { fprintf(stderr, "fw3_ipt_rule_append(): Can't find match '%s'\n", optarg); - return; + goto free; } init_match(r, em, true); @@ -1174,7 +1174,7 @@ fw3_ipt_rule_append(struct fw3_ipt_rule *r, const char *fmt, ...) if (!et) { fprintf(stderr, "fw3_ipt_rule_append(): Can't find target '%s'\n", optarg); - return; + goto free; } break; @@ -1263,6 +1263,7 @@ fw3_ipt_rule_append(struct fw3_ipt_rule *r, const char *fmt, ...) free(e); } +free: for (i = 1; i < r->argc; i++) free(r->argv[i]); @@ -1270,7 +1271,9 @@ fw3_ipt_rule_append(struct fw3_ipt_rule *r, const char *fmt, ...) xtables_rule_matches_free(&r->matches); - free(r->target->t); + if (r->target) + free(r->target->t); + free(r); /* reset all targets and matches */