summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@elego.de>2011-04-07 11:30:02 +0200
committerCarlos Martín Nieto <cmn@elego.de>2011-04-07 17:15:38 +0200
commit7a4dfd6028499d6f1089c87aa779d686e15f9285 (patch)
tree3de8160e2063b15baff6bfb5577d8d5b20166263
parent493384e39c1ddfcc4badf962706e02302577d89f (diff)
downloadlibgit2-7a4dfd6028499d6f1089c87aa779d686e15f9285.tar.gz
Simplify error path in config_set
Many error paths freed their local data althought it is freed later on when the end of the function notices that there was an error. This can cause double frees and invalid memory access. Signed-off-by: Carlos Martín Nieto <cmn@elego.de>
-rw-r--r--src/config.c15
1 files changed, 5 insertions, 10 deletions
diff --git a/src/config.c b/src/config.c
index 5f0bcd880..92d8115e5 100644
--- a/src/config.c
+++ b/src/config.c
@@ -285,27 +285,23 @@ static int config_set(git_config *cfg, const char *name, const char *value)
*/
var = git__malloc(sizeof(git_cvar));
- if(var == NULL){
- error = GIT_ENOMEM;
- goto out;
- }
+ if (var == NULL)
+ return GIT_ENOMEM;
+
+ memset(var, 0x0, sizeof(git_cvar));
var->name = git__strdup(name);
- if(var->name == NULL){
+ if (var->name == NULL) {
error = GIT_ENOMEM;
- free(var);
goto out;
}
var->value = value ? git__strdup(value) : NULL;
if (var->value == NULL && value != NULL) {
error = GIT_ENOMEM;
- cvar_free(var);
goto out;
}
- var->next = NULL;
-
CVAR_LIST_APPEND(&cfg->var_list, var);
out:
@@ -313,7 +309,6 @@ static int config_set(git_config *cfg, const char *name, const char *value)
cvar_free(var);
return error;
-
}
int git_config_set_int(git_config *cfg, const char *name, int value)