From: Yaohan Chen Date: Mon, 23 Jul 2007 19:14:37 +0000 (+0000) Subject: * Prevent the alias from including arguments not substituded in command, as a check for X-Git-Url: https://git.netwichtig.de/gitweb/?a=commitdiff_plain;h=98dde0dfe318d01e108acaed2413cc842a907b12;p=user%2Fhenk%2Fcode%2Fruby%2Frbot.git * Prevent the alias from including arguments not substituded in command, as a check for possible incorrect command usage --- diff --git a/data/rbot/plugins/alias.rb b/data/rbot/plugins/alias.rb index 900df2c4..2fba9324 100644 --- a/data/rbot/plugins/alias.rb +++ b/data/rbot/plugins/alias.rb @@ -29,6 +29,7 @@ # to detect and stop this, but a few recursive calls can still cause spamming require 'yaml' +require 'set' class AliasPlugin < Plugin # an exception raised when loading or getting input of invalid alias definitions @@ -103,8 +104,9 @@ class AliasPlugin < Plugin # each alias is implemented by adding a message map, whose handler creates a message # containing the aliased command - command.grep(/<(\w+)>/) {$1}.all? {|s| text =~ /(?:^|\s)[:*]#{s}(?:\s|$)/ } or - raise AliasDefinitionError.new(_('Not all substitutions in command text have matching arguments in alias text')) + command.grep(/<(\w+)>/) {$1}.to_set == + text.grep(/(?:^|\s)[:*](\w+)(?:\s|$)/) {$1}.to_set or + raise AliasDefinitionError.new(_('The arguments in alias must match the substitutions in command, and vice versa')) @aliases[text] = command map text, :action => :"alias_handle<#{text}>", :auth_path => 'run'