summaryrefslogtreecommitdiff
path: root/src/config_file.c
diff options
context:
space:
mode:
authorCarlos Martín Nieto <carlos@cmartin.tk>2012-05-03 16:07:22 +0200
committerCarlos Martín Nieto <carlos@cmartin.tk>2012-05-08 21:35:51 +0200
commit3df9cc592220b1da73a1d4ac82847c3c6d92a1fa (patch)
treebc2e315d2a508b53615513c00dfd20f0366c82af /src/config_file.c
parent2c0cdc3a86acd917087937f6348062b3951217b5 (diff)
downloadlibgit2-3df9cc592220b1da73a1d4ac82847c3c6d92a1fa.tar.gz
config: don't use freed memory on error
Change the order and set a NULL so we don't try to access freed memory in case of an error.
Diffstat (limited to 'src/config_file.c')
-rw-r--r--src/config_file.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/config_file.c b/src/config_file.c
index 746d9655c..4ccec2bc1 100644
--- a/src/config_file.c
+++ b/src/config_file.c
@@ -258,18 +258,17 @@ static int config_set(git_config_file *cfg, const char *name, const char *value)
GITERR_CHECK_ALLOC(var->value);
}
+ if (config_write(b, key, NULL, value) < 0) {
+ cvar_free(var);
+ return -1;
+ }
+
git_strmap_insert2(b->values, key, var, old_var, rval);
if (rval < 0)
return -1;
if (old_var != NULL)
cvar_free(old_var);
- if (config_write(b, key, NULL, value) < 0) {
- git_strmap_delete(b->values, var->key);
- cvar_free(var);
- return -1;
- }
-
return 0;
}
@@ -1018,6 +1017,7 @@ static int config_write(diskfile_backend *cfg, const char *key, const regex_t *p
pre_end = post_start = cfg->reader.read_ptr;
git__free(current_section);
+ current_section = NULL;
if (parse_section_header(cfg, &current_section) < 0)
goto rewrite_fail;