summaryrefslogtreecommitdiffstats
path: root/command_manager.py
diff options
context:
space:
mode:
authorJan Pokorný <jpokorny@redhat.com>2014-08-29 21:31:28 +0200
committerJan Pokorný <jpokorny@redhat.com>2014-08-29 23:39:12 +0200
commit607ed644a8de5af41370a4fb36ea6d0c38f8c96a (patch)
tree30bb46f321d62a206157d03f431cb1e21768af36 /command_manager.py
parentc5cf21e80245288c8af16229743470106bffb99b (diff)
downloadclufter-607ed644a8de5af41370a4fb36ea6d0c38f8c96a.tar.gz
clufter-607ed644a8de5af41370a4fb36ea6d0c38f8c96a.tar.xz
clufter-607ed644a8de5af41370a4fb36ea6d0c38f8c96a.zip
command_manager: add (dummy) infloop guards for recursive aliases
Signed-off-by: Jan Pokorný <jpokorny@redhat.com>
Diffstat (limited to 'command_manager.py')
-rw-r--r--command_manager.py6
1 files changed, 5 insertions, 1 deletions
diff --git a/command_manager.py b/command_manager.py
index 253c4ef..ed88ea3 100644
--- a/command_manager.py
+++ b/command_manager.py
@@ -83,7 +83,10 @@ class CommandManager(PluginManager):
commands.pop(cmd_name)
inverse_commands = dict((b, a) for a, b in commands.iteritems())
- for cmd_name in aliases:
+ for i, cmd_name in enumerate(aliases):
+ if i >= 100:
+ log.warn("Signs of infinite loop observed, escaping loop")
+ break
try:
alias_singleton = commands[cmd_name]
except KeyError:
@@ -94,6 +97,7 @@ class CommandManager(PluginManager):
if issubclass(resolved, (Command, CommandAlias)):
commands[cmd_name] = resolved
if issubclass(resolved, CommandAlias):
+ assert resolved is not alias_singleton, "triv. infloop"
# alias to alias recursion -> just repeat the cycle
aliases.append(resolved)
continue