Use seperated variable for realloc return value 02/157502/1
authorSemun Lee <semun.lee@samsung.com>
Thu, 13 Jul 2017 01:48:13 +0000 (10:48 +0900)
committerHwankyu Jhun <h.jhun@samsung.com>
Tue, 24 Oct 2017 23:55:01 +0000 (08:55 +0900)
Using the same variable for return value and input parameter
of realloc() may cause memory leak when realloc() fails
to allocate new memory.

Change-Id: If2ee2134b272e6fc158fc400dc352704d81b0e24
Signed-off-by: Semun Lee <semun.lee@samsung.com>
src/preference.c

index 86d798d3d7cd4ebdd9b7c0376478b87ae8a01cc1..a605ca47b299bc3e4490c877ce22266308246742 100644 (file)
@@ -834,6 +834,7 @@ static int _preference_get_key_filesys(keynode_t *keynode, int* io_errno)
        double value_dbl = 0;
        char file_buf[BUF_LEN] = {0,};
        char *value = NULL;
+       char *tmp_value;
        int value_size = 0;
 
 retry_open:
@@ -952,11 +953,14 @@ retry:
                while (fgets(file_buf, sizeof(file_buf), fp)) {
                        if (value) {
                                value_size = value_size + strlen(file_buf);
-                               value = (char *) realloc(value, value_size);
-                               if (value == NULL) {
+                               tmp_value = (char *) realloc(value, value_size);
+                               if (tmp_value == NULL) {
                                        func_ret = PREFERENCE_ERROR_OUT_OF_MEMORY;
+                                       free(value);
+                                       value = NULL;
                                        break;
                                }
+                               value = tmp_value;
                                strncat(value, file_buf, strlen(file_buf));
                        } else {
                                value_size = strlen(file_buf) + 1;