From: Mark Adler Date: Sun, 5 Feb 2017 07:58:37 +0000 (-0800) Subject: Avoid a conversion error in gzseek when off_t type too small. X-Git-Tag: 1.9.9-b1~567 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=195ff00f4062752fe60cdbfda0d6260324e0a417;p=thirdparty%2Fzlib-ng.git Avoid a conversion error in gzseek when off_t type too small. This is a problem in the odd case that the second argument of LSEEK is a larger type than off_t. Apparently MinGW defines off_t to be 32 bits, but _lseeki64 has a 64-bit second argument. Also undo a previous commit to permit MinGW to use _lseeki64. --- diff --git a/gzlib.c b/gzlib.c index 946fb2b41..dbf27aa43 100644 --- a/gzlib.c +++ b/gzlib.c @@ -6,7 +6,7 @@ #include "zbuild.h" #include "gzguts.h" -#if defined(WIN32) && !defined(__BORLANDC__) && !defined(__MINGW32__) +#if defined(WIN32) && !defined(__BORLANDC__) # define LSEEK _lseeki64 #else #if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 @@ -312,7 +312,7 @@ z_off64_t ZEXPORT PREFIX(gzseek64)(gzFile file, z_off64_t offset, int whence) { /* if within raw area while reading, just go there */ if (state->mode == GZ_READ && state->how == COPY && state->x.pos + offset >= 0) { - ret = LSEEK(state->fd, offset - state->x.have, SEEK_CUR); + ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); if (ret == -1) return -1; state->x.have = 0;