From f8f5726ffddee26ff47fd4683b3f1ea254046d1a Mon Sep 17 00:00:00 2001 From: Donat Zenichev Date: Wed, 12 Mar 2025 10:10:38 +0100 Subject: [PATCH] MT#59962 XMLRPC2DI: first allocate `XmlRpcServer` When handling `XMLRPC2DIServer` allocation, first make sure to have the `XmlRpcServer` and then do rest of processing (e.g.: `di_export`, `di_method`, `registerMethods()` etc.) Otherwise can lead to seg.faults when appealing to objects via still non-allocated `XmlRpcServer` object. Change-Id: Id3395ce3e0d6f2de76ed8caa1a786a6e139a851b --- apps/xmlrpc2di/XMLRPC2DI.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/apps/xmlrpc2di/XMLRPC2DI.cpp b/apps/xmlrpc2di/XMLRPC2DI.cpp index 39416f89..e4513df9 100644 --- a/apps/xmlrpc2di/XMLRPC2DI.cpp +++ b/apps/xmlrpc2di/XMLRPC2DI.cpp @@ -363,18 +363,6 @@ XMLRPC2DIServer::XMLRPC2DIServer(unsigned int port, INFO("XMLRPC Server: enabled builtin method 'get_cpslimit'\n"); INFO("XMLRPC Server: enabled builtin method 'set_cpslimit'\n"); - // export all methods via 'di' function? - if (di_export) { - // register method 'di' - di_method = new XMLRPC2DIServerDIMethod(s); - } - - vector export_ifaces = explode(direct_export, ";"); - for(vector::iterator it=export_ifaces.begin(); - it != export_ifaces.end(); it++) { - registerMethods(*it); - } - if (multithreaded) { /* default 5 */ @@ -391,6 +379,18 @@ XMLRPC2DIServer::XMLRPC2DIServer(unsigned int port, s = new XmlRpcServer(); } + // export all methods via 'di' function? + if (di_export) { + // register method 'di' + di_method = new XMLRPC2DIServerDIMethod(s); + } + + vector export_ifaces = explode(direct_export, ";"); + for(vector::iterator it=export_ifaces.begin(); + it != export_ifaces.end(); it++) { + registerMethods(*it); + } + INFO("Initialized XMLRPC2DIServer with: \n"); INFO(" IP = %s port = %u\n", bind_ip.empty()?"ANY":bind_ip.c_str(), port);