From b27c27685e9185edeb6e1293a9ddf375b90f4179 Mon Sep 17 00:00:00 2001 From: Yann Leboulanger <asterix@lagaule.org> Date: Fri, 16 Sep 2011 23:42:28 +0200 Subject: [PATCH] also replace non-character unicode AFTER decryption. Fixes #6974 --- src/common/connection_handlers.py | 2 ++ src/common/stanza_session.py | 3 +++ src/common/xmpp/dispatcher_nb.py | 5 ++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py index e5db8b2a49..c4dc05a862 100644 --- a/src/common/connection_handlers.py +++ b/src/common/connection_handlers.py @@ -977,6 +977,8 @@ class ConnectionHandlersBase: if keyID: def decrypt_thread(encmsg, keyID, obj): decmsg = self.gpg.decrypt(encmsg, keyID) + decmsg = self.connection.Dispatcher.replace_non_character( + decmsg) # \x00 chars are not allowed in C (so in GTK) obj.msgtxt = helpers.decode_string(decmsg.replace('\x00', '')) diff --git a/src/common/stanza_session.py b/src/common/stanza_session.py index 3cceec8c6c..fc1819437c 100644 --- a/src/common/stanza_session.py +++ b/src/common/stanza_session.py @@ -492,6 +492,9 @@ class EncryptedStanzaSession(ArchivingStanzaSession): for child in parsed.getChildren(): stanza.addChild(node=child) + # replace non-character unicode + stranza = self.conn.connection.Dispatcher.replace_non_character(stanza) + return stanza def decrypt(self, ciphertext): diff --git a/src/common/xmpp/dispatcher_nb.py b/src/common/xmpp/dispatcher_nb.py index bdec74afdd..37020e5c64 100644 --- a/src/common/xmpp/dispatcher_nb.py +++ b/src/common/xmpp/dispatcher_nb.py @@ -197,6 +197,9 @@ class XMPPDispatcher(PlugIn): raise ValueError('Incorrect stream start: (%s,%s). Terminating.' % (tag, ns)) + def replace_non_character(self, data): + return re.sub(self.invalid_chars_re, u'\ufffd'.encode('utf-8'), data) + def ProcessNonBlocking(self, data): """ Check incoming stream for data waiting @@ -212,7 +215,7 @@ class XMPPDispatcher(PlugIn): # disconnect method will never be called. # Is this intended? # also look at transports start_disconnect() - data = re.sub(self.invalid_chars_re, u'\ufffd'.encode('utf-8'), data) + data = self.replace_non_character(data) for handler in self._cycleHandlers: handler(self) if len(self._pendingExceptions) > 0: -- GitLab