diff options
author | Jiang Xin <worldhello.net@gmail.com> | 2015-07-22 09:49:40 +0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-07-22 14:18:22 -0700 |
commit | b112b14d7869bf3c000abb84cd22e57dd811d031 (patch) | |
tree | 8ae07a38f729524bad1bbb4a932e4fa37a50a2dc /builtin | |
parent | Merge branch 'maint-1.9' into maint-2.0 (diff) | |
download | tgif-b112b14d7869bf3c000abb84cd22e57dd811d031.tar.xz |
receive-pack: crash when checking with non-exist HEAD
If HEAD of a repository points to a conflict reference, such as:
* There exist a reference named 'refs/heads/jx/feature1', but HEAD
points to 'refs/heads/jx', or
* There exist a reference named 'refs/heads/feature', but HEAD points
to 'refs/heads/feature/bad'.
When we push to delete a reference for this repo, such as:
git push /path/to/bad-head-repo.git :some/good/reference
The git-receive-pack process will crash.
This is because if HEAD points to a conflict reference, the function
`resolve_refdup("HEAD", ...)` does not return a valid reference name,
but a null buffer. Later matching the delete reference against the null
buffer will cause git-receive-pack crash.
Signed-off-by: Jiang Xin <worldhello.net@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/receive-pack.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index c3230817db..2380127c91 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -514,7 +514,7 @@ static const char *update(struct command *cmd, struct shallow_info *si) return "deletion prohibited"; } - if (!strcmp(namespaced_name, head_name)) { + if (head_name && !strcmp(namespaced_name, head_name)) { switch (deny_delete_current) { case DENY_IGNORE: break; |