Ivana Varekova 82ec7c0
--- gzip-1.3.3/unlzh.c.4338	2006-09-07 10:49:31.000000000 +0200
Ivana Varekova 82ec7c0
+++ gzip-1.3.3/unlzh.c	2006-09-07 11:37:53.000000000 +0200
Michal Luscon 54372e3
@@ -252,7 +252,7 @@ local void read_c_len()
Michal Luscon 54372e3
                     if (bitbuf & mask) c = right[c];
Michal Luscon 54372e3
                     else               c = left [c];
Michal Luscon 54372e3
                     mask >>= 1;
Michal Luscon 54372e3
-                } while (c >= NT);
Michal Luscon 54372e3
+                } while (c >= NT && (mask || c != left[c]));
Michal Luscon 54372e3
             }
Michal Luscon 54372e3
             fillbuf((int) pt_len[c]);
Michal Luscon 54372e3
             if (c <= 2) {
Michal Luscon 54372e3
@@ -288,7 +288,7 @@ local unsigned decode_c()
Michal Luscon 54372e3
             if (bitbuf & mask) j = right[j];
Michal Luscon 54372e3
             else               j = left [j];
Michal Luscon 54372e3
             mask >>= 1;
Michal Luscon 54372e3
-        } while (j >= NC);
Michal Luscon 54372e3
+        } while (j >= NC && (mask || j != left[j])); 
Ivana Varekova 82ec7c0
     }
Ivana Varekova 82ec7c0
     fillbuf((int) c_len[j]);
Ivana Varekova 82ec7c0
     return j;
Michal Luscon 54372e3
@@ -305,7 +305,7 @@ local unsigned decode_p()
Michal Luscon 54372e3
             if (bitbuf & mask) j = right[j];
Michal Luscon 54372e3
             else               j = left [j];
Michal Luscon 54372e3
             mask >>= 1;
Michal Luscon 54372e3
-        } while (j >= NP);
Michal Luscon 54372e3
+        } while (j >= NP && (mask || j != left[j]));
Ivana Varekova 82ec7c0
     }
Ivana Varekova 82ec7c0
     fillbuf((int) pt_len[j]);
Ivana Varekova 82ec7c0
     if (j != 0) j = ((unsigned) 1 << (j - 1)) + getbits((int) (j - 1));