]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
Have infback() deliver all of the available output up to any error.
authorMark Adler <fork@madler.net>
Sun, 24 Jul 2022 18:41:07 +0000 (11:41 -0700)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 3 Feb 2023 14:49:02 +0000 (15:49 +0100)
infback.c

index e57daab18db2ab9a2d6d98d666d993e8980970a6..a7af88f2e2a4d0353c36642f0d0a179bfd8bdb8c 100644 (file)
--- a/infback.c
+++ b/infback.c
@@ -477,12 +477,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:
@@ -494,8 +490,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;