Fix wrong validation check 12/178612/6
authorhyunho <hhstark.kang@samsung.com>
Fri, 11 May 2018 01:02:09 +0000 (10:02 +0900)
committerhyunho <hhstark.kang@samsung.com>
Fri, 11 May 2018 10:41:53 +0000 (19:41 +0900)
Change-Id: I883b9802c20ca79738a372bef351bda206f3e6a7
Signed-off-by: hyunho <hhstark.kang@samsung.com>
Signed-off-by: jusung son <jusung07.son@samsung.com>
watchface-common/watchface-util.cc [changed mode: 0644->0755]
watchface-common/watchface-util.h [changed mode: 0644->0755]
watchface-complication-provider/watchface-complication-provider.cc [changed mode: 0644->0755]
watchface-complication/watchface-complication.cc [changed mode: 0644->0755]
watchface-complication/watchface-editable.cc [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index c87b915..684035b
@@ -187,5 +187,27 @@ out:
 
     return true;
   }
+
+  bool CheckComplicationType(int type) {
+    switch (type) {
+    case WATCHFACE_COMPLICATION_TYPE_NO_DATA:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_SHORT_TEXT:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_LONG_TEXT:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_RANGED_VALUE:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_TIME:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_ICON:
+      return true;
+    case WATCHFACE_COMPLICATION_TYPE_IMAGE:
+      return true;
+    default:
+      return false;
+    }
+  }
+
   }    /* namespace util */
 }      /*  namespace watchface_complication */
old mode 100644 (file)
new mode 100755 (executable)
index 77f80ca..5c30296
@@ -32,6 +32,7 @@ namespace watchface_complication {
                                 const std::string& sender_name,
                                 GDBusConnection* conn,
                                 int* sender_pid);
+  bool CheckComplicationType(int type);
   }
 }  /* namespace watchface_complication */
 
old mode 100644 (file)
new mode 100755 (executable)
index 201b917..40c76af
@@ -332,8 +332,8 @@ extern "C" EXPORT_API int watchface_complication_provider_data_set_type(
   int ret;
   char num_str[32] = {0,};
 
-  if (shared_data == NULL) {
-    LOGE("shared_data is NULL");
+  if (shared_data == NULL || !util::CheckComplicationType(static_cast<int>(type))) {
+    LOGE("Invalid param");
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   }
 
old mode 100644 (file)
new mode 100755 (executable)
index 2993288..9e85ed0
@@ -54,6 +54,10 @@ class CallbackInfo {
         data.get() == NULL ? NULL : data.get()->GetConstRaw(), user_data_);
   }
 
+  watchface_complication_updated_cb GetCallback() {
+    return cb_;
+  }
+
  private:
   watchface_complication_updated_cb cb_;
   void* user_data_;
@@ -78,17 +82,25 @@ class WatchComplicationStub : public Complication {
     LOGI("update call!! done");
   }
 
-  void AddCallbackInfo(CallbackInfo* ci) {
+  int AddCallbackInfo(CallbackInfo* ci) {
+    for (auto& i : cb_list_) {
+      if (i.get()->GetCallback() == ci->GetCallback()) {
+        LOGI("already registered callback");
+        return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+      }
+    }
     cb_list_.emplace_back(ci);
+    return WATCHFACE_COMPLICATION_ERROR_NONE;
   }
 
-  void RemoveCallbackInfo(CallbackInfo* ci) {
+  int RemoveCallbackInfo(watchface_complication_updated_cb cb) {
     for (auto& i : cb_list_) {
-      if (i.get() == ci) {
+      if (i.get()->GetCallback() == cb) {
         cb_list_.remove(i);
-        break;
+        return WATCHFACE_COMPLICATION_ERROR_NONE;
       }
     }
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   }
 
  private:
@@ -113,7 +125,10 @@ extern "C" EXPORT_API int watchface_complication_remove_updated_cb(
   if (handle == NULL || cb == NULL)
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
 
-  return WATCHFACE_COMPLICATION_ERROR_NONE;
+  auto sh = static_cast<SharedHandle<WatchComplicationStub>*>(handle);
+  auto ptr = SharedHandle<WatchComplicationStub>::Share(sh);
+
+  return ptr.get()->RemoveCallbackInfo(cb);
 }
 
 extern "C" EXPORT_API int watchface_complication_send_update_request(
@@ -532,7 +547,7 @@ extern "C" EXPORT_API int watchface_complication_allowed_list_add(
 extern "C" EXPORT_API int watchface_complication_allowed_list_del(
     complication_allowed_list_h handle, const char *provider_id) {
 
-  if (handle == NULL || provider_id == NULL || handle->allowed_list) {
+  if (handle == NULL || provider_id == NULL || handle->allowed_list == NULL) {
     LOGE("Invalid param");
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   }
old mode 100644 (file)
new mode 100755 (executable)
index f861cd6..3bdf39c
@@ -60,6 +60,10 @@ class ReadyCallbackInfo {
     cb_(stub, editor_appid.c_str(), user_data_);
   }
 
+  watchface_editable_edit_ready_cb GetCallback() {
+    return cb_;
+  }
+
  private:
   watchface_editable_edit_ready_cb cb_;
   void* user_data_;
@@ -104,17 +108,26 @@ class EditablesContainerStub : public EditablesContainer {
     }
   }
 
-  void AddReadyCallbackInfo(ReadyCallbackInfo* ci) {
+  int AddReadyCallbackInfo(ReadyCallbackInfo* ci) {
+    for (auto& i : ready_cb_list_) {
+      if (i.get()->GetCallback() == ci->GetCallback()) {
+        LOGI("already registered callback");
+        return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+      }
+    }
+
     ready_cb_list_.emplace_back(ci);
+    return WATCHFACE_COMPLICATION_ERROR_NONE;
   }
 
-  void RemoveReadyCallbackInfo(ReadyCallbackInfo* ci) {
+  int RemoveReadyCallbackInfo(watchface_editable_edit_ready_cb ci) {
     for (auto& i : ready_cb_list_) {
-      if (i.get() == ci) {
+      if (i.get()->GetCallback() == ci) {
         ready_cb_list_.remove(i);
-        break;
+        return WATCHFACE_COMPLICATION_ERROR_NONE;
       }
     }
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   }
 
   void ClearUpdateCallbackInfo() {
@@ -148,6 +161,8 @@ extern "C" EXPORT_API int watchface_editable_add_design_element(
     list_handle->candidates_list == NULL)
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
 
+  if (cur_data_idx < 0 && cur_data_idx >= (int)g_list_length(list_handle->candidates_list))
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   EditablesContainerStub* ec = static_cast<EditablesContainerStub*>(handle);
   bundle* data;
   int str_len = 0;
@@ -228,17 +243,16 @@ extern "C" EXPORT_API int watchface_editable_add_edit_ready_cb(
     __container = new EditablesContainerStub();
 
   auto ci = new ReadyCallbackInfo(cb, user_data);
-  __container->AddReadyCallbackInfo(ci);
 
-  return WATCHFACE_COMPLICATION_ERROR_NONE;
+  return   __container->AddReadyCallbackInfo(ci);
 }
 
 extern "C" EXPORT_API int watchface_editable_remove_edit_ready_cb(
     watchface_editable_edit_ready_cb cb) {
-  if (cb == NULL)
+  if (cb == NULL || __container == NULL)
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
 
-  return WATCHFACE_COMPLICATION_ERROR_NONE;
+  return __container->RemoveReadyCallbackInfo(cb);
 }
 
 extern "C" EXPORT_API int watchface_editable_get_cur_data_idx(