use sha1_to_hex_r() instead of strcpy
Before sha1_to_hex_r() existed, a simple way to get hex sha1 into a buffer was with: strcpy(buf, sha1_to_hex(sha1)); This isn't wrong (assuming the buf is 41 characters), but it makes auditing the code base for bad strcpy() calls harder, as these become false positives. Let's convert them to sha1_to_hex_r(), and likewise for some calls to find_unique_abbrev(). While we're here, we'll double-check that all of the buffers are correctly sized, and use the more obvious GIT_SHA1_HEXSZ constant. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
f063d38b80
commit
d59f765ac9
|
@ -1867,9 +1867,9 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent,
|
||||||
int cnt;
|
int cnt;
|
||||||
const char *cp;
|
const char *cp;
|
||||||
struct origin *suspect = ent->suspect;
|
struct origin *suspect = ent->suspect;
|
||||||
char hex[41];
|
char hex[GIT_SHA1_HEXSZ + 1];
|
||||||
|
|
||||||
strcpy(hex, sha1_to_hex(suspect->commit->object.sha1));
|
sha1_to_hex_r(hex, suspect->commit->object.sha1);
|
||||||
printf("%s %d %d %d\n",
|
printf("%s %d %d %d\n",
|
||||||
hex,
|
hex,
|
||||||
ent->s_lno + 1,
|
ent->s_lno + 1,
|
||||||
|
@ -1905,11 +1905,11 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt)
|
||||||
const char *cp;
|
const char *cp;
|
||||||
struct origin *suspect = ent->suspect;
|
struct origin *suspect = ent->suspect;
|
||||||
struct commit_info ci;
|
struct commit_info ci;
|
||||||
char hex[41];
|
char hex[GIT_SHA1_HEXSZ + 1];
|
||||||
int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
|
int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP);
|
||||||
|
|
||||||
get_commit_info(suspect->commit, &ci, 1);
|
get_commit_info(suspect->commit, &ci, 1);
|
||||||
strcpy(hex, sha1_to_hex(suspect->commit->object.sha1));
|
sha1_to_hex_r(hex, suspect->commit->object.sha1);
|
||||||
|
|
||||||
cp = nth_line(sb, ent->lno);
|
cp = nth_line(sb, ent->lno);
|
||||||
for (cnt = 0; cnt < ent->num_lines; cnt++) {
|
for (cnt = 0; cnt < ent->num_lines; cnt++) {
|
||||||
|
|
|
@ -9,7 +9,7 @@ static int merge_entry(int pos, const char *path)
|
||||||
{
|
{
|
||||||
int found;
|
int found;
|
||||||
const char *arguments[] = { pgm, "", "", "", path, "", "", "", NULL };
|
const char *arguments[] = { pgm, "", "", "", path, "", "", "", NULL };
|
||||||
char hexbuf[4][60];
|
char hexbuf[4][GIT_SHA1_HEXSZ + 1];
|
||||||
char ownbuf[4][60];
|
char ownbuf[4][60];
|
||||||
|
|
||||||
if (pos >= active_nr)
|
if (pos >= active_nr)
|
||||||
|
@ -22,7 +22,7 @@ static int merge_entry(int pos, const char *path)
|
||||||
if (strcmp(ce->name, path))
|
if (strcmp(ce->name, path))
|
||||||
break;
|
break;
|
||||||
found++;
|
found++;
|
||||||
strcpy(hexbuf[stage], sha1_to_hex(ce->sha1));
|
sha1_to_hex_r(hexbuf[stage], ce->sha1);
|
||||||
xsnprintf(ownbuf[stage], sizeof(ownbuf[stage]), "%o", ce->ce_mode);
|
xsnprintf(ownbuf[stage], sizeof(ownbuf[stage]), "%o", ce->ce_mode);
|
||||||
arguments[stage] = hexbuf[stage];
|
arguments[stage] = hexbuf[stage];
|
||||||
arguments[stage + 4] = ownbuf[stage];
|
arguments[stage + 4] = ownbuf[stage];
|
||||||
|
|
|
@ -1319,13 +1319,13 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
if (verify_signatures) {
|
if (verify_signatures) {
|
||||||
for (p = remoteheads; p; p = p->next) {
|
for (p = remoteheads; p; p = p->next) {
|
||||||
struct commit *commit = p->item;
|
struct commit *commit = p->item;
|
||||||
char hex[41];
|
char hex[GIT_SHA1_HEXSZ + 1];
|
||||||
struct signature_check signature_check;
|
struct signature_check signature_check;
|
||||||
memset(&signature_check, 0, sizeof(signature_check));
|
memset(&signature_check, 0, sizeof(signature_check));
|
||||||
|
|
||||||
check_commit_signature(commit, &signature_check);
|
check_commit_signature(commit, &signature_check);
|
||||||
|
|
||||||
strcpy(hex, find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
|
find_unique_abbrev_r(hex, commit->object.sha1, DEFAULT_ABBREV);
|
||||||
switch (signature_check.result) {
|
switch (signature_check.result) {
|
||||||
case 'G':
|
case 'G':
|
||||||
break;
|
break;
|
||||||
|
@ -1415,15 +1415,15 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
||||||
/* Again the most common case of merging one remote. */
|
/* Again the most common case of merging one remote. */
|
||||||
struct strbuf msg = STRBUF_INIT;
|
struct strbuf msg = STRBUF_INIT;
|
||||||
struct commit *commit;
|
struct commit *commit;
|
||||||
char hex[41];
|
|
||||||
|
|
||||||
strcpy(hex, find_unique_abbrev(head_commit->object.sha1, DEFAULT_ABBREV));
|
if (verbosity >= 0) {
|
||||||
|
char from[GIT_SHA1_HEXSZ + 1], to[GIT_SHA1_HEXSZ + 1];
|
||||||
if (verbosity >= 0)
|
find_unique_abbrev_r(from, head_commit->object.sha1,
|
||||||
printf(_("Updating %s..%s\n"),
|
DEFAULT_ABBREV);
|
||||||
hex,
|
find_unique_abbrev_r(to, remoteheads->item->object.sha1,
|
||||||
find_unique_abbrev(remoteheads->item->object.sha1,
|
DEFAULT_ABBREV);
|
||||||
DEFAULT_ABBREV));
|
printf(_("Updating %s..%s\n"), from, to);
|
||||||
|
}
|
||||||
strbuf_addstr(&msg, "Fast-forward");
|
strbuf_addstr(&msg, "Fast-forward");
|
||||||
if (have_message)
|
if (have_message)
|
||||||
strbuf_addstr(&msg,
|
strbuf_addstr(&msg,
|
||||||
|
|
|
@ -1071,8 +1071,11 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
|
||||||
const char *dst_name;
|
const char *dst_name;
|
||||||
struct string_list_item *item;
|
struct string_list_item *item;
|
||||||
struct command *dst_cmd;
|
struct command *dst_cmd;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[GIT_SHA1_RAWSZ];
|
||||||
char cmd_oldh[41], cmd_newh[41], dst_oldh[41], dst_newh[41];
|
char cmd_oldh[GIT_SHA1_HEXSZ + 1],
|
||||||
|
cmd_newh[GIT_SHA1_HEXSZ + 1],
|
||||||
|
dst_oldh[GIT_SHA1_HEXSZ + 1],
|
||||||
|
dst_newh[GIT_SHA1_HEXSZ + 1];
|
||||||
int flag;
|
int flag;
|
||||||
|
|
||||||
strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
|
strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
|
||||||
|
@ -1103,10 +1106,10 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
|
||||||
|
|
||||||
dst_cmd->skip_update = 1;
|
dst_cmd->skip_update = 1;
|
||||||
|
|
||||||
strcpy(cmd_oldh, find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV));
|
find_unique_abbrev_r(cmd_oldh, cmd->old_sha1, DEFAULT_ABBREV);
|
||||||
strcpy(cmd_newh, find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV));
|
find_unique_abbrev_r(cmd_newh, cmd->new_sha1, DEFAULT_ABBREV);
|
||||||
strcpy(dst_oldh, find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV));
|
find_unique_abbrev_r(dst_oldh, dst_cmd->old_sha1, DEFAULT_ABBREV);
|
||||||
strcpy(dst_newh, find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV));
|
find_unique_abbrev_r(dst_newh, dst_cmd->new_sha1, DEFAULT_ABBREV);
|
||||||
rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
|
rp_error("refusing inconsistent update between symref '%s' (%s..%s) and"
|
||||||
" its target '%s' (%s..%s)",
|
" its target '%s' (%s..%s)",
|
||||||
cmd->ref_name, cmd_oldh, cmd_newh,
|
cmd->ref_name, cmd_oldh, cmd_newh,
|
||||||
|
|
|
@ -217,7 +217,7 @@ static void print_var_int(const char *var, int val)
|
||||||
static int show_bisect_vars(struct rev_list_info *info, int reaches, int all)
|
static int show_bisect_vars(struct rev_list_info *info, int reaches, int all)
|
||||||
{
|
{
|
||||||
int cnt, flags = info->flags;
|
int cnt, flags = info->flags;
|
||||||
char hex[41] = "";
|
char hex[GIT_SHA1_HEXSZ + 1] = "";
|
||||||
struct commit_list *tried;
|
struct commit_list *tried;
|
||||||
struct rev_info *revs = info->revs;
|
struct rev_info *revs = info->revs;
|
||||||
|
|
||||||
|
@ -242,7 +242,7 @@ static int show_bisect_vars(struct rev_list_info *info, int reaches, int all)
|
||||||
cnt = reaches;
|
cnt = reaches;
|
||||||
|
|
||||||
if (revs->commits)
|
if (revs->commits)
|
||||||
strcpy(hex, sha1_to_hex(revs->commits->item->object.sha1));
|
sha1_to_hex_r(hex, revs->commits->item->object.sha1);
|
||||||
|
|
||||||
if (flags & BISECT_SHOW_ALL) {
|
if (flags & BISECT_SHOW_ALL) {
|
||||||
traverse_commit_list(revs, show_commit, show_object, info);
|
traverse_commit_list(revs, show_commit, show_object, info);
|
||||||
|
|
9
diff.c
9
diff.c
|
@ -322,7 +322,7 @@ static struct diff_tempfile {
|
||||||
*/
|
*/
|
||||||
const char *name;
|
const char *name;
|
||||||
|
|
||||||
char hex[41];
|
char hex[GIT_SHA1_HEXSZ + 1];
|
||||||
char mode[10];
|
char mode[10];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2878,8 +2878,7 @@ static void prep_temp_blob(const char *path, struct diff_tempfile *temp,
|
||||||
die_errno("unable to write temp-file");
|
die_errno("unable to write temp-file");
|
||||||
close_tempfile(&temp->tempfile);
|
close_tempfile(&temp->tempfile);
|
||||||
temp->name = get_tempfile_path(&temp->tempfile);
|
temp->name = get_tempfile_path(&temp->tempfile);
|
||||||
strcpy(temp->hex, sha1_to_hex(sha1));
|
sha1_to_hex_r(temp->hex, sha1);
|
||||||
temp->hex[40] = 0;
|
|
||||||
xsnprintf(temp->mode, sizeof(temp->mode), "%06o", mode);
|
xsnprintf(temp->mode, sizeof(temp->mode), "%06o", mode);
|
||||||
strbuf_release(&buf);
|
strbuf_release(&buf);
|
||||||
strbuf_release(&template);
|
strbuf_release(&template);
|
||||||
|
@ -2926,9 +2925,9 @@ static struct diff_tempfile *prepare_temp_file(const char *name,
|
||||||
/* we can borrow from the file in the work tree */
|
/* we can borrow from the file in the work tree */
|
||||||
temp->name = name;
|
temp->name = name;
|
||||||
if (!one->sha1_valid)
|
if (!one->sha1_valid)
|
||||||
strcpy(temp->hex, sha1_to_hex(null_sha1));
|
sha1_to_hex_r(temp->hex, null_sha1);
|
||||||
else
|
else
|
||||||
strcpy(temp->hex, sha1_to_hex(one->sha1));
|
sha1_to_hex_r(temp->hex, one->sha1);
|
||||||
/* Even though we may sometimes borrow the
|
/* Even though we may sometimes borrow the
|
||||||
* contents from the work tree, we always want
|
* contents from the work tree, we always want
|
||||||
* one->mode. mode is trustworthy even when
|
* one->mode. mode is trustworthy even when
|
||||||
|
|
Loading…
Reference in New Issue