mirror of
https://github.com/git/git.git
synced 2025-03-15 14:11:54 +00:00
ref-filter: drop sprintf and strcpy calls
The ref-filter code comes from for-each-ref, and inherited a number of raw sprintf and strcpy calls. These are generally all safe, as we custom-size the buffers, or are formatting numbers into sufficiently large buffers. But we can make the resulting code even simpler and more obviously correct by using some of our helper functions. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
9ae97018fb
commit
a5e03bf5c6
70
ref-filter.c
70
ref-filter.c
@ -192,9 +192,7 @@ static int grab_objectname(const char *name, const unsigned char *sha1,
|
||||
struct atom_value *v)
|
||||
{
|
||||
if (!strcmp(name, "objectname")) {
|
||||
char *s = xmalloc(41);
|
||||
strcpy(s, sha1_to_hex(sha1));
|
||||
v->s = s;
|
||||
v->s = xstrdup(sha1_to_hex(sha1));
|
||||
return 1;
|
||||
}
|
||||
if (!strcmp(name, "objectname:short")) {
|
||||
@ -219,10 +217,8 @@ static void grab_common_values(struct atom_value *val, int deref, struct object
|
||||
if (!strcmp(name, "objecttype"))
|
||||
v->s = typename(obj->type);
|
||||
else if (!strcmp(name, "objectsize")) {
|
||||
char *s = xmalloc(40);
|
||||
sprintf(s, "%lu", sz);
|
||||
v->ul = sz;
|
||||
v->s = s;
|
||||
v->s = xstrfmt("%lu", sz);
|
||||
}
|
||||
else if (deref)
|
||||
grab_objectname(name, obj->sha1, v);
|
||||
@ -246,11 +242,8 @@ static void grab_tag_values(struct atom_value *val, int deref, struct object *ob
|
||||
v->s = tag->tag;
|
||||
else if (!strcmp(name, "type") && tag->tagged)
|
||||
v->s = typename(tag->tagged->type);
|
||||
else if (!strcmp(name, "object") && tag->tagged) {
|
||||
char *s = xmalloc(41);
|
||||
strcpy(s, sha1_to_hex(tag->tagged->sha1));
|
||||
v->s = s;
|
||||
}
|
||||
else if (!strcmp(name, "object") && tag->tagged)
|
||||
v->s = xstrdup(sha1_to_hex(tag->tagged->sha1));
|
||||
}
|
||||
}
|
||||
|
||||
@ -268,32 +261,22 @@ static void grab_commit_values(struct atom_value *val, int deref, struct object
|
||||
if (deref)
|
||||
name++;
|
||||
if (!strcmp(name, "tree")) {
|
||||
char *s = xmalloc(41);
|
||||
strcpy(s, sha1_to_hex(commit->tree->object.sha1));
|
||||
v->s = s;
|
||||
v->s = xstrdup(sha1_to_hex(commit->tree->object.sha1));
|
||||
}
|
||||
if (!strcmp(name, "numparent")) {
|
||||
char *s = xmalloc(40);
|
||||
else if (!strcmp(name, "numparent")) {
|
||||
v->ul = commit_list_count(commit->parents);
|
||||
sprintf(s, "%lu", v->ul);
|
||||
v->s = s;
|
||||
v->s = xstrfmt("%lu", v->ul);
|
||||
}
|
||||
else if (!strcmp(name, "parent")) {
|
||||
int num = commit_list_count(commit->parents);
|
||||
int i;
|
||||
struct commit_list *parents;
|
||||
char *s = xmalloc(41 * num + 1);
|
||||
v->s = s;
|
||||
for (i = 0, parents = commit->parents;
|
||||
parents;
|
||||
parents = parents->next, i = i + 41) {
|
||||
struct strbuf s = STRBUF_INIT;
|
||||
for (parents = commit->parents; parents; parents = parents->next) {
|
||||
struct commit *parent = parents->item;
|
||||
strcpy(s+i, sha1_to_hex(parent->object.sha1));
|
||||
if (parents->next)
|
||||
s[i+40] = ' ';
|
||||
if (parents != commit->parents)
|
||||
strbuf_addch(&s, ' ');
|
||||
strbuf_addstr(&s, sha1_to_hex(parent->object.sha1));
|
||||
}
|
||||
if (!i)
|
||||
*s = '\0';
|
||||
v->s = strbuf_detach(&s, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -700,7 +683,6 @@ static void populate_value(struct ref_array_item *ref)
|
||||
else if (!strcmp(formatp, "track") &&
|
||||
(starts_with(name, "upstream") ||
|
||||
starts_with(name, "push"))) {
|
||||
char buf[40];
|
||||
|
||||
if (stat_tracking_info(branch, &num_ours,
|
||||
&num_theirs, NULL))
|
||||
@ -708,17 +690,13 @@ static void populate_value(struct ref_array_item *ref)
|
||||
|
||||
if (!num_ours && !num_theirs)
|
||||
v->s = "";
|
||||
else if (!num_ours) {
|
||||
sprintf(buf, "[behind %d]", num_theirs);
|
||||
v->s = xstrdup(buf);
|
||||
} else if (!num_theirs) {
|
||||
sprintf(buf, "[ahead %d]", num_ours);
|
||||
v->s = xstrdup(buf);
|
||||
} else {
|
||||
sprintf(buf, "[ahead %d, behind %d]",
|
||||
num_ours, num_theirs);
|
||||
v->s = xstrdup(buf);
|
||||
}
|
||||
else if (!num_ours)
|
||||
v->s = xstrfmt("[behind %d]", num_theirs);
|
||||
else if (!num_theirs)
|
||||
v->s = xstrfmt("[ahead %d]", num_ours);
|
||||
else
|
||||
v->s = xstrfmt("[ahead %d, behind %d]",
|
||||
num_ours, num_theirs);
|
||||
continue;
|
||||
} else if (!strcmp(formatp, "trackshort") &&
|
||||
(starts_with(name, "upstream") ||
|
||||
@ -745,12 +723,8 @@ static void populate_value(struct ref_array_item *ref)
|
||||
|
||||
if (!deref)
|
||||
v->s = refname;
|
||||
else {
|
||||
int len = strlen(refname);
|
||||
char *s = xmalloc(len + 4);
|
||||
sprintf(s, "%s^{}", refname);
|
||||
v->s = s;
|
||||
}
|
||||
else
|
||||
v->s = xstrfmt("%s^{}", refname);
|
||||
}
|
||||
|
||||
for (i = 0; i < used_atom_cnt; i++) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user