summaryrefslogtreecommitdiff
path: root/infback.c
diff options
context:
space:
mode:
authorMark Adler <fork@madler.net>2022-07-24 11:41:07 -0700
committerMark Adler <fork@madler.net>2022-07-24 11:41:07 -0700
commitb8bd09801f4a2c224655e14edffc5793943a33d2 (patch)
tree23b57c28678995cc28c71eb3c9a4bc689e1c6960 /infback.c
parent2333419cd76cb9ae5f15c9b240b16a2052b27691 (diff)
downloadzlib-b8bd09801f4a2c224655e14edffc5793943a33d2.tar.gz
Have infback() deliver all of the available output up to any error.
Diffstat (limited to 'infback.c')
-rw-r--r--infback.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/infback.c b/infback.c
index 4c712a1..babeaf1 100644
--- a/infback.c
+++ b/infback.c
@@ -606,25 +606,27 @@ void FAR *out_desc;
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:
ret = Z_DATA_ERROR;
goto inf_leave;
- default: /* can't happen, but makes compilers happy */
+ default:
+ /* can't happen, but makes compilers happy */
ret = Z_STREAM_ERROR;
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;