mirror of https://gitee.com/openkylin/libvirt.git
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 f744b831c6
.
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…
Reference in New Issue