Commit 5a0659fe by schu

config_file.c: fix memory leaks

Signed-off-by: schu <schu-github@schulog.org>
parent b6817692
...@@ -212,8 +212,10 @@ static int cvar_normalize_name(cvar_t *var, char **output) ...@@ -212,8 +212,10 @@ static int cvar_normalize_name(cvar_t *var, char **output)
/* If there aren't any spaces in the section, it's easy */ /* If there aren't any spaces in the section, it's easy */
if (section_sp == NULL) { if (section_sp == NULL) {
ret = snprintf(name, len + 1, "%s.%s", var->section, var->name); ret = snprintf(name, len + 1, "%s.%s", var->section, var->name);
if (ret < 0) if (ret < 0) {
free(name);
return git__throw(GIT_EOSERR, "Failed to normalize name. OS err: %s", strerror(errno)); return git__throw(GIT_EOSERR, "Failed to normalize name. OS err: %s", strerror(errno));
}
*output = name; *output = name;
return GIT_SUCCESS; return GIT_SUCCESS;
...@@ -701,12 +703,16 @@ static int parse_section_header(diskfile_backend *cfg, char **section_out) ...@@ -701,12 +703,16 @@ static int parse_section_header(diskfile_backend *cfg, char **section_out)
/* find the end of the variable's name */ /* find the end of the variable's name */
name_end = strchr(line, ']'); name_end = strchr(line, ']');
if (name_end == NULL) if (name_end == NULL) {
free(line);
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse header. Can't find header name end"); return git__throw(GIT_EOBJCORRUPTED, "Failed to parse header. Can't find header name end");
}
name = (char *)git__malloc((size_t)(name_end - line) + 1); name = (char *)git__malloc((size_t)(name_end - line) + 1);
if (name == NULL) if (name == NULL) {
free(line);
return GIT_ENOMEM; return GIT_ENOMEM;
}
name_length = 0; name_length = 0;
pos = 0; pos = 0;
...@@ -738,8 +744,10 @@ static int parse_section_header(diskfile_backend *cfg, char **section_out) ...@@ -738,8 +744,10 @@ static int parse_section_header(diskfile_backend *cfg, char **section_out)
} while ((c = line[pos++]) != ']'); } while ((c = line[pos++]) != ']');
if (line[pos - 1] != ']') if (line[pos - 1] != ']') {
return git__throw(GIT_EOBJCORRUPTED, "Failed to parse header. Config file ended unexpectedly"); error = git__throw(GIT_EOBJCORRUPTED, "Failed to parse header. Config file ended unexpectedly");
goto error;
}
name[name_length] = 0; name[name_length] = 0;
free(line); free(line);
...@@ -957,7 +965,8 @@ static int config_write(diskfile_backend *cfg, cvar_t *var) ...@@ -957,7 +965,8 @@ static int config_write(diskfile_backend *cfg, cvar_t *var)
* default case will take care of updating them. * default case will take care of updating them.
*/ */
pre_end = post_start = cfg->reader.read_ptr; pre_end = post_start = cfg->reader.read_ptr;
free(current_section); if (current_section)
free(current_section);
error = parse_section_header(cfg, &current_section); error = parse_section_header(cfg, &current_section);
if (error < GIT_SUCCESS) if (error < GIT_SUCCESS)
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment