From 63dbf6b3b9e6e781df1a6a64e609b10e23969681 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Wed, 15 Apr 2026 12:00:17 -0700
Subject: gzip: don’t mishandle .lzh after .Z
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Problem reported by Michał Majchrowicz.
* unlzh.c (read_c_len): Clear left and right when n == 0.
---
 unlzh.c | 6 ++++++
 1 file changed, 6 insertions(+)

(limited to 'unlzh.c')

diff --git a/unlzh.c b/unlzh.c
index 3320196..a6cf109 100644
--- a/unlzh.c
+++ b/unlzh.c
@@ -232,6 +232,12 @@ read_c_len ()
         c = getbits(CBIT);
         for (i = 0; i < NC; i++) c_len[i] = 0;
         for (i = 0; i < 4096; i++) c_table[i] = c;
+
+        /* Needed in case LEFT and RIGHT are reused from a previous
+           LZW decompression.  It may be overkill to clear all of both
+           arrays, but nobody has had time to analyze this carefully.  */
+        memzero(left, (2 * NC - 1) * sizeof *left);
+        memzero(right, (2 * NC - 1) * sizeof *left);
     } else {
         i = 0;
         while (i < n) {
-- 
cgit v1.3
