From 23dfa23f311c92ddf5c3d64d546c49ef8330481d Mon Sep 17 00:00:00 2001 From: Valentin Lorentz Date: Thu, 8 Aug 2013 14:11:44 +0200 Subject: [PATCH] Aka: Prevent infinite loop (+ memory bomb) when nesting Akas using $*. --- plugins/Aka/plugin.py | 9 ++++++--- plugins/Aka/test.py | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/plugins/Aka/plugin.py b/plugins/Aka/plugin.py index f46be734f..5350eced9 100644 --- a/plugins/Aka/plugin.py +++ b/plugins/Aka/plugin.py @@ -298,14 +298,17 @@ class Aka(callbacks.Plugin): replace(tokens, lambda s: atRe.sub(regexpReplace, s)) if wildcard: def everythingReplace(tokens): + new_tokens = [] for (i, token) in enumerate(tokens): if isinstance(token, list): if everythingReplace(token): return if token == '$*': - tokens[i:i+1] = args - elif '$*' in token: - tokens[i] = token.replace('$*', ' '.join(args)) + new_tokens.extend(args) + else: + new_tokens.append( + token.replace('$*', ' '.join(args))) + tokens[:] = new_tokens return False everythingReplace(tokens) self.Proxy(irc, msg, tokens) diff --git a/plugins/Aka/test.py b/plugins/Aka/test.py index a6f2d2c62..588c2556e 100644 --- a/plugins/Aka/test.py +++ b/plugins/Aka/test.py @@ -157,6 +157,10 @@ class AkaChannelTestCase(ChannelPluginTestCase): self.assertResponse('fact 4', '24') self.assertRegexp('fact 50', 'more nesting') + def testDollarStarNesting(self): + self.assertNotError('aka add alias aka $*') + self.assertNotError('alias add a+ aka add $*') + class AkaTestCase(PluginTestCase): plugins = ('Aka', 'Alias', 'User', 'Utilities') @@ -198,6 +202,4 @@ class AkaTestCase(PluginTestCase): self.assertResponse('aka spam', 'egg') - - # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: