chiark / gitweb /
sd-bus: don't assert() on valid signatures
authorDavid Herrmann <dh.herrmann@gmail.com>
Tue, 28 Jul 2015 14:46:51 +0000 (16:46 +0200)
committerSven Eden <yamakuzure@gmx.net>
Tue, 14 Mar 2017 09:07:19 +0000 (10:07 +0100)
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.

src/libelogind/sd-bus/bus-message.c
src/libelogind/sd-bus/test-bus-marshal.c

index 18685be8ff53d13db7776ca5114760c21bdaf3ab..081f39d83b0d89844462dccff86cbf6cac156e13 100644 (file)
@@ -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)
index 59deaea89f0a1d1c7a8c6a37661b9a96121a0d46..b203707f2711abde59f6b371251afcb9a6cede8e 100644 (file)
@@ -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);