commit b6d05318cb07e2fea989551c6388b8ea3317e92b from: Stefan Sperling date: Sun Jan 13 00:05:23 2019 UTC don't bother with memcpy for hdr in got_fileindex_read() commit - 27d0e5bd84bca09e4b202bc466a2098cc6447d31 commit + b6d05318cb07e2fea989551c6388b8ea3317e92b blob - efde946cb42b2abafa0232a0cccd5800bfa29f38 blob + 3d56217694e8572da0706f0ec5467ee16016cca7 --- lib/fileindex.c +++ lib/fileindex.c @@ -492,23 +492,33 @@ got_fileindex_read(struct got_fileindex *fileindex, FI uint8_t sha1_expected[SHA1_DIGEST_LENGTH]; uint8_t sha1[SHA1_DIGEST_LENGTH]; size_t n; - const size_t len = sizeof(hdr.signature) + sizeof(hdr.version) + - sizeof(hdr.nentries); - uint8_t buf[len]; int i; SHA1Init(&ctx); - n = fread(buf, 1, len, infile); - if (n != len) { + n = fread(&hdr.signature, 1, sizeof(hdr.signature), infile); + if (n != sizeof(hdr.signature)) { + if (n == 0) /* EOF */ + return NULL; + return got_ferror(infile, GOT_ERR_FILEIDX_BAD); + } + n = fread(&hdr.version, 1, sizeof(hdr.version), infile); + if (n != sizeof(hdr.version)) { if (n == 0) /* EOF */ return NULL; return got_ferror(infile, GOT_ERR_FILEIDX_BAD); } + n = fread(&hdr.nentries, 1, sizeof(hdr.nentries), infile); + if (n != sizeof(hdr.nentries)) { + if (n == 0) /* EOF */ + return NULL; + return got_ferror(infile, GOT_ERR_FILEIDX_BAD); + } - SHA1Update(&ctx, buf, len); + SHA1Update(&ctx, (uint8_t *)&hdr.signature, sizeof(hdr.signature)); + SHA1Update(&ctx, (uint8_t *)&hdr.version, sizeof(hdr.version)); + SHA1Update(&ctx, (uint8_t *)&hdr.nentries, sizeof(hdr.nentries)); - memcpy(&hdr, buf, len); hdr.signature = be32toh(hdr.signature); hdr.version = be32toh(hdr.version); hdr.nentries = be32toh(hdr.nentries);