From 14a3cb42047bd0c0f8d5713332b9b4516a505607 Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Thu, 1 Oct 2020 19:58:27 +0200 Subject: [PATCH] ubus: fix legacy empty reply format The legacy ubus protocol must not include an empty object in the result array if the invoked ubus procedure yielded no response. This fixes compatibility with existing legacy ubus api clients that expect this behaviour, LuCI's fs.js in particular. Signed-off-by: Jo-Philipp Wich --- ubus.c | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/ubus.c b/ubus.c index 39b38b2..cc7447e 100644 --- a/ubus.c +++ b/ubus.c @@ -465,10 +465,14 @@ uh_ubus_request_cb(struct ubus_request *req, int ret) uh_ubus_init_json_rpc_response(cl, &buf); r = blobmsg_open_array(&buf, "result"); blobmsg_add_u32(&buf, "", ret); - c = blobmsg_open_table(&buf, NULL); - blob_for_each_attr(cur, du->buf.head, rem) - blobmsg_add_blob(&buf, cur); - blobmsg_close_table(&buf, c); + + if (blob_len(du->buf.head)) { + c = blobmsg_open_table(&buf, NULL); + blob_for_each_attr(cur, du->buf.head, rem) + blobmsg_add_blob(&buf, cur); + blobmsg_close_table(&buf, c); + } + blobmsg_close_array(&buf, r); uh_ubus_send_response(cl, &buf); return; -- 2.30.2