sd-bus: don't assert() on valid signatures
Right now sd_bus_message_skip() will abort execution if passed a signature of the unary type "()". Regardless whether this should be supported or not, we really must not abort. Drop the incorrect assertion and add a test-case for this.
This commit is contained in:
parent
39d1a2d05d
commit
a388569f60
|
@ -4756,7 +4756,6 @@ _public_ int sd_bus_message_skip(sd_bus_message *m, const char *types) {
|
|||
r = sd_bus_message_skip(m, s);
|
||||
if (r < 0)
|
||||
return r;
|
||||
assert(r != 0);
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
|
|
|
@ -134,6 +134,9 @@ int main(int argc, char *argv[]) {
|
|||
r = sd_bus_message_append(m, "y(ty)y(yt)y", 8, 777ULL, 7, 9, 77, 7777ULL, 10);
|
||||
assert_se(r >= 0);
|
||||
|
||||
r = sd_bus_message_append(m, "()");
|
||||
assert_se(r >= 0);
|
||||
|
||||
r = sd_bus_message_append(m, "ba(ss)", 255, 3, "aaa", "1", "bbb", "2", "ccc", "3");
|
||||
assert_se(r >= 0);
|
||||
|
||||
|
@ -271,6 +274,9 @@ int main(int argc, char *argv[]) {
|
|||
assert_se(r > 0);
|
||||
assert_se(v == 10);
|
||||
|
||||
r = sd_bus_message_read(m, "()");
|
||||
assert_se(r > 0);
|
||||
|
||||
r = sd_bus_message_read(m, "ba(ss)", &boolean, 3, &x, &y, &a, &b, &c, &d);
|
||||
assert_se(r > 0);
|
||||
assert_se(boolean);
|
||||
|
@ -350,7 +356,7 @@ int main(int argc, char *argv[]) {
|
|||
|
||||
assert_se(sd_bus_message_verify_type(m, 'a', "{yv}") > 0);
|
||||
|
||||
r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y");
|
||||
r = sd_bus_message_skip(m, "a{yv}y(ty)y(yt)y()");
|
||||
assert_se(r >= 0);
|
||||
|
||||
assert_se(sd_bus_message_verify_type(m, 'b', NULL) > 0);
|
||||
|
|
Loading…
Reference in a new issue