diff options
author | Marius Vlad <marius.vlad@collabora.com> | 2021-02-01 11:44:05 +0800 |
---|---|---|
committer | Marius Vlad <marius.vlad@collabora.com> | 2021-05-06 12:04:17 +0300 |
commit | 4d7ff60ae87f00b9bd9bfa68f4f92b5af7581e3d (patch) | |
tree | fd62ab77e15839584d48314ecdc80f1531cbc8cc | |
parent | 496e9aa2539afbe922d6df9f3da1b0384b1b1351 (diff) |
Fix potential memory leakjellyfish
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
(cherry-picked from f19cfe46d7172b512f06f5acf657b8d56e69a0b3)
Change-Id: I5f88c7ce0b9257b2782144548f11a0e1d7ab388a
Signed-off-by: Li Xiaoming <lixm.fnst@cn.fujitsu.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
-rw-r--r-- | src/hs-client.cpp | 12 | ||||
-rw-r--r-- | src/hs-proxy.cpp | 1 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/hs-client.cpp b/src/hs-client.cpp index 792825b..185b423 100644 --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@ -235,8 +235,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)); @@ -245,6 +243,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); @@ -301,10 +301,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); } @@ -338,9 +338,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())); @@ -490,4 +490,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 30c258d..cdbf249 100644 --- a/src/hs-proxy.cpp +++ b/src/hs-proxy.cpp @@ -172,7 +172,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 |