mirror of
https://github.com/git/git.git
synced 2024-10-30 05:47:53 +01:00
Merge branch 'jk/show-branch-lift-name-len-limit'
"git show-branch" expected there were only very short branch names in the repository and used a fixed-length buffer to hold them without checking for overflow. * jk/show-branch-lift-name-len-limit: show-branch: use skip_prefix to drop magic numbers show-branch: store resolved head in heap buffer show-branch: drop head_len variable
This commit is contained in:
commit
74a772774d
1 changed files with 13 additions and 29 deletions
|
@ -275,8 +275,7 @@ static void show_one_commit(struct commit *commit, int no_name)
|
|||
pp_commit_easy(CMIT_FMT_ONELINE, commit, &pretty);
|
||||
pretty_str = pretty.buf;
|
||||
}
|
||||
if (starts_with(pretty_str, "[PATCH] "))
|
||||
pretty_str += 8;
|
||||
skip_prefix(pretty_str, "[PATCH] ", &pretty_str);
|
||||
|
||||
if (!no_name) {
|
||||
if (name && name->head_name) {
|
||||
|
@ -470,18 +469,14 @@ static void snarf_refs(int head, int remotes)
|
|||
}
|
||||
}
|
||||
|
||||
static int rev_is_head(char *head, int headlen, char *name,
|
||||
static int rev_is_head(const char *head, const char *name,
|
||||
unsigned char *head_sha1, unsigned char *sha1)
|
||||
{
|
||||
if ((!head[0]) ||
|
||||
(head_sha1 && sha1 && hashcmp(head_sha1, sha1)))
|
||||
if (!head || (head_sha1 && sha1 && hashcmp(head_sha1, sha1)))
|
||||
return 0;
|
||||
if (starts_with(head, "refs/heads/"))
|
||||
head += 11;
|
||||
if (starts_with(name, "refs/heads/"))
|
||||
name += 11;
|
||||
else if (starts_with(name, "heads/"))
|
||||
name += 6;
|
||||
skip_prefix(head, "refs/heads/", &head);
|
||||
if (!skip_prefix(name, "refs/heads/", &name))
|
||||
skip_prefix(name, "heads/", &name);
|
||||
return !strcmp(head, name);
|
||||
}
|
||||
|
||||
|
@ -620,9 +615,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
|
|||
int all_heads = 0, all_remotes = 0;
|
||||
int all_mask, all_revs;
|
||||
enum rev_sort_order sort_order = REV_SORT_IN_GRAPH_ORDER;
|
||||
char head[128];
|
||||
const char *head_p;
|
||||
int head_len;
|
||||
char *head;
|
||||
struct object_id head_oid;
|
||||
int merge_base = 0;
|
||||
int independent = 0;
|
||||
|
@ -787,32 +780,24 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
|
|||
snarf_refs(all_heads, all_remotes);
|
||||
}
|
||||
|
||||
head_p = resolve_ref_unsafe("HEAD", RESOLVE_REF_READING,
|
||||
head = resolve_refdup("HEAD", RESOLVE_REF_READING,
|
||||
head_oid.hash, NULL);
|
||||
if (head_p) {
|
||||
head_len = strlen(head_p);
|
||||
memcpy(head, head_p, head_len + 1);
|
||||
}
|
||||
else {
|
||||
head_len = 0;
|
||||
head[0] = 0;
|
||||
}
|
||||
|
||||
if (with_current_branch && head_p) {
|
||||
if (with_current_branch && head) {
|
||||
int has_head = 0;
|
||||
for (i = 0; !has_head && i < ref_name_cnt; i++) {
|
||||
/* We are only interested in adding the branch
|
||||
* HEAD points at.
|
||||
*/
|
||||
if (rev_is_head(head,
|
||||
head_len,
|
||||
ref_name[i],
|
||||
head_oid.hash, NULL))
|
||||
has_head++;
|
||||
}
|
||||
if (!has_head) {
|
||||
int offset = starts_with(head, "refs/heads/") ? 11 : 0;
|
||||
append_one_rev(head + offset);
|
||||
const char *name = head;
|
||||
skip_prefix(name, "refs/heads/", &name);
|
||||
append_one_rev(name);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -866,7 +851,6 @@ int cmd_show_branch(int ac, const char **av, const char *prefix)
|
|||
for (i = 0; i < num_rev; i++) {
|
||||
int j;
|
||||
int is_head = rev_is_head(head,
|
||||
head_len,
|
||||
ref_name[i],
|
||||
head_oid.hash,
|
||||
rev[i]->object.oid.hash);
|
||||
|
|
Loading…
Reference in a new issue