mirror of
https://github.com/Mikaela/Limnoria.git
synced 2024-11-23 11:09:23 +01:00
Aka: Remove side effects in everythingReplace and fix crash when evaluating expressions where $* is in the nested command.
This commit is contained in:
parent
269f22a84b
commit
d6223eee9d
@ -298,19 +298,23 @@ class Aka(callbacks.Plugin):
|
|||||||
replace(tokens, lambda s: atRe.sub(regexpReplace, s))
|
replace(tokens, lambda s: atRe.sub(regexpReplace, s))
|
||||||
if wildcard:
|
if wildcard:
|
||||||
def everythingReplace(tokens):
|
def everythingReplace(tokens):
|
||||||
|
ret = False
|
||||||
new_tokens = []
|
new_tokens = []
|
||||||
for (i, token) in enumerate(tokens):
|
for (i, token) in enumerate(tokens):
|
||||||
if isinstance(token, list):
|
if isinstance(token, list):
|
||||||
if everythingReplace(token):
|
(sub_ret, sub_tokens) = everythingReplace(token)
|
||||||
return
|
new_tokens.append(sub_tokens)
|
||||||
|
if sub_ret:
|
||||||
|
continue
|
||||||
if token == '$*':
|
if token == '$*':
|
||||||
new_tokens.extend(args)
|
new_tokens.extend(args)
|
||||||
|
ret = True
|
||||||
else:
|
else:
|
||||||
new_tokens.append(
|
new_tokens.append(
|
||||||
token.replace('$*', ' '.join(args)))
|
token.replace('$*', ' '.join(args)))
|
||||||
tokens[:] = new_tokens
|
ret = True
|
||||||
return False
|
return (ret, new_tokens)
|
||||||
everythingReplace(tokens)
|
(ret, tokens) = everythingReplace(tokens)
|
||||||
self.Proxy(irc, msg, tokens)
|
self.Proxy(irc, msg, tokens)
|
||||||
if biggestDollar and (wildcard or biggestAt):
|
if biggestDollar and (wildcard or biggestAt):
|
||||||
flexargs = _(' at least')
|
flexargs = _(' at least')
|
||||||
|
@ -97,6 +97,10 @@ class AkaChannelTestCase(ChannelPluginTestCase):
|
|||||||
self.assertResponse('moo foo', 'foo')
|
self.assertResponse('moo foo', 'foo')
|
||||||
self.assertResponse('moo foo bar', 'foo bar')
|
self.assertResponse('moo foo bar', 'foo bar')
|
||||||
|
|
||||||
|
self.assertNotError('aka add spam "echo [echo $*]"')
|
||||||
|
self.assertResponse('spam egg', 'egg')
|
||||||
|
self.assertResponse('spam egg bacon', 'egg bacon')
|
||||||
|
|
||||||
def testChannel(self):
|
def testChannel(self):
|
||||||
self.assertNotError('aka add channel echo $channel')
|
self.assertNotError('aka add channel echo $channel')
|
||||||
self.assertResponse('aka channel', self.channel)
|
self.assertResponse('aka channel', self.channel)
|
||||||
|
Loading…
Reference in New Issue
Block a user