Answer an oversized RPC response with a fault

Cap XML-RPC and JSON-RPC output at the SCGI response limit before handing it over.
This commit is contained in:
xirvik
2026-09-19 01:58:29 +00:00
committed by Jari Sundell
parent 2086e8e780
commit 80ae6a4590
8 changed files with 80 additions and 1 deletions
+8
View File
@@ -425,6 +425,14 @@ XmlRpc::process(const char* inBuffer, uint32_t length, slot_write slotWrite) {
// remains.
tinyxml2::XMLPrinter printer(nullptr, true, 0);
process_document(&doc, &printer);
if (printer.CStrSize() - 1 > static_cast<int>(SCgiTask::max_response_size)) {
tinyxml2::XMLPrinter fault_printer(nullptr, true, 0);
print_xmlrpc_fault(XMLRPC_LIMIT_EXCEEDED_ERROR, "Response size exceeds maximum XML-RPC limit", &fault_printer);
return slotWrite(fault_printer.CStr(), fault_printer.CStrSize() - 1);
}
return slotWrite(printer.CStr(), printer.CStrSize() - 1);
} catch (rpc_error& e) {
tinyxml2::XMLPrinter printer(nullptr, true, 0);