summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2008-01-17 17:30:27 +0000
committerPablo Neira Ayuso <pablo@netfilter.org>2008-01-17 17:30:27 +0000
commit8e707d7c64c53c92a36b6c609b129aba8e51fab7 (patch)
tree5718a82c3af66032b386e8896819f8d7dbf5e23f
parent6afc5b720ed78173e4e21b759df16577fbce13d6 (diff)
- cleanup several code wraparounds
- check for malloc() return value in merge_opts() - check for merge_opts() return value
-rw-r--r--iptables.c25
1 files changed, 21 insertions, 4 deletions
diff --git a/iptables.c b/iptables.c
index 7096121c..16726d30 100644
--- a/iptables.c
+++ b/iptables.c
@@ -863,6 +863,8 @@ merge_options(struct option *oldopts, const struct option *newopts,
*option_offset = global_option_offset;
merge = malloc(sizeof(struct option) * (num_new + num_old + 1));
+ if (merge == NULL)
+ return NULL;
memcpy(merge, oldopts, num_old * sizeof(struct option));
free_opts(0); /* Release previous options merged if any */
for (i = 0; i < num_new; i++) {
@@ -1689,7 +1691,12 @@ int do_command(int argc, char *argv[], char **table, iptc_handle_t *handle)
target->revision);
if (target->init != NULL)
target->init(target->t);
- opts = merge_options(opts, target->extra_opts, &target->option_offset);
+ opts = merge_options(opts,
+ target->extra_opts,
+ &target->option_offset);
+ if (opts == NULL)
+ exit_error(OTHER_PROBLEM,
+ "can't alloc memory!");
}
break;
@@ -1741,9 +1748,15 @@ int do_command(int argc, char *argv[], char **table, iptc_handle_t *handle)
set_revision(m->m->u.user.name, m->revision);
if (m->init != NULL)
m->init(m->m);
- if (m != m->next)
+ if (m != m->next) {
/* Merge options for non-cloned matches */
- opts = merge_options(opts, m->extra_opts, &m->option_offset);
+ opts = merge_options(opts,
+ m->extra_opts,
+ &m->option_offset);
+ if (opts == NULL)
+ exit_error(OTHER_PROBLEM,
+ "can't alloc memory!");
+ }
}
break;
@@ -1889,7 +1902,11 @@ int do_command(int argc, char *argv[], char **table, iptc_handle_t *handle)
m->init(m->m);
opts = merge_options(opts,
- m->extra_opts, &m->option_offset);
+ m->extra_opts,
+ &m->option_offset);
+ if (opts == NULL)
+ exit_error(OTHER_PROBLEM,
+ "can't alloc memory!");
optind--;
continue;