diff options
author | Florent Le Coz <louiz@louiz.org> | 2010-12-17 23:33:13 +0800 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2010-12-17 23:43:48 +0800 |
commit | 982bf3b2ecba86a76badf8cacbe82a8f5fc00b80 (patch) | |
tree | c3e801f449a723a68df97b0620b78bc7715dfbfa | |
parent | 0aee445e6976b03f7e04bcab6ec40ecf14b5d1a4 (diff) | |
download | slixmpp-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.py | 19 |
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) |