]> git.lizzy.rs Git - zlib.git/commitdiff
Return an error if the gzputs string length can't fit in an int.
authorMark Adler <madler@alumni.caltech.edu>
Sun, 12 Feb 2017 07:54:17 +0000 (23:54 -0800)
committerMark Adler <madler@alumni.caltech.edu>
Thu, 16 Feb 2017 06:39:26 +0000 (22:39 -0800)
gzwrite.c

index 35b9aa6b3799c874326a7dedd33dd1a945d0833c..3560193b8e3468f03bd00db522173b64296f2ba6 100644 (file)
--- a/gzwrite.c
+++ b/gzwrite.c
@@ -353,8 +353,7 @@ int ZEXPORT gzputs(file, str)
     gzFile file;
     const char *str;
 {
-    int ret;
-    z_size_t len;
+    z_size_t len, put;
     gz_statep state;
 
     /* get internal structure */
@@ -368,8 +367,12 @@ int ZEXPORT gzputs(file, str)
 
     /* write string */
     len = strlen(str);
-    ret = gz_write(state, str, len);
-    return ret == 0 && len != 0 ? -1 : ret;
+    if ((int)len < 0 || (unsigned)len != len) {
+        gz_error(state, Z_STREAM_ERROR, "string length does not fit in int");
+        return -1;
+    }
+    put = gz_write(state, str, len);
+    return put < len ? -1 : (int)len;
 }
 
 #if defined(STDC) || defined(Z_HAVE_STDARG_H)