From: Ján Tomko Date: Tue, 10 Aug 2021 16:56:18 +0000 (+0200) Subject: vsh: do not cast away const X-Git-Tag: v7.7.0-rc1~230 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2cbc686d66b7faa1f4f146460482a7b35398e151;p=thirdparty%2Flibvirt.git vsh: do not cast away const 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 --- 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"),