From e0dee968772cded8b96ec18e5e37cad9ff54e4f9 Mon Sep 17 00:00:00 2001 From: Marco Randazzo Date: Tue, 4 Jun 2024 15:43:24 +0200 Subject: [PATCH] fixed dangling pointer using std::string --- src/libYARP_manager/src/yarp/manager/broker.h | 2 +- src/libYARP_manager/src/yarp/manager/execstate.cpp | 6 +++--- src/libYARP_manager/src/yarp/manager/localbroker.cpp | 12 ++++++------ src/libYARP_manager/src/yarp/manager/localbroker.h | 2 +- src/libYARP_manager/src/yarp/manager/yarpbroker.cpp | 12 ++++++------ src/libYARP_manager/src/yarp/manager/yarpbroker.h | 2 +- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/src/libYARP_manager/src/yarp/manager/broker.h b/src/libYARP_manager/src/yarp/manager/broker.h index 593398484fa..94911e5890b 100644 --- a/src/libYARP_manager/src/yarp/manager/broker.h +++ b/src/libYARP_manager/src/yarp/manager/broker.h @@ -47,7 +47,7 @@ class Broker { const char* carrier) = 0; virtual int running() = 0; // 0 if is not running and 1 if is running; otherwise -1. virtual bool exists(const char* port) = 0; - virtual const char* requestRpc(const char* szport, const char* request, double timeout=0.0) = 0; + virtual std::string requestRpc(const char* szport, const char* request, double timeout=0.0) = 0; virtual bool connected(const char* from, const char* to, const char* carrier) = 0; virtual const char* error() = 0; diff --git a/src/libYARP_manager/src/yarp/manager/execstate.cpp b/src/libYARP_manager/src/yarp/manager/execstate.cpp index 09b8b8a49da..624b26cfef6 100644 --- a/src/libYARP_manager/src/yarp/manager/execstate.cpp +++ b/src/libYARP_manager/src/yarp/manager/execstate.cpp @@ -127,10 +127,10 @@ bool Ready::checkResources(bool silent) } // check the rpc request/reply if required if(strlen((*itr).getRequest()) != 0) { - const char* reply = executable->getBroker()->requestRpc((*itr).getPort(), + std::string reply = executable->getBroker()->requestRpc((*itr).getPort(), (*itr).getRequest(), (*itr).getTimeout()); - if(reply == nullptr) { + if(reply.empty()) { allOK = false; OSTRINGSTREAM msg; msg<<"cannot request resource "<<(*itr).getPort()<<" for "<<(*itr).getRequest(); @@ -142,7 +142,7 @@ bool Ready::checkResources(bool silent) } } - if(!compareString(reply, (*itr).getReply())) { + if (!compareString(reply.c_str(), (*itr).getReply())) { allOK = false; OSTRINGSTREAM msg; msg<<"waiting for the expected reply from resource "<<(*itr).getPort(); diff --git a/src/libYARP_manager/src/yarp/manager/localbroker.cpp b/src/libYARP_manager/src/yarp/manager/localbroker.cpp index 37ffdbbc4dd..8c7c7f28127 100644 --- a/src/libYARP_manager/src/yarp/manager/localbroker.cpp +++ b/src/libYARP_manager/src/yarp/manager/localbroker.cpp @@ -445,21 +445,21 @@ bool LocalBroker::exists(const char* port) } -const char* LocalBroker::requestRpc(const char* szport, const char* request, double timeout) +std::string LocalBroker::requestRpc(const char* szport, const char* request, double timeout) { if ((szport == nullptr) || (request == nullptr)) { - return nullptr; + return {}; } if (!exists(szport)) { - return nullptr; + return {}; } // opening the port yarp::os::Port port; port.setTimeout((float)((timeout>0.0) ? timeout : CONNECTION_TIMEOUT)); if (!port.open("...")) { - return nullptr; + return {}; } ContactStyle style; @@ -476,7 +476,7 @@ const char* LocalBroker::requestRpc(const char* szport, const char* request, dou if(!ret) { port.close(); - return nullptr; + return {}; } Bottle msg, response; @@ -485,7 +485,7 @@ const char* LocalBroker::requestRpc(const char* szport, const char* request, dou NetworkBase::disconnect(port.getName(), szport); if(!response.size() || !ret) { port.close(); - return nullptr; + return {}; } port.close(); diff --git a/src/libYARP_manager/src/yarp/manager/localbroker.h b/src/libYARP_manager/src/yarp/manager/localbroker.h index 9608b8e2f0b..8c41c2f8374 100644 --- a/src/libYARP_manager/src/yarp/manager/localbroker.h +++ b/src/libYARP_manager/src/yarp/manager/localbroker.h @@ -56,7 +56,7 @@ class LocalBroker: public Broker, public yarp::os::Thread { const char *carrier) override; int running() override; bool exists(const char* port) override; - const char* requestRpc(const char* szport, const char* request, double timeout) override; + std::string requestRpc(const char* szport, const char* request, double timeout) override; bool connected(const char* from, const char* to, const char* carrier) override; const char* error() override; diff --git a/src/libYARP_manager/src/yarp/manager/yarpbroker.cpp b/src/libYARP_manager/src/yarp/manager/yarpbroker.cpp index e5276b4c375..562cd1bbdcc 100644 --- a/src/libYARP_manager/src/yarp/manager/yarpbroker.cpp +++ b/src/libYARP_manager/src/yarp/manager/yarpbroker.cpp @@ -529,21 +529,21 @@ bool YarpBroker::exists(const char* szport) return NetworkBase::exists(szport, style); } -const char* YarpBroker::requestRpc(const char* szport, const char* request, double timeout) +std::string YarpBroker::requestRpc(const char* szport, const char* request, double timeout) { if ((szport == nullptr) || (request == nullptr)) { - return nullptr; + return {}; } if (!exists(szport)) { - return nullptr; + return {}; } // opening the port yarp::os::Port port; port.setTimeout((float)((timeout>0.0) ? timeout : CONNECTION_TIMEOUT)); if (!port.open("...")) { - return nullptr; + return {}; } ContactStyle style; @@ -560,7 +560,7 @@ const char* YarpBroker::requestRpc(const char* szport, const char* request, doub if(!ret) { port.close(); - return nullptr; + return {}; } Bottle msg, response; @@ -569,7 +569,7 @@ const char* YarpBroker::requestRpc(const char* szport, const char* request, doub NetworkBase::disconnect(port.getName(), szport); if(!response.size() || !ret) { port.close(); - return nullptr; + return {}; } port.close(); diff --git a/src/libYARP_manager/src/yarp/manager/yarpbroker.h b/src/libYARP_manager/src/yarp/manager/yarpbroker.h index 014da9fe740..b0211ed66d9 100644 --- a/src/libYARP_manager/src/yarp/manager/yarpbroker.h +++ b/src/libYARP_manager/src/yarp/manager/yarpbroker.h @@ -49,7 +49,7 @@ class YarpBroker: public Broker, public yarp::os::PeriodicThread { bool rmconnect(const char* from, const char* to); int running() override; bool exists(const char* port) override; - const char* requestRpc(const char* szport, const char* request, double timeout) override; + std::string requestRpc(const char* szport, const char* request, double timeout) override; bool connected(const char* from, const char* to, const char* carrier) override; const char* error() override; bool initialized() override { return bInitialized;}