diff -up gzip-1.3.12/inflate.c.cve-2009-2624 gzip-1.3.12/inflate.c --- gzip-1.3.12/inflate.c.cve-2009-2624 2006-12-21 00:30:17.000000000 +0100 +++ gzip-1.3.12/inflate.c 2010-01-14 14:42:14.670374060 +0100 @@ -335,13 +335,15 @@ int *m; /* maximum looku } while (--i); if (c[0] == n) /* null input--all zero length codes */ { - q = (struct huft *) malloc (2 * sizeof *q); + q = (struct huft *) malloc (3 * sizeof *q); if (!q) return 3; - hufts += 2; + hufts += 3; q[0].v.t = (struct huft *) NULL; q[1].e = 99; /* invalid code marker */ q[1].b = 1; + q[2].e = 99; /* invalid code marker */ + q[2].b = 1; *t = q + 1; *m = 1; return 0; --- gzip-1.3.12/unlzh.c.orig 2010-01-15 09:16:07.417407717 -0500 +++ gzip-1.3.12/unlzh.c 2010-01-15 09:17:05.828404953 -0500 @@ -151,7 +151,7 @@ local void make_table(nchar, bitlen, tab for (i = 1; i <= 16; i++) start[i + 1] = start[i] + (count[i] << (16 - i)); if ((start[17] & 0xffff) != 0 || tablebits > 16) /* 16 for weight below */ - error("Bad table (case b)\n"); + gzip_error("Bad table\n"); jutbits = 16 - tablebits; for (i = 1; i <= (unsigned)tablebits; i++) {