chiark / gitweb /
bus: generate a nice error when attempting to add a NULL string
authorLennart Poettering <lennart@poettering.net>
Thu, 21 Mar 2013 23:24:21 +0000 (00:24 +0100)
committerLennart Poettering <lennart@poettering.net>
Thu, 21 Mar 2013 23:24:21 +0000 (00:24 +0100)
src/libsystemd-bus/bus-message.c
src/libsystemd-bus/sd-bus.h
src/libsystemd-bus/test-bus-marshal.c

index c0a0242..524f17e 100644 (file)
@@ -768,11 +768,27 @@ int message_append_basic(sd_bus_message *m, char type, const void *p, const void
 
         case SD_BUS_TYPE_STRING:
         case SD_BUS_TYPE_OBJECT_PATH:
+
+                if (!p) {
+                        if (e)
+                                c->signature[c->index] = 0;
+
+                        return -EINVAL;
+                }
+
                 align = 4;
                 sz = 4 + strlen(p) + 1;
                 break;
 
         case SD_BUS_TYPE_SIGNATURE:
+
+                if (!p) {
+                        if (e)
+                                c->signature[c->index] = 0;
+
+                        return -EINVAL;
+                }
+
                 align = 1;
                 sz = 1 + strlen(p) + 1;
                 break;
index d5101c2..3ea4acc 100644 (file)
@@ -33,7 +33,6 @@
  * - add page donation logic
  * - api for appending/reading fixed arrays
  * - always verify container depth
- * - handle NULL strings nicer when appending
  * - merge busctl into systemctl or so?
  * - add object handlers
  * - verify object paths
index 15c472c..d12c847 100644 (file)
@@ -50,6 +50,9 @@ int main(int argc, char *argv[]) {
         r = sd_bus_message_append(m, "s", "a string");
         assert_se(r >= 0);
 
+        r = sd_bus_message_append(m, "s", NULL);
+        assert_se(r < 0);
+
         r = sd_bus_message_append(m, "as", 2, "string #1", "string #2");
         assert_se(r >= 0);