From: Stefan Sperling Subject: fix deflate checksumming To: gameoftrees@openbsd.org Date: Fri, 4 Jun 2021 12:39:10 +0200 Split off from my larger pack file generation patch, this patch fixes checksum errors in generated pack files and makes the code simpler. ok? diff 54d5be07768d1e312078b5eb60f0e32738a1631a /home/stsp/src/got blob - a9a36a64dd1519966e9aa8699e80bd93c895bdbf file + lib/deflate.c --- lib/deflate.c +++ lib/deflate.c @@ -35,8 +35,7 @@ #endif const struct got_error * -got_deflate_init(struct got_deflate_buf *zb, uint8_t *outbuf, size_t bufsize, - struct got_deflate_checksum *csum) +got_deflate_init(struct got_deflate_buf *zb, uint8_t *outbuf, size_t bufsize) { const struct got_error *err = NULL; int zerr; @@ -74,8 +73,6 @@ got_deflate_init(struct got_deflate_buf *zb, uint8_t * zb->flags |= GOT_DEFLATE_F_OWN_OUTBUF; } else zb->outbuf = outbuf; - - zb->csum = csum; done: if (err) got_deflate_end(zb); @@ -104,9 +101,6 @@ got_deflate_read(struct got_deflate_buf *zb, FILE *f, *outlenp = 0; do { - char *csum_out = NULL; - size_t csum_avail = 0; - if (z->avail_in == 0) { size_t n = fread(zb->inbuf, 1, zb->inlen, f); if (n == 0) { @@ -119,15 +113,7 @@ got_deflate_read(struct got_deflate_buf *zb, FILE *f, z->next_in = zb->inbuf; z->avail_in = n; } - if (zb->csum) { - csum_out = z->next_out; - csum_avail = z->avail_out; - } ret = deflate(z, Z_NO_FLUSH); - if (zb->csum) { - csum_output(zb->csum, csum_out, - csum_avail - z->avail_out); - } } while (ret == Z_OK && z->avail_out > 0); if (ret == Z_OK) { @@ -159,7 +145,7 @@ got_deflate_to_file(size_t *outlen, FILE *infile, FILE size_t avail; struct got_deflate_buf zb; - err = got_deflate_init(&zb, NULL, GOT_DEFLATE_BUFSIZE, csum); + err = got_deflate_init(&zb, NULL, GOT_DEFLATE_BUFSIZE); if (err) goto done; @@ -176,6 +162,8 @@ got_deflate_to_file(size_t *outlen, FILE *infile, FILE err = got_ferror(outfile, GOT_ERR_IO); goto done; } + if (csum) + csum_output(csum, zb.outbuf, avail); *outlen += avail; } } while (zb.flags & GOT_DEFLATE_F_HAVE_MORE); blob - c359d7c4cfbe99e2e20a5f7798a73ce6a55257c3 file + lib/got_lib_deflate.h --- lib/got_lib_deflate.h +++ lib/got_lib_deflate.h @@ -37,7 +37,7 @@ struct got_deflate_buf { #define GOT_DEFLATE_BUFSIZE 8192 const struct got_error *got_deflate_init(struct got_deflate_buf *, uint8_t *, - size_t, struct got_deflate_checksum *); + size_t); const struct got_error *got_deflate_read(struct got_deflate_buf *, FILE *, size_t *); void got_deflate_end(struct got_deflate_buf *);