Eric Blake <ebl...@redhat.com> writes: > On 07/27/2018 10:13 AM, Markus Armbruster wrote: >> Leaving interpolation into JSON to qmp() is more robust than building >> QMP input manually, as explained in the commit before previous. >> >> qtest_qmp_device_add() and its wrappers interpolate into JSON as >> follows: >> >> * qtest_qmp_device_add() interpolates members into a JSON object. >> >> * So do its wrappers qpci_plug_device_test() and usb_test_hotplug(). >> >> * usb_test_hotplug() additionally interpolates strings and numbers >> into JSON strings. >> >> Clean them up: >> >> * Have qtest_qmp_device_add() take its extra device properties as >> arguments for for qdict_from_jsonf_nofail() instead of a string > > s/for for/for/
Fixing... >> containing JSON members. >> >> * Drop qpci_plug_device_test(), use qtest_qmp_device_add() >> directly. >> >> * Change usb_test_hotplug() parameter @port to string, to avoid >> interpolation. Interpolate @hcd_id separately. >> >> Bonus: gets rid of a non-literal format string. A step towards >> compile-time format string checking without triggering >> -Wformat-nonliteral. >> >> Cc: Thomas Huth <th...@redhat.com> >> Signed-off-by: Markus Armbruster <arm...@redhat.com> >> --- > >> +++ b/tests/ivshmem-test.c >> @@ -420,19 +420,17 @@ static void test_ivshmem_server_irq(void) >> static void test_ivshmem_hotplug(void) >> { >> const char *arch = qtest_get_arch(); >> - gchar *opts; >> qtest_start(""); >> - opts = g_strdup_printf("'shm': '%s', 'size': '1M'", tmpshm); >> - >> - qpci_plug_device_test("ivshmem", "iv1", PCI_SLOT_HP, opts); >> + qtest_qmp_device_add("ivshmem", >> + "iv1", "{'addr': %s, 'shm': '%s', 'size': '1M'}", > > Umm, how does this still pass? You want 'shm':%s, not 'shm':'%s'. Good catch. It passes, because the value of "shm" is an arbitrary file name under /dev/shm/. > (We really want to assert that any % interpolations in our JSON parser > are NOT embedded in ''). > > With that error fixed, > Reviewed-by: Eric Blake <ebl...@redhat.com> Thanks!