diff --git a/libclamav/scanners.c b/libclamav/scanners.c index 28943aac1..5653acbbf 100644 --- a/libclamav/scanners.c +++ b/libclamav/scanners.c @@ -3179,15 +3179,15 @@ static int scan_common(int desc, cl_fmap_t *map, const char **virname, unsigned int rc; STATBUF sb; - /* We have a limit of around 2.8GB (UINT_MAX - 2). Enforce it here. */ - if (desc > 0) { + /* We have a limit of around 2.17GB (INT_MAX - 2). Enforce it here. */ + if (map != NULL) { + if ((size_t)(map->real_len) > (size_t)(INT_MAX - 2)) + return CL_CLEAN; + } else { if (FSTAT(desc, &sb)) return CL_ESTAT; - if (sb.st_size > (UINT_MAX - 2)) - return CL_CLEAN; - } else { - if (map != NULL && map->real_len > (UINT_MAX - 2)) + if ((size_t)(sb.st_size) > (size_t)(INT_MAX - 2)) return CL_CLEAN; }