diff options
author | Mark Sapiro <mark@msapiro.net> | 2015-01-22 16:09:03 -0800 |
---|---|---|
committer | Mark Sapiro <mark@msapiro.net> | 2015-01-22 16:09:03 -0800 |
commit | 4758a0d904a12d6be21972fa432ad89ed9c1a768 (patch) | |
tree | 85d88b27697dd72a55d6470d9e88487bf29568c9 /Mailman/Utils.py | |
parent | ac22662b811ac9bcf58cf001c8fd5ad21e757c8b (diff) | |
download | mailman2-4758a0d904a12d6be21972fa432ad89ed9c1a768.tar.gz mailman2-4758a0d904a12d6be21972fa432ad89ed9c1a768.tar.xz mailman2-4758a0d904a12d6be21972fa432ad89ed9c1a768.zip |
A number of changes from the unofficial 2.2 branch have been backported to
the 2.1 branch for release with 2.1.19. The 2.2 branch is now no different
from the 2.1 branch and will no longer be maintained.
Diffstat (limited to '')
-rw-r--r-- | Mailman/Utils.py | 58 |
1 files changed, 57 insertions, 1 deletions
diff --git a/Mailman/Utils.py b/Mailman/Utils.py index 1a08c119..0cb9f122 100644 --- a/Mailman/Utils.py +++ b/Mailman/Utils.py @@ -1,4 +1,4 @@ -# Copyright (C) 1998-2014 by the Free Software Foundation, Inc. +# Copyright (C) 1998-2015 by the Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or # modify it under the terms of the GNU General Public License @@ -80,6 +80,7 @@ except ImportError: EMPTYSTRING = '' UEMPTYSTRING = u'' +CR = '\r' NL = '\n' DOT = '.' IDENTCHARS = ascii_letters + digits + '_' @@ -918,6 +919,61 @@ def oneline(s, cset): return EMPTYSTRING.join(s.splitlines()) +def strip_verbose_pattern(pattern): + # Remove white space and comments from a verbose pattern and return a + # non-verbose, equivalent pattern. Replace CR and NL in the result + # with '\\r' and '\\n' respectively to avoid multi-line results. + if not isinstance(pattern, str): + return pattern + newpattern = '' + i = 0 + inclass = False + skiptoeol = False + copynext = False + while i < len(pattern): + c = pattern[i] + if copynext: + if c == NL: + newpattern += '\\n' + elif c == CR: + newpattern += '\\r' + else: + newpattern += c + copynext = False + elif skiptoeol: + if c == NL: + skiptoeol = False + elif c == '#' and not inclass: + skiptoeol = True + elif c == '[' and not inclass: + inclass = True + newpattern += c + copynext = True + elif c == ']' and inclass: + inclass = False + newpattern += c + elif re.search('\s', c): + if inclass: + if c == NL: + newpattern += '\\n' + elif c == CR: + newpattern += '\\r' + else: + newpattern += c + elif c == '\\' and not inclass: + newpattern += c + copynext = True + else: + if c == NL: + newpattern += '\\n' + elif c == CR: + newpattern += '\\r' + else: + newpattern += c + i += 1 + return newpattern + + # Patterns and functions to flag possible XSS attacks in HTML. # This list is compiled from information at http://ha.ckers.org/xss.html, # http://www.quirksmode.org/js/events_compinfo.html, |