Merge branch 'js/fsck-tag-validation'

New tag object format validation added in 2.2 showed garbage
after a tagname it reported in its error message.

* js/fsck-tag-validation:
  index-pack: terminate object buffers with NUL
  fsck: properly bound "invalid tag name" error message
This commit is contained in:
Junio C Hamano 2014-12-22 12:27:41 -08:00
commit 1cb4b3d380
4 changed files with 11 additions and 6 deletions

View File

@ -447,7 +447,7 @@ static void *unpack_entry_data(unsigned long offset, unsigned long size,
if (type == OBJ_BLOB && size > big_file_threshold) if (type == OBJ_BLOB && size > big_file_threshold)
buf = fixed_buf; buf = fixed_buf;
else else
buf = xmalloc(size); buf = xmallocz(size);
memset(&stream, 0, sizeof(stream)); memset(&stream, 0, sizeof(stream));
git_inflate_init(&stream); git_inflate_init(&stream);
@ -552,7 +552,7 @@ static void *unpack_data(struct object_entry *obj,
git_zstream stream; git_zstream stream;
int status; int status;
data = xmalloc(consume ? 64*1024 : obj->size); data = xmallocz(consume ? 64*1024 : obj->size);
inbuf = xmalloc((len < 64*1024) ? len : 64*1024); inbuf = xmalloc((len < 64*1024) ? len : 64*1024);
memset(&stream, 0, sizeof(stream)); memset(&stream, 0, sizeof(stream));

View File

@ -91,7 +91,7 @@ static void use(int bytes)
static void *get_data(unsigned long size) static void *get_data(unsigned long size)
{ {
git_zstream stream; git_zstream stream;
void *buf = xmalloc(size); void *buf = xmallocz(size);
memset(&stream, 0, sizeof(stream)); memset(&stream, 0, sizeof(stream));

3
fsck.c
View File

@ -426,7 +426,8 @@ static int fsck_tag_buffer(struct tag *tag, const char *data,
} }
strbuf_addf(&sb, "refs/tags/%.*s", (int)(eol - buffer), buffer); strbuf_addf(&sb, "refs/tags/%.*s", (int)(eol - buffer), buffer);
if (check_refname_format(sb.buf, 0)) if (check_refname_format(sb.buf, 0))
error_func(&tag->object, FSCK_WARN, "invalid 'tag' name: %s", buffer); error_func(&tag->object, FSCK_WARN, "invalid 'tag' name: %.*s",
(int)(eol - buffer), buffer);
buffer = eol + 1; buffer = eol + 1;
if (!skip_prefix(buffer, "tagger ", &buffer)) if (!skip_prefix(buffer, "tagger ", &buffer))

View File

@ -229,8 +229,12 @@ test_expect_success 'tag with incorrect tag name & missing tagger' '
echo $tag >.git/refs/tags/wrong && echo $tag >.git/refs/tags/wrong &&
test_when_finished "git update-ref -d refs/tags/wrong" && test_when_finished "git update-ref -d refs/tags/wrong" &&
git fsck --tags 2>out && git fsck --tags 2>out &&
grep "invalid .tag. name" out &&
grep "expected .tagger. line" out cat >expect <<-EOF &&
warning in tag $tag: invalid '\''tag'\'' name: wrong name format
warning in tag $tag: invalid format - expected '\''tagger'\'' line
EOF
test_cmp expect out
' '
test_expect_success 'tag with bad tagger' ' test_expect_success 'tag with bad tagger' '