Browse Source

Merge pull request #17490 from robfram/homogenize-check-prop-names

Fix non-valid characters for `input_action`
Rémi Verschelde 7 years ago
parent
commit
1d07830182
1 changed files with 13 additions and 4 deletions
  1. 13 4
      editor/project_settings_editor.cpp

+ 13 - 4
editor/project_settings_editor.cpp

@@ -123,6 +123,15 @@ void ProjectSettingsEditor::_notification(int p_what) {
 	}
 }
 
+static bool _validate_action_name(const String &p_name) {
+	const CharType *cstr = p_name.c_str();
+	for (int i = 0; cstr[i]; i++)
+		if (cstr[i] == '/' || cstr[i] == ':' || cstr[i] == '"' ||
+				cstr[i] == '=' || cstr[i] == '\\' || cstr[i] < 32)
+			return false;
+	return true;
+}
+
 void ProjectSettingsEditor::_action_selected() {
 
 	TreeItem *ti = input_editor->get_selected();
@@ -145,12 +154,12 @@ void ProjectSettingsEditor::_action_edited() {
 	if (new_name == old_name)
 		return;
 
-	if (new_name.find("/") != -1 || new_name.find(":") != -1 || new_name.find("\"") != -1 || new_name == "") {
+	if (new_name == "" || !_validate_action_name(new_name)) {
 
 		ti->set_text(0, old_name);
 		add_at = "input/" + old_name;
 
-		message->set_text(TTR("Invalid action (anything goes but '/', ':' or '\"')."));
+		message->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'"));
 		message->popup_centered(Size2(300, 100) * EDSCALE);
 		return;
 	}
@@ -838,9 +847,9 @@ void ProjectSettingsEditor::_action_check(String p_action) {
 		action_add->set_disabled(true);
 	} else {
 
-		if (p_action.find("/") != -1 || p_action.find(":") != -1 || p_action.find("\"") != -1) {
+		if (!_validate_action_name(p_action)) {
 
-			action_add_error->set_text(TTR("Can't contain '/', ':' or '\"'"));
+			action_add_error->set_text(TTR("Invalid action name. it cannot be empty nor contain '/', ':', '=', '\\' or '\"'"));
 			action_add_error->show();
 			action_add->set_disabled(true);
 			return;