Skip to content

Commit 16c0906

Browse files
committed
Merge branch 'ps/leakfixes-part-6'
More leakfixes. * ps/leakfixes-part-6: (22 commits) builtin/repack: fix leaking keep-pack list merge-ort: fix two leaks when handling directory rename modifications match-trees: fix leaking prefixes in `shift_tree()` builtin/fmt-merge-msg: fix leaking buffers builtin/grep: fix leaking object context builtin/pack-objects: plug leaking list of keep-packs builtin/repack: fix leaking line buffer when packing promisors negotiator/skipping: fix leaking commit entries shallow: fix leaking members of `struct shallow_info` shallow: free grafts when unregistering them object: clear grafts when clearing parsed object pool gpg-interface: fix misdesigned signing key interfaces send-pack: fix leaking push cert nonce remote: fix leak in reachability check of a remote-tracking ref remote: fix leaking tracking refs builtin/submodule--helper: fix leaking refs on push-check submodule: fix leaking fetch task data upload-pack: fix leaking child process data on reachability checks builtin/push: fix leaking refspec query result send-pack: fix leaking common object IDs ...
2 parents 2b800ec + 46f6ca2 commit 16c0906

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

42 files changed

+178
-72
lines changed

builtin/fmt-merge-msg.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ int cmd_fmt_merge_msg(int argc, const char **argv, const char *prefix)
6767
return ret;
6868
write_in_full(STDOUT_FILENO, output.buf, output.len);
6969

70+
strbuf_release(&input);
71+
strbuf_release(&output);
7072
free(inpath);
7173
return 0;
7274
}

builtin/grep.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
11331133
&oid, &oc)) {
11341134
if (seen_dashdash)
11351135
die(_("unable to resolve revision: %s"), arg);
1136+
object_context_release(&oc);
11361137
break;
11371138
}
11381139

builtin/pack-objects.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4669,6 +4669,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
46694669
cleanup:
46704670
clear_packing_data(&to_pack);
46714671
list_objects_filter_release(&filter_options);
4672+
string_list_clear(&keep_pack_list, 0);
46724673
strvec_clear(&rp);
46734674

46744675
return 0;

builtin/push.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,15 @@ static void refspec_append_mapped(struct refspec *refspec, const char *ref,
7272
const char *branch_name;
7373

7474
if (remote->push.nr) {
75-
struct refspec_item query;
76-
memset(&query, 0, sizeof(struct refspec_item));
77-
query.src = matched->name;
75+
struct refspec_item query = {
76+
.src = matched->name,
77+
};
78+
7879
if (!query_refspecs(&remote->push, &query) && query.dst) {
7980
refspec_appendf(refspec, "%s%s:%s",
8081
query.force ? "+" : "",
8182
query.src, query.dst);
83+
free(query.dst);
8284
return;
8385
}
8486
}

builtin/repack.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,9 +425,11 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
425425

426426
free(promisor_name);
427427
}
428+
428429
fclose(out);
429430
if (finish_command(&cmd))
430431
die(_("could not finish pack-objects to repack promisor objects"));
432+
strbuf_release(&line);
431433
}
432434

433435
struct pack_geometry {
@@ -1541,6 +1543,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
15411543
}
15421544

15431545
cleanup:
1546+
string_list_clear(&keep_pack_list, 0);
15441547
string_list_clear(&names, 1);
15451548
existing_packs_release(&existing);
15461549
free_pack_geometry(&geometry);

builtin/submodule--helper.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2958,7 +2958,9 @@ static int push_check(int argc, const char **argv, const char *prefix UNUSED)
29582958
rs->src);
29592959
}
29602960
}
2961+
29612962
refspec_clear(&refspec);
2963+
free_refs(local_refs);
29622964
}
29632965
free(head);
29642966

builtin/tag.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,7 @@ static int do_sign(struct strbuf *buffer, struct object_id **compat_oid,
160160
const struct git_hash_algo *compat = the_repository->compat_hash_algo;
161161
struct strbuf sig = STRBUF_INIT, compat_sig = STRBUF_INIT;
162162
struct strbuf compat_buf = STRBUF_INIT;
163-
const char *keyid = get_signing_key();
163+
char *keyid = get_signing_key();
164164
int ret = -1;
165165

166166
if (sign_buffer(buffer, &sig, keyid))
@@ -190,6 +190,7 @@ static int do_sign(struct strbuf *buffer, struct object_id **compat_oid,
190190
strbuf_release(&sig);
191191
strbuf_release(&compat_sig);
192192
strbuf_release(&compat_buf);
193+
free(keyid);
193194
return ret;
194195
}
195196

commit.c

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid)
183183
commit_graft_oid_access);
184184
}
185185

186-
static void unparse_commit(struct repository *r, const struct object_id *oid)
186+
void unparse_commit(struct repository *r, const struct object_id *oid)
187187
{
188188
struct commit *c = lookup_commit(r, oid);
189189

@@ -324,18 +324,6 @@ int for_each_commit_graft(each_commit_graft_fn fn, void *cb_data)
324324
return ret;
325325
}
326326

327-
void reset_commit_grafts(struct repository *r)
328-
{
329-
int i;
330-
331-
for (i = 0; i < r->parsed_objects->grafts_nr; i++) {
332-
unparse_commit(r, &r->parsed_objects->grafts[i]->oid);
333-
free(r->parsed_objects->grafts[i]);
334-
}
335-
r->parsed_objects->grafts_nr = 0;
336-
r->parsed_objects->commit_graft_prepared = 0;
337-
}
338-
339327
struct commit_buffer {
340328
void *buffer;
341329
unsigned long size;
@@ -1156,11 +1144,14 @@ int add_header_signature(struct strbuf *buf, struct strbuf *sig, const struct gi
11561144

11571145
static int sign_commit_to_strbuf(struct strbuf *sig, struct strbuf *buf, const char *keyid)
11581146
{
1147+
char *keyid_to_free = NULL;
1148+
int ret = 0;
11591149
if (!keyid || !*keyid)
1160-
keyid = get_signing_key();
1150+
keyid = keyid_to_free = get_signing_key();
11611151
if (sign_buffer(buf, sig, keyid))
1162-
return -1;
1163-
return 0;
1152+
ret = -1;
1153+
free(keyid_to_free);
1154+
return ret;
11641155
}
11651156

11661157
int parse_signed_commit(const struct commit *commit,

commit.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ static inline int repo_parse_commit_no_graph(struct repository *r,
110110

111111
void parse_commit_or_die(struct commit *item);
112112

113+
void unparse_commit(struct repository *r, const struct object_id *oid);
114+
113115
struct buffer_slab;
114116
struct buffer_slab *allocate_commit_buffer_slab(void);
115117
void free_commit_buffer_slab(struct buffer_slab *bs);
@@ -242,7 +244,6 @@ int commit_graft_pos(struct repository *r, const struct object_id *oid);
242244
int register_commit_graft(struct repository *r, struct commit_graft *, int);
243245
void prepare_commit_graft(struct repository *r);
244246
struct commit_graft *lookup_commit_graft(struct repository *r, const struct object_id *oid);
245-
void reset_commit_grafts(struct repository *r);
246247

247248
struct commit *get_fork_point(const char *refname, struct commit *commit);
248249

fetch-pack.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2227,7 +2227,10 @@ void negotiate_using_fetch(const struct oid_array *negotiation_tips,
22272227
trace2_region_leave("fetch-pack", "negotiate_using_fetch", the_repository);
22282228
trace2_data_intmax("negotiate_using_fetch", the_repository,
22292229
"total_rounds", negotiation_round);
2230+
22302231
clear_common_flag(acked_commits);
2232+
object_array_clear(&nt_object_array);
2233+
negotiator.release(&negotiator);
22312234
strbuf_release(&req_buf);
22322235
}
22332236

0 commit comments

Comments
 (0)