summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafał Miłecki <rafal@milecki.pl>2020-07-25 10:18:50 +0200
committerRafał Miłecki <rafal@milecki.pl>2020-08-05 08:22:57 +0200
commit9d663e76bd3ac91b18633eb8f4f0bfc6996c5875 (patch)
tree8bae552435ab7cafca1c0208d5ca3c5c77235e32
parent77d345e52ea941d968d5ae5702dd2b69405097af (diff)
downloaduhttpd2-9d663e76bd3ac91b18633eb8f4f0bfc6996c5875.tar.gz
ubus: use BLOBMSG_TYPE_UNSPEC for "params" JSON attribute
According to the JSON-RPC 2.0 specification "params" value can be either an Array or Object. This change makes parse_json_rpc() accept both. Type validation should be handled by a function that actually reads "params" depending on expected format. This doesn't change existing behaviour but allows adding more methods (that expect Object) in the future. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
-rw-r--r--ubus.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ubus.c b/ubus.c
index 51c58b5..ddc2f05 100644
--- a/ubus.c
+++ b/ubus.c
@@ -48,7 +48,7 @@ enum {
static const struct blobmsg_policy rpc_policy[__RPC_MAX] = {
[RPC_JSONRPC] = { .name = "jsonrpc", .type = BLOBMSG_TYPE_STRING },
[RPC_METHOD] = { .name = "method", .type = BLOBMSG_TYPE_STRING },
- [RPC_PARAMS] = { .name = "params", .type = BLOBMSG_TYPE_ARRAY },
+ [RPC_PARAMS] = { .name = "params", .type = BLOBMSG_TYPE_UNSPEC },
[RPC_ID] = { .name = "id", .type = BLOBMSG_TYPE_UNSPEC },
};
@@ -446,6 +446,9 @@ static void parse_call_params(struct rpc_data *d)
};
struct blob_attr *tb[4];
+ if (!d->params || blobmsg_type(d->params) != BLOBMSG_TYPE_ARRAY)
+ return;
+
blobmsg_parse_array(data_policy, ARRAY_SIZE(data_policy), tb,
blobmsg_data(d->params), blobmsg_data_len(d->params));