mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 02:27:36 +03:00
libzfs: Fix bounds checks for float parsing
UINT64_MAX is not exactly representable as a double. The closest representation is UINT64_MAX + 1, so we can use a >= comparison instead of > for the bounds check. Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ryan Moeller <ryan@iXsystems.com> Closes #10127
This commit is contained in:
+6
-1
@@ -648,7 +648,12 @@ nicenumtoull(const char *buf)
|
||||
} else if (end[0] == '.') {
|
||||
double fval = strtod(buf, &end);
|
||||
fval *= pow(2, str2shift(end));
|
||||
if (fval > UINT64_MAX) {
|
||||
/*
|
||||
* UINT64_MAX is not exactly representable as a double.
|
||||
* The closest representation is UINT64_MAX + 1, so we
|
||||
* use a >= comparison instead of > for the bounds check.
|
||||
*/
|
||||
if (fval >= (double)UINT64_MAX) {
|
||||
(void) fprintf(stderr, "ztest: value too large: %s\n",
|
||||
buf);
|
||||
usage(B_FALSE);
|
||||
|
||||
Reference in New Issue
Block a user