Re: [PATCH] deflate inflate_dynamic too

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Apr 27, 2007 at 07:20:07PM -0700, Jeremy Fitzhardinge wrote:
> inflate_dynamic() has piggy stack usage too, so heap allocate it too.
> I'm not sure it actually gets used, but it shows up large in "make
> checkstack".

Might as well drop the PKZIP bit while we're at it. No one's ever
built a zimage with PKZIP.

> Signed-off-by: Jeremy Fitzhardinge <[email protected]>
> 
> ---
>  lib/inflate.c |   63 ++++++++++++++++++++++++++++++++++++++-------------------
>  1 file changed, 42 insertions(+), 21 deletions(-)
> 
> ===================================================================
> --- a/lib/inflate.c
> +++ b/lib/inflate.c
> @@ -798,15 +798,18 @@ STATIC int noinline INIT inflate_dynamic
>    unsigned nb;          /* number of bit length codes */
>    unsigned nl;          /* number of literal/length codes */
>    unsigned nd;          /* number of distance codes */
> -#ifdef PKZIP_BUG_WORKAROUND
> -  unsigned ll[288+32];  /* literal/length and distance code lengths */
> -#else
> -  unsigned ll[286+30];  /* literal/length and distance code lengths */
> -#endif
> +  unsigned *ll;         /* literal/length and distance code lengths */
>    register ulg b;       /* bit buffer */
>    register unsigned k;  /* number of bits in bit buffer */
> +  int ret;
>  
>  DEBG("<dyn");
> +
> +#ifdef PKZIP_BUG_WORKAROUND
> +  ll = malloc(sizeof(*ll) * (288+32));  /* literal/length and distance code lengths */
> +#else
> +  ll = malloc(sizeof(*ll) * (286+30));  /* literal/length and distance code lengths */
> +#endif
>  
>    /* make local bit buffer */
>    b = bb;
> @@ -828,7 +831,10 @@ DEBG("<dyn");
>  #else
>    if (nl > 286 || nd > 30)
>  #endif
> -    return 1;                   /* bad lengths */
> +  {
> +    ret = 1;             /* bad lengths */
> +    goto out;
> +  }
>  
>  DEBG("dyn1 ");
>  
> @@ -850,7 +856,8 @@ DEBG("dyn2 ");
>    {
>      if (i == 1)
>        huft_free(tl);
> -    return i;                   /* incomplete code set */
> +    ret = i;                   /* incomplete code set */
> +    goto out;
>    }
>  
>  DEBG("dyn3 ");
> @@ -872,8 +879,10 @@ DEBG("dyn3 ");
>        NEEDBITS(2)
>        j = 3 + ((unsigned)b & 3);
>        DUMPBITS(2)
> -      if ((unsigned)i + j > n)
> -        return 1;
> +      if ((unsigned)i + j > n) {
> +        ret = 1;
> +	goto out;

Heh. Anti-tab damage.

-- 
Mathematics is the supreme nostalgia of our time.
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux