From 217f63c9b8748b43a1da3cbedb6b83771b15b180 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Mon, 4 Mar 2024 11:23:38 +0100 Subject: [PATCH] varlink: allow strings for integer varlink IDL fields This is a follow-up for 67a3028555c58cea152cd8b8e863a643eb147a97: also allow strings as integer during IDL validation of JSON records. --- src/shared/varlink-idl.c | 3 ++- src/test/test-varlink-idl.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/shared/varlink-idl.c b/src/shared/varlink-idl.c index ad0c66d9695..62a3e87dab1 100644 --- a/src/shared/varlink-idl.c +++ b/src/shared/varlink-idl.c @@ -1379,7 +1379,8 @@ static int varlink_idl_validate_field_element_type(const VarlinkField *field, Js break; case VARLINK_INT: - if (!json_variant_is_integer(v) && !json_variant_is_unsigned(v)) + /* Allow strings here too, since integers with > 53 bits are often passed in as strings */ + if (!json_variant_is_integer(v) && !json_variant_is_unsigned(v) && !json_variant_is_string(v)) return varlink_idl_log(SYNTHETIC_ERRNO(EMEDIUMTYPE), "Field '%s' should be an int, but it is not, refusing.", strna(field->name)); break; diff --git a/src/test/test-varlink-idl.c b/src/test/test-varlink-idl.c index d80fd705293..3ca36a07a49 100644 --- a/src/test/test-varlink-idl.c +++ b/src/test/test-varlink-idl.c @@ -385,7 +385,7 @@ TEST(validate_method_call) { assert_se(varlink_callb(v, "xyz.TestMethod", &reply, &error_id, JSON_BUILD_OBJECT( - JSON_BUILD_PAIR_STRING("foo", "wuff"), + JSON_BUILD_PAIR_BOOLEAN("foo", true), JSON_BUILD_PAIR_UNSIGNED("bar", 9))) >= 0); assert_se(streq_ptr(error_id, VARLINK_ERROR_INVALID_PARAMETER)); -- 2.47.3