{"record":{"id":"242ff121ea7d6210","repo":"shadow1ng/fscan","slug":"fscan-target-host-or-url-is-required","errorCode":null,"errorMessage":"fscan: target host or URL is required","messagePattern":"fscan: target host or URL is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/fscan/scanner.go","lineNumber":347,"sourceCode":"\n\treturn core.RunScan(ctx, info, session)\n}\n\nfunc validateConfig(config Config, targets []Target) error {\n\tif len(targets) == 0 {\n\t\treturn fmt.Errorf(\"fscan: at least one target is required\")\n\t}\n\tfor _, name := range normalizePlugins(config.Plugins) {\n\t\tif !plugins.Exists(name) {\n\t\t\treturn fmt.Errorf(\"fscan: plugin %q not found\", name)\n\t\t}\n\t\tif !config.AllowUnsafePlugins && !IsSafePlugin(name) {\n\t\t\treturn fmt.Errorf(\"fscan: plugin %q is not enabled for embedded safe mode\", name)\n\t\t}\n\t}\n\tfor _, target := range targets {\n\t\tif strings.TrimSpace(target.Host) == \"\" && strings.TrimSpace(target.URL) == \"\" {\n\t\t\treturn fmt.Errorf(\"fscan: target host or URL is required\")\n\t\t}\n\t\tif strings.TrimSpace(target.Host) != \"\" && strings.TrimSpace(target.URL) != \"\" {\n\t\t\treturn fmt.Errorf(\"fscan: target cannot set both Host and URL\")\n\t\t}\n\t\tfor _, port := range target.Ports {\n\t\t\tif port < 1 || port > 65535 {\n\t\t\t\treturn fmt.Errorf(\"fscan: invalid port %d\", port)\n\t\t\t}\n\t\t}\n\t}\n\tfor _, port := range config.Ports {\n\t\tif port < 1 || port > 65535 {\n\t\t\treturn fmt.Errorf(\"fscan: invalid port %d\", port)\n\t\t}\n\t}\n\treturn nil\n}\n","sourceCodeStart":329,"sourceCodeEnd":365,"githubUrl":"https://github.com/shadow1ng/fscan/blob/95cc12e753bf43de7004e5aef42a9ffba3934303/pkg/fscan/scanner.go#L329-L365","documentation":"Per-target validation in pkg/fscan validateConfig: a Target entry has both an empty Host and an empty URL (whitespace-only counts as empty), so the target carries no address to connect to. It fires only after target-count and plugin checks passed, catching malformed Target structs built by the caller.","triggerScenarios":"Thrown at pkg/fscan/scanner.go:347 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Populate either Target.Host or Target.URL","Filter empty targets out of the list before scanning","Fix target-source parsing that produced blank entries"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"95cc12e753bf43de7004e5aef42a9ffba3934303","analyzedAt":"2026-09-06T17:07:30.094Z","contentChangedAt":"2026-09-06T17:07:30.094Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}