summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorent Le Coz <louiz@louiz.org>2010-12-17 23:33:13 +0800
committerLance Stout <lancestout@gmail.com>2010-12-17 23:43:48 +0800
commit982bf3b2ecba86a76badf8cacbe82a8f5fc00b80 (patch)
treec3e801f449a723a68df97b0620b78bc7715dfbfa
parent0aee445e6976b03f7e04bcab6ec40ecf14b5d1a4 (diff)
downloadslixmpp-982bf3b2ecba86a76badf8cacbe82a8f5fc00b80.tar.gz
slixmpp-982bf3b2ecba86a76badf8cacbe82a8f5fc00b80.tar.bz2
slixmpp-982bf3b2ecba86a76badf8cacbe82a8f5fc00b80.tar.xz
slixmpp-982bf3b2ecba86a76badf8cacbe82a8f5fc00b80.zip
RootStanza raises unexpected exceptions
We now raise the unexpected exceptions instead of sending them on the network. - avoids flood (sending a traceback on a MUC, for example…) and maybe some security issues. - lets you handle the traceback (catch it to handle it properly, or with except_hook, etc) - an exception cannot be raised without you knowing
-rw-r--r--sleekxmpp/stanza/rootstanza.py19
1 files changed, 10 insertions, 9 deletions
diff --git a/sleekxmpp/stanza/rootstanza.py b/sleekxmpp/stanza/rootstanza.py
index 6975c72a..777314b9 100644
--- a/sleekxmpp/stanza/rootstanza.py
+++ b/sleekxmpp/stanza/rootstanza.py
@@ -54,16 +54,17 @@ class RootStanza(StanzaBase):
e.extension_args)
self['error'].append(extxml)
self['error']['type'] = e.etype
+ self.send()
else:
- # We probably didn't raise this on purpose, so send a traceback
+ # We probably didn't raise this on purpose, so send an error stanza
self['error']['condition'] = 'undefined-condition'
- if sys.version_info < (3, 0):
- self['error']['text'] = "SleekXMPP got into trouble."
- else:
- self['error']['text'] = traceback.format_tb(e.__traceback__)
- log.exception('Error handling {%s}%s stanza' %
- (self.namespace, self.name))
- self.send()
-
+ self['error']['text'] = "SleekXMPP got into trouble."
+ self.send()
+ # log the error
+ log.exception('Error handling {%s}%s stanza' %
+ (self.namespace, self.name))
+ # Finally raise the exception, so it can be handled (or not)
+ # at a higher level
+ raise e
register_stanza_plugin(RootStanza, Error)