From eccf0edbba83c1603de0f709a6ac9a93d51933ca Mon Sep 17 00:00:00 2001 From: Yufeng He <40085740+he-yufeng@users.noreply.github.com> Date: Sat, 20 Jun 2026 01:26:52 +0800 Subject: [PATCH] fix: reject empty user_input_form items instead of raising IndexError Signed-off-by: Yufeng He <40085740+he-yufeng@users.noreply.github.com> --- .../easy_ui_based_app/variables/manager.py | 4 ++++ .../easy_ui_based_app/test_variables_manager.py | 14 ++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/api/core/app/app_config/easy_ui_based_app/variables/manager.py b/api/core/app/app_config/easy_ui_based_app/variables/manager.py index ddb500cccf5..79c7810eee5 100644 --- a/api/core/app/app_config/easy_ui_based_app/variables/manager.py +++ b/api/core/app/app_config/easy_ui_based_app/variables/manager.py @@ -45,6 +45,8 @@ class BasicVariablesConfigManager: # variables and external_data_tools for variables in config.get("user_input_form", []): + if not variables: + continue variable_type = list(variables.keys())[0] if variable_type == VariableEntityType.EXTERNAL_DATA_TOOL: variable = variables[variable_type] @@ -112,6 +114,8 @@ class BasicVariablesConfigManager: variables = [] for item in config["user_input_form"]: + if not item: + raise ValueError("Each item in user_input_form must be a non-empty object") key = list(item.keys())[0] # if key not in {"text-input", "select", "paragraph", "number", "external_data_tool"}: if key not in { diff --git a/api/tests/unit_tests/core/app/app_config/easy_ui_based_app/test_variables_manager.py b/api/tests/unit_tests/core/app/app_config/easy_ui_based_app/test_variables_manager.py index b82417cfedb..35e20620abf 100644 --- a/api/tests/unit_tests/core/app/app_config/easy_ui_based_app/test_variables_manager.py +++ b/api/tests/unit_tests/core/app/app_config/easy_ui_based_app/test_variables_manager.py @@ -70,6 +70,14 @@ class TestBasicVariablesConfigManagerConvert: assert len(variables) == 2 assert len(external) == 1 + def test_convert_empty_form_item_skipped(self): + config = {"user_input_form": [{}]} + + variables, external = BasicVariablesConfigManager.convert(config) + + assert variables == [] + assert external == [] + def test_convert_external_data_tool_without_config_skipped(self): config = { "user_input_form": [ @@ -109,6 +117,12 @@ class TestValidateVariablesAndSetDefaults: with pytest.raises(ValueError): BasicVariablesConfigManager.validate_variables_and_set_defaults(config) + def test_validate_empty_form_item_raises(self): + config = {"user_input_form": [{}]} + + with pytest.raises(ValueError): + BasicVariablesConfigManager.validate_variables_and_set_defaults(config) + def test_validate_missing_label_raises(self): config = {"user_input_form": [{VariableEntityType.TEXT_INPUT: {"variable": "name"}}]}