CMakeLists.txt: bump minimum cmake version
[project/ubus.git] / libubus-obj.c
index c1931b314ef24b40f15d06ed6b0c16fcde17155e..29cbb2b98e6eab48d8cd280e6ca2a596da1ff729 100644 (file)
@@ -74,7 +74,7 @@ ubus_process_invoke(struct ubus_context *ctx, struct ubus_msghdr *hdr,
 
        if (attrbuf[UBUS_ATTR_NO_REPLY])
                no_reply = blob_get_int8(attrbuf[UBUS_ATTR_NO_REPLY]);
-               
+
        req.peer = hdr->peer;
        req.seq = hdr->seq;
        req.object = obj->id;
@@ -94,6 +94,11 @@ ubus_process_invoke(struct ubus_context *ctx, struct ubus_msghdr *hdr,
        goto send;
 
 found:
+       if (!attrbuf[UBUS_ATTR_DATA]) {
+               ret = UBUS_STATUS_INVALID_ARGUMENT;
+               goto send;
+       }
+
        ret = obj->methods[method].handler(ctx, obj, &req,
                                           blob_data(attrbuf[UBUS_ATTR_METHOD]),
                                           attrbuf[UBUS_ATTR_DATA]);
@@ -116,7 +121,7 @@ void __hidden ubus_process_obj_msg(struct ubus_context *ctx, struct ubus_msghdr_
        struct ubus_object *obj;
        uint32_t objid;
        void *prev_data = NULL;
-       attrbuf = ubus_parse_msg(buf->data);
+       attrbuf = ubus_parse_msg(buf->data, blob_raw_len(buf->data));
        if (!attrbuf[UBUS_ATTR_OBJID])
                return;
 
@@ -155,7 +160,7 @@ void __hidden ubus_process_obj_msg(struct ubus_context *ctx, struct ubus_msghdr_
 static void ubus_add_object_cb(struct ubus_request *req, int type, struct blob_attr *msg)
 {
        struct ubus_object *obj = req->priv;
-       struct blob_attr **attrbuf = ubus_parse_msg(msg);
+       struct blob_attr **attrbuf = ubus_parse_msg(msg, blob_raw_len(msg));
 
        if (!attrbuf[UBUS_ATTR_OBJID])
                return;
@@ -235,7 +240,7 @@ int ubus_add_object(struct ubus_context *ctx, struct ubus_object *obj)
 static void ubus_remove_object_cb(struct ubus_request *req, int type, struct blob_attr *msg)
 {
        struct ubus_object *obj = req->priv;
-       struct blob_attr **attrbuf = ubus_parse_msg(msg);
+       struct blob_attr **attrbuf = ubus_parse_msg(msg, blob_raw_len(msg));
 
        if (!attrbuf[UBUS_ATTR_OBJID])
                return;