[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our
From: |
Eric Blake |
Subject: |
[Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our number handling |
Date: |
Mon, 21 Dec 2015 10:08:06 -0700 |
We've already documented that our JSON parsing is locale dependent;
but we should also document that our JSON output has the same
problem. Additionally, JSON requires finite values (you have to
upgrade to JSON5 to get support for Inf or NaN), and our output
risks truncating floating point numbers to the point of losing
significant precision.
Sadly, this series is not going to be the one that addresses these
problems.
Fix some trailing whitespace I noticed in the vicinity.
Signed-off-by: Eric Blake <address@hidden>
---
v8: no change
v7: new patch
---
qobject/json-parser.c | 4 +++-
qobject/qjson.c | 8 +++++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/qobject/json-parser.c b/qobject/json-parser.c
index 3c5d35d..6ab98a7 100644
--- a/qobject/json-parser.c
+++ b/qobject/json-parser.c
@@ -1,5 +1,5 @@
/*
- * JSON Parser
+ * JSON Parser
*
* Copyright IBM, Corp. 2009
*
@@ -519,6 +519,8 @@ static QObject *parse_literal(JSONParserContext *ctxt)
}
case JSON_FLOAT:
/* FIXME dependent on locale */
+ /* FIXME our lexer matches RFC7159 in forbidding Inf or NaN,
+ * but those might be useful extensions beyond JSON */
return QOBJECT(qfloat_from_double(strtod(token->str, NULL)));
default:
abort();
diff --git a/qobject/qjson.c b/qobject/qjson.c
index a3e6a7c..41d9d65 100644
--- a/qobject/qjson.c
+++ b/qobject/qjson.c
@@ -237,6 +237,12 @@ static void to_json(const QObject *obj, QString *str, int
pretty, int indent)
char buffer[1024];
int len;
+ /* FIXME: snprintf() is locale dependent; but JSON requires
+ * numbers to be formatted as if in the C locale. */
+ /* FIXME: This risks printing Inf or NaN, which are not valid
+ * JSON values. */
+ /* FIXME: the default precision of %f may be insufficient to
+ * tell this number apart from others. */
len = snprintf(buffer, sizeof(buffer), "%f", qfloat_get_double(val));
while (len > 0 && buffer[len - 1] == '0') {
len--;
@@ -247,7 +253,7 @@ static void to_json(const QObject *obj, QString *str, int
pretty, int indent)
} else {
buffer[len] = 0;
}
-
+
qstring_append(str, buffer);
break;
}
--
2.4.3
- [Qemu-devel] [PATCH v8 02/35] qapi: Avoid use of misnamed DO_UPCAST(), (continued)
- [Qemu-devel] [PATCH v8 02/35] qapi: Avoid use of misnamed DO_UPCAST(), Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 09/35] qapi: Prefer type_int64 over type_int in visitors, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 10/35] qapi: Make all visitors supply uint64 callbacks, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 11/35] qapi: Consolidate visitor small integer callbacks, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 07/35] qapi: Improve generated event use of qapi visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 17/35] qapi: Drop unused 'kind' for struct/enum visit, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 13/35] qom: Use typedef for Visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 20/35] qmp: Don't abuse stack to track qmp-output root, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 18/35] qapi: Drop unused error argument for list and implicit struct, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 27/35] qapi: Fix command with named empty argument type, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 01/35] qobject: Document more shortcomings in our number handling,
Eric Blake <=
- [Qemu-devel] [PATCH v8 22/35] qapi: Add visit_type_null() visitor, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 25/35] qapi: Simplify excess input reporting in input visitors, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 19/35] qmp: Fix reference-counting of qnull on empty output visit, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 21/35] qapi: Document visitor interfaces, add assertions, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 28/35] qapi: Eliminate empty visit_type_FOO_fields, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 24/35] spapr_drc: Expose 'null' in qom-get when there is no fdt, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 31/35] qapi: Rework deallocation of partial struct, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 34/35] qapi: Change visit_type_FOO() to no longer return partial objects, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 32/35] qapi: Split visit_end_struct() into pieces, Eric Blake, 2015/12/21
- [Qemu-devel] [PATCH v8 35/35] RFC: qapi: Adjust layout of FooList types, Eric Blake, 2015/12/21