From 107b801cf3fe39612d69d70581ebc3bf5e215554 Mon Sep 17 00:00:00 2001 From: Matthias Fuchs Date: Fri, 2 Jan 2009 15:11:41 +0100 Subject: Fix gunzip in case of insufficient output buffer U-Boot's gunzip() function does not handle the return code of zlib's inflate() function correctly. gunzip() is implemented to uncompress all input data in one run. So the correct return code for the good case is Z_STREAM_END. In case of insufficient output buffer memory inflate returns Z_OK. For gunzip() this is an error. It also makes sense to me to call inflateEnd() also in case of an error. Signed-off-by: Matthias Fuchs --- lib_generic/gunzip.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'lib_generic') diff --git a/lib_generic/gunzip.c b/lib_generic/gunzip.c index 74f0bf9f3..5bcf5b7b2 100644 --- a/lib_generic/gunzip.c +++ b/lib_generic/gunzip.c @@ -102,8 +102,9 @@ int gunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp) s.next_out = dst; s.avail_out = dstlen; r = inflate(&s, Z_FINISH); - if (r != Z_OK && r != Z_STREAM_END) { + if (r != Z_STREAM_END) { printf ("Error: inflate() returned %d\n", r); + inflateEnd(&s); return (-1); } *lenp = s.next_out - (unsigned char *) dst; -- cgit v1.2.3