Thanks for the bug report. I installed the attached, a bit simpler than the patch you suggested; can you please give it a try?

Also, is there a related bug near dfltcc.c line 375? That is, when (inptr == insize && fill_inbuf (1) == EOF && param->cf), won't insize then be zero, so that gzip will go into an infinite loop attempting to read past EOF?
From 51088970d45baedba4739632305d1dbc5acbb3bf Mon Sep 17 00:00:00 2001
From: Paul Eggert <egg...@cs.ucla.edu>
Date: Wed, 29 Jan 2025 10:52:49 -0800
Subject: [PATCH] gzip: fix problem with s390 buffer flushes

Problem reported by Eduard Stefes <https://bugs.gnu.org/74651>.
* dfltcc.c (dfltcc_deflate): Flush output buffer if premature EOF.
---
 NEWS     | 4 ++++
 dfltcc.c | 6 +-----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/NEWS b/NEWS
index 8b8731b..417689c 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,10 @@ GNU gzip NEWS                                    -*- outline -*-
 
 ** Bug fixes
 
+  'gzip -d' no longer omits the last partial output buffer when the
+  input ends unexpectedly on an IBM Z platform.
+  [bug introduced in gzip-1.11]
+
   'gzip -l' no longer misreports lengths of multimember inputs.
   [bug introduced in gzip-1.12]
 
diff --git a/dfltcc.c b/dfltcc.c
index fcdc05a..c97e19e 100644
--- a/dfltcc.c
+++ b/dfltcc.c
@@ -434,11 +434,7 @@ dfltcc_inflate ()
         flush_outbuf ();
       if (inptr == insize)
         {
-          if (fill_inbuf (1) == EOF)
-            {
-              /* Premature EOF.  */
-              return 2;
-            }
+          fill_inbuf (0);
           inptr = 0;
         }
 
-- 
2.45.2

Reply via email to