qemu/tests
Marc-André Lureau a0067da157 qapi: check invalid arguments on no-args commands
The generated marshal functions do not visit arguments from commands
that take no arguments. Thus they fail to catch invalid
members. Visit the arguments, if provided, to throw an error in case of
invalid members.

Currently, qmp_check_client_args() checks for invalid arguments and
correctly catches this case. When switching to qmp_dispatch() we want to
keep that behaviour. The commands using 'O' may have arbitrary
arguments, and must have 'gen': false in the qapi schema to skip the
generated checks.

Old/new diff:
 void qmp_marshal_stop(QDict *args, QObject **ret, Error **errp)
 {
     Error *err = NULL;
+    Visitor *v = NULL;

-    (void)args;
+    if (args) {
+        v = qmp_input_visitor_new(QOBJECT(args), true);
+        visit_start_struct(v, NULL, NULL, 0, &err);
+        if (err) {
+            goto out;
+        }
+
+        if (!err) {
+            visit_check_struct(v, &err);
+        }
+        visit_end_struct(v, NULL);
+        if (err) {
+            goto out;
+        }
+    }

     qmp_stop(&err);
+
+out:
     error_propagate(errp, err);
+    visit_free(v);
+    if (args) {
+        v = qapi_dealloc_visitor_new();
+        visit_start_struct(v, NULL, NULL, 0, NULL);
+
+        visit_end_struct(v, NULL);
+        visit_free(v);
+    }
 }

The new code closely resembles code for a command with arguments.
Differences:
- the visit of the argument and its cleanup struct don't visit any
  members (because there are none).
- the visit of the argument struct and its cleanup are conditional.

Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Message-Id: <20160912091913.15831-14-marcandre.lureau@redhat.com>
Reviewed-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Markus Armbruster <armbru@redhat.com>
2016-09-19 17:32:22 +02:00
..
acpi-test-data tests: add APIC.cphp and DSDT.cphp blobs 2016-07-04 19:43:33 +03:00
data tests: use static qga config file 2016-07-25 13:23:18 -05:00
docker docker: silence debootstrap when --quiet is given 2016-09-08 19:56:34 +08:00
guest-debug tests/guest-debug: introduce basic gdbstub tests 2015-12-17 13:37:15 +00:00
image-fuzzer tests: Use Python 2.6 "except E as ..." syntax 2016-02-08 17:29:54 +01:00
libqos tests: fix qvirtqueue_kick 2016-09-13 11:00:57 +01:00
migration tests: introduce a framework for testing migration performance 2016-07-22 13:23:39 +05:30
multiboot tests/multiboot: Add test for modules 2015-01-26 12:22:44 +01:00
qapi-schema qapi: Implement boxed types for commands/events 2016-07-19 13:21:08 +02:00
qemu-iotests qemu-iotests: Log QMP traffic in debug mode 2016-09-05 19:06:48 +02:00
rocker rocker: tests: don't need to specify master/self when setting vlans 2015-07-07 13:13:22 +01:00
tcg Use #include "..." for our own headers, <...> for others 2016-07-12 16:19:16 +02:00
vmstate-static-checker-data tests: vmstate static checker: add size mismatch inside substructure 2014-06-23 19:14:52 +02:00
.gitignore tests: add unit test case for replication 2016-09-13 11:00:56 +01:00
ac97-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ahci-test.c tests: in IDE and AHCI tests perform DMA write before flushing 2016-07-18 18:19:01 -04:00
bios-tables-test.c tests/acpi: speedup acpi tests 2016-09-10 00:08:28 +03:00
boot-order-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
boot-sector.c all: Clean up includes 2016-02-23 12:43:05 +00:00
boot-sector.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
boot-serial-test.c tests: Check serial output of firmware boot of some machines 2016-09-07 12:40:13 +10:00
check-block.sh qemu-iotests: make check-block.sh work on out-of-tree builds 2016-01-07 21:30:16 +01:00
check-qdict.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
check-qfloat.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
check-qint.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
check-qjson.c qapi: Improve use of qmp/types.h 2016-07-06 10:52:03 +02:00
check-qlist.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
check-qnull.c qapi: Add new visit_complete() function 2016-07-06 10:52:04 +02:00
check-qom-interface.c tests: fix check-qom-interface leaks 2016-09-08 17:57:32 +04:00
check-qom-proplist.c tests: fix check-qom-proplist leaks 2016-09-08 17:57:32 +04:00
check-qstring.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
crypto-tls-x509-helpers.c tests: Clean up includes 2016-02-16 14:29:27 +00:00
crypto-tls-x509-helpers.h crypto: fix building complaint 2016-09-12 12:00:52 +01:00
device-introspect-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
display-vga-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
drive_del-test.c tests: add drive_del-test to ppc/ppc64 2016-07-29 14:14:15 +10:00
ds1338-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
e1000-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
e1000e-test.c clean-includes: run it once more 2016-06-16 18:39:03 +02:00
eepro100-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
endianness-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
es1370-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
fdc-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
fw_cfg-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
hd-geo-test.c tests/hd-geo-test: Don't pass NULL to unlink() 2016-09-08 10:43:58 +01:00
i440fx-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
i82801b11-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ide-test.c tests: in IDE and AHCI tests perform DMA write before flushing 2016-07-18 18:19:01 -04:00
intel-hda-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
io-channel-helpers.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
io-channel-helpers.h io: add QIOChannelSocket class 2015-12-18 12:18:31 +00:00
ioh3420-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ipmi-bt-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ipmi-kcs-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ipoctal232-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
ivshmem-test.c os-posix: include sys/mman.h 2016-06-16 18:39:03 +02:00
libqtest.c tests: add qtest_add_data_func_full 2016-09-08 18:05:22 +04:00
libqtest.h tests: add qtest_add_data_func_full 2016-09-08 18:05:22 +04:00
m48t59-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
Makefile.include * minor patches here and there 2016-09-15 10:24:22 +01:00
ne2000-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
nvme-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
pc-cpu-test.c tests: pc-cpu-test leaks fixes 2016-09-08 18:05:22 +04:00
pcnet-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
pkix_asn1_tab.c tests: Clean up includes 2016-02-16 14:29:27 +00:00
postcopy-test.c tests: fix postcopy-test leaks 2016-09-08 18:05:22 +04:00
prom-env-test.c tests/prom-env-test: increase the test timeout 2016-07-20 19:30:26 +03:00
pvpanic-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
pxe-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
q35-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
qemu-iotests-quick.sh qemu-iotests: Speed up make check-block 2015-01-13 11:47:55 +00:00
qht-bench.c clean-includes: run it once more 2016-06-16 18:39:03 +02:00
qom-test.c tests: fix qom-test leaks 2016-09-08 18:05:21 +04:00
rcutorture.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
rtc-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
rtl8139-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
spapr-phb-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
tco-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-aio.c timer: set vm_clock disabled default 2016-08-09 22:57:36 +02:00
test-base64.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-bitops.c bitops.h: Implement half-shuffle and half-unshuffle ops 2016-06-17 15:23:51 +01:00
test-blockjob-txn.c coroutine: move entry argument to qemu_coroutine_create 2016-07-13 13:26:02 +02:00
test-blockjob.c tests: Test blockjob IDs 2016-08-08 13:05:43 +02:00
test-bufferiszero.c cutils: Add test for buffer_is_zero 2016-09-13 19:13:32 +02:00
test-clone-visitor.c qapi: Add new clone visitor 2016-07-06 10:52:04 +02:00
test-coroutine.c test-coroutine: Fix coroutine pool corruption 2016-09-05 19:06:48 +02:00
test-crypto-afsplit.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-block.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-cipher.c crypto: ensure XTS is only used with ciphers with 16 byte blocks 2016-09-12 12:00:06 +01:00
test-crypto-hash.c crypto: implement sha224, sha384, sha512 and ripemd160 hashes 2016-07-04 15:52:36 +01:00
test-crypto-ivgen.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-pbkdf.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-secret.c crypto: remove temp files on completion of secrets test 2016-06-13 12:41:17 +01:00
test-crypto-tlscredsx509.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-tlssession.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-crypto-xts.c crypto: rename OUT to out in xts test to avoid clash on MinGW 2016-07-04 10:46:59 +01:00
test-cutils.c tests: fix test-cutils leaks 2016-09-08 17:57:32 +04:00
test-filter-mirror.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-filter-redirector.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
test-hbitmap.c hbitmap: Use DIV_ROUND_UP 2016-06-07 18:19:25 +03:00
test-int128.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-io-channel-buffer.c tests: Clean up includes 2016-02-16 14:29:27 +00:00
test-io-channel-command.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-io-channel-file.c include/qemu/osdep.h: Don't include qapi/error.h 2016-03-22 22:20:15 +01:00
test-io-channel-socket.c socket: unlink unix socket on remove 2016-06-29 16:49:41 +02:00
test-io-channel-tls.c tests: Clean up includes 2016-02-16 14:29:27 +00:00
test-io-task.c tests: Rename qtests which have names ending "error" 2016-08-05 15:27:15 +01:00
test-iov.c tests: fix test-iov leaks 2016-09-08 17:57:32 +04:00
test-logging.c test-logging: don't hard-code paths in /tmp 2016-08-19 12:44:11 +01:00
test-mul64.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-netfilter.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-opts-visitor.c opts-visitor: Favor new visit_free() function 2016-07-06 10:52:04 +02:00
test-qdev-global-props.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-qdist.c qdist: return "(empty)" instead of NULL when printing an empty dist 2016-08-03 18:44:56 +02:00
test-qemu-opts.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-qga.c tests: fix test-qga leaks 2016-09-08 17:57:32 +04:00
test-qht-par.c clean-includes: run it once more 2016-06-16 18:39:03 +02:00
test-qht.c qht: do not segfault when gathering stats from an uninitialized qht 2016-08-02 12:03:58 +02:00
test-qmp-commands.c qapi: check invalid arguments on no-args commands 2016-09-19 17:32:22 +02:00
test-qmp-event.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-qmp-input-strict.c qmp-input-visitor: Favor new visit_free() function 2016-07-06 10:52:04 +02:00
test-qmp-input-visitor.c qmp-input-visitor: Favor new visit_free() function 2016-07-06 10:52:04 +02:00
test-qmp-output-visitor.c qapi: Add new visit_complete() function 2016-07-06 10:52:04 +02:00
test-rcu-list.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-replication.c tests: add unit test case for replication 2016-09-13 11:00:56 +01:00
test-rfifolock.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-string-input-visitor.c tests: fix leak in test-string-input-visitor 2016-09-08 18:05:21 +04:00
test-string-output-visitor.c qapi: Add new visit_complete() function 2016-07-06 10:52:04 +02:00
test-thread-pool.c coroutine: move entry argument to qemu_coroutine_create 2016-07-13 13:26:02 +02:00
test-throttle.c throttle: Test burst limits lower than the normal limits 2016-08-05 09:59:06 +01:00
test-timed-average.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-visitor-serialization.c qapi: Add new visit_complete() function 2016-07-06 10:52:04 +02:00
test-vmstate.c tests: fix test-vmstate leaks 2016-09-08 17:57:32 +04:00
test-write-threshold.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-x86-cpuid.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
test-xbzrle.c util: move declarations out of qemu-common.h 2016-03-22 22:20:17 +01:00
tmp105-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
tpci200-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
usb-hcd-ehci-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
usb-hcd-ohci-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
usb-hcd-uhci-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
usb-hcd-xhci-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
vhost-user-bridge.c Use #include "..." for our own headers, <...> for others 2016-07-12 16:19:16 +02:00
vhost-user-test.c vhost-user-test: Use libqos instead of pxe-virtio.rom 2016-09-05 16:03:47 -03:00
virtio-9p-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
virtio-balloon-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
virtio-blk-test.c Error reporting patches for 2016-06-20 2016-06-20 16:19:18 +01:00
virtio-console-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00
virtio-net-test.c tests: plug some leaks in virtio-net-test 2016-07-29 00:33:49 +03:00
virtio-rng-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
virtio-scsi-test.c Error reporting patches for 2016-06-20 2016-06-20 16:19:18 +01:00
virtio-serial-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
vmxnet3-test.c tests: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
wdt_ib700-test.c coccinelle: Remove unnecessary variables for function return value 2016-06-20 16:38:13 +02:00