]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlink: allow strings for integer varlink IDL fields
authorLennart Poettering <lennart@poettering.net>
Mon, 4 Mar 2024 10:23:38 +0000 (11:23 +0100)
committerLuca Boccassi <luca.boccassi@gmail.com>
Mon, 4 Mar 2024 19:47:26 +0000 (19:47 +0000)
This is a follow-up for 67a3028555c58cea152cd8b8e863a643eb147a97: also
allow strings as integer during IDL validation of JSON records.

src/shared/varlink-idl.c
src/test/test-varlink-idl.c

index ad0c66d9695ab9bec08c14cfefa3661528c19f90..62a3e87dab183cc9726ddd60cabd547d4c658452 100644 (file)
@@ -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;
index d80fd705293cb7744ed5989e579e3185a5dc4cb3..3ca36a07a4966e9e06f0246cff5ccb5bcbd1d3ca 100644 (file)
@@ -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));