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
This commit is contained in:
Florent Le Coz 2010-12-17 23:33:13 +08:00 committed by Lance Stout
parent 0aee445e69
commit 982bf3b2ec

View file

@ -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__)
self.send()
# log the error
log.exception('Error handling {%s}%s stanza' %
(self.namespace, self.name))
self.send()
# Finally raise the exception, so it can be handled (or not)
# at a higher level
raise e
register_stanza_plugin(RootStanza, Error)