Skip to content

Commit 002adef

Browse files
poetteringbluca
authored andcommitted
varlink: improve compat with varlink C reference implementation
The reference implementation seems to set the 'parameters' field for method calls to 'null' if nothing is specified on its command line. We so far only could deal if the parameters field was unset or set to the empty object. Let's also accept the 'null' type. (cherry picked from commit f2ad892) (cherry picked from commit 2dab8bc) (cherry picked from commit 8760f4c)
1 parent 460ce98 commit 002adef

File tree

1 file changed

+16
-3
lines changed

1 file changed

+16
-3
lines changed

src/shared/varlink.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -678,12 +678,25 @@ static int varlink_dispatch_disconnect(Varlink *v) {
678678
}
679679

680680
static int varlink_sanitize_parameters(JsonVariant **v) {
681+
int r;
682+
681683
assert(v);
682684

683685
/* Varlink always wants a parameters list, hence make one if the caller doesn't want any */
684686
if (!*v)
685687
return json_variant_new_object(v, NULL, 0);
686-
else if (!json_variant_is_object(*v))
688+
if (json_variant_is_null(*v)) {
689+
JsonVariant *empty;
690+
691+
r = json_variant_new_object(&empty, NULL, 0);
692+
if (r < 0)
693+
return r;
694+
695+
json_variant_unref(*v);
696+
*v = empty;
697+
return 0;
698+
}
699+
if (!json_variant_is_object(*v))
687700
return -EINVAL;
688701

689702
return 0;
@@ -723,7 +736,7 @@ static int varlink_dispatch_reply(Varlink *v) {
723736
} else if (streq(k, "parameters")) {
724737
if (parameters)
725738
goto invalid;
726-
if (!json_variant_is_object(e))
739+
if (!json_variant_is_object(e) && !json_variant_is_null(e))
727740
goto invalid;
728741

729742
parameters = json_variant_ref(e);
@@ -822,7 +835,7 @@ static int varlink_dispatch_method(Varlink *v) {
822835
} else if (streq(k, "parameters")) {
823836
if (parameters)
824837
goto invalid;
825-
if (!json_variant_is_object(e))
838+
if (!json_variant_is_object(e) && !json_variant_is_null(e))
826839
goto invalid;
827840

828841
parameters = json_variant_ref(e);

0 commit comments

Comments
 (0)