Add validation check 06/191606/2
authorjusung son <jusung07.son@samsung.com>
Fri, 19 Oct 2018 03:01:10 +0000 (12:01 +0900)
committerjusung son <jusung07.son@samsung.com>
Tue, 23 Oct 2018 01:51:08 +0000 (10:51 +0900)
Change-Id: If3da27e9e989650493ae173189f6c2765ce6c468
Signed-off-by: jusung son <jusung07.son@samsung.com>
watchface-complication-provider/complication-provider.cc
watchface-complication-provider/watchface-complication-provider.cc
watchface-complication/watchface-complication.cc

index 79d0cefd247f00a05c5cba9a2f99dd1ddbeeb853..e3287187cb504ea7192b28a13bf257b8aa193957 100644 (file)
@@ -22,6 +22,7 @@
 #include "watchface-common/watchface-util.h"
 #include "watchface-complication-provider/complication-provider.h"
 #include "watchface-complication-provider/complication-provider-implementation.h"
+#include "watchface-complication-provider/include/watchface-complication-provider.h"
 
 #ifdef LOG_TAG
 #undef LOG_TAG
@@ -157,6 +158,9 @@ void ComplicationProvider::Impl::OnSignal(GDBusConnection* connection,
   Bundle* context_data;
   Bundle* shared_data;
   bool ret;
+  bool is_valid;
+  char num_str[32] = {0, };
+  char* shared_data_type;
 
   auto sender_info = sender_info_.find(sender_name);
   auto si = sender_info->second;
@@ -242,10 +246,31 @@ void ComplicationProvider::Impl::OnSignal(GDBusConnection* connection,
       return;
     }
 
+    snprintf(num_str, sizeof(num_str), "%d", type);
+    bundle_add_str(shared_data->GetRaw(), DATA_TYPE_KEY, num_str);
+
     /* Call update request callback and fill shared data */
     parent_->OnDataUpdateRequest(sender_app_id, (ComplicationType)type,
                                 context_data, shared_data);
     delete context_data;
+
+    shared_data_type = NULL;
+    bundle_get_str(shared_data->GetRaw(), DATA_TYPE_KEY, &shared_data_type);
+    if (shared_data_type == NULL || strcmp(shared_data_type, num_str) != 0) {
+      bundle_del(shared_data->GetRaw(), DATA_TYPE_KEY);
+      bundle_add_str(shared_data->GetRaw(), DATA_TYPE_KEY, num_str);
+      LOGI("DATA_TYPE_KEY repaired : %s %s", shared_data_type, num_str);
+    }
+
+    is_valid = false;
+    watchface_complication_provider_data_is_valid(shared_data->GetRaw(), &is_valid);
+    if (is_valid == false) {
+      LOGE("EmitSignal failed %s %s %d %d", sender_app_id, (provider_id_).c_str(),
+             complication_id, type);
+      delete shared_data;
+      return;
+    }
+
     ret = gdbus_.get()->EmitSignal(
           IGDBus::Complication,
           std::string(sender_app_id),
index cff38ea0f02c3997e2e98c670a4913331a6c4b4b..a1c7f37f9dcaf28acc033d0ba254c877467866ec 100644 (file)
@@ -55,10 +55,7 @@ class CallbackInfo {
               ComplicationType type, const Bundle* context,
               Bundle* shared_data) {
     const bundle* context_data = context->GetConstRaw();
-    char num_str[32] = {0, };
 
-    snprintf(num_str, sizeof(num_str), "%d", type);
-    _add_bundle_data(shared_data->GetRaw(), DATA_TYPE_KEY, num_str);
     cb_(provider_id.c_str(), sender_appid.c_str(),
         static_cast<watchface_complication_type_e>(type), context_data,
         shared_data->GetRaw(), user_data_);
index e30cbbb0b7e8063608f2ba794f15ea98797e49ac..eea49cf273d6418237ecb17cfda7c3afab49a389 100644 (file)
@@ -246,13 +246,31 @@ extern "C" EXPORT_API int watchface_complication_create(int complication_id,
                       WATCHFACE_COMPLICATION_TYPE_RANGED_VALUE |
                       WATCHFACE_COMPLICATION_TYPE_TIME |
                       WATCHFACE_COMPLICATION_TYPE_ICON |
-                      WATCHFACE_COMPLICATION_TYPE_IMAGE))
+                      WATCHFACE_COMPLICATION_TYPE_IMAGE)) {
+    LOGE("Invalid param : supported_types(%d)", supported_types);
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+  }
 
   if (supported_event_types < WATCHFACE_COMPLICATION_EVENT_NONE ||
       supported_event_types > (WATCHFACE_COMPLICATION_EVENT_NONE |
                       WATCHFACE_COMPLICATION_EVENT_TAP |
-                      WATCHFACE_COMPLICATION_EVENT_DOUBLE_TAP))
+                      WATCHFACE_COMPLICATION_EVENT_DOUBLE_TAP)) {
+    LOGE("Invalid param : supported_event_types(%d)", supported_event_types);
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+  }
+
+  if (!util::CheckComplicationType(default_type)) {
+    LOGE("Invalid param : default_type(%d)", default_type);
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+  }
+
+  if (default_type != WATCHFACE_COMPLICATION_TYPE_NO_DATA
+       && default_provider_id == NULL) {
+      LOGE("Invalid param");
+    return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
+  }
+
+  if (created_handle == NULL)
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
 
   try {
@@ -358,7 +376,7 @@ extern "C" EXPORT_API int watchface_complication_data_get_type(
 
   int comp_type = strtol(type_str, NULL, 10);
   if (!util::CheckComplicationType(comp_type)) {
-    LOGE("Invalid param");
+    LOGE("Invalid param : type_str(%s)", type_str);
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
   }
   *type = static_cast<watchface_complication_type_e>(comp_type);
@@ -548,9 +566,9 @@ extern "C" EXPORT_API int watchface_complication_transfer_event(
   if (!watchface_complication::util::CheckWatchFeatureEnabled())
     return WATCHFACE_COMPLICATION_ERROR_NOT_SUPPORTED;
 
-  if (handle == NULL
-    || event_type < WATCHFACE_COMPLICATION_EVENT_NONE
-    || event_type > WATCHFACE_COMPLICATION_EVENT_DOUBLE_TAP)
+  if (handle == NULL ||
+      !(event_type == WATCHFACE_COMPLICATION_EVENT_TAP
+        || event_type == WATCHFACE_COMPLICATION_EVENT_DOUBLE_TAP))
     return WATCHFACE_COMPLICATION_ERROR_INVALID_PARAMETER;
 
   auto sh = static_cast<SharedHandle<WatchComplicationStub>*>(handle);