diff options
author | Nathan Moinvaziri <nathan@solidstatenetworks.com> | 2020-10-30 21:14:42 -0700 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2020-11-02 17:01:36 +0100 |
commit | 48c08916e8a86da4786c738b311dacfbbcd87681 (patch) | |
tree | fbbd927b748bb88cb9aa5463aa99c25196bdf463 /gzread.c | |
parent | 5cdd9bcdc41c6565a8c3d73194f3927cdbe268b6 (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.c | 4 |
1 files changed, 2 insertions, 2 deletions
@@ -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; |