From e5bf50805d7ec426b540c14256bdde7624c79f18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Krier?= Date: Sun, 30 Dec 2018 00:21:39 +0100 Subject: [PATCH] Return XML-RPC answer only to XML-RPC request This prevents to answer an XML-RPC fault to a request which only set xml as accepted mimetype. issue7913 review66481002 --- trytond/protocols/xmlrpc.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/trytond/protocols/xmlrpc.py b/trytond/protocols/xmlrpc.py index bd7d3beba5..273687bfd9 100644 --- a/trytond/protocols/xmlrpc.py +++ b/trytond/protocols/xmlrpc.py @@ -9,7 +9,7 @@ from decimal import Decimal from werkzeug.wrappers import Response from werkzeug.utils import cached_property -from werkzeug.exceptions import BadRequest +from werkzeug.exceptions import BadRequest, InternalServerError from trytond.protocols.wrappers import Request from trytond.exceptions import TrytonException @@ -167,12 +167,17 @@ class XMLProtocol: @classmethod def response(cls, data, request): - if isinstance(data, TrytonException): - data = client.Fault(data.code, str(data)) - elif isinstance(data, Exception): - data = client.Fault(255, str(data)) + if isinstance(request, XMLRequest): + if isinstance(data, TrytonException): + data = client.Fault(data.code, str(data)) + elif isinstance(data, Exception): + data = client.Fault(255, str(data)) + else: + data = (data,) + return Response(client.dumps( + data, methodresponse=True, allow_none=True), + content_type='text/xml') else: - data = (data,) - return Response(client.dumps( - data, methodresponse=True, allow_none=True), - content_type='text/xml') + if isinstance(data, Exception): + return InternalServerError(data) + return Response(data)