summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Olbrich <m.olbrich@pengutronix.de>2010-06-02 17:22:43 +0200
committerMichael Olbrich <m.olbrich@pengutronix.de>2010-06-03 17:08:14 +0200
commitf98c251d56d5c6d69f9ab3e0f3b47d647c9e7535 (patch)
tree26d84ccd86d1f2f322aa314127967d03cc9db40d
parent390875a61054e9d847730537da12f3f8ea9b586a (diff)
downloadjson-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.c17
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.");