Skip to content

Commit a88a3d7

Browse files
rjustogitster
authored andcommitted
branch: fix a leak in inherit_tracking
In d311566 (branch: add flags and config to inherit tracking, 2021-12-20) a new option was introduced to allow creating a new branch, inheriting the tracking of another branch. The new code, strdup()'d the remote_name of the existing branch, but unfortunately it was not freed, producing a leak. $ git remote add local . $ git update-ref refs/remotes/local/foo HEAD $ git branch --track bar local/foo branch 'bar' set up to track 'local/foo'. $ git branch --track=inherit baz bar branch 'baz' set up to track 'local/foo'. Direct leak of 6 byte(s) in 1 object(s) allocated from: ... in xstrdup wrapper.c ... in inherit_tracking branch.c ... in setup_tracking branch.c ... in create_branch branch.c ... in cmd_branch builtin/branch.c ... in run_builtin git.c Actually, the string we're strdup()'ing is from the struct branch returned by get_branch(). Which, in turn, retrieves the string from the global "struct repository". This makes perfectly valid to use the string throughout the entire execution of create_branch(). There is no need to duplicate it. Let's fix the leak, removing the strdup(). Signed-off-by: Rubén Justo <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 1533bda commit a88a3d7

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

branch.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -233,7 +233,7 @@ static int inherit_tracking(struct tracking *tracking, const char *orig_ref)
233233
return -1;
234234
}
235235

236-
tracking->remote = xstrdup(branch->remote_name);
236+
tracking->remote = branch->remote_name;
237237
for (i = 0; i < branch->merge_nr; i++)
238238
string_list_append(tracking->srcs, branch->merge_name[i]);
239239
return 0;

0 commit comments

Comments
 (0)