From 9628f5dbefc4fbfadf99de0304941c7a14b5a931 Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Fri, 2 Dec 2022 12:27:22 +0900 Subject: [PATCH] [CodeClean/Data] param to deserialize edge-data Code clean, 1. handle data size to deserailze edge data. 2. Fix typo and revise testcases. Signed-off-by: Jaeyun --- src/libnnstreamer-edge/nnstreamer-edge-aitt.c | 2 +- src/libnnstreamer-edge/nnstreamer-edge-data.c | 43 ++++++++----- src/libnnstreamer-edge/nnstreamer-edge-data.h | 8 +-- .../nnstreamer-edge-metadata.c | 2 +- .../nnstreamer-edge-metadata.h | 2 +- tests/unittest_nnstreamer-edge.cc | 62 +++++++++++++++---- 6 files changed, 84 insertions(+), 35 deletions(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-aitt.c b/src/libnnstreamer-edge/nnstreamer-edge-aitt.c index 3eca2b9..95685fd 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-aitt.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-aitt.c @@ -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); diff --git a/src/libnnstreamer-edge/nnstreamer-edge-data.c b/src/libnnstreamer-edge/nnstreamer-edge-data.c index 439aa03..5fc7df2 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-data.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-data.c @@ -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; } diff --git a/src/libnnstreamer-edge/nnstreamer-edge-data.h b/src/libnnstreamer-edge/nnstreamer-edge-data.h index f6452e3..d75ded7 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-data.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-data.h @@ -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 } diff --git a/src/libnnstreamer-edge/nnstreamer-edge-metadata.c b/src/libnnstreamer-edge/nnstreamer-edge-metadata.c index fcc3e89..011530a 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-metadata.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-metadata.c @@ -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; diff --git a/src/libnnstreamer-edge/nnstreamer-edge-metadata.h b/src/libnnstreamer-edge/nnstreamer-edge-metadata.h index d1e3012..5d9e3c3 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-metadata.h +++ b/src/libnnstreamer-edge/nnstreamer-edge-metadata.h @@ -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 } diff --git a/tests/unittest_nnstreamer-edge.cc b/tests/unittest_nnstreamer-edge.cc index 6acdf53..8ebe257 100644 --- a/tests/unittest_nnstreamer-edge.cc +++ b/tests/unittest_nnstreamer-edge.cc @@ -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); } /** -- 2.34.1