stash: fix incorrect branch name in stash message
When creating a stash, Git uses the current branch name of the superproject to construct the stash commit message. However, in repositories with submodules, the message may mistakenly display the submodule branch name instead. This is because `refs_resolve_ref_unsafe()` returns a pointer to a static buffer. Subsequent calls to the same function overwrite the buffer, corrupting the originally fetched `branch_name` used for the stash message. Use `xstrdup()` to duplicate the branch name immediately after resolving it, so that later buffer overwrites do not affect the stash message. Signed-off-by: K Jayatheerth <jayatheerthkulkarni2005@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
d50a5e8939
commit
ffb36c64f2
@@ -1373,6 +1373,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
|
||||
const char *head_short_sha1 = NULL;
|
||||
const char *branch_ref = NULL;
|
||||
const char *branch_name = "(no branch)";
|
||||
char *branch_name_buf = NULL;
|
||||
struct commit *head_commit = NULL;
|
||||
struct commit_list *parents = NULL;
|
||||
struct strbuf msg = STRBUF_INIT;
|
||||
@@ -1405,8 +1406,12 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b
|
||||
|
||||
branch_ref = refs_resolve_ref_unsafe(get_main_ref_store(the_repository),
|
||||
"HEAD", 0, NULL, &flags);
|
||||
if (flags & REF_ISSYMREF)
|
||||
skip_prefix(branch_ref, "refs/heads/", &branch_name);
|
||||
|
||||
if (flags & REF_ISSYMREF) {
|
||||
if (skip_prefix(branch_ref, "refs/heads/", &branch_name))
|
||||
branch_name = branch_name_buf = xstrdup(branch_name);
|
||||
}
|
||||
|
||||
head_short_sha1 = repo_find_unique_abbrev(the_repository,
|
||||
&head_commit->object.oid,
|
||||
DEFAULT_ABBREV);
|
||||
@@ -1496,6 +1501,7 @@ done:
|
||||
strbuf_release(&msg);
|
||||
strbuf_release(&untracked_files);
|
||||
free_commit_list(parents);
|
||||
free(branch_name_buf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user