diff options
author | Xtreak <tir.karthi@gmail.com> | 2018-12-29 08:53:14 (GMT) |
---|---|---|
committer | Serhiy Storchaka <storchaka@gmail.com> | 2018-12-29 08:53:14 (GMT) |
commit | 78de01198b047347abc5e458851bb12c48429e24 (patch) | |
tree | 283cae69008846284c79afa38dcf1ccd148a7238 | |
parent | 1f511e1af060e98fb789319a96076c06e7f98135 (diff) | |
download | cpython-78de01198b047347abc5e458851bb12c48429e24.zip cpython-78de01198b047347abc5e458851bb12c48429e24.tar.gz cpython-78de01198b047347abc5e458851bb12c48429e24.tar.bz2 |
bpo-35603: Escape table header of make_table output that can cause potential XSS. (GH-11341)
-rw-r--r-- | Lib/difflib.py | 4 | ||||
-rw-r--r-- | Lib/test/test_difflib.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2018-12-28-14-53-22.bpo-35603.rVCZAE.rst | 2 |
3 files changed, 15 insertions, 0 deletions
diff --git a/Lib/difflib.py b/Lib/difflib.py index 887c3c2..4571817 100644 --- a/Lib/difflib.py +++ b/Lib/difflib.py @@ -2036,6 +2036,10 @@ class HtmlDiff(object): s.append( fmt % (next_id[i],next_href[i],fromlist[i], next_href[i],tolist[i])) if fromdesc or todesc: + fromdesc = fromdesc.replace("&", "&").replace(">", ">") \ + .replace("<", "<") + todesc = todesc.replace("&", "&").replace(">", ">") \ + .replace("<", "<") header_row = '<thead><tr>%s%s%s%s</tr></thead>' % ( '<th class="diff_next"><br /></th>', '<th colspan="2" class="diff_header">%s</th>' % fromdesc, diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py index 745ccbd..63ebdb0 100644 --- a/Lib/test/test_difflib.py +++ b/Lib/test/test_difflib.py @@ -238,6 +238,15 @@ class TestSFpatches(unittest.TestCase): with open(findfile('test_difflib_expect.html')) as fp: self.assertEqual(actual, fp.read()) + def test_make_table_escape_table_header(self): + html_diff = difflib.HtmlDiff() + output = html_diff.make_table(patch914575_from1.splitlines(), + patch914575_to1.splitlines(), + fromdesc='<from>', + todesc='<to>') + self.assertIn('<from>', output) + self.assertIn('<to>', output) + def test_recursion_limit(self): # Check if the problem described in patch #1413711 exists. limit = sys.getrecursionlimit() diff --git a/Misc/NEWS.d/next/Library/2018-12-28-14-53-22.bpo-35603.rVCZAE.rst b/Misc/NEWS.d/next/Library/2018-12-28-14-53-22.bpo-35603.rVCZAE.rst new file mode 100644 index 0000000..03150c3 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2018-12-28-14-53-22.bpo-35603.rVCZAE.rst @@ -0,0 +1,2 @@ +Escape table header output of :meth:`difflib.HtmlDiff.make_table`. +Patch by Karthikeyan Singaravelan. |