http:////github.com/rakshasa/rtorrent/pull/1463.patch From 57240d94336a2560f9f3713598446c361c4efabb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Israel=20Pe=C3=B1a?= Date: Thu, 1 May 2025 16:56:33 +0200 Subject: [PATCH] Wrap fault struct in value --- src/rpc/rpc_manager.cc | 2 +- src/rpc/xmlrpc_tinyxml2.cc | 2 ++ test/rpc/xmlrpc_test.cc | 18 +++++++++--------- 3 files changed, 12 insertions(+), 10 deletions(-) diff --git a/src/rpc/rpc_manager.cc b/src/rpc/rpc_manager.cc index 620857113..7419f8b55 100644 --- a/src/rpc/rpc_manager.cc +++ b/src/rpc/rpc_manager.cc @@ -105,7 +105,7 @@ RpcManager::process(RPCType type, const char* in_buffer, uint32_t length, slot_r return m_xmlrpc.process(in_buffer, length, callback); } else { - const std::string response = "faultCode-501faultStringXML-RPC not supported"; + const std::string response = "faultCode-501faultStringXML-RPC not supported"; return callback(response.c_str(), response.size()); } break; diff --git a/src/rpc/xmlrpc_tinyxml2.cc b/src/rpc/xmlrpc_tinyxml2.cc index 8be742958..8f2468f2d 100644 --- a/src/rpc/xmlrpc_tinyxml2.cc +++ b/src/rpc/xmlrpc_tinyxml2.cc @@ -313,6 +313,7 @@ print_xmlrpc_fault(int faultCode, std::string faultString, tinyxml2::XMLPrinter* printer->OpenElement("methodResponse", true); printer->OpenElement("fault", true); + printer->OpenElement("value", true); printer->OpenElement("struct", true); printer->OpenElement("member", true); @@ -340,6 +341,7 @@ print_xmlrpc_fault(int faultCode, std::string faultString, tinyxml2::XMLPrinter* printer->CloseElement(true); printer->CloseElement(true); printer->CloseElement(true); + printer->CloseElement(true); } bool diff --git a/test/rpc/xmlrpc_test.cc b/test/rpc/xmlrpc_test.cc index 1bfdeadcd..220512d73 100644 --- a/test/rpc/xmlrpc_test.cc +++ b/test/rpc/xmlrpc_test.cc @@ -67,35 +67,35 @@ std::vector> basic_requests = std::make_tuple("Invalid - missing method", "no_such_method41", - "faultCode-506faultStringmethod 'no_such_method' not defined"), + "faultCode-506faultStringmethod 'no_such_method' not defined"), std::make_tuple("Invalid - i8 target", "xmlrpc_reflect41", - "faultCode-500faultStringinvalid parameters: target must be a string"), + "faultCode-500faultStringinvalid parameters: target must be a string"), std::make_tuple("Invalid - empty int tag", "xmlrpc_reflect", - "faultCode-501faultStringunable to parse empty integer"), + "faultCode-501faultStringunable to parse empty integer"), std::make_tuple("Invalid - empty int text", "xmlrpc_reflect", - "faultCode-501faultStringunable to parse empty integer"), + "faultCode-501faultStringunable to parse empty integer"), std::make_tuple("Invalid - broken XML", "thodCall>test_a41faultCode-503faultStringError=XML_ERROR_PARSING_ELEMENT ErrorID=6 (0x6) Line number=1: XMLElement name=method"), + "faultCode-503faultStringError=XML_ERROR_PARSING_ELEMENT ErrorID=6 (0x6) Line number=1: XMLElement name=method"), std::make_tuple("Invalid - non-integer i8", "xmlrpc_reflectstring value", - "faultCode-501faultStringunable to parse integer value"), + "faultCode-501faultStringunable to parse integer value"), std::make_tuple("Invalid - float i8", "xmlrpc_reflect3.14", - "faultCode-501faultStringunable to parse integer value"), + "faultCode-501faultStringunable to parse integer value"), std::make_tuple("Invalid - non-boolean boolean", "xmlrpc_reflectstring value", - "faultCode-501faultStringunknown boolean value: string value") + "faultCode-501faultStringunknown boolean value: string value") }; void @@ -134,7 +134,7 @@ XmlrpcTest::test_invalid_utf8() { void XmlrpcTest::test_size_limit() { std::string input = "xmlrpc_reflect\xc3\x28"; - std::string expected = "faultCode-509faultStringContent size exceeds maximum XML-RPC limit"; + std::string expected = "faultCode-509faultStringContent size exceeds maximum XML-RPC limit"; std::string output; m_xmlrpc.set_size_limit(1); m_xmlrpc.process(input.c_str(), input.size(), [&output](const char* c, uint32_t l){ output.append(c, l); return true;});