[New-bugs-announce] [issue29615] SimpleXMLRPCDispatcher._dispatch mangles tracebacks when invoking RPC calls through _dispatch

Petr MOTEJLEK report at bugs.python.org
Tue Feb 21 15:30:25 EST 2017


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: petr at 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 <report at bugs.python.org>
<http://bugs.python.org/issue29615>
_______________________________________


More information about the New-bugs-announce mailing list