X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=inflate.c;fp=inflate.c;h=b72c187ee38315c604b236357bee2d33f030f299;hb=c7e61475680fa226bd9b8bdd469cd66914e630f5;hp=9f3a6616e18e1ca70eaa0c1b88bde43a0209211c;hpb=800deb09b422a73c1212233a93839a223ff59678;p=debian%2Fgzip diff --git a/inflate.c b/inflate.c index 9f3a661..b72c187 100644 --- a/inflate.c +++ b/inflate.c @@ -1,11 +1,10 @@ /* Inflate deflated data - Copyright (C) 1997, 1998, 1999, 2002, 2006 Free Software - Foundation, Inc. + Copyright (C) 1997-1999, 2002, 2006, 2009 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) + the Free Software Foundation; either version 3, or (at your option) any later version. This program is distributed in the hope that it will be useful, @@ -115,10 +114,6 @@ the two sets of lengths. */ -#ifdef RCSID -static char rcsid[] = "$Id: inflate.c,v 1.6 2006/12/20 23:30:17 eggert Exp $"; -#endif - #include #include "tailor.h" @@ -335,13 +330,15 @@ int *m; /* maximum lookup bits, returns actual */ } 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; @@ -510,7 +507,7 @@ struct huft *t; /* table to free */ while (p != (struct huft *)NULL) { q = (--p)->v.t; - free((char*)p); + free(p); p = q; } return 0; @@ -885,15 +882,16 @@ int inflate_dynamic() } - /* decompress until an end-of-block code */ - if (inflate_codes(tl, td, bl, bd)) - return 1; + { + /* decompress until an end-of-block code */ + int err = inflate_codes(tl, td, bl, bd) ? 1 : 0; + /* free the decoding tables */ + huft_free(tl); + huft_free(td); - /* free the decoding tables, return */ - huft_free(tl); - huft_free(td); - return 0; + return err; + } }