summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitri Pal <dpal@redhat.com>2010-06-09 16:08:58 -0400
committerStephen Gallagher <sgallagh@redhat.com>2010-06-10 10:17:21 -0400
commit3076587434951c3f76f4a5a4893dcc9b6f3713d8 (patch)
tree55ad6d955d7e219cceb87d69ea0ce4893155db95
parent13b72033b575c29f13c325050f61562a578741ec (diff)
downloadsssd-3076587434951c3f76f4a5a4893dcc9b6f3713d8.tar.gz
sssd-3076587434951c3f76f4a5a4893dcc9b6f3713d8.tar.xz
sssd-3076587434951c3f76f4a5a4893dcc9b6f3713d8.zip
Memory leak in case of empty value
Addressing coverity issue. Ticket #513. The memory was really leaked when the configuration value was empty. Added unit test that confirmed the bug.
-rw-r--r--common/ini/ini_config.c2
-rw-r--r--common/ini/ini_config_ut.c42
2 files changed, 44 insertions, 0 deletions
diff --git a/common/ini/ini_config.c b/common/ini/ini_config.c
index e87419a30..bd8f88b2c 100644
--- a/common/ini/ini_config.c
+++ b/common/ini/ini_config.c
@@ -1832,6 +1832,8 @@ static char **get_str_cfg_array(struct collection_item *item,
if (error) *error = EOK;
if (size) *size = count;
+ /* If count is 0 the copy needs to be freed */
+ if (count == 0) free(copy);
TRACE_FLOW_STRING("get_str_cfg_array", "Exit");
return array;
}
diff --git a/common/ini/ini_config_ut.c b/common/ini/ini_config_ut.c
index 1c82a0579..5fe30d784 100644
--- a/common/ini/ini_config_ut.c
+++ b/common/ini/ini_config_ut.c
@@ -976,6 +976,48 @@ int get_test(void)
COLOUT(for (i=0;i<size;i++) printf("Attribute: [%s]\n", prop_array[i]));
free_attribute_list(prop_array);
+ COLOUT(printf("Get empty array item\n"));
+
+ item = NULL;
+ error = get_config_item("domains/EXAMPLE.COM",
+ "empty_value",
+ ini_config,
+ &item);
+ if(error) {
+ printf("Expected success but got error! %d\n", error);
+ free_ini_config(ini_config);
+ return error;
+ }
+
+ /* Item should be found */
+ if (item == NULL) {
+ printf("Expected success but got NULL.\n");
+ free_ini_config(ini_config);
+ return -1;
+ }
+
+ COLOUT(col_debug_item(item));
+
+ error = 0;
+ size = 0; /* Here size is not optional!!! */
+ strarray = get_string_config_array(item, ",", &size, &error);
+ if(error) {
+ printf("Expect success got error %d.\n", error);
+ free_ini_config(ini_config);
+ return error;
+ }
+
+ if (size != 0) {
+ for (i=0; i<size; i++) printf("%s\n", *(strarray + i));
+ printf("Expected size=0, got size=%d\n", size);
+ free_string_config_array(strarray);
+ free_ini_config(ini_config);
+ return -1;
+ }
+
+
+ free_string_config_array(strarray);
+
free_ini_config(ini_config);
COLOUT(printf("Done with get test!\n"));
return EOK;