[CodeClean/Data] param to deserialize edge-data
authorJaeyun <jy1210.jung@samsung.com>
Fri, 2 Dec 2022 03:27:22 +0000 (12:27 +0900)
committerjaeyun-jung <39614140+jaeyun-jung@users.noreply.github.com>
Mon, 5 Dec 2022 04:38:45 +0000 (13:38 +0900)
Code clean,
1. handle data size to deserailze edge data.
2. Fix typo and revise testcases.

Signed-off-by: Jaeyun <jy1210.jung@samsung.com>
src/libnnstreamer-edge/nnstreamer-edge-aitt.c
src/libnnstreamer-edge/nnstreamer-edge-data.c
src/libnnstreamer-edge/nnstreamer-edge-data.h
src/libnnstreamer-edge/nnstreamer-edge-metadata.c
src/libnnstreamer-edge/nnstreamer-edge-metadata.h
tests/unittest_nnstreamer-edge.cc

index 3eca2b901aab3f0f2dbe0652707adc0c9aa92b6b..95685fdbb23656d12d141698d76f80a4e33246d1 100644 (file)
@@ -236,7 +236,7 @@ aitt_cb_message_arrived (aitt_msg_h msg_handle, const void *msg,
     return;
   }
 
-  nns_edge_data_deserialize (data_h, (void *) msg);
+  nns_edge_data_deserialize (data_h, (void *) msg, (nns_size_t) msg_len);
 
   ret = _nns_edge_invoke_event_cb (eh, NNS_EDGE_EVENT_NEW_DATA_RECEIVED,
       data_h, sizeof (nns_edge_data_h), NULL);
index 439aa0374fe30c861181ef8f2002d21f41415eca..5fc7df2662274042c169de9b0548522ca23b56d2 100644 (file)
@@ -414,8 +414,8 @@ nns_edge_data_serialize_meta (nns_edge_data_h data_h, void **data,
  * @brief Deserialize metadata in edge data.
  */
 int
-nns_edge_data_deserialize_meta (nns_edge_data_h data_h, void *data,
-    nns_size_t data_len)
+nns_edge_data_deserialize_meta (nns_edge_data_h data_h, const void *data,
+    const nns_size_t data_len)
 {
   nns_edge_data_s *ed;
   int ret;
@@ -517,13 +517,14 @@ done:
  * @brief Deserialize metadata in edge data.
  */
 int
-nns_edge_data_deserialize (nns_edge_data_h data_h, void *data)
+nns_edge_data_deserialize (nns_edge_data_h data_h, const void *data,
+    const nns_size_t data_len)
 {
   nns_edge_data_s *ed;
   nns_edge_data_header_s *header;
   int ret;
   unsigned int n;
-  nns_size_t meta_len;
+  nns_size_t total;
   char *ptr;
 
   ed = (nns_edge_data_s *) data_h;
@@ -536,28 +537,38 @@ nns_edge_data_deserialize (nns_edge_data_h data_h, void *data)
 
   if (!NNS_EDGE_MAGIC_IS_VALID (ed)) {
     nns_edge_loge ("Invalid param, given edge data is invalid.");
-    nns_edge_unlock (ed);
-    return NNS_EDGE_ERROR_INVALID_PARAMETER;
+    ret = NNS_EDGE_ERROR_INVALID_PARAMETER;
+    goto error;
   }
 
-  ptr = (char *) data;
-  header = (nns_edge_data_header_s *) ptr;
+  header = (nns_edge_data_header_s *) data;
 
-  ed->num = header->num_mem;
-  for (n = 0; n < ed->num; n++) {
-    ed->data[n].data_len = header->data_len[n];
+  /* Check mem size */
+  total = sizeof (nns_edge_data_header_s) + header->meta_len;
+  for (n = 0; n < header->num_mem; n++) {
+    total += header->data_len[n];
   }
-  meta_len = header->meta_len;
 
-  ptr += sizeof (nns_edge_data_header_s);
+  if (total != data_len) {
+    nns_edge_loge ("Invalid data size to deserialize edge data.");
+    ret = NNS_EDGE_ERROR_INVALID_PARAMETER;
+    goto error;
+  }
 
+  ptr = (char *) data + sizeof (nns_edge_data_header_s);
+
+  ed->num = header->num_mem;
   for (n = 0; n < ed->num; n++) {
-    ed->data[n].data = nns_edge_memdup (ptr, ed->data[n].data_len);
-    ptr += ed->data[n].data_len;
+    ed->data[n].data = nns_edge_memdup (ptr, header->data_len[n]);
+    ed->data[n].data_len = header->data_len[n];
+    ed->data[n].destroy_cb = nns_edge_free;
+
+    ptr += header->data_len[n];
   }
 
-  ret = nns_edge_metadata_deserialize (ed->metadata, ptr, meta_len);
+  ret = nns_edge_metadata_deserialize (ed->metadata, ptr, header->meta_len);
 
+error:
   nns_edge_unlock (ed);
   return ret;
 }
index f6452e3510d270bb305581200d14eb9b7b474b25..d75ded7a343311dea5c86102fa6488a92b5ce2ed 100644 (file)
@@ -61,9 +61,9 @@ int nns_edge_data_serialize_meta (nns_edge_data_h data_h, void **data, nns_size_
 
 /**
  * @brief Deserialize metadata in edge data.
- * @note This is internal function, DO NOT export this. Caller should release the returned value using free().
+ * @note This is internal function, DO NOT export this.
  */
-int nns_edge_data_deserialize_meta (nns_edge_data_h data_h, void *data, nns_size_t data_len);
+int nns_edge_data_deserialize_meta (nns_edge_data_h data_h, const void *data, const nns_size_t data_len);
 
 /**
  * @brief Serialize entire edge data (meta data + raw data).
@@ -73,9 +73,9 @@ int nns_edge_data_serialize (nns_edge_data_h data_h, void **data, nns_size_t *da
 
 /**
  * @brief Deserialize entire edge data (meta data + raw data).
- * @note This is internal function, DO NOT export this. Caller should release the returned value using free().
+ * @note This is internal function, DO NOT export this.
  */
-int nns_edge_data_deserialize (nns_edge_data_h data_h, void *data);
+int nns_edge_data_deserialize (nns_edge_data_h data_h, const void *data, const nns_size_t data_len);
 
 #ifdef __cplusplus
 }
index fcc3e89e8132492211c4df8a634d1fb12f81b55a..011530ac5703c487bafd087d556bd8916480ff80 100644 (file)
@@ -329,7 +329,7 @@ nns_edge_metadata_serialize (nns_edge_metadata_h metadata_h,
  */
 int
 nns_edge_metadata_deserialize (nns_edge_metadata_h metadata_h,
-    void *data, nns_size_t data_len)
+    const void *data, const nns_size_t data_len)
 {
   nns_edge_metadata_s *meta;
   char *key, *value;
index d1e301252d3db58ecdc14b143a7d5902df02fa21..5d9e3c329f5024de9a0331ad2762d45a75748c30 100644 (file)
@@ -55,7 +55,7 @@ int nns_edge_metadata_serialize (nns_edge_metadata_h metadata_h, void **data, nn
 /**
  * @brief Internal function to deserialize memory into metadata.
  */
-int nns_edge_metadata_deserialize (nns_edge_metadata_h metadata_h, void *data, nns_size_t data_len);
+int nns_edge_metadata_deserialize (nns_edge_metadata_h metadata_h, const void *data, const nns_size_t data_len);
 
 #ifdef __cplusplus
 }
index 6acdf5348acc64f05068d154130d6f571625ea8b..8ebe2574332cb916fa1b133aa5b7a327fc948f5e 100644 (file)
@@ -1909,7 +1909,7 @@ TEST(edgeData, serializeInvalidParam04_n)
 }
 
 /**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
  */
 TEST(edgeData, deserializeInvalidParam01_n)
 {
@@ -1937,7 +1937,7 @@ TEST(edgeData, deserializeInvalidParam01_n)
 }
 
 /**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
  */
 TEST(edgeData, deserializeInvalidParam02_n)
 {
@@ -1971,7 +1971,7 @@ TEST(edgeData, deserializeInvalidParam02_n)
 }
 
 /**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
  */
 TEST(edgeData, deserializeInvalidParam03_n)
 {
@@ -1999,7 +1999,7 @@ TEST(edgeData, deserializeInvalidParam03_n)
 }
 
 /**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
  */
 TEST(edgeData, deserializeInvalidParam04_n)
 {
@@ -2074,7 +2074,7 @@ TEST(edgeDataSerialize, normal)
   ret = nns_edge_data_create (&dest_h);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_data_deserialize (dest_h, serialized_data);
+  ret = nns_edge_data_deserialize (dest_h, serialized_data, serialized_len);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
   /* Compare data and info */
@@ -2194,21 +2194,21 @@ TEST(edgeDataSerialize, invalidParam04_n)
 }
 
 /**
- * @brief Derialize edge-data - invalid param.
+ * @brief Deserialize edge-data - invalid param.
  */
 TEST(edgeDataDeserialize, invalidParam01_n)
 {
   void *data = NULL;
   int ret;
 
-  ret = nns_edge_data_deserialize (NULL, data);
+  ret = nns_edge_data_deserialize (NULL, data, 10U);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
   nns_edge_free (data);
 }
 
 /**
- * @brief Derialize edge-data - invalid param.
+ * @brief Deserialize edge-data - invalid param.
  */
 TEST(edgeDataDeserialize, invalidParam02_n)
 {
@@ -2224,13 +2224,13 @@ TEST(edgeDataDeserialize, invalidParam02_n)
   ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_data_serialize_meta (data_h, &data, &data_len);
+  ret = nns_edge_data_serialize (data_h, &data, &data_len);
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
   ed = (nns_edge_data_s *) data_h;
   ed->magic = NNS_EDGE_MAGIC_DEAD;
 
-  ret = nns_edge_data_deserialize (data_h, data);
+  ret = nns_edge_data_deserialize (data_h, data, data_len);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
 
   ed->magic = NNS_EDGE_MAGIC;
@@ -2242,11 +2242,13 @@ TEST(edgeDataDeserialize, invalidParam02_n)
 }
 
 /**
- * @brief Derialize edge-data - invalid param.
+ * @brief Deserialize edge-data - invalid param.
  */
 TEST(edgeDataDeserialize, invalidParam03_n)
 {
   nns_edge_data_h data_h;
+  void *data;
+  nns_size_t data_len;
   int ret;
 
   ret = nns_edge_data_create (&data_h);
@@ -2255,8 +2257,44 @@ TEST(edgeDataDeserialize, invalidParam03_n)
   ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value");
   EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
 
-  ret = nns_edge_data_deserialize (data_h, NULL);
+  ret = nns_edge_data_serialize (data_h, &data, &data_len);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_deserialize (data_h, NULL, data_len);
   EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_destroy (data_h);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  nns_edge_free (data);
+}
+
+/**
+ * @brief Deserialize edge-data - invalid param.
+ */
+TEST(edgeDataDeserialize, invalidParam04_n)
+{
+  nns_edge_data_h data_h;
+  void *data;
+  nns_size_t data_len;
+  int ret;
+
+  ret = nns_edge_data_create (&data_h);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_set_info (data_h, "temp-key", "temp-value");
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_serialize (data_h, &data, &data_len);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_deserialize (data_h, data, 1U);
+  EXPECT_NE (ret, NNS_EDGE_ERROR_NONE);
+
+  ret = nns_edge_data_destroy (data_h);
+  EXPECT_EQ (ret, NNS_EDGE_ERROR_NONE);
+
+  nns_edge_free (data);
 }
 
 /**