bool found;
int ret;
- if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY) {
+ if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY ||
+ blobmsg_type(blobmsg_data(cur)) != BLOBMSG_TYPE_STRING) {
rule_error(cur, "Unexpected element type");
return -1;
}
}
if (cur_len) {
- dest = blobmsg_realloc_string_buffer(&b, cur_len);
+ dest = blobmsg_realloc_string_buffer(&b, cur_len + 1);
memcpy(dest + len, cur, cur_len);
len += cur_len;
}
if (args++ < 0)
continue;
+ if (blobmsg_type(cur) != BLOBMSG_TYPE_STRING) {
+ rule_error(attr, "Invalid argument in command");
+ return -1;
+ }
+
cmd_add_string(blobmsg_data(cur), msg);
}
bool found;
int ret;
+ if (blobmsg_type(cur) != BLOBMSG_TYPE_ARRAY ||
+ blobmsg_type(blobmsg_data(cur)) != BLOBMSG_TYPE_STRING) {
+ rule_error(cur, "Unexpected element type");
+ return -1;
+ }
+
ret = __rule_process_type(cur, msg, cmd, ARRAY_SIZE(cmd), &found);
if (found)
return ret;
name = blobmsg_data(blobmsg_data(cur));
- cmd_process_strings(cur, msg);
+ ret = cmd_process_strings(cur, msg);
+ if (ret)
+ return ret;
+
rule_handle_command(name, blob_data(b.head));
return 0;