diff --git a/tests/test_www/test_util.py b/tests/test_www/test_util.py index 0c8e019d..b6b9c576 100644 --- a/tests/test_www/test_util.py +++ b/tests/test_www/test_util.py @@ -41,6 +41,8 @@ class TestFormatMode(unittest.TestCase): ('test ', 'test <danger>'), ('test ', 'test <danger="true">'), ("test ", 'test <danger='true'>'), + ('test&test', 'test&test'), + ('test&test', 'test&test'), ) for input, output in tests: diff --git a/www/lib/kojiweb/util.py b/www/lib/kojiweb/util.py index 427d4b6f..f25b0115 100644 --- a/www/lib/kojiweb/util.py +++ b/www/lib/kojiweb/util.py @@ -106,12 +106,7 @@ class DecodeUTF8(Cheetah.Filters.Filter): class XHTMLFilter(DecodeUTF8): def filter(self, *args, **kw): result = super(XHTMLFilter, self).filter(*args, **kw) - result = result.replace('&', '&') - result = result.replace('&amp;', '&') - result = result.replace('&nbsp;', ' ') - result = result.replace('&lt;', '<') - result = result.replace('&gt;', '>') - return result + return re.sub(r'&(?![a-zA-Z0-9#]+;)', '&', result) TEMPLATES = {} @@ -600,7 +595,7 @@ def escapeHTML(value): return value value = koji.fixEncoding(value) - return value.replace('&', '&').\ + return re.sub(r'&(?![a-zA-Z0-9#]+;)', '&', value).\ replace('<', '<').\ replace('>', '>').\ replace('"', '"').\