diff --git a/plugins/String/config.py b/plugins/String/config.py index e4f1840ad..75d2cf446 100644 --- a/plugins/String/config.py +++ b/plugins/String/config.py @@ -50,5 +50,11 @@ conf.registerGlobalValue(String.levenshtein, 'max', and more time. Using nested commands, strings can get quite large, hence this variable, to limit the size of arguments passed to the levenshtein command.""")) - +conf.registerGroup(String, 're') +conf.registerGlobalValue(String.re, 'timeout', + registry.PositiveFloat(5, """Determines the maximum time, in seconds, that + a regular expression is given to execute before being terminated. Since + there is a possibility that user input for the re command can cause it to + eat up large amounts of ram or cpu time, it's a good idea to keep this + low. Most normal regexps should not take very long at all.""")) # vim:set shiftwidth=4 softtabstop=4 expandtab textwidth=79: diff --git a/plugins/String/plugin.py b/plugins/String/plugin.py index 6127e2755..c390a1885 100644 --- a/plugins/String/plugin.py +++ b/plugins/String/plugin.py @@ -138,7 +138,8 @@ class String(callbacks.Plugin): s = 'You probably don\'t want to match the empty string.' irc.error(s) else: - v = commands.process(f, text, timeout=10, pn=self.name(), cn='re') + t = self.registryValue('re.timeout') + v = commands.process(f, text, timeout=t, pn=self.name(), cn='re') irc.reply(v) re = thread(wrap(re, [first('regexpMatcher', 'regexpReplacer'), 'text']))