diff --git a/mesh/mesh.c b/mesh/mesh.c
index 8db83b7..a0a9a7c 100644
--- a/mesh/mesh.c
+++ b/mesh/mesh.c
const char *app_path;
struct mesh_node *node;
uint32_t disc_watch;
- uint8_t uuid[16];
+ uint8_t *uuid;
};
struct attach_data {
{
const char *app_path, *sender;
struct l_dbus_message_iter iter_uuid;
- uint8_t *uuid;
uint32_t n;
l_debug("Join network request");
join_pending = l_new(struct join_data, 1);
- l_dbus_message_iter_get_fixed_array(&iter_uuid, &uuid, &n);
-
- if (n != 16) {
+ if (!l_dbus_message_iter_get_fixed_array(&iter_uuid,
+ &join_pending->uuid, &n)
+ || n != 16) {
l_free(join_pending);
join_pending = NULL;
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
"Bad device UUID");
}
- memcpy(join_pending->uuid, uuid, 16);
-
sender = l_dbus_message_get_sender(msg);
join_pending->sender = l_strdup(sender);
diff --git a/mesh/node.c b/mesh/node.c
index 6a7b4a2..761a67a 100644
--- a/mesh/node.c
+++ b/mesh/node.c
struct l_dbus_message_iter iter_data;
struct node_element *ele;
uint16_t dst, app_idx, src;
- uint8_t data[MESH_MAX_ACCESS_PAYLOAD];
+ uint8_t *data;
uint32_t len;
struct l_dbus_message *reply;
src = node_get_primary(node) + ele->idx;
- l_dbus_message_iter_get_fixed_array(&iter_data, data, &len);
- if (!len)
+ if (!l_dbus_message_iter_get_fixed_array(&iter_data, &data, &len) ||
+ !len || len > MESH_MAX_ACCESS_PAYLOAD)
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
- "Mesh message is empty");
+ "Incorrect data");
if (!mesh_model_send(node, src, dst, app_idx,
mesh_net_get_default_ttl(node->net), data, len))
struct l_dbus_message_iter iter_data;
uint16_t mod_id, src;
struct node_element *ele;
- uint8_t data[MESH_MAX_ACCESS_PAYLOAD];
+ uint8_t *data;
uint32_t len;
struct l_dbus_message *reply;
int result;
src = node_get_primary(node) + ele->idx;
- l_dbus_message_iter_get_fixed_array(&iter_data, data, &len);
- if (!len)
+ if (!l_dbus_message_iter_get_fixed_array(&iter_data, &data, &len) ||
+ !len || len > MESH_MAX_ACCESS_PAYLOAD)
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
- "Mesh message is empty");
+ "Incorrect data");
result = mesh_model_publish(node, VENDOR_ID_MASK | mod_id, src,
mesh_net_get_default_ttl(node->net), data, len);
uint16_t model_id, vendor;
uint32_t vendor_mod_id;
struct node_element *ele;
- uint8_t data[MESH_MAX_ACCESS_PAYLOAD];
+ uint8_t *data = NULL;
uint32_t len;
struct l_dbus_message *reply;
int result;
src = node_get_primary(node) + ele->idx;
- l_dbus_message_iter_get_fixed_array(&iter_data, data, &len);
- if (!len)
+ if (!l_dbus_message_iter_get_fixed_array(&iter_data, &data, &len) ||
+ !len || len > MESH_MAX_ACCESS_PAYLOAD)
return dbus_error(msg, MESH_ERROR_INVALID_ARGS,
- "Mesh message is empty");
+ "Incorrect data");
vendor_mod_id = (vendor << 16) | model_id;
result = mesh_model_publish(node, vendor_mod_id, src,
"", "oqqay", "element_path",
"vendor", "model_id", "data");
- /*TODO: Properties */
+ /* TODO: Properties */
}
bool node_dbus_init(struct l_dbus *bus)