plugin XEP-0045: fixed crash when <delay> is used at an unexpected time.
This commit is contained in:
parent
8a59034935
commit
198db6c2ca
2 changed files with 22 additions and 1 deletions
|
|
@ -871,7 +871,10 @@ class SatMessageProtocol(xmppim.MessageProtocol):
|
||||||
|
|
||||||
if message_elt.uri is None:
|
if message_elt.uri is None:
|
||||||
# wokkel element parsing strip out root namespace
|
# wokkel element parsing strip out root namespace
|
||||||
message_elt.uri = C.NS_CLIENT
|
message_elt.defaultUri = message_elt.uri = C.NS_CLIENT
|
||||||
|
for c in message_elt.children:
|
||||||
|
if c.uri is None:
|
||||||
|
c.uri == C.NS_CLIENT
|
||||||
elif message_elt.uri != C.NS_CLIENT:
|
elif message_elt.uri != C.NS_CLIENT:
|
||||||
log.warning(_(
|
log.warning(_(
|
||||||
u"received <message> with a wrong namespace: {xml}"
|
u"received <message> with a wrong namespace: {xml}"
|
||||||
|
|
|
||||||
|
|
@ -1133,6 +1133,24 @@ class SatMUCClient(muc.MUCClient):
|
||||||
u"received history in unexpected state in room {room} (state: "
|
u"received history in unexpected state in room {room} (state: "
|
||||||
u"{state})").format(room = room.roomJID.userhost(),
|
u"{state})").format(room = room.roomJID.userhost(),
|
||||||
state = room.state))
|
state = room.state))
|
||||||
|
if not hasattr(room, "_history_d"):
|
||||||
|
# XXX: this hack is due to buggy behaviour seen in the wild because of the
|
||||||
|
# "mod_delay" prosody module being activated. This module add an
|
||||||
|
# unexpected <delay> elements which break our workflow.
|
||||||
|
log.warning(_(u"storing the unexpected message anyway, to avoid loss"))
|
||||||
|
# we have to restore URI which are stripped by wokkel parsing
|
||||||
|
for c in message.element.children:
|
||||||
|
if c.uri is None:
|
||||||
|
c.uri = C.NS_CLIENT
|
||||||
|
mess_data = self.client.messageProt.parseMessage(message.element)
|
||||||
|
message.element._mess_data = mess_data
|
||||||
|
self._addToHistory(None, user, message)
|
||||||
|
if mess_data[u'message'] or mess_data[u'subject']:
|
||||||
|
self.host.bridge.messageNew(
|
||||||
|
*self.client.messageGetBridgeArgs(mess_data),
|
||||||
|
profile=self.client.profile
|
||||||
|
)
|
||||||
|
return
|
||||||
room._history_d.addCallback(self._addToHistory, user, message)
|
room._history_d.addCallback(self._addToHistory, user, message)
|
||||||
room._history_d.addErrback(self._addToHistoryEb)
|
room._history_d.addErrback(self._addToHistoryEb)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue