mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-11 07:17:44 +00:00
util: Data overrun may lead to divide by zero
Commit 87a8a30d6
added the function based on the virsh function,
but used an unsigned long long instead of a double and thus that
limits the maximum result.
Signed-off-by: John Ferlan <jferlan@redhat.com>
ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
fddf92836a
commit
efdbfe57c7
@ -491,6 +491,10 @@ virFormatIntDecimal(char *buf, size_t buflen, int val)
|
|||||||
*
|
*
|
||||||
* Similar to vshPrettyCapacity, but operates on integers and not doubles
|
* Similar to vshPrettyCapacity, but operates on integers and not doubles
|
||||||
*
|
*
|
||||||
|
* NB: Since using unsigned long long, we are limited to at most a "PiB"
|
||||||
|
* to make pretty. This is because a PiB is 1152921504606846976 bytes,
|
||||||
|
* but that value * 1024 > ULLONG_MAX value 18446744073709551615 bytes.
|
||||||
|
*
|
||||||
* Returns shortened value that can be used with @unit.
|
* Returns shortened value that can be used with @unit.
|
||||||
*/
|
*/
|
||||||
unsigned long long
|
unsigned long long
|
||||||
@ -524,12 +528,7 @@ virFormatIntPretty(unsigned long long val,
|
|||||||
return val / (limit / 1024);
|
return val / (limit / 1024);
|
||||||
}
|
}
|
||||||
limit *= 1024;
|
limit *= 1024;
|
||||||
if (val % limit) {
|
*unit = "PiB";
|
||||||
*unit = "PiB";
|
|
||||||
return val / (limit / 1024);
|
|
||||||
}
|
|
||||||
limit *= 1024;
|
|
||||||
*unit = "EiB";
|
|
||||||
return val / (limit / 1024);
|
return val / (limit / 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user