summaryrefslogtreecommitdiff
path: root/gzread.c
diff options
context:
space:
mode:
authorNathan Moinvaziri <nathan@solidstatenetworks.com>2020-10-30 21:14:42 -0700
committerHans Kristian Rosbach <hk-github@circlestorm.org>2020-11-02 17:01:36 +0100
commit48c08916e8a86da4786c738b311dacfbbcd87681 (patch)
treefbbd927b748bb88cb9aa5463aa99c25196bdf463 /gzread.c
parent5cdd9bcdc41c6565a8c3d73194f3927cdbe268b6 (diff)
Fixed ubsan warning in gzfread due to size_t overflow. #783
gzread.c:398:18: runtime error: unsigned integer overflow: 2 * 18446744073709551615 cannot be represented in type 'unsigned long' #0 0x10009d31e in zng_gzfread gzread.c:398 #1 0x100005b1a in test_gzio example.c:213 #2 0x10001093b in main example.c:1034 #3 0x7fff71f57cc8 in start+0x0 (libdyld.dylib:x86_64+0x1acc8)
Diffstat (limited to 'gzread.c')
-rw-r--r--gzread.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/gzread.c b/gzread.c
index e487d99..c3b3a03 100644
--- a/gzread.c
+++ b/gzread.c
@@ -395,11 +395,11 @@ size_t Z_EXPORT PREFIX(gzfread)(void *buf, size_t size, size_t nitems, gzFile fi
return 0;
/* compute bytes to read -- error on overflow */
- len = nitems * size;
- if (size && len / size != nitems) {
+ if (size && SIZE_MAX / size < nitems) {
gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t");
return 0;
}
+ len = nitems * size;
/* read len or fewer bytes to buf, return the number of full items read */
return len ? gz_read(state, buf, len) / size : 0;