summaryrefslogtreecommitdiff
path: root/gzwrite.c
diff options
context:
space:
mode:
authorMark Adler <madler@alumni.caltech.edu>2012-03-03 09:28:00 -0800
committerMark Adler <madler@alumni.caltech.edu>2012-03-03 09:28:00 -0800
commit53bfe01cea647ef6f6b86edbc51d0fad4640e4a6 (patch)
tree1db515a64055420ade64ec046c24d3fb2fc22671 /gzwrite.c
parentdab7531eccdb5b22368797ae7958471401d1e427 (diff)
downloadzlib-53bfe01cea647ef6f6b86edbc51d0fad4640e4a6.tar.gz
Fix bug in gzclose_w() when gzwrite() fails to allocate memory.
Diffstat (limited to 'gzwrite.c')
-rw-r--r--gzwrite.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/gzwrite.c b/gzwrite.c
index 6e6d8a2..27cb342 100644
--- a/gzwrite.c
+++ b/gzwrite.c
@@ -547,13 +547,15 @@ int ZEXPORT gzclose_w(file)
}
/* flush, free memory, and close file */
- if (gz_comp(state, Z_FINISH) == -1)
- ret = state->err;
- if (!state->direct) {
- (void)deflateEnd(&(state->strm));
- free(state->out);
+ if (state->size) {
+ if (gz_comp(state, Z_FINISH) == -1)
+ ret = state->err;
+ if (!state->direct) {
+ (void)deflateEnd(&(state->strm));
+ free(state->out);
+ }
+ free(state->in);
}
- free(state->in);
gz_error(state, Z_OK, NULL);
free(state->path);
if (close(state->fd) == -1)