{"record":{"id":"3a19d571e9dc3d7f","repo":"projectdiscovery/nuclei","slug":"no-input-provider-found","errorCode":null,"errorMessage":"no input provider found","messagePattern":"no input provider found","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"internal/runner/runner.go","lineNumber":932,"sourceCode":"\t\t\tr.logAvailableTemplate(template.Path)\n\t\t}\n\t\tfor _, template := range store.Workflows() {\n\t\t\tr.logAvailableTemplate(template.Path)\n\t\t}\n\t}\n\n\tfinalTemplates := []*templates.Template{}\n\tfinalTemplates = append(finalTemplates, store.Templates()...)\n\tfinalTemplates = append(finalTemplates, store.Workflows()...)\n\n\tif len(finalTemplates) == 0 {\n\t\treturn nil, errors.New(\"no templates provided for scan\")\n\t}\n\n\t// pass input provider to engine\n\t// TODO: this should be not necessary after r.hmapInputProvider is removed + refactored\n\tif r.inputProvider == nil {\n\t\treturn nil, errors.New(\"no input provider found\")\n\t}\n\tresults := engine.ExecuteScanWithOpts(context.Background(), finalTemplates, r.inputProvider, r.options.DisableClustering)\n\treturn results, nil\n}\n\n// displayExecutionInfo prints parser stats, version info, and scan counts.\nfunc (r *Runner) displayExecutionInfo(store *loader.Store) {\n\t// Display parser stats for templates loaded into the store.\n\tstats.Display(templates.TemplateSyntaxWarningStats)\n\tstats.Display(templates.TemplateSyntaxErrorStats)\n\tstats.Display(templates.TemplateRuntimeWarningStats)\n\n\ttmplCount := len(store.Templates())\n\tworkflowCount := len(store.Workflows())\n\tif r.options.Verbose || (tmplCount == 0 && workflowCount == 0) {\n\t\t// Excluded-template stats are noisy during normal scans, but useful in verbose mode\n\t\t// and when no runnable templates remain.\n\t\tfor _, capability := range templates.AllCapabilities() {","sourceCodeStart":914,"sourceCodeEnd":950,"githubUrl":"https://github.com/projectdiscovery/nuclei/blob/265b3a3dec374741614e342f813c10f8b38d2bb7/internal/runner/runner.go#L914-L950","documentation":"ParseSMBTarget trims whitespace and rejects an empty input outright - the first guard in SMB path parsing. It usually means a blank line survived input processing and reached the SMB reader.","triggerScenarios":"An empty or whitespace-only string passed as an SMB target, e.g. trailing blank lines in a -l target file or a template variable that expands to nothing.","commonSituations":"Target files with trailing newlines or spaces; templated inputs where the path variable is unset.","solutions":["Strip blank lines from the target list before scanning","Ensure any variable feeding the SMB path resolves to a non-empty value","Quote and audit inputs when embedding nuclei"],"exampleFix":"# before: targets.txt ends with a blank line\n# after\ngrep -v '^[[:space:]]*$' targets.txt > targets.clean.txt","handlingStrategy":"validation","validationCode":"import \"strings\"\n\nfunc nonBlankSMBInput(s string) bool {\n    return strings.TrimSpace(s) != \"\"\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Trim and drop blank lines from target lists","Assert templated SMB paths expand to non-empty strings before scanning"],"tags":["smb","input","validation"],"backgroundTag":null,"analyzedSha":"265b3a3dec374741614e342f813c10f8b38d2bb7","analyzedAt":"2026-08-15T20:05:51.855Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}