aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLi Xiaoming <lixm.fnst@cn.fujitsu.com>2021-02-01 11:44:05 +0800
committerLi Xiaoming <lixm.fnst@cn.fujitsu.com>2021-02-01 11:44:05 +0800
commitf19cfe46d7172b512f06f5acf657b8d56e69a0b3 (patch)
treef21e2522a5dcc84ea8c42b35e0f3055fc0e0f2bf
parenta06ae44353446b2684a4a43f4332ad93a43feadb (diff)
Fix potential memory leak
json structure allocating code should be placed in where it is used, if there is a condition check which may cause a return before the before-mentioned place in the function. Bug-AGL: SPEC-3584 Change-Id: I5f88c7ce0b9257b2782144548f11a0e1d7ab388a Signed-off-by: Li Xiaoming <lixm.fnst@cn.fujitsu.com>
-rw-r--r--src/hs-client.cpp12
-rw-r--r--src/hs-proxy.cpp3
2 files changed, 7 insertions, 8 deletions
diff --git a/src/hs-client.cpp b/src/hs-client.cpp
index 7b631eb..9494f70 100644
--- a/src/hs-client.cpp
+++ b/src/hs-client.cpp
@@ -233,8 +233,6 @@ int HS_Client::showWindow(afb_req_t request)
{
AFB_INFO("%s application_id = %s.", __FUNCTION__, my_id.c_str());
int ret = 0;
- struct json_object* push_obj = json_object_new_object();
- hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__);
const char* param = afb_req_value(request, _parameter);
if(param) {
std::string req_appid = std::move(get_application_id(request));
@@ -243,6 +241,8 @@ int HS_Client::showWindow(afb_req_t request)
return AFB_REQ_GETAPPLICATIONID_ERROR;
}
+ struct json_object* push_obj = json_object_new_object();
+ hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__);
struct json_object* param_obj = json_tokener_parse(param);
json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid.c_str()));
json_object_object_add(push_obj, _parameter, param_obj);
@@ -299,10 +299,10 @@ int HS_Client::replyShowWindow(afb_req_t request)
{
AFB_INFO("%s application_id = %s.", __FUNCTION__, my_id.c_str());
int ret = 0;
- struct json_object* push_obj = json_object_new_object();
- hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__);
const char* param = afb_req_value(request, _parameter);
if(param) {
+ struct json_object* push_obj = json_object_new_object();
+ hs_add_object_to_json_object_str( push_obj, 4, _application_id, my_id.c_str(), _type, __FUNCTION__);
json_object_object_add(push_obj, _parameter, json_tokener_parse(param));
afb_event_push(my_event, push_obj);
}
@@ -336,9 +336,9 @@ int HS_Client::showNotification(afb_req_t request)
return AFB_REQ_GETAPPLICATIONID_ERROR;
}
- struct json_object* param_obj = json_object_new_object();
const char *icon = afb_req_value(request, _icon);
if(icon) {
+ struct json_object* param_obj = json_object_new_object();
json_object_object_add(param_obj, _icon, json_object_new_string(icon));
json_object_object_add(param_obj, _text, json_object_new_string(value));
json_object_object_add(param_obj, _caller, json_object_new_string(appid.c_str()));
@@ -488,4 +488,4 @@ int HS_Client::pushEvent(const char *event, struct json_object *param)
json_object_object_add(push_obj, _parameter, param);
afb_event_push(my_event, push_obj);
return 0;
-} \ No newline at end of file
+}
diff --git a/src/hs-proxy.cpp b/src/hs-proxy.cpp
index 33e5d53..33cfce3 100644
--- a/src/hs-proxy.cpp
+++ b/src/hs-proxy.cpp
@@ -154,7 +154,6 @@ int HS_AfmMainProxy::detail(afb_api_t api, const std::string &id, struct json_ob
*/
void HS_AfmMainProxy::start(struct hs_instance *instance, afb_req_t request, const std::string &id)
{
- struct json_object *args = json_object_new_string(id.c_str());
struct closure_data *cdata;
/* tentatively store the client and client context, as the afb_req_t
@@ -187,5 +186,5 @@ void HS_AfmMainProxy::start(struct hs_instance *instance, afb_req_t request, con
AFB_WARNING("Failed to handle subcribe\n");
}
- api_call(request->api, _afm_main, __FUNCTION__, args, cdata);
+ api_call(request->api, _afm_main, __FUNCTION__, json_object_new_string(id.c_str()), cdata);
}