{"record":{"id":"ad5c1c0c840224a7","repo":"ZhuLinsen/daily_stock_analysis","slug":"source-url-must-not-target-private-or-local-networ","errorCode":null,"errorMessage":"source url must not target private or local network addresses","messagePattern":"source url must not target private or local network addresses","errorType":"validation","errorClass":"IntelligenceServiceError","httpStatus":400,"severity":"error","filePath":"src/services/intelligence_service.py","lineNumber":412,"sourceCode":"            return\n        parsed = urlparse(raw_url)\n        if parsed.scheme.lower() not in {\"http\", \"https\"} or not parsed.netloc:\n            raise IntelligenceServiceError(\"source url must be an absolute http(s) URL\")\n        if parsed.username or parsed.password:\n            raise IntelligenceServiceError(\"source url must not contain credentials\")\n        hostname = (parsed.hostname or \"\").strip().lower().rstrip(\".\")\n        if not hostname:\n            raise IntelligenceServiceError(\"source url host is required\")\n        if hostname in _PRIVATE_HOSTNAMES or hostname.endswith(\".local\"):\n            raise IntelligenceServiceError(\"source url host is not allowed\")\n        has_public_address = False\n        try:\n            ip = ipaddress.ip_address(hostname)\n        except ValueError:\n            ip = None\n        if ip is not None:\n            if self._is_blocked_ip(ip):\n                raise IntelligenceServiceError(\"source url must not target private or local network addresses\")\n            return\n        try:\n            addr_infos = socket.getaddrinfo(hostname, None)\n        except OSError as exc:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\") from exc\n        if not addr_infos:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\")\n        for info in addr_infos:\n            try:\n                ip = ipaddress.ip_address(info[4][0])\n            except (IndexError, ValueError):\n                continue\n            if self._is_blocked_ip(ip):\n                raise IntelligenceServiceError(\"source url must not target private or local network addresses\")\n            has_public_address = True\n        if not has_public_address:\n            raise IntelligenceServiceError(f\"source url host DNS resolution failed: {hostname}\")\n","sourceCodeStart":394,"sourceCodeEnd":430,"githubUrl":"https://github.com/ZhuLinsen/daily_stock_analysis/blob/5159bd72e8373d215492dff122acc9d389e219c9/src/services/intelligence_service.py#L394-L430","documentation":"Error \"source url must not target private or local network addresses\" thrown in ZhuLinsen/daily_stock_analysis.","triggerScenarios":"Thrown at src/services/intelligence_service.py:412 when the library encounters an invalid state.","commonSituations":"Raised when an intelligence source URL resolves to a private or loopback address; occurs with hosts targeting internal networks, blocked to prevent SSRF.","solutions":["Do not use URLs pointing at private, loopback, or local network addresses for intelligence sources.","Point the source at the public feed URL instead of an internal address.","If an internal feed is required, route it through an approved proxy rather than allowing direct private access."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"5159bd72e8373d215492dff122acc9d389e219c9","analyzedAt":"2026-08-15T01:59:36.292Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}