From 91c64a05d2536cbe764cb94c3e24f021d34f7d9a Mon Sep 17 00:00:00 2001
From: "Andrew M. Kuchling" <amk@amk.ca>
Date: Fri, 9 Jun 2006 13:15:57 +0000
Subject: [Bug #1472827] Make saxutils.XMLGenerator handle \r\n\t in attribute
 values by escaping them properly.   2.4 bugfix candidate.

---
 Lib/test/test_sax.py        | 7 +++++--
 Lib/xmlcore/sax/saxutils.py | 2 ++
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index ded81fb..246d214 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -175,11 +175,14 @@ def test_xmlgen_attr_escape():
     gen.endElement("e")
     gen.startElement("e", {"a": "'\""})
     gen.endElement("e")
+    gen.startElement("e", {"a": "\n\r\t"})
+    gen.endElement("e")
     gen.endElement("doc")
     gen.endDocument()
 
-    return result.getvalue() == start \
-           + "<doc a='\"'><e a=\"'\"></e><e a=\"'&quot;\"></e></doc>"
+    return result.getvalue() == start + ("<doc a='\"'><e a=\"'\"></e>"
+                                         "<e a=\"'&quot;\"></e>"
+                                         "<e a=\"&#10;&#13;&#9;\"></e></doc>")
 
 def test_xmlgen_ignorable():
     result = StringIO()
diff --git a/Lib/xmlcore/sax/saxutils.py b/Lib/xmlcore/sax/saxutils.py
index 582b008..a496519 100644
--- a/Lib/xmlcore/sax/saxutils.py
+++ b/Lib/xmlcore/sax/saxutils.py
@@ -68,6 +68,8 @@ def quoteattr(data, entities={}):
     the optional entities parameter.  The keys and values must all be
     strings; each key will be replaced with its corresponding value.
     """
+    entities = entities.copy()
+    entities.update({'\n': '&#10;', '\r': '&#13;', '\t':'&#9;'})
     data = escape(data, entities)
     if '"' in data:
         if "'" in data:
-- 
cgit v0.12

