"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Stefan Sperling <stsp@stsp.name>
Subject:
fix deflate checksumming
To:
gameoftrees@openbsd.org
Date:
Fri, 4 Jun 2021 12:39:10 +0200

Download raw body.

Thread
  • Stefan Sperling:

    fix deflate checksumming

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 *);