fix issue,not free string 39/18339/1 6.99.2 guppy/6.99.2 guppy_6.99.2
authorwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
Wed, 28 Nov 2018 09:23:49 +0000 (17:23 +0800)
committerwang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
Wed, 28 Nov 2018 09:26:26 +0000 (17:26 +0800)
After called afb_req_get_application_id api needed to
free the string.

Change-Id: Ia59a3f4984854d61f4c5a8d9206f44988594ebf3
Signed-off-by: wang_zhiqiang <wang_zhiqiang@dl.cn.nexty-ele.com>
src/hs-client.cpp
src/hs-clientmanager.cpp
src/hs-helper.cpp
src/hs-helper.h

index 536ff6e..e97f844 100644 (file)
@@ -216,9 +216,14 @@ int HS_Client::showWindow(afb_req_t request, const char* appid)
     hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
     const char* param = afb_req_value(request, _parameter);
     if(param) {
-        const char* req_appid = afb_req_get_application_id(request);
+        std::string req_appid = std::move(get_application_id(request));
+        if(req_appid.empty()) {
+            HMI_NOTICE("homescreen-service","can't get application identifier");
+            return AFB_REQ_GETAPPLICATIONID_ERROR;
+        }
+
         struct json_object* param_obj = json_tokener_parse(param);
-        json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid));
+        json_object_object_add(param_obj, _replyto, json_object_new_string(req_appid.c_str()));
         json_object_object_add(push_obj, _parameter, param_obj);
     }
     else {
@@ -247,10 +252,15 @@ int HS_Client::hideWindow(afb_req_t request)
     if(!checkEvent(__FUNCTION__))
         return 0;
 
-    HMI_NOTICE("homescreen-service","%s application_id = %s.", __FUNCTION__);
-    const char* req_appid = afb_req_get_application_id(request);
+    HMI_NOTICE("homescreen-service","%s called.", __FUNCTION__);
+    std::string req_appid = std::move(get_application_id(request));
+    if(req_appid.empty()) {
+        HMI_NOTICE("homescreen-service","can't get application identifier");
+        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, req_appid,
+    hs_add_object_to_json_object_str( push_obj, 4, _application_id, req_appid.c_str(),
     _type, __FUNCTION__);
     afb_event_push(my_event, push_obj);
     return 0;
@@ -310,14 +320,19 @@ int HS_Client::showNotification(afb_req_t request)
     const char *value = afb_req_value(request, _text);
     if(value) {
         HMI_NOTICE("homescreen-service","text is %s", value);
-        const char* appid = afb_req_get_application_id(request);
+        std::string appid =std::move(get_application_id(request));
+        if(appid.empty()) {
+            HMI_NOTICE("homescreen-service","can't get application identifier");
+            return AFB_REQ_GETAPPLICATIONID_ERROR;
+        }
+
         struct json_object* param_obj = json_object_new_object();
         const char *icon = afb_req_value(request, _icon);
         if(icon) {
             json_object_object_add(param_obj, _icon, json_object_new_string(icon));
             json_object_object_add(param_obj, _text, json_object_new_string(value));
             struct json_object* push_obj = json_object_new_object();
-            hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
+            hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__);
             json_object_object_add(push_obj, _parameter, param_obj);
             afb_event_push(my_event, push_obj);
         }
@@ -353,11 +368,16 @@ int HS_Client::showInformation(afb_req_t request)
     const char *value = afb_req_value(request, _info);
     if(value) {
         HMI_NOTICE("homescreen-service","info is %s", value);
-        const char* appid = afb_req_get_application_id(request);
+        std::string appid = std::move(get_application_id(request));
+        if(appid.empty()) {
+            HMI_NOTICE("homescreen-service","can't get application identifier");
+            return AFB_REQ_GETAPPLICATIONID_ERROR;
+        }
+
         struct json_object* param_obj = json_object_new_object();
         json_object_object_add(param_obj, _info, json_object_new_string(value));
         struct json_object* push_obj = json_object_new_object();
-        hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid, _type, __FUNCTION__);
+        hs_add_object_to_json_object_str( push_obj, 4, _application_id, appid.c_str(), _type, __FUNCTION__);
         json_object_object_add(push_obj, _parameter, param_obj);
         afb_event_push(my_event, push_obj);
     }
index ba29326..1355c99 100644 (file)
@@ -254,9 +254,13 @@ int HS_ClientManager::subscribe(afb_req_t request)
     const char *value = afb_req_value(request, "event");
     HMI_NOTICE("homescreen-service","value is %s", value);
     if(value) {
-        std::string appid(afb_req_get_application_id(request));
-        std::lock_guard<std::mutex> lock(this->mtx);
+        std::string appid =std::move(get_application_id(request));
+        if(appid.empty()) {
+            HMI_NOTICE("homescreen-service","can't get application identifier");
+            return AFB_REQ_GETAPPLICATIONID_ERROR;
+        }
 
+        std::lock_guard<std::mutex> lock(this->mtx);
         HS_Client* client = nullptr;
         auto ip = client_list.find(appid);
         if(ip != client_list.end()) {
@@ -295,9 +299,13 @@ int HS_ClientManager::unsubscribe(afb_req_t request)
     HMI_NOTICE("homescreen-service","value is %s", value);
     int ret = 0;
     if(value) {
-        std::string appid(afb_req_get_application_id(request));
-        std::lock_guard<std::mutex> lock(this->mtx);
+        std::string appid = std::move(get_application_id(request));
+        if(appid.empty()) {
+            HMI_NOTICE("homescreen-service","can't get application identifier");
+            return AFB_REQ_GETAPPLICATIONID_ERROR;
+        }
 
+        std::lock_guard<std::mutex> lock(this->mtx);
         auto ip = client_list.find(appid);
         if(ip != client_list.end()
         && ip->second->unsubscribe(request, value) != 0) {
index 07597b7..d0f5713 100644 (file)
@@ -246,3 +246,28 @@ int hs_search_event_name_index(const char* value)
     }
     return ret;
 }
+
+/**
+ * get application id from request
+ *
+ * #### Parameters
+ * - request : the request
+ *
+ * #### Return
+ * got application id
+ *
+ */
+std::string get_application_id(const afb_req_t request)
+{
+    std::string appid;
+    char *app_id = afb_req_get_application_id(request);
+    if(app_id == nullptr) {
+        appid = std::string("");
+    }
+    else {
+        appid = std::string(app_id);
+        free(app_id);
+    }
+
+    return appid;
+}
index c01e49a..95ecb66 100644 (file)
 #define AFB_BINDING_VERSION 3
 #include <afb/afb-binding.h>
 #include <json-c/json.h>
+#include <string>
 
-#define AFB_EVENT_BAD_REQUEST       100
-#define AFB_REQ_SUBSCRIBE_ERROR     101
-#define AFB_REQ_UNSUBSCRIBE_ERROR   102
-#define AFB_REQ_SHOWNOTIFICATION_ERROR   103
-#define AFB_REQ_SHOWINFORMATION_ERROR    104
+#define AFB_EVENT_BAD_REQUEST                 100
+#define AFB_REQ_SUBSCRIBE_ERROR               101
+#define AFB_REQ_UNSUBSCRIBE_ERROR             102
+#define AFB_REQ_SHOWNOTIFICATION_ERROR        103
+#define AFB_REQ_SHOWINFORMATION_ERROR         104
+#define AFB_REQ_GETAPPLICATIONID_ERROR        105
 
 typedef enum REQ_ERROR
 {
@@ -47,5 +49,6 @@ void hs_add_object_to_json_object(struct json_object* j_obj, int count, ...);
 void hs_add_object_to_json_object_str(struct json_object* j_obj, int count, ...);
 void hs_add_object_to_json_object_func(struct json_object* j_obj, const char* verb_name, int count, ...);
 int hs_search_event_name_index(const char* value);
+std::string get_application_id(const afb_req_t request);
 
 #endif /*HOMESCREEN_HELPER_H*/