diff options
author | Hwankyu Jhun <h.jhun@samsung.com> | 2018-09-06 10:00:57 +0900 |
---|---|---|
committer | Hwankyu Jhun <h.jhun@samsung.com> | 2018-09-06 11:51:45 +0900 |
commit | fd14929393803e7b5a8cd0d45ca4ca4a111eb409 (patch) | |
tree | 93866f4ff16f98031f72d502b783e40166252214 | |
parent | f968d8c4773fb579ea27f5642b6675fa6ed4d536 (diff) | |
download | bundle-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-x | src/keyval.c | 9 | ||||
-rwxr-xr-x | src/keyval_array.c | 13 |
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; } } |