From: Lennart Poettering Date: Mon, 4 Mar 2024 10:23:38 +0000 (+0100) Subject: varlink: allow strings for integer varlink IDL fields X-Git-Tag: v256-rc1~651 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=217f63c9b8748b43a1da3cbedb6b83771b15b180;p=thirdparty%2Fsystemd.git 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. --- 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));