[hbbtv] fix crash parsing xml.
authorsmlee <smlee@dev3>
Tue, 6 Jan 2015 07:36:57 +0000 (16:36 +0900)
committersmlee <smlee@dev3>
Tue, 6 Jan 2015 07:36:57 +0000 (16:36 +0900)
fix keymap bug.

lib/python/Plugins/Extensions/HbbTV/aitreader.py
lib/python/Plugins/Extensions/HbbTV/browser.py
lib/python/Plugins/Extensions/HbbTV/plugin.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)
-
index 73af39e..e7e7386 100644 (file)
@@ -296,9 +296,8 @@ class BrowserPreferenceWindow(ConfigListScreen, Screen):
                        mode = 1
                self._keymapType = self.menuItemKeyboardLayout.value
                BrowserSetting().setData(url, mode, self._keymapType)
-               # send contorller
-               #command_util = getCommandUtil()
-               #command_util.sendCommand('OP_BROWSER_NEED_RELOAD_KEYMAP')
+
+               VBController.command('CONTROL_RELOAD_KEYMAP')
                self.close()
 
        def keyRed(self):
index 22d5f69..1dd214c 100644 (file)
@@ -53,6 +53,7 @@ _OPCODE_LIST = [
                'OOIF_BROADCAST_PLAY',
                'OOIF_BROADCAST_STOP',
                'OOIF_BROADCAST_CHECK',
+               'CONTROL_RELOAD_KEYMAP',
                'OPCODE_END'
                ]