Skip to content

Commit

Permalink
branch: fix a leak in check_tracking_branch
Browse files Browse the repository at this point in the history
Let's fix a leak we have in check_tracking_branch() since the function
was introduced in 41c21f2 (branch.c: Validate tracking branches with
refspecs instead of refs/remotes/*, 2013-04-21).

The leak can be reviewed with:

   $ git remote add local .
   $ git update-ref refs/remotes/local/foo HEAD
   $ git branch --track bar local/foo

   Direct leak of 24 byte(s) in 1 object(s) allocated from:
       ... in xrealloc wrapper.c
       ... in strbuf_grow strbuf.c
       ... in strbuf_add strbuf.c
       ... in match_name_with_pattern remote.c
       ... in query_refspecs remote.c
       ... in remote_find_tracking remote.c
       ... in check_tracking_branch branch.c
       ... in for_each_remote remote.c
       ... in validate_remote_tracking_branch branch.c
       ... in dwim_branch_start branch.c
       ... in create_branch branch.c
       ... in cmd_branch builtin/branch.c
       ... in run_builtin git.c

Signed-off-by: Rubén Justo <rjusto@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
rjusto authored and gitster committed Jun 12, 2023
1 parent a88a3d7 commit caee1d6
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion branch.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,12 @@ static int check_tracking_branch(struct remote *remote, void *cb_data)
{
char *tracking_branch = cb_data;
struct refspec_item query;
int res;
memset(&query, 0, sizeof(struct refspec_item));
query.dst = tracking_branch;
return !remote_find_tracking(remote, &query);
res = !remote_find_tracking(remote, &query);
free(query.src);
return res;
}

static int validate_remote_tracking_branch(char *ref)
Expand Down

0 comments on commit caee1d6

Please sign in to comment.