X-Git-Url: https://git.cworth.org/git?p=gzip;a=blobdiff_plain;f=unlzh.c;h=1523abb99e4ef248f932ff0a27c5eb7c4c56d638;hp=7a88fee6294c3fde0b00bbef1c8fe7531481df2f;hb=e7921f54c622e3b32e525f345bc34308821e4ae0;hpb=c9eb602f6f5c10a521e7274640033f6a35deca1d diff --git a/unlzh.c b/unlzh.c index 7a88fee..1523abb 100644 --- a/unlzh.c +++ b/unlzh.c @@ -4,7 +4,7 @@ */ #ifdef RCSID -static char rcsid[] = "$Id: unlzh.c,v 1.2 1993/06/24 10:59:01 jloup Exp $"; +static char rcsid[] = "$Id: unlzh.c,v 1.4 2006/11/20 08:40:34 eggert Exp $"; #endif #include @@ -69,7 +69,7 @@ local void make_table OF((int nchar, uch bitlen[], #define NT (CODE_BIT + 3) #define PBIT 4 /* smallest integer such that (1U << PBIT) > NP */ #define TBIT 5 /* smallest integer such that (1U << TBIT) > NT */ -#define NPT (1< 1 << tablebits) - error("Bad table\n"); + if ((unsigned) 1 << tablebits < nextcode) + gzip_error ("Bad table\n"); for (i = start[len]; i < nextcode; i++) table[i] = ch; } else { k = start[len]; @@ -221,8 +221,8 @@ local void read_pt_len(nn, nbit, i_special) if (c == 7) { mask = (unsigned) 1 << (BITBUFSIZ - 1 - 3); while (mask & bitbuf) { mask >>= 1; c++; } - if (c > 16) - error("Bad table\n"); + if (16 < c) + gzip_error ("Bad table\n"); } fillbuf((c < 7) ? 3 : c - 3); pt_len[i++] = c;