[PATCH 1/2] inflate_codes(): Add fix from upstream gzip to prevent false CRC error

Denys Vlasenko vda.linux at googlemail.com
Thu Feb 11 22:57:36 UTC 2010


On Monday 08 February 2010 18:55, Joakim Tjernlund wrote:
> 
> Signed-off-by: Joakim Tjernlund <Joakim.Tjernlund at transmode.se>
> ---
>  archival/libunarchive/decompress_unzip.c |    5 ++++-
>  1 files changed, 4 insertions(+), 1 deletions(-)
> 
> diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c
> index feaa047..c616202 100644
> --- a/archival/libunarchive/decompress_unzip.c
> +++ b/archival/libunarchive/decompress_unzip.c
> @@ -575,13 +575,16 @@ static NOINLINE int inflate_codes(STATE_PARAM_ONLY)
>  			do {
>  				/* Was: nn -= (e = (e = GUNZIP_WSIZE - ((dd &= GUNZIP_WSIZE - 1) > w ? dd : w)) > nn ? nn : e); */
>  				/* Who wrote THAT?? rewritten as: */
> +				unsigned int delta;
> +
>  				dd &= GUNZIP_WSIZE - 1;
>  				e = GUNZIP_WSIZE - (dd > w ? dd : w);
> +				delta = w > dd ? w - dd : dd - w;
>  				if (e > nn) e = nn;
>  				nn -= e;
>  
>  				/* copy to new buffer to prevent possible overwrite */
> -				if (w - dd >= e) {	/* (this test assumes unsigned comparison) */
> +				if (delta >= e) {
>  					memcpy(gunzip_window + w, gunzip_window + dd, e);
>  					w += e;
>  					dd += e;

Applied, thanks!
--
vda


More information about the busybox mailing list