diff --git a/backend/packages/harness/deerflow/community/serper/tools.py b/backend/packages/harness/deerflow/community/serper/tools.py index 005a3090e..9f960981d 100644 --- a/backend/packages/harness/deerflow/community/serper/tools.py +++ b/backend/packages/harness/deerflow/community/serper/tools.py @@ -149,7 +149,10 @@ def _safe_public_url(value: object) -> str: if not isinstance(value, str): return "" url = value.strip() - parsed = urlparse(url) + try: + parsed = urlparse(url) + except ValueError: + return "" if parsed.scheme not in {"http", "https"} or not parsed.netloc or not parsed.hostname: return "" diff --git a/backend/tests/test_serper_tools.py b/backend/tests/test_serper_tools.py index 7df5311ec..f1bbddc9d 100644 --- a/backend/tests/test_serper_tools.py +++ b/backend/tests/test_serper_tools.py @@ -269,6 +269,11 @@ class TestSafePublicUrl: assert _safe_public_url("http://[::ffff:127.0.0.1]/x.jpg") == "" + def test_malformed_ipv6_url_does_not_raise(self): + from deerflow.community.serper.tools import _safe_public_url + + assert _safe_public_url("http://[::1/i.jpg") == "" + def test_non_http_scheme_is_filtered(self): from deerflow.community.serper.tools import _safe_public_url