diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-03-27 23:02:32 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-03-27 23:02:32 +0300 |
commit | 553c622b685f0a7a83c77617377f08019d76c682 (patch) | |
tree | 59a6165ca81d3355fe9279a929563fd1c0b91d55 | |
parent | 2dfb2e07cb0cb979f630643b57dca579a0359a9d (diff) | |
parent | 826aed50cbb072d8f159e4c8ba0f9bd3df21a234 (diff) |
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
-rw-r--r-- | builtin/apply.c | 4 | ||||
-rw-r--r-- | builtin/commit.c | 6 | ||||
-rw-r--r-- | builtin/update-index.c | 1 | ||||
-rw-r--r-- | http-push.c | 1 | ||||
-rw-r--r-- | http.c | 1 | ||||
-rw-r--r-- | merge-blobs.c | 4 | ||||
-rw-r--r-- | merge-recursive.c | 3 | ||||
-rw-r--r-- | read-cache.c | 22 |
8 files changed, 27 insertions, 15 deletions
diff --git a/builtin/apply.c b/builtin/apply.c index 65b97eee69..0769b09287 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -2776,7 +2776,8 @@ static int apply_one_fragment(struct image *img, struct fragment *frag, default: if (apply_verbosely) error(_("invalid start of line: '%c'"), first); - return -1; + applied_pos = -1; + goto out; } if (added_blank_line) { 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); } +out: free(oldlines); strbuf_release(&newlines); free(preimage.line_allocated); diff --git a/builtin/commit.c b/builtin/commit.c index 961e467242..da79ac4bc7 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -229,7 +229,7 @@ static int commit_index_files(void) static int list_paths(struct string_list *list, const char *with_tree, const char *prefix, const struct pathspec *pattern) { - int i; + int i, ret; char *m; 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 */ } - 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) diff --git a/builtin/update-index.c b/builtin/update-index.c index 587898624c..6271b54adc 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -584,6 +584,7 @@ static int do_reupdate(int ac, const char **av, path = xstrdup(ce->name); update_one(path); free(path); + free(old); if (save_nr != active_nr) goto redo; } diff --git a/http-push.c b/http-push.c index bfb1c9605b..c98dad23df 100644 --- a/http-push.c +++ b/http-push.c @@ -316,7 +316,6 @@ static void start_fetch_packed(struct transfer_request *request) preq = new_http_pack_request(target, repo->url); if (preq == NULL) { - release_http_pack_request(preq); repo->can_update_info_refs = 0; return; } @@ -1462,6 +1462,7 @@ void release_http_pack_request(struct http_pack_request *preq) } preq->slot = NULL; free(preq->url); + free(preq); } int finish_http_pack_request(struct http_pack_request *preq) diff --git a/merge-blobs.c b/merge-blobs.c index 57211bccb7..7abb894c68 100644 --- a/merge-blobs.c +++ b/merge-blobs.c @@ -14,8 +14,10 @@ static int fill_mmfile_blob(mmfile_t *f, struct blob *obj) buf = read_sha1_file(obj->object.sha1, &type, &size); if (!buf) return -1; - if (type != OBJ_BLOB) + if (type != OBJ_BLOB) { + free(buf); return -1; + } f->ptr = buf; f->size = size; return 0; diff --git a/merge-recursive.c b/merge-recursive.c index 771f5e21b0..1c9c30db6c 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1858,6 +1858,9 @@ int merge_trees(struct merge_options *o, string_list_clear(re_head, 0); string_list_clear(entries, 1); + free(re_merge); + free(re_head); + free(entries); } else clean = 1; diff --git a/read-cache.c b/read-cache.c index 1bf78a445f..36ff89f29e 100644 --- a/read-cache.c +++ b/read-cache.c @@ -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); if (alias && !ce_stage(alias) && !ie_match_stat(istate, alias, st, ce_option)) { /* Nothing changed, really */ - free(ce); if (!S_ISGITLINK(alias->ce_mode)) ce_mark_uptodate(alias); alias->ce_flags |= CE_ADDED; + + free(ce); return 0; } 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); + } } else 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); if (pretend) - ; - else if (add_index_entry(istate, ce, add_option)) - return error("unable to add %s to index",path); + free(ce); + else if (add_index_entry(istate, ce, add_option)) { + free(ce); + return error("unable to add %s to index", path); + } if (verbose && !was_same) printf("add '%s'\n", path); return 0; @@ -743,12 +748,9 @@ struct cache_entry *make_cache_entry(unsigned int mode, ce->ce_mode = create_ce_mode(mode); ret = refresh_cache_entry(ce, refresh_options); - if (!ret) { + if (ret != ce) free(ce); - return NULL; - } else { - return ret; - } + return ret; } int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) |