mirror of https://github.com/xemu-project/xemu.git
qapi: add QMP input test for large integers
Large integers previously got capped to LLONG_MAX/LLONG_MIN so we could store them as int64_t. This could lead to silent errors occuring. Now, we use a double to handle these cases. Add a test to confirm that QMPInputVisitor handles this as expected if we're expected an integer value: errors for out of range integer values that got promoted to doubles in this fashion. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> Reviewed-by: Amos Kong <akong@redhat.com> Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
parent
3d5b3ec6d4
commit
e92cfa0d90
|
@ -75,6 +75,24 @@ static void test_visitor_in_int(TestInputVisitorData *data,
|
||||||
g_assert_cmpint(res, ==, value);
|
g_assert_cmpint(res, ==, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void test_visitor_in_int_overflow(TestInputVisitorData *data,
|
||||||
|
const void *unused)
|
||||||
|
{
|
||||||
|
int64_t res = 0;
|
||||||
|
Error *errp = NULL;
|
||||||
|
Visitor *v;
|
||||||
|
|
||||||
|
/* this will overflow a Qint/int64, so should be deserialized into
|
||||||
|
* a QFloat/double field instead, leading to an error if we pass it
|
||||||
|
* to visit_type_int. confirm this.
|
||||||
|
*/
|
||||||
|
v = visitor_input_test_init(data, "%f", DBL_MAX);
|
||||||
|
|
||||||
|
visit_type_int(v, &res, NULL, &errp);
|
||||||
|
g_assert(error_is_set(&errp));
|
||||||
|
error_free(errp);
|
||||||
|
}
|
||||||
|
|
||||||
static void test_visitor_in_bool(TestInputVisitorData *data,
|
static void test_visitor_in_bool(TestInputVisitorData *data,
|
||||||
const void *unused)
|
const void *unused)
|
||||||
{
|
{
|
||||||
|
@ -292,6 +310,8 @@ int main(int argc, char **argv)
|
||||||
|
|
||||||
input_visitor_test_add("/visitor/input/int",
|
input_visitor_test_add("/visitor/input/int",
|
||||||
&in_visitor_data, test_visitor_in_int);
|
&in_visitor_data, test_visitor_in_int);
|
||||||
|
input_visitor_test_add("/visitor/input/int_overflow",
|
||||||
|
&in_visitor_data, test_visitor_in_int_overflow);
|
||||||
input_visitor_test_add("/visitor/input/bool",
|
input_visitor_test_add("/visitor/input/bool",
|
||||||
&in_visitor_data, test_visitor_in_bool);
|
&in_visitor_data, test_visitor_in_bool);
|
||||||
input_visitor_test_add("/visitor/input/number",
|
input_visitor_test_add("/visitor/input/number",
|
||||||
|
|
Loading…
Reference in New Issue