If a command is an alias, then it can only have .name, .flags and
.alias set and .flags should contain just VSH_CMD_FLAG_ALIAS.
Check if that's the case in self-test.

Signed-off-by: Michal Privoznik <mpriv...@redhat.com>
---
 tools/vsh.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/tools/vsh.c b/tools/vsh.c
index cf24586b25..3d5fef84f0 100644
--- a/tools/vsh.c
+++ b/tools/vsh.c
@@ -290,6 +290,26 @@ vshCmddefCheckInternals(vshControl *ctl,
             return -1;
         }
 
+        if (cmd->handler) {
+            vshError(ctl, _("command '%s' has handler set"), cmd->name);
+            return -1;
+        }
+
+        if (cmd->opts) {
+            vshError(ctl, _("command '%s' has options set"), cmd->name);
+            return -1;
+        }
+
+        if (cmd->info) {
+            vshError(ctl, _("command '%s' has info set"), cmd->name);
+            return -1;
+        }
+
+        if (cmd->flags & ~VSH_CMD_FLAG_ALIAS) {
+            vshError(ctl, _("command '%s' has multiple flags set"), cmd->name);
+            return -1;
+        }
+
         /* we don't need to continue as the real command will be checked 
separately */
         return 0;
     }
-- 
2.32.0

Reply via email to