From b730d31a7e5e23756ab1b076de21d41369a500c5 Mon Sep 17 00:00:00 2001 From: wang_zhiqiang Date: Wed, 28 Nov 2018 17:23:49 +0800 Subject: [PATCH] fix issue,not free string After called afb_req_get_application_id api needed to free the string. Change-Id: Ia59a3f4984854d61f4c5a8d9206f44988594ebf3 Signed-off-by: wang_zhiqiang --- src/hs-client.cpp | 38 +++++++++++++++++++++++++++++--------- src/hs-clientmanager.cpp | 16 ++++++++++++---- src/hs-helper.cpp | 25 +++++++++++++++++++++++++ src/hs-helper.h | 13 ++++++++----- 4 files changed, 74 insertions(+), 18 deletions(-) diff --git a/src/hs-client.cpp b/src/hs-client.cpp index 536ff6e..e97f844 100644 --- a/src/hs-client.cpp +++ b/src/hs-client.cpp @@ -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); } diff --git a/src/hs-clientmanager.cpp b/src/hs-clientmanager.cpp index ba29326..1355c99 100644 --- a/src/hs-clientmanager.cpp +++ b/src/hs-clientmanager.cpp @@ -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 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 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 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 lock(this->mtx); auto ip = client_list.find(appid); if(ip != client_list.end() && ip->second->unsubscribe(request, value) != 0) { diff --git a/src/hs-helper.cpp b/src/hs-helper.cpp index 07597b7..d0f5713 100644 --- a/src/hs-helper.cpp +++ b/src/hs-helper.cpp @@ -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; +} diff --git a/src/hs-helper.h b/src/hs-helper.h index c01e49a..95ecb66 100644 --- a/src/hs-helper.h +++ b/src/hs-helper.h @@ -19,12 +19,14 @@ #define AFB_BINDING_VERSION 3 #include #include +#include -#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*/ -- 2.16.6