[hbbtv] fix crash parsing xml.
[vuplus_dvbapp] / lib / python / Plugins / Extensions / HbbTV / aitreader.py
index 757b0f3..dda39dc 100644 (file)
@@ -1,8 +1,15 @@
-import os, xml.dom.minidom
+import os, xml.dom.minidom, re
 from enigma import iServiceInformation
 
 import vbcfg
 
+RE_XML_ILLEGAL = u'([\u0000-\u0008\u000b-\u000c\u000e-\u001f\ufffe-\uffff])' + \
+                               u'|' + \
+                               u'([%s-%s][^%s-%s])|([^%s-%s][%s-%s])|([%s-%s]$)|(^[%s-%s])' % \
+                               (unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
+                               unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff),
+                               unichr(0xd800),unichr(0xdbff),unichr(0xdc00),unichr(0xdfff))
+
 DUMPBIN = vbcfg.PLUGINROOT + "/dumpait"
 class eAITSectionReader:
        def __init__(self, demux, pmtid, sid):
@@ -72,7 +79,10 @@ class eAITSectionReader:
                        return False
                if len(document) == 0:
                        return False
+               document = re.sub(RE_XML_ILLEGAL, "?", document)
+               document = re.sub("&", "+", document)
                document = document.decode("cp1252").encode("utf-8")
+               document = "<URL>" + document + "</URL>"
                try:
                        self.mDocument = xml.dom.minidom.parseString(document)
                except Exception, ErrMsg:
@@ -99,4 +109,3 @@ def unit_test(demux, pmtid, sid):
                vbcfg.ERR("no data!!")
 
 #unit_test('0', 0x17d4, 0x2b66)
-