From 5000079cbe26d8e95df644b345548309894835d4 Mon Sep 17 00:00:00 2001 From: urbnywrt Date: Fri, 15 May 2026 00:05:03 +0300 Subject: [PATCH] fix: guard against empty YAML and missing proxy name in expander Co-Authored-By: Claude Sonnet 4.6 --- app/expander.py | 4 ++-- app/tests/test_expander.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/app/expander.py b/app/expander.py index 6e1e101..0a7afb7 100644 --- a/app/expander.py +++ b/app/expander.py @@ -14,13 +14,13 @@ def filter_proxy(proxy: dict) -> dict: def expand_config(base_yaml: str, provider_proxies: dict[str, list[dict]]) -> str: - cfg = yaml.safe_load(base_yaml) + cfg = yaml.safe_load(base_yaml) or {} all_proxies = list(cfg.get("proxies") or []) provider_to_names: dict[str, list[str]] = {} for provider_name, proxies in provider_proxies.items(): - filtered = [filter_proxy(p) for p in proxies] + filtered = [filter_proxy(p) for p in proxies if "name" in p] provider_to_names[provider_name] = [p["name"] for p in filtered] all_proxies.extend(filtered) diff --git a/app/tests/test_expander.py b/app/tests/test_expander.py index 5369bb6..3a7ee8c 100644 --- a/app/tests/test_expander.py +++ b/app/tests/test_expander.py @@ -149,3 +149,27 @@ def test_build_mihomo_config_no_providers(): result = build_mihomo_config(["proxies: []"], "s") cfg = yaml.safe_load(result) assert "proxy-providers" not in cfg + + +def test_expand_config_skips_proxies_without_name(): + result = expand_config(BASE_YAML, {"provider1": [ + {"type": "ss", "server": "1.2.3.4", "port": 443}, # no "name" + {"name": "valid-node", "type": "ss", "server": "5.6.7.8", "port": 443}, + ]}) + cfg = yaml.safe_load(result) + names = [p["name"] for p in cfg["proxies"]] + assert "valid-node" in names + assert len(names) == 1 + + +def test_build_mihomo_config_skips_malformed_yaml(): + valid_yaml = """ +proxy-providers: + p1: + type: http + url: https://example.com/sub + interval: 3600 +""" + result = build_mihomo_config([valid_yaml, ":: invalid yaml ::: {{{"], "s") + cfg = yaml.safe_load(result) + assert "p1" in cfg["proxy-providers"]