mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-18 10:35:20 +00:00
qemu: monitor: Fix type of holdtime argument in qemuMonitorJSONSendKey
qemuMonitorJSONSendKey declares the "holdtime" argument as unsigned int while the command was constructed in qemuMonitorJSONMakeCommand using the "P" modifier which took a unsigned long from the variable arguments which then made it possible to access uninitialized memory. This broke the qemumonitorjsontest on 32bit fedora 20: 64) qemuMonitorJSONSendKey ... libvirt: QEMU Driver error : internal error: unsupported data type 'W' for arg 'WVSì D$0èwÿÿÃAå' FAILED Uncovered by upstream commit f744b831c66d9e82453f7a96cab5eddf7570c253. Additionally add test for the hold-time option.
This commit is contained in:
parent
10a99a6d13
commit
ce2107a9a0
@ -3610,7 +3610,7 @@ int qemuMonitorJSONSendKey(qemuMonitorPtr mon,
|
||||
|
||||
cmd = qemuMonitorJSONMakeCommand("send-key",
|
||||
"a:keys", keys,
|
||||
"P:hold-time", holdtime,
|
||||
"p:hold-time", holdtime,
|
||||
NULL);
|
||||
if (!cmd)
|
||||
goto cleanup;
|
||||
|
@ -1959,6 +1959,38 @@ testQemuMonitorJSONqemuMonitorJSONSendKey(const void *data)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
testQemuMonitorJSONqemuMonitorJSONSendKeyHoldtime(const void *data)
|
||||
{
|
||||
virDomainXMLOptionPtr xmlopt = (virDomainXMLOptionPtr)data;
|
||||
qemuMonitorTestPtr test = qemuMonitorTestNewSimple(true, xmlopt);
|
||||
int ret = -1;
|
||||
unsigned int keycodes[] = {43, 26, 46, 32};
|
||||
|
||||
if (!test)
|
||||
return -1;
|
||||
|
||||
if (qemuMonitorTestAddItemParams(test, "send-key",
|
||||
"{\"return\":{}}",
|
||||
"hold-time", "31337",
|
||||
"keys", "[{\"type\":\"number\",\"data\":43},"
|
||||
"{\"type\":\"number\",\"data\":26},"
|
||||
"{\"type\":\"number\",\"data\":46},"
|
||||
"{\"type\":\"number\",\"data\":32}]",
|
||||
NULL, NULL) < 0)
|
||||
goto cleanup;
|
||||
|
||||
if (qemuMonitorJSONSendKey(qemuMonitorTestGetMonitor(test),
|
||||
31337, keycodes,
|
||||
ARRAY_CARDINALITY(keycodes)) < 0)
|
||||
goto cleanup;
|
||||
|
||||
ret = 0;
|
||||
cleanup:
|
||||
qemuMonitorTestFree(test);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int
|
||||
testQemuMonitorJSONqemuMonitorJSONGetDumpGuestMemoryCapability(const void *data)
|
||||
{
|
||||
@ -2230,6 +2262,7 @@ mymain(void)
|
||||
DO_TEST(qemuMonitorJSONGetVirtType);
|
||||
DO_TEST(qemuMonitorJSONSendKey);
|
||||
DO_TEST(qemuMonitorJSONGetDumpGuestMemoryCapability);
|
||||
DO_TEST(qemuMonitorJSONSendKeyHoldtime);
|
||||
|
||||
DO_TEST_CPU_DATA("host");
|
||||
DO_TEST_CPU_DATA("full");
|
||||
|
Loading…
x
Reference in New Issue
Block a user