--- read.c.orig 2018-02-18 07:27:07.124135724 +0000 +++ read.c 2018-02-18 07:34:02.832965838 +0000 @@ -556,6 +556,7 @@ gzFile gz; size_t off; ssize_t ssz; + int end; if (fstat(fd, &st) == -1) { mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0, @@ -598,6 +599,7 @@ *with_mmap = 0; off = 0; + end = 0; fb->sz = 0; fb->buf = NULL; for (;;) { @@ -614,7 +616,8 @@ read(fd, fb->buf + (int)off, fb->sz - off); if (ssz == 0) { fb->sz = off; - return 1; + end = 1; + break; } if (ssz == -1) { mandoc_vmsg(MANDOCERR_FILE, curp, 0, 0, @@ -624,6 +627,12 @@ off += (size_t)ssz; } + if (curp->gzip) + gzclose(gz); + + if (end) + return 1; + free(fb->buf); fb->buf = NULL; return 0;