Fix potential memory leak 31/26331/2 jellyfish
authorMarius Vlad <marius.vlad@collabora.com>
Mon, 1 Feb 2021 03:44:05 +0000 (11:44 +0800)
committerMarius Vlad <marius.vlad@collabora.com>
Thu, 6 May 2021 09:04:17 +0000 (12:04 +0300)
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>
src/hs-client.cpp
src/hs-proxy.cpp

index 792825b..185b423 100644 (file)
@@ -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
+}
index 30c258d..cdbf249 100644 (file)
@@ -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