Commit 6f73e026 by Jacques Germishuys

Plug some leaks

parent 5692dcf1
...@@ -781,8 +781,10 @@ int git_attr_assignment__parse( ...@@ -781,8 +781,10 @@ int git_attr_assignment__parse(
error = git_vector_insert_sorted( error = git_vector_insert_sorted(
assigns, massign, &merge_assignments); assigns, massign, &merge_assignments);
if (error < 0 && error != GIT_EEXISTS) if (error < 0 && error != GIT_EEXISTS) {
git_attr_assignment__free(assign);
return error; return error;
}
} }
} }
} }
......
...@@ -1228,13 +1228,6 @@ static int config_parse(git_strmap *values, diskfile_backend *cfg_file, struct r ...@@ -1228,13 +1228,6 @@ static int config_parse(git_strmap *values, diskfile_backend *cfg_file, struct r
if (result < 0) if (result < 0)
break; break;
var = git__malloc(sizeof(cvar_t));
GITERR_CHECK_ALLOC(var);
memset(var, 0x0, sizeof(cvar_t));
var->entry = git__malloc(sizeof(git_config_entry));
GITERR_CHECK_ALLOC(var->entry);
memset(var->entry, 0x0, sizeof(git_config_entry));
git__strtolower(var_name); git__strtolower(var_name);
git_buf_printf(&buf, "%s.%s", current_section, var_name); git_buf_printf(&buf, "%s.%s", current_section, var_name);
git__free(var_name); git__free(var_name);
...@@ -1244,6 +1237,11 @@ static int config_parse(git_strmap *values, diskfile_backend *cfg_file, struct r ...@@ -1244,6 +1237,11 @@ static int config_parse(git_strmap *values, diskfile_backend *cfg_file, struct r
return -1; return -1;
} }
var = git__calloc(1, sizeof(cvar_t));
GITERR_CHECK_ALLOC(var);
var->entry = git__calloc(1, sizeof(git_config_entry));
GITERR_CHECK_ALLOC(var->entry);
var->entry->name = git_buf_detach(&buf); var->entry->name = git_buf_detach(&buf);
var->entry->value = var_value; var->entry->value = var_value;
var->entry->level = level; var->entry->level = level;
......
...@@ -262,6 +262,7 @@ struct possible_tag { ...@@ -262,6 +262,7 @@ struct possible_tag {
static int possible_tag_dup(struct possible_tag **out, struct possible_tag *in) static int possible_tag_dup(struct possible_tag **out, struct possible_tag *in)
{ {
struct possible_tag *tag; struct possible_tag *tag;
int error;
tag = git__malloc(sizeof(struct possible_tag)); tag = git__malloc(sizeof(struct possible_tag));
GITERR_CHECK_ALLOC(tag); GITERR_CHECK_ALLOC(tag);
...@@ -269,8 +270,11 @@ static int possible_tag_dup(struct possible_tag **out, struct possible_tag *in) ...@@ -269,8 +270,11 @@ static int possible_tag_dup(struct possible_tag **out, struct possible_tag *in)
memcpy(tag, in, sizeof(struct possible_tag)); memcpy(tag, in, sizeof(struct possible_tag));
tag->name = NULL; tag->name = NULL;
if (commit_name_dup(&tag->name, in->name) < 0) if ((error = commit_name_dup(&tag->name, in->name)) < 0) {
return -1; git__free(tag);
*out = NULL;
return error;
}
*out = tag; *out = tag;
return 0; return 0;
......
...@@ -1550,8 +1550,10 @@ git_merge_diff_list *git_merge_diff_list__alloc(git_repository *repo) ...@@ -1550,8 +1550,10 @@ git_merge_diff_list *git_merge_diff_list__alloc(git_repository *repo)
if (git_vector_init(&diff_list->staged, 0, NULL) < 0 || if (git_vector_init(&diff_list->staged, 0, NULL) < 0 ||
git_vector_init(&diff_list->conflicts, 0, NULL) < 0 || git_vector_init(&diff_list->conflicts, 0, NULL) < 0 ||
git_vector_init(&diff_list->resolved, 0, NULL) < 0 || git_vector_init(&diff_list->resolved, 0, NULL) < 0 ||
git_pool_init(&diff_list->pool, 1, 0) < 0) git_pool_init(&diff_list->pool, 1, 0) < 0) {
git_merge_diff_list__free(diff_list);
return NULL; return NULL;
}
return diff_list; return diff_list;
} }
......
...@@ -158,6 +158,7 @@ static int cache_add(git_pack_cache *cache, git_rawobj *base, git_off_t offset) ...@@ -158,6 +158,7 @@ static int cache_add(git_pack_cache *cache, git_rawobj *base, git_off_t offset)
if (entry) { if (entry) {
if (git_mutex_lock(&cache->lock) < 0) { if (git_mutex_lock(&cache->lock) < 0) {
giterr_set(GITERR_OS, "failed to lock cache"); giterr_set(GITERR_OS, "failed to lock cache");
git__free(entry);
return -1; return -1;
} }
/* Add it to the cache if nobody else has */ /* Add it to the cache if nobody else has */
......
...@@ -246,7 +246,8 @@ int git_rebase_open(git_rebase **out, git_repository *repo) ...@@ -246,7 +246,8 @@ int git_rebase_open(git_rebase **out, git_repository *repo)
if (rebase->type == GIT_REBASE_TYPE_NONE) { if (rebase->type == GIT_REBASE_TYPE_NONE) {
giterr_set(GITERR_REBASE, "There is no rebase in progress"); giterr_set(GITERR_REBASE, "There is no rebase in progress");
return GIT_ENOTFOUND; error = GIT_ENOTFOUND;
goto done;
} }
if ((error = git_buf_puts(&path, rebase->state_path)) < 0) if ((error = git_buf_puts(&path, rebase->state_path)) < 0)
......
...@@ -129,8 +129,10 @@ static int add_ref(transport_local *t, const char *name) ...@@ -129,8 +129,10 @@ static int add_ref(transport_local *t, const char *name)
head = git__calloc(1, sizeof(git_remote_head)); head = git__calloc(1, sizeof(git_remote_head));
GITERR_CHECK_ALLOC(head); GITERR_CHECK_ALLOC(head);
if (git_buf_join(&buf, 0, name, peeled) < 0) if (git_buf_join(&buf, 0, name, peeled) < 0) {
free_head(head);
return -1; return -1;
}
head->name = git_buf_detach(&buf); head->name = git_buf_detach(&buf);
if (!(error = git_tag_peel(&target, (git_tag *)obj))) { if (!(error = git_tag_peel(&target, (git_tag *)obj))) {
...@@ -699,6 +701,7 @@ static void local_free(git_transport *transport) ...@@ -699,6 +701,7 @@ static void local_free(git_transport *transport)
int git_transport_local(git_transport **out, git_remote *owner, void *param) int git_transport_local(git_transport **out, git_remote *owner, void *param)
{ {
int error;
transport_local *t; transport_local *t;
GIT_UNUSED(param); GIT_UNUSED(param);
...@@ -719,7 +722,11 @@ int git_transport_local(git_transport **out, git_remote *owner, void *param) ...@@ -719,7 +722,11 @@ int git_transport_local(git_transport **out, git_remote *owner, void *param)
t->parent.read_flags = local_read_flags; t->parent.read_flags = local_read_flags;
t->parent.cancel = local_cancel; t->parent.cancel = local_cancel;
git_vector_init(&t->refs, 0, NULL); if ((error = git_vector_init(&t->refs, 0, NULL)) < 0) {
git__free(t);
return error;
}
t->owner = owner; t->owner = owner;
*out = (git_transport *) t; *out = (git_transport *) t;
......
...@@ -82,7 +82,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr) ...@@ -82,7 +82,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr)
int error; int error;
const char *end; const char *end;
git_buf buf = GIT_BUF_INIT; git_buf buf = GIT_BUF_INIT;
git_refspec *mapping; git_refspec *mapping = NULL;
ptr += strlen(GIT_CAP_SYMREF); ptr += strlen(GIT_CAP_SYMREF);
if (*ptr != '=') if (*ptr != '=')
...@@ -97,7 +97,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr) ...@@ -97,7 +97,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr)
return error; return error;
/* symref mapping has refspec format */ /* symref mapping has refspec format */
mapping = git__malloc(sizeof(git_refspec)); mapping = git__calloc(1, sizeof(git_refspec));
GITERR_CHECK_ALLOC(mapping); GITERR_CHECK_ALLOC(mapping);
error = git_refspec__parse(mapping, git_buf_cstr(&buf), true); error = git_refspec__parse(mapping, git_buf_cstr(&buf), true);
...@@ -119,6 +119,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr) ...@@ -119,6 +119,7 @@ static int append_symref(const char **out, git_vector *symrefs, const char *ptr)
on_invalid: on_invalid:
giterr_set(GITERR_NET, "remote sent invalid symref"); giterr_set(GITERR_NET, "remote sent invalid symref");
git_refspec__free(mapping);
return -1; return -1;
} }
...@@ -258,7 +259,7 @@ static int store_common(transport_smart *t) ...@@ -258,7 +259,7 @@ static int store_common(transport_smart *t)
static int fetch_setup_walk(git_revwalk **out, git_repository *repo) static int fetch_setup_walk(git_revwalk **out, git_repository *repo)
{ {
git_revwalk *walk; git_revwalk *walk = NULL;
git_strarray refs; git_strarray refs;
unsigned int i; unsigned int i;
git_reference *ref; git_reference *ref;
...@@ -294,6 +295,7 @@ static int fetch_setup_walk(git_revwalk **out, git_repository *repo) ...@@ -294,6 +295,7 @@ static int fetch_setup_walk(git_revwalk **out, git_repository *repo)
return 0; return 0;
on_error: on_error:
git_revwalk_free(walk);
git_reference_free(ref); git_reference_free(ref);
git_strarray_free(&refs); git_strarray_free(&refs);
return error; return error;
......
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