return utf8_is_valid(comment);
}
+int varlink_idl_qualified_symbol_name_is_valid(const char *name) {
+ const char *dot;
+
+ /* Validates a qualified symbol name (i.e. interface name, followed by a dot, followed by a symbol name) */
+
+ if (!name)
+ return false;
+
+ dot = strrchr(name, '.');
+ if (!dot)
+ return false;
+
+ if (!varlink_idl_symbol_name_is_valid(dot + 1))
+ return false;
+
+ _cleanup_free_ char *iface = strndup(name, dot - name);
+ if (!iface)
+ return -ENOMEM;
+
+ return varlink_idl_interface_name_is_valid(iface);
+}
+
static int varlink_idl_symbol_consistent(const VarlinkInterface *interface, const VarlinkSymbol *symbol, int level);
static int varlink_idl_field_consistent(
bool varlink_idl_symbol_name_is_valid(const char *name);
bool varlink_idl_interface_name_is_valid(const char *name);
+int varlink_idl_qualified_symbol_name_is_valid(const char *name);
+
int varlink_idl_consistent(const VarlinkInterface *interface, int level);
const VarlinkSymbol* varlink_idl_find_symbol(const VarlinkInterface *interface, VarlinkSymbolType type, const char *name);
assert_se(varlink_idl_field_name_is_valid("foo0foo"));
}
+TEST(qualified_symbol_name_is_valid) {
+ assert_se(varlink_idl_qualified_symbol_name_is_valid(NULL) == 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("") == 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("x") == 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("xxx") == 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("xxx.xxx") == 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("xxx.Xxx") > 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("xxx.xxx.XXX") > 0);
+ assert_se(varlink_idl_qualified_symbol_name_is_valid("xxx.xxx.0foo") == 0);
+}
+
TEST(validate_json) {
_cleanup_(varlink_interface_freep) VarlinkInterface *parsed = NULL;