diff options
author | Mark Adler <fork@madler.net> | 2022-07-24 11:41:07 -0700 |
---|---|---|
committer | Mark Adler <fork@madler.net> | 2022-07-24 11:41:07 -0700 |
commit | b8bd09801f4a2c224655e14edffc5793943a33d2 (patch) | |
tree | 23b57c28678995cc28c71eb3c9a4bc689e1c6960 /infback.c | |
parent | 2333419cd76cb9ae5f15c9b240b16a2052b27691 (diff) | |
download | zlib-b8bd09801f4a2c224655e14edffc5793943a33d2.tar.gz zlib-b8bd09801f4a2c224655e14edffc5793943a33d2.tar.bz2 zlib-b8bd09801f4a2c224655e14edffc5793943a33d2.zip |
Have infback() deliver all of the available output up to any error.
Diffstat (limited to 'infback.c')
-rw-r--r-- | infback.c | 16 |
1 files changed, 9 insertions, 7 deletions
@@ -606,25 +606,27 @@ void FAR *out_desc; | |||
606 | break; | 606 | break; |
607 | 607 | ||
608 | case DONE: | 608 | case DONE: |
609 | /* inflate stream terminated properly -- write leftover output */ | 609 | /* inflate stream terminated properly */ |
610 | ret = Z_STREAM_END; | 610 | ret = Z_STREAM_END; |
611 | if (left < state->wsize) { | ||
612 | if (out(out_desc, state->window, state->wsize - left)) | ||
613 | ret = Z_BUF_ERROR; | ||
614 | } | ||
615 | goto inf_leave; | 611 | goto inf_leave; |
616 | 612 | ||
617 | case BAD: | 613 | case BAD: |
618 | ret = Z_DATA_ERROR; | 614 | ret = Z_DATA_ERROR; |
619 | goto inf_leave; | 615 | goto inf_leave; |
620 | 616 | ||
621 | default: /* can't happen, but makes compilers happy */ | 617 | default: |
618 | /* can't happen, but makes compilers happy */ | ||
622 | ret = Z_STREAM_ERROR; | 619 | ret = Z_STREAM_ERROR; |
623 | goto inf_leave; | 620 | goto inf_leave; |
624 | } | 621 | } |
625 | 622 | ||
626 | /* Return unused input */ | 623 | /* Write leftover output and return unused input */ |
627 | inf_leave: | 624 | inf_leave: |
625 | if (left < state->wsize) { | ||
626 | if (out(out_desc, state->window, state->wsize - left) && | ||
627 | ret == Z_STREAM_END) | ||
628 | ret = Z_BUF_ERROR; | ||
629 | } | ||
628 | strm->next_in = next; | 630 | strm->next_in = next; |
629 | strm->avail_in = have; | 631 | strm->avail_in = have; |
630 | return ret; | 632 | return ret; |