[Checkins] SVN: zope.exceptions/trunk/ Fix HTML-escaping bug in format_exception(as_html=True).

Marius Gedminas cvs-admin at zope.org
Mon Dec 10 16:58:12 UTC 2012


Log message for revision 128550:
  Fix HTML-escaping bug in format_exception(as_html=True).
  
  

Changed:
  U   zope.exceptions/trunk/CHANGES.txt
  U   zope.exceptions/trunk/src/zope/exceptions/exceptionformatter.py
  U   zope.exceptions/trunk/src/zope/exceptions/tests/test_exceptionformatter.py

-=-
Modified: zope.exceptions/trunk/CHANGES.txt
===================================================================
--- zope.exceptions/trunk/CHANGES.txt	2012-12-10 16:28:48 UTC (rev 128549)
+++ zope.exceptions/trunk/CHANGES.txt	2012-12-10 16:58:12 UTC (rev 128550)
@@ -4,13 +4,16 @@
 4.0.3 (unreleased)
 ------------------
 
-- TBD
+- Fixed format_exception(..., as_html=True) not to HTML-escape the '<br />'
+  it adds to the exception value.
 
+
 4.0.2 (2012-11-21)
 ------------------
 
 - Test Python 3.3 support under tox.
 
+
 4.0.1 (2012-08-20)
 ------------------
 

Modified: zope.exceptions/trunk/src/zope/exceptions/exceptionformatter.py
===================================================================
--- zope.exceptions/trunk/src/zope/exceptions/exceptionformatter.py	2012-12-10 16:28:48 UTC (rev 128549)
+++ zope.exceptions/trunk/src/zope/exceptions/exceptionformatter.py	2012-12-10 16:58:12 UTC (rev 128550)
@@ -161,7 +161,7 @@
 
     def formatExceptionOnly(self, etype, value):
         result = ''.join(traceback.format_exception_only(etype, value))
-        return result.replace('\n', self.line_sep)
+        return result
 
     def formatLastLine(self, exc_line):
         return self.escape(exc_line)
@@ -237,7 +237,8 @@
         return '<li>%s</li>' % line
 
     def formatLastLine(self, exc_line):
-        return '</ul><p>%s</p>' % self.escape(exc_line)
+        line = '</ul><p>%s</p>' % self.escape(exc_line)
+        return line.replace('\n', self.line_sep)
 
 
 def format_exception(t, v, tb, limit=None, as_html=False,

Modified: zope.exceptions/trunk/src/zope/exceptions/tests/test_exceptionformatter.py
===================================================================
--- zope.exceptions/trunk/src/zope/exceptions/tests/test_exceptionformatter.py	2012-12-10 16:28:48 UTC (rev 128549)
+++ zope.exceptions/trunk/src/zope/exceptions/tests/test_exceptionformatter.py	2012-12-10 16:58:12 UTC (rev 128550)
@@ -14,6 +14,8 @@
 """ExceptionFormatter tests.
 """
 import unittest
+import doctest
+import sys
 
 
 class TextExceptionFormatterTests(unittest.TestCase):
@@ -784,11 +786,29 @@
                 delattr(self.module, key)
 
 
+def doctest_format_exception_as_html():
+    """Test for format_exception (as_html=True)
+
+        >>> from zope.exceptions.exceptionformatter import format_exception
+        >>> try:
+        ...     exec 'foo = '
+        ... except:
+        ...     print ''.join(format_exception(*sys.exc_info(), as_html=True)),
+        <p>Traceback (most recent call last):</p>
+        <ul>
+        <li>  Module zope.exceptions.tests.test_exceptionformatter, line 2, in &lt;module&gt;<br />
+            exec 'foo = '</li>
+        </ul><p>  File "&lt;string&gt;", line 1<br />
+            foo =<br />
+                 ^<br />
+        SyntaxError: invalid syntax<br />
+        </p>
+
+    """
+
+
 def test_suite():
-    return unittest.TestSuite((
-        unittest.makeSuite(TextExceptionFormatterTests),
-        unittest.makeSuite(HTMLExceptionFormatterTests),
-        unittest.makeSuite(Test_format_exception),
-        unittest.makeSuite(Test_print_exception),
-        unittest.makeSuite(Test_extract_stack),
-    ))
+    return unittest.TestSuite([
+        unittest.defaultTestLoader.loadTestsFromName(__name__),
+        doctest.DocTestSuite(optionflags=doctest.NORMALIZE_WHITESPACE),
+    ])



More information about the checkins mailing list