зеркало из https://github.com/microsoft/git.git
git-mktag: be more careful in reading the input.
Instead of always assuming it can be read with a single read() system call, loop around properly. Pointed out by Pasky, but I ended up implementing it differently from his suggested patch.
This commit is contained in:
Родитель
8b7d510fb1
Коммит
b97e3dfa76
13
mktag.c
13
mktag.c
|
@ -106,7 +106,18 @@ int main(int argc, char **argv)
|
||||||
usage("cat <signaturefile> | git-mktag");
|
usage("cat <signaturefile> | git-mktag");
|
||||||
|
|
||||||
// Read the signature
|
// Read the signature
|
||||||
size = read(0, buffer, MAXSIZE);
|
size = 0;
|
||||||
|
for (;;) {
|
||||||
|
int ret = read(0, buffer + size, MAXSIZE - size);
|
||||||
|
if (!ret)
|
||||||
|
break;
|
||||||
|
if (ret < 0) {
|
||||||
|
if (errno == EAGAIN)
|
||||||
|
continue;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
size += ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Verify it for some basic sanity: it needs to start with "object <sha1>\ntype "
|
// Verify it for some basic sanity: it needs to start with "object <sha1>\ntype "
|
||||||
if (verify_tag(buffer, size) < 0)
|
if (verify_tag(buffer, size) < 0)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче