summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHwankyu Jhun <h.jhun@samsung.com>2018-09-06 10:00:57 +0900
committerHwankyu Jhun <h.jhun@samsung.com>2018-09-06 11:51:45 +0900
commitfd14929393803e7b5a8cd0d45ca4ca4a111eb409 (patch)
tree93866f4ff16f98031f72d502b783e40166252214
parentf968d8c4773fb579ea27f5642b6675fa6ed4d536 (diff)
downloadbundle-fd14929393803e7b5a8cd0d45ca4ca4a111eb409.tar.gz
bundle-fd14929393803e7b5a8cd0d45ca4ca4a111eb409.tar.bz2
bundle-fd14929393803e7b5a8cd0d45ca4ca4a111eb409.zip
Check for null-termination of strings
Change-Id: Ied293cb81eeceebf19bc36726714ce27bfc46857 Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
-rwxr-xr-xsrc/keyval.c9
-rwxr-xr-xsrc/keyval_array.c13
2 files changed, 19 insertions, 3 deletions
diff --git a/src/keyval.c b/src/keyval.c
index e3f906a..d49be0e 100755
--- a/src/keyval.c
+++ b/src/keyval.c
@@ -39,6 +39,7 @@ keyval_t *keyval_new(keyval_t *kv, const char *key,
const int type, const void *val, const size_t size)
{
int must_free_obj = kv ? 0 : 1;
+ char *str;
if (!kv) {
kv = calloc(1, sizeof(keyval_t));
@@ -70,8 +71,14 @@ keyval_t *keyval_new(keyval_t *kv, const char *key,
keyval_free(kv, must_free_obj);
return NULL;
}
- if (val)
+ if (val) {
memcpy(kv->val, val, size);
+ if (type == BUNDLE_TYPE_STR) {
+ str = (char *)kv->val;
+ if (str[size - 1] != '\0')
+ str[size - 1] = '\0';
+ }
+ }
}
kv->method = &method;
diff --git a/src/keyval_array.c b/src/keyval_array.c
index e05f79c..7c4fe56 100755
--- a/src/keyval_array.c
+++ b/src/keyval_array.c
@@ -174,7 +174,7 @@ int keyval_array_copy_array(keyval_array_t *kva, void **array_val,
/* Copy each array item */
for (i = 0; i < array_len; i++) {
- kva->array_val[i] = malloc(measure_size(array_val[i]));
+ kva->array_val[i] = calloc(1, measure_size(array_val[i]));
if (!(kva->array_val[i])) {
set_last_result(BUNDLE_ERROR_OUT_OF_MEMORY);
goto cleanup_exit;
@@ -204,6 +204,9 @@ int keyval_array_is_idx_valid(keyval_array_t *kva, int idx)
int keyval_array_set_element(keyval_array_t *kva, int idx, void *val, size_t size)
{
+ keyval_t *kv = (keyval_t *)kva;
+ char *str;
+
/* An element is already exist in the idx! */
if (kva->array_val[idx]) {
/* val==NULL means 'Free this element!' */
@@ -217,11 +220,17 @@ int keyval_array_set_element(keyval_array_t *kva, int idx, void *val, size_t siz
}
} else {
/* Normal case. Copy value into the array. */
- kva->array_val[idx] = malloc(size);
+ kva->array_val[idx] = calloc(1, size);
if (!(kva->array_val[idx]))
return BUNDLE_ERROR_OUT_OF_MEMORY;
if (val) {
memcpy(kva->array_val[idx], val, size);
+ if (kv->type & BUNDLE_TYPE_STR) {
+ str = (char *)kva->array_val[idx];
+ if (str[size - 1] != '\0')
+ str[size - 1] = '\0';
+ }
+
kva->array_element_size[idx] = size;
}
}