From 2cbc686d66b7faa1f4f146460482a7b35398e151 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A1n=20Tomko?= Date: Tue, 10 Aug 2021 18:56:18 +0200 Subject: [PATCH] vsh: do not cast away const MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of using the same variable to store either a const pointer or an allocated string, always make a copy. Signed-off-by: Ján Tomko Reviewed-by: Peter Krempa --- tools/vsh.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tools/vsh.c b/tools/vsh.c index 123284c636..3bbaecd2ea 100644 --- a/tools/vsh.c +++ b/tools/vsh.c @@ -318,7 +318,7 @@ vshCmddefCheckInternals(vshControl *ctl, case VSH_OT_ALIAS: { size_t j; - char *name = (char *)opt->help; /* cast away const */ + g_autofree char *name = NULL; char *p; if (opt->flags || !opt->help) { @@ -326,15 +326,16 @@ vshCmddefCheckInternals(vshControl *ctl, opt->name, cmd->name); return -1; /* alias options are tracked by the original name */ } - if ((p = strchr(name, '='))) - name = g_strndup(name, p - name); + if ((p = strchr(opt->help, '='))) + name = g_strndup(opt->help, p - opt->help); + else + name = g_strdup(opt->help); for (j = i + 1; cmd->opts[j].name; j++) { if (STREQ(name, cmd->opts[j].name) && cmd->opts[j].type != VSH_OT_ALIAS) break; } - if (name != opt->help) { - VIR_FREE(name); + if (p) { /* If alias comes with value, replacement must not be bool */ if (cmd->opts[j].type == VSH_OT_BOOL) { vshError(ctl, _("alias '%s' of command '%s' has mismatched alias type"),