New submission from Petr MOTEJLEK:

Hello,

We discovered that SimpleXMLRPCDispatcher mangles tracebacks printed from 
within the invoked RPC methods when an object that has _dispatch(method, 
params) defined has been registered with it

Steps to reproduce
- use 
https://docs.python.org/3.4/library/xmlrpc.server.html#xmlrpc.server.SimpleXMLRPCServer.register_instance
 and register within SimpleXMLRPCDispatcher an object with the 
_dispatch(method, params) method defined
- invoke any RPC method that prints a traceback (perhaps raise an exception in 
it, catch it and use logging.exception to log it) --> the traceback will 
display a very strange looking KeyError (its value being the name of the 
invoked method) and then the actual exception that was fed into 
logging.exception

The reason for this is that SimpleXMLRPCDispatcher._dispatch first attempts to 
acquire the function to invoke by reading from the functions registered with 
the dispatcher. When this attempt fails, KeyError is raised. During its 
handling different approaches are taken to acquire the function and for all but 
one when the function is acquired, handling of the KeyError ends and the 
function is called properly, outside of the except block

However, in the case of objects that define the _dispatch(method, params) 
function, the _dispatch(method, params) function is called straight away, still 
within the except block handling the KeyError, and this leads to the mangled 
traceback

This behavior is neither documented, nor expected (we believe) and thus the 
code should be changed

Will submit a PR (incl. tests) for this later on

----------
components: Library (Lib)
messages: 288319
nosy: p...@motejlek.net
priority: normal
severity: normal
status: open
title: SimpleXMLRPCDispatcher._dispatch mangles tracebacks when invoking RPC 
calls through _dispatch
versions: Python 3.4, Python 3.5, Python 3.6, Python 3.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue29615>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to