diff options
author | Michael Olbrich <m.olbrich@pengutronix.de> | 2010-06-02 17:22:43 +0200 |
---|---|---|
committer | Michael Olbrich <m.olbrich@pengutronix.de> | 2010-06-03 17:08:14 +0200 |
commit | f98c251d56d5c6d69f9ab3e0f3b47d647c9e7535 (patch) | |
tree | 26d84ccd86d1f2f322aa314127967d03cc9db40d | |
parent | 390875a61054e9d847730537da12f3f8ea9b586a (diff) | |
download | json-dbus-bridge-f98c251d56d5c6d69f9ab3e0f3b47d647c9e7535.tar.gz json-dbus-bridge-f98c251d56d5c6d69f9ab3e0f3b47d647c9e7535.tar.xz |
[src] handle 'null' elements in arrays and objects.
Signed-off-by: Michael Olbrich <m.olbrich@pengutronix.de>
-rw-r--r-- | src/bridge_request.c | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/bridge_request.c b/src/bridge_request.c index d161e87..50c0024 100644 --- a/src/bridge_request.c +++ b/src/bridge_request.c @@ -282,6 +282,12 @@ int bridge_request_dbus_params_element(bridge_request_t *self, int type; int ret = 0; + if (!element) { + bridge_request_error(self, + "unecpected 'null' element found."); + return EINVAL; + } + type = dbus_signature_iter_get_current_type(sigIt); if (dbus_type_is_basic(type)) { @@ -397,6 +403,11 @@ int bridge_request_dbus_params_array(bridge_request_t *self, for (i = idx; i < len; ++i) { element = json_object_array_get_idx(params, i); + if (!element) { + bridge_request_error(self, + "Unexpected 'null' parameter found."); + return EINVAL; + } ret = bridge_request_dbus_params_element(self, element, &sigIt, it); if (ret != 0) @@ -430,7 +441,11 @@ int bridge_request_dbus_params(bridge_request_t *self, } if (json_object_array_length(params) == 0) return 0; - tmp = json_object_array_get_idx(params, 0); + + /* the may be only a null element in the array */ + if ((tmp = json_object_array_get_idx(params, 0)) == 0) + return 0; + if (json_object_get_type(tmp) != json_type_string) { bridge_request_error(self, "First Argument must be the signature string."); |