fix memory leak in parse_object when check_sha1_signature fails
[git] / test-sha1.c
1 #include "cache.h"
2
3 int main(int ac, char **av)
4 {
5         SHA_CTX ctx;
6         unsigned char sha1[20];
7         unsigned bufsz = 8192;
8         char *buffer;
9
10         if (ac == 2)
11                 bufsz = strtoul(av[1], NULL, 10) * 1024 * 1024;
12
13         if (!bufsz)
14                 bufsz = 8192;
15
16         while ((buffer = malloc(bufsz)) == NULL) {
17                 fprintf(stderr, "bufsz %u is too big, halving...\n", bufsz);
18                 bufsz /= 2;
19                 if (bufsz < 1024)
20                         die("OOPS");
21         }
22
23         SHA1_Init(&ctx);
24
25         while (1) {
26                 ssize_t sz, this_sz;
27                 char *cp = buffer;
28                 unsigned room = bufsz;
29                 this_sz = 0;
30                 while (room) {
31                         sz = xread(0, cp, room);
32                         if (sz == 0)
33                                 break;
34                         if (sz < 0)
35                                 die("test-sha1: %s", strerror(errno));
36                         this_sz += sz;
37                         cp += sz;
38                         room -= sz;
39                 }
40                 if (this_sz == 0)
41                         break;
42                 SHA1_Update(&ctx, buffer, this_sz);
43         }
44         SHA1_Final(sha1, &ctx);
45         puts(sha1_to_hex(sha1));
46         exit(0);
47 }