X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=mktag.c;h=fc6a9bf5f34158605add585439848367deaefac5;hb=04fe2a1706b4bd71b604bfe7d7295064440872cf;hp=8cbbef67e624d1d15bc4f2d7e2f9509be937c36d;hpb=b43d44779bf98977b211256f936d0edda8a9625a;p=git.git diff --git a/mktag.c b/mktag.c index 8cbbef67..fc6a9bf5 100644 --- a/mktag.c +++ b/mktag.c @@ -42,7 +42,7 @@ static int verify_tag(char *buffer, unsigned long size) int typelen; char type[20]; unsigned char sha1[20]; - const char *object, *type_line, *tag_line; + const char *object, *type_line, *tag_line, *tagger_line; if (size < 64 || size > MAXSIZE-1) return -1; @@ -92,6 +92,12 @@ static int verify_tag(char *buffer, unsigned long size) return -1; } + /* Verify the tagger line */ + tagger_line = tag_line; + + if (memcmp(tagger_line, "tagger", 6) || (tagger_line[6] == '\n')) + return -1; + /* The actual stuff afterwards we don't care about.. */ return 0; } @@ -105,21 +111,18 @@ int main(int argc, char **argv) if (argc != 1) usage("cat | git-mktag"); + setup_git_directory(); + // Read the signature size = 0; for (;;) { - int ret = read(0, buffer + size, MAXSIZE - size); - if (!ret) - break; - if (ret < 0) { - if (errno == EAGAIN) - continue; + int ret = xread(0, buffer + size, MAXSIZE - size); + if (ret <= 0) break; - } size += ret; } - // Verify it for some basic sanity: it needs to start with "object \ntype " + // Verify it for some basic sanity: it needs to start with "object \ntype\ntagger " if (verify_tag(buffer, size) < 0) die("invalid tag signature file");