From fd53d8c4101ca559bcee72e2c1c6e65ba53efb83 Mon Sep 17 00:00:00 2001 From: jacksonmj Date: Sat, 22 Aug 2015 09:46:56 +0000 Subject: [PATCH] Alias: correct unescaping of alias names when creating registry entries in Alias.__init__ Only a problem when the rules on allowed alias names were relaxed, in which case backslashes were duplicated every time the bot restarted. Also factor out '.' and '|' checks into needsEscaping function --- plugins/Alias/plugin.py | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/plugins/Alias/plugin.py b/plugins/Alias/plugin.py index aaf73e82d..d8e91da58 100644 --- a/plugins/Alias/plugin.py +++ b/plugins/Alias/plugin.py @@ -102,9 +102,12 @@ def findBiggestAt(alias): else: return 0 +def needsEscaping(alias): + return '.' in alias or '|' in alias + def escapeAlias(alias): - """Encodes [a-z0-9.]+ into [a-z][a-z0-9]. - Format: aa(d)+.""" + """Encodes dots and pipes + Format: aa((d|p))+.""" prefix = '' new_alias = '' prefixes = 0 @@ -242,19 +245,19 @@ class Alias(callbacks.Plugin): # XXX This should go. aliases should be a space separate list, etc. group = conf.supybot.plugins.Alias.aliases group2 = conf.supybot.plugins.Alias.escapedaliases + prefixLen = len(registry.split('supybot.plugins.alias.aliases')) for (name, alias) in registry._cache.items(): name = name.lower() + nameSplit = registry.split(name) + if len(nameSplit) > prefixLen+1: + continue if name.startswith('supybot.plugins.alias.aliases.'): - name = name[len('supybot.plugins.alias.aliases.'):] - if '.' in name: - continue + name = nameSplit[-1] conf.registerGlobalValue(group, name, registry.String('', '')) conf.registerGlobalValue(group.get(name), 'locked', registry.Boolean(False, '')) elif name.startswith('supybot.plugins.alias.escapedaliases.'): - name = name[len('supybot.plugins.alias.escapedaliases.'):] - if '.' in name: - continue + name = nameSplit[-1] conf.registerGlobalValue(group2, name, registry.String('', '')) conf.registerGlobalValue(group2.get(name), @@ -355,7 +358,7 @@ class Alias(callbacks.Plugin): raise AliasError(format('Alias %q is locked.', name)) f = makeNewAlias(name, alias) f = types.MethodType(f, self) - if '.' in name or '|' in name: + if needsEscaping(name): aliasGroup = self.registryValue('escapedaliases', value=False) confname = escapeAlias(name) else: @@ -375,7 +378,7 @@ class Alias(callbacks.Plugin): if name in self.aliases and self.isCommandMethod(name): if evenIfLocked or not self.aliases[name][1]: del self.aliases[name] - if '.' in name or '|' in name: + if needsEscaping(name): conf.supybot.plugins.Alias.escapedaliases.unregister( escapeAlias(name)) else: