[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 2/9] test-qga: Avoid qobject_from_jsonv("%"PRId64)
From: |
Markus Armbruster |
Subject: |
[Qemu-devel] [PULL 2/9] test-qga: Avoid qobject_from_jsonv("%"PRId64) |
Date: |
Mon, 5 Dec 2016 17:45:06 +0100 |
From: Eric Blake <address@hidden>
The qobject_from_jsonv() function implements a pseudo-printf
language for creating a QObject; however, it is hard-coded to
only parse a subset of formats understood by -Wformat, and is
not a straight synonym to bare printf(). In particular, any
use of an int64_t integer works only if the system's
definition of PRId64 matches what the parser expects; which
works on glibc (%lld or %ld depending on 32- vs. 64-bit) and
mingw (%I64d), but not on Mac OS (%qd). Rather than enhance
the parser, it is just as easy to use normal printf() for
this particular conversion, matching what is done elsewhere
in this file [1], which is safe in this instance because the
format does not contain any of the problematic differences
(bare '%' or the '%s' format).
The use of PRId64 for a variable named 'pid' is gross, but it
is a sad reality of the 64-bit mingw environment, which
mistakenly defines pid_t as a 64-bit type even though getpid()
returns 'int' on that platform [2]. Our definition of the
QGA GuestExec type defines 'pid' as a 64-bit entity, and we
can't tighten it to 'int32' unless the mingw header is fixed.
Using 'long long' instead of 'int64_t' just so that we can
stick with qobject_from_jsonv("%lld") instead of printf() is
not any prettier, since we may have later type churn anyways.
[1] see 'git grep -A2 strdup_printf tests/test-qga.c'
[2] https://bugzilla.redhat.com/show_bug.cgi?id=1397787
Reported by: G 3 <address@hidden>
Signed-off-by: Eric Blake <address@hidden>
Message-Id: <address@hidden>
Reviewed-by: Markus Armbruster <address@hidden>
Signed-off-by: Markus Armbruster <address@hidden>
---
tests/test-qga.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/tests/test-qga.c b/tests/test-qga.c
index 40af649..868b02a 100644
--- a/tests/test-qga.c
+++ b/tests/test-qga.c
@@ -837,6 +837,7 @@ static void test_qga_guest_exec(gconstpointer fix)
int64_t pid, now, exitcode;
gsize len;
bool exited;
+ char *cmd;
/* exec 'echo foo bar' */
ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec', 'arguments': {"
@@ -851,9 +852,10 @@ static void test_qga_guest_exec(gconstpointer fix)
/* wait for completion */
now = g_get_monotonic_time();
+ cmd = g_strdup_printf("{'execute': 'guest-exec-status',"
+ " 'arguments': { 'pid': %" PRId64 " } }", pid);
do {
- ret = qmp_fd(fixture->fd, "{'execute': 'guest-exec-status',"
- " 'arguments': { 'pid': %" PRId64 " } }", pid);
+ ret = qmp_fd(fixture->fd, cmd);
g_assert_nonnull(ret);
val = qdict_get_qdict(ret, "return");
exited = qdict_get_bool(val, "exited");
@@ -863,6 +865,7 @@ static void test_qga_guest_exec(gconstpointer fix)
} while (!exited &&
g_get_monotonic_time() < now + 5 * G_TIME_SPAN_SECOND);
g_assert(exited);
+ g_free(cmd);
/* check stdout */
exitcode = qdict_get_int(val, "exitcode");
--
2.5.5
- [Qemu-devel] [PULL 0/9] QAPI patches for 2016-12-05, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 5/9] qapi: fix schema symbol sections, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 6/9] qapi: fix missing symbol @prefix, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 3/9] tests: Avoid qobject_from_jsonf("%"PRId64), Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 8/9] qapi: use one symbol per line, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 4/9] qga/schema: fix double-return in doc, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 2/9] test-qga: Avoid qobject_from_jsonv("%"PRId64),
Markus Armbruster <=
- [Qemu-devel] [PULL 7/9] qapi: fix various symbols mismatch in documentation, Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 1/9] qmp-event: Avoid qobject_from_jsonf("%"PRId64), Markus Armbruster, 2016/12/05
- [Qemu-devel] [PULL 9/9] qapi: add missing colon-ending for section name, Markus Armbruster, 2016/12/05
- Re: [Qemu-devel] [PULL 0/9] QAPI patches for 2016-12-05, Stefan Hajnoczi, 2016/12/06