40 lines
1.8 KiB
Diff
40 lines
1.8 KiB
Diff
From 326f2a73952b73dc45be109b503162da616f230a Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Thu, 20 Nov 2014 20:58:39 +0100
|
|
Subject: [PATCH] sd-bus: create clean error when a property Set() call with
|
|
incorrect signature is passed in
|
|
|
|
(cherry picked from commit 0ca454d474a13f363dcd5ef8dc97ca158569d3ed)
|
|
---
|
|
src/libsystemd/sd-bus/bus-objects.c | 10 ++++++++++
|
|
1 file changed, 10 insertions(+)
|
|
|
|
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
|
|
index 0ab1119b58..6c3230aac0 100644
|
|
--- a/src/libsystemd/sd-bus/bus-objects.c
|
|
+++ b/src/libsystemd/sd-bus/bus-objects.c
|
|
@@ -617,6 +617,9 @@ static int property_get_set_callbacks_run(
|
|
return r;
|
|
|
|
} else {
|
|
+ const char *signature = NULL;
|
|
+ char type = 0;
|
|
+
|
|
if (c->vtable->type != _SD_BUS_VTABLE_WRITABLE_PROPERTY)
|
|
return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_PROPERTY_READ_ONLY, "Property '%s' is not writable.", c->member);
|
|
|
|
@@ -628,6 +631,13 @@ static int property_get_set_callbacks_run(
|
|
|
|
c->last_iteration = bus->iteration_counter;
|
|
|
|
+ r = sd_bus_message_peek_type(m, &type, &signature);
|
|
+ if (r < 0)
|
|
+ return r;
|
|
+
|
|
+ if (type != 'v' || !streq(strempty(signature), strempty(c->vtable->x.property.signature)))
|
|
+ return sd_bus_reply_method_errorf(m, SD_BUS_ERROR_INVALID_ARGS, "Incorrect parameters for property '%s', expected '%s', got '%s'.", c->member, strempty(c->vtable->x.property.signature), strempty(signature));
|
|
+
|
|
r = sd_bus_message_enter_container(m, 'v', c->vtable->x.property.signature);
|
|
if (r < 0)
|
|
return r;
|