Check for null-termination of strings 32/188532/3
authorHwankyu Jhun <h.jhun@samsung.com>
Thu, 6 Sep 2018 01:00:57 +0000 (10:00 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Thu, 6 Sep 2018 02:51:45 +0000 (11:51 +0900)
Change-Id: Ied293cb81eeceebf19bc36726714ce27bfc46857
Signed-off-by: Hwankyu Jhun <h.jhun@samsung.com>
src/keyval.c
src/keyval_array.c

index e3f906a..d49be0e 100755 (executable)
@@ -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;
index e05f79c..7c4fe56 100755 (executable)
@@ -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;
                }
        }