From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32786) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1c9bTm-0000a2-1J for qemu-devel@nongnu.org; Wed, 23 Nov 2016 12:37:10 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1c9bTi-0001pd-Tq for qemu-devel@nongnu.org; Wed, 23 Nov 2016 12:37:06 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42594) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1c9bTi-0001oa-Nr for qemu-devel@nongnu.org; Wed, 23 Nov 2016 12:37:02 -0500 From: Eric Blake Date: Wed, 23 Nov 2016 11:36:54 -0600 Message-Id: <1479922617-4400-2-git-send-email-eblake@redhat.com> In-Reply-To: <1479922617-4400-1-git-send-email-eblake@redhat.com> References: <1479922617-4400-1-git-send-email-eblake@redhat.com> Subject: [Qemu-devel] [PATCH v2 1/4] qmp-event: Avoid qobject_from_jsonf("%"PRId64) List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: programmingkidx@gmail.com, armbru@redhat.com, pbonzini@redhat.com, Michael Roth The qobject_from_jsonf() 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 'long long', which we know always works. There are few enough callers of qobject_from_json[fv]() that it is easy to audit that this is the only non-testsuite caller that was actually relying on this particular conversion. Reported by: G 3 Signed-off-by: Eric Blake --- v2: keep qobject_from_jsonf for now, but switch to %lld --- qapi/qmp-event.c | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/qapi/qmp-event.c b/qapi/qmp-event.c index 8bba165..e7c8755 100644 --- a/qapi/qmp-event.c +++ b/qapi/qmp-event.c @@ -35,21 +35,12 @@ static void timestamp_put(QDict *qdict) int err; QObject *obj; qemu_timeval tv; - int64_t sec, usec; err = qemu_gettimeofday(&tv); - if (err < 0) { - /* Put -1 to indicate failure of getting host time */ - sec = -1; - usec = -1; - } else { - sec = tv.tv_sec; - usec = tv.tv_usec; - } - - obj = qobject_from_jsonf("{ 'seconds': %" PRId64 ", " - "'microseconds': %" PRId64 " }", - sec, usec); + /* Put -1 to indicate failure of getting host time */ + obj = qobject_from_jsonf("{ 'seconds': %lld, 'microseconds': %lld }", + err < 0 ? -1LL : tv.tv_sec, + err < 0 ? -1LL : tv.tv_usec); qdict_put_obj(qdict, "timestamp", obj); } -- 2.7.4