* @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;
* @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;
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;
}
/**
* @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).
/**
* @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
}
}
/**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
*/
TEST(edgeData, deserializeInvalidParam01_n)
{
}
/**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
*/
TEST(edgeData, deserializeInvalidParam02_n)
{
}
/**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
*/
TEST(edgeData, deserializeInvalidParam03_n)
{
}
/**
- * @brief Derialize meta to edge-data - invalid param.
+ * @brief Deserialize meta to edge-data - invalid param.
*/
TEST(edgeData, deserializeInvalidParam04_n)
{
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 */
}
/**
- * @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)
{
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;
}
/**
- * @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);
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);
}
/**