summaryrefslogtreecommitdiffstats
path: root/arguments.c
diff options
context:
space:
mode:
authornicm <nicm>2021-09-02 07:11:03 +0000
committernicm <nicm>2021-09-02 07:11:03 +0000
commit329c2c2a919d3c66b08672ff37af4e2393dc9a95 (patch)
treeb733818547334bca07e96b930948e3d9c5b2bc3f /arguments.c
parentdaec63e5e6eb3390d53f4bf7f8a327df77e46c95 (diff)
Change copying arguments to that flags without arguments are inserted
correctly and empty arguments lists do not crash. Fixes crash reported by & ok mpi@.
Diffstat (limited to 'arguments.c')
-rw-r--r--arguments.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/arguments.c b/arguments.c
index d7274ff8..20d5e7ba 100644
--- a/arguments.c
+++ b/arguments.c
@@ -302,10 +302,13 @@ args_copy(struct args *args, int argc, char **argv)
struct args_value *value, *new_value;
u_int i;
+ cmd_log_argv(argc, argv, "%s", __func__);
+
new_args = args_create();
RB_FOREACH(entry, args_tree, &args->tree) {
- if (entry->count == 1) {
- args_set(new_args, entry->flag, NULL);
+ if (TAILQ_EMPTY(&entry->values)) {
+ for (i = 0; i < entry->count; i++)
+ args_set(new_args, entry->flag, NULL);
continue;
}
TAILQ_FOREACH(value, &entry->values, entry) {
@@ -314,6 +317,8 @@ args_copy(struct args *args, int argc, char **argv)
args_set(new_args, entry->flag, new_value);
}
}
+ if (args->count == 0)
+ return (new_args);
new_args->count = args->count;
new_args->values = xcalloc(args->count, sizeof *new_args->values);
for (i = 0; i < args->count; i++) {