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:
		
				
					committed by
					
						
						Lance Stout
					
				
			
			
				
	
			
			
			
						parent
						
							0aee445e69
						
					
				
				
					commit
					982bf3b2ec
				
			@@ -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)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user