mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-07 17:28:15 +00:00
json: Avoid passing large positive 64 bit integers to QMP.
http://lists.gnu.org/archive/html/qemu-devel/2011-05/threads.html#02162 Currently, qemu silently clips any JSON integer in the range 0x8000000000000000 - 0xffffffffffffffff (all numbers in this range will be clipped to 0x7fffffffffffffff == LLONG_MAX). To avoid this, pass these as signed 64 bit integers in the QMP request.
This commit is contained in:
parent
1ff2b6f6ee
commit
78eb8b60d5
@ -413,8 +413,13 @@ qemuMonitorJSONMakeCommand(const char *cmdname,
|
||||
ret = virJSONValueObjectAppendNumberLong(jargs, key, val);
|
||||
} break;
|
||||
case 'U': {
|
||||
unsigned long long val = va_arg(args, unsigned long long);
|
||||
ret = virJSONValueObjectAppendNumberUlong(jargs, key, val);
|
||||
/* qemu silently truncates numbers larger than LLONG_MAX,
|
||||
* so passing the full range of unsigned 64 bit integers
|
||||
* is not safe here. Pass them as signed 64 bit integers
|
||||
* instead.
|
||||
*/
|
||||
long long val = va_arg(args, long long);
|
||||
ret = virJSONValueObjectAppendNumberLong(jargs, key, val);
|
||||
} break;
|
||||
case 'd': {
|
||||
double val = va_arg(args, double);
|
||||
|
Loading…
x
Reference in New Issue
Block a user