Merge branch 'sb/leaks'

* sb/leaks:
  http: release the memory of a http pack request as well
  read-cache: fix memleak
  add_to_index(): free unused cache-entry
  commit.c: fix a memory leak
  http-push: remove unneeded cleanup
  merge-recursive: fix memleaks
  merge-blobs.c: fix a memleak
  builtin/apply.c: fix a memleak
  update-index: fix a memleak
  read-cache: free cache entry in add_to_index in case of early return
This commit is contained in:
Junio C Hamano 2015-03-27 13:02:32 -07:00
commit 553c622b68
8 changed files with 27 additions and 15 deletions

View File

@ -2776,7 +2776,8 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
default: default:
if (apply_verbosely) if (apply_verbosely)
error(_("invalid start of line: '%c'"), first); error(_("invalid start of line: '%c'"), first);
return -1; applied_pos = -1;
goto out;
} }
if (added_blank_line) { if (added_blank_line) {
if (!new_blank_lines_at_end) if (!new_blank_lines_at_end)
@ -2915,6 +2916,7 @@ static int apply_one_fragment(struct image *img, struct fragment *frag,
(int)(old - oldlines), oldlines); (int)(old - oldlines), oldlines);
} }
out:
free(oldlines); free(oldlines);
strbuf_release(&newlines); strbuf_release(&newlines);
free(preimage.line_allocated); free(preimage.line_allocated);

View File

@ -229,7 +229,7 @@ static int commit_index_files(void)
static int list_paths(struct string_list *list, const char *with_tree, static int list_paths(struct string_list *list, const char *with_tree,
const char *prefix, const struct pathspec *pattern) const char *prefix, const struct pathspec *pattern)
{ {
int i; int i, ret;
char *m; char *m;
if (!pattern->nr) if (!pattern->nr)
@ -256,7 +256,9 @@ static int list_paths(struct string_list *list, const char *with_tree,
item->util = item; /* better a valid pointer than a fake one */ item->util = item; /* better a valid pointer than a fake one */
} }
return report_path_error(m, pattern, prefix); ret = report_path_error(m, pattern, prefix);
free(m);
return ret;
} }
static void add_remove_files(struct string_list *list) static void add_remove_files(struct string_list *list)

View File

@ -584,6 +584,7 @@ static int do_reupdate(int ac, const char **av,
path = xstrdup(ce->name); path = xstrdup(ce->name);
update_one(path); update_one(path);
free(path); free(path);
free(old);
if (save_nr != active_nr) if (save_nr != active_nr)
goto redo; goto redo;
} }

View File

@ -316,7 +316,6 @@ static void start_fetch_packed(struct transfer_request *request)
preq = new_http_pack_request(target, repo->url); preq = new_http_pack_request(target, repo->url);
if (preq == NULL) { if (preq == NULL) {
release_http_pack_request(preq);
repo->can_update_info_refs = 0; repo->can_update_info_refs = 0;
return; return;
} }

1
http.c
View File

@ -1462,6 +1462,7 @@ void release_http_pack_request(struct http_pack_request *preq)
} }
preq->slot = NULL; preq->slot = NULL;
free(preq->url); free(preq->url);
free(preq);
} }
int finish_http_pack_request(struct http_pack_request *preq) int finish_http_pack_request(struct http_pack_request *preq)

View File

@ -14,8 +14,10 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj)
buf = read_sha1_file(obj->object.sha1, &type, &size); buf = read_sha1_file(obj->object.sha1, &type, &size);
if (!buf) if (!buf)
return -1; return -1;
if (type != OBJ_BLOB) if (type != OBJ_BLOB) {
free(buf);
return -1; return -1;
}
f->ptr = buf; f->ptr = buf;
f->size = size; f->size = size;
return 0; return 0;

View File

@ -1858,6 +1858,9 @@ int merge_trees(struct merge_options *o,
string_list_clear(re_head, 0); string_list_clear(re_head, 0);
string_list_clear(entries, 1); string_list_clear(entries, 1);
free(re_merge);
free(re_head);
free(entries);
} }
else else
clean = 1; clean = 1;

View File

@ -681,15 +681,18 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
alias = index_file_exists(istate, ce->name, ce_namelen(ce), ignore_case); alias = index_file_exists(istate, ce->name, ce_namelen(ce), ignore_case);
if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) { if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) {
/* Nothing changed, really */ /* Nothing changed, really */
free(ce);
if (!S_ISGITLINK(alias->ce_mode)) if (!S_ISGITLINK(alias->ce_mode))
ce_mark_uptodate(alias); ce_mark_uptodate(alias);
alias->ce_flags |= CE_ADDED; alias->ce_flags |= CE_ADDED;
free(ce);
return 0; return 0;
} }
if (!intent_only) { if (!intent_only) {
if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT)) if (index_path(ce->sha1, path, st, HASH_WRITE_OBJECT)) {
free(ce);
return error("unable to index file %s", path); return error("unable to index file %s", path);
}
} else } else
set_object_name_for_intent_to_add_entry(ce); set_object_name_for_intent_to_add_entry(ce);
@ -704,9 +707,11 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st,
ce->ce_mode == alias->ce_mode); ce->ce_mode == alias->ce_mode);
if (pretend) if (pretend)
; free(ce);
else if (add_index_entry(istate, ce, add_option)) else if (add_index_entry(istate, ce, add_option)) {
return error("unable to add %s to index",path); free(ce);
return error("unable to add %s to index", path);
}
if (verbose && !was_same) if (verbose && !was_same)
printf("add '%s'\n", path); printf("add '%s'\n", path);
return 0; return 0;
@ -743,12 +748,9 @@ struct cache_entry *make_cache_entry(unsigned int mode,
ce->ce_mode = create_ce_mode(mode); ce->ce_mode = create_ce_mode(mode);
ret = refresh_cache_entry(ce, refresh_options); ret = refresh_cache_entry(ce, refresh_options);
if (!ret) { if (ret != ce)
free(ce); free(ce);
return NULL; return ret;
} else {
return ret;
}
} }
int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) int ce_same_name(const struct cache_entry *a, const struct cache_entry *b)