]> git.lizzy.rs Git - zlib.git/commitdiff
Avoid a conversion error in gzseek when off_t type too small.
authorMark Adler <madler@alumni.caltech.edu>
Sun, 5 Feb 2017 07:58:37 +0000 (23:58 -0800)
committerMark Adler <madler@alumni.caltech.edu>
Thu, 16 Feb 2017 06:39:26 +0000 (22:39 -0800)
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.

gzlib.c

diff --git a/gzlib.c b/gzlib.c
index 4105e6aff92594fb9cfa557aa8349cea5a5d4a2b..4838bf04745beb5722fa4c69436ccc9d3fae68fb 100644 (file)
--- a/gzlib.c
+++ b/gzlib.c
@@ -5,7 +5,7 @@
 
 #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
@@ -397,7 +397,7 @@ z_off64_t ZEXPORT gzseek64(file, offset, 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;