summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Adler <fork@madler.net>2022-07-24 11:41:07 -0700
committerHans Kristian Rosbach <hk-github@circlestorm.org>2023-03-17 21:27:56 +0100
commit76be28a84f1eb11521eb4f0dee992987457512ea (patch)
treecb3dc64ce8ac3e3b0b5202f3fa777e11985906a9
parentba7b6788a543b02eb6924175dced964c28b1bf7f (diff)
Have infback() deliver all of the available output up to any error.
-rw-r--r--infback.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/infback.c b/infback.c
index 81cd09b..fedfa53 100644
--- a/infback.c
+++ b/infback.c
@@ -465,12 +465,8 @@ int32_t Z_EXPORT PREFIX(inflateBack)(PREFIX3(stream) *strm, in_func in, void *in
break;
case DONE:
- /* inflate stream terminated properly -- write leftover output */
+ /* inflate stream terminated properly */
ret = Z_STREAM_END;
- if (left < state->wsize) {
- if (out(out_desc, state->window, state->wsize - left))
- ret = Z_BUF_ERROR;
- }
goto inf_leave;
case BAD:
@@ -482,8 +478,13 @@ int32_t Z_EXPORT PREFIX(inflateBack)(PREFIX3(stream) *strm, in_func in, void *in
goto inf_leave;
}
- /* Return unused input */
+ /* Write leftover output and return unused input */
inf_leave:
+ if (left < state->wsize) {
+ if (out(out_desc, state->window, state->wsize - left) && (ret == Z_STREAM_END)) {
+ ret = Z_BUF_ERROR;
+ }
+ }
strm->next_in = next;
strm->avail_in = have;
return ret;