Skip to content

Commit

Permalink
escape text (e.g. ampersand in group names) and test for it
Browse files Browse the repository at this point in the history
  • Loading branch information
miguelsousa committed Feb 5, 2016
1 parent bb65963 commit ab56841
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 7 deletions.
4 changes: 4 additions & 0 deletions normalization/test_ufonormalizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1291,8 +1291,12 @@ def test_convert_plist_Element_to_object(self):
self.assertEqual(_convertPlistElementToObject(element), {})
element = ET.fromstring("<dict><key>foo</key><string>bar</string></dict>")
self.assertEqual(_convertPlistElementToObject(element), {'foo': 'bar'})
element = ET.fromstring("<dict><key>A&amp;B</key><string>B&amp;A</string></dict>")
self.assertEqual(_convertPlistElementToObject(element), {'A&amp;B': 'B&amp;A'})
element = ET.fromstring("<string>foo</string>")
self.assertEqual(_convertPlistElementToObject(element), 'foo')
element = ET.fromstring("<string>&amp;</string>")
self.assertEqual(_convertPlistElementToObject(element), '&amp;')
element = ET.fromstring("<date>2015-07-05T22:16:18Z</date>")
self.assertEqual(_convertPlistElementToObject(element),
datetime.datetime(2015, 7, 5, 22, 16, 18))
Expand Down
15 changes: 8 additions & 7 deletions normalization/ufonormalizer.py
Original file line number Diff line number Diff line change
Expand Up @@ -1044,11 +1044,11 @@ def _convertPlistElementToObject(element):
key = None
for subElement in element:
if subElement.tag == "key":
key = subElement.text
key = xmlEscapeText(subElement.text)
else:
obj[key] = _convertPlistElementToObject(subElement)
elif tag == "string":
return element.text
return xmlEscapeText(element.text)
elif tag == "data":
return plistlib.Data.fromBase64(element.text)
elif tag == "date":
Expand Down Expand Up @@ -1211,12 +1211,12 @@ def _plistArray(self, data):
def _plistDict(self, data):
self.beginElement("dict")
for key, value in sorted(data.items()):
self.simpleElement("key", value=key)
self.simpleElement("key", value=xmlEscapeText(key))
self.propertyListObject(value)
self.endElement("dict")

def _plistString(self, data):
self.simpleElement("string", value=data)
self.simpleElement("string", value=xmlEscapeText(data))

def _plistBoolean(self, data):
if data:
Expand Down Expand Up @@ -1265,9 +1265,10 @@ def attributesToString(self, attrs):


def xmlEscapeText(text):
text = text.replace("&", "&amp;")
text = text.replace("<", "&lt;")
text = text.replace(">", "&gt;")
if text:
text = text.replace("&", "&amp;")
text = text.replace("<", "&lt;")
text = text.replace(">", "&gt;")
return text

def xmlEscapeAttribute(text):
Expand Down

0 comments on commit ab56841

Please sign in to comment.