{"record":{"id":"af33aeea2ca04a90","repo":"projectdiscovery/nuclei","slug":"dialers-with-executionid-s-not-found-af33ae","errorCode":null,"errorMessage":"dialers with executionId %s not found","messagePattern":"dialers with executionId (.+?) not found","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"pkg/input/provider/list/hmap.go","lineNumber":175,"sourceCode":"\t\tmetaInput := contextargs.NewMetaInput()\n\t\tmetaInput.Input = URL\n\t\ti.setItem(metaInput)\n\t\treturn\n\t}\n\n\t// Check if input is ip or hostname\n\tif iputil.IsIP(urlx.Hostname()) {\n\t\tmetaInput := contextargs.NewMetaInput()\n\t\tmetaInput.Input = URL\n\t\ti.setItem(metaInput)\n\t\treturn\n\t}\n\n\tif i.ipOptions.ScanAllIPs {\n\t\t// scan all ips\n\t\tdialers := protocolstate.GetDialersWithId(executionId)\n\t\tif dialers == nil {\n\t\t\tpanic(\"dialers with executionId \" + executionId + \" not found\")\n\t\t}\n\n\t\tdnsData, err := dialers.Fastdialer.GetDNSData(urlx.Hostname())\n\t\tif err == nil {\n\t\t\tif (len(dnsData.A) + len(dnsData.AAAA)) > 0 {\n\t\t\t\tvar ips []string\n\t\t\t\tif i.ipOptions.IPV4 {\n\t\t\t\t\tips = append(ips, dnsData.A...)\n\t\t\t\t}\n\t\t\t\tif i.ipOptions.IPV6 {\n\t\t\t\t\tips = append(ips, dnsData.AAAA...)\n\t\t\t\t}\n\t\t\t\tfor _, ip := range ips {\n\t\t\t\t\tif ip == \"\" {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tmetaInput := contextargs.NewMetaInput()\n\t\t\t\t\tmetaInput.Input = URL","sourceCodeStart":157,"sourceCodeEnd":193,"githubUrl":"https://github.com/projectdiscovery/nuclei/blob/265b3a3dec374741614e342f813c10f8b38d2bb7/pkg/input/provider/list/hmap.go#L157-L193","documentation":"ListInputProvider.Set panicked because protocolstate.GetDialersWithId(executionId) returned nil for the given execution id. When ScanAllIPs is enabled, Set must resolve DNS via the per-execution Dialers (fastdialer + network policy); dialers are registered by protocolstate.Init(types.Options) keyed on Options.ExecutionId, so a missing entry means Init never ran or ran with a different id. The panic (not an error return) crashes the process.","triggerScenarios":"Embedding nuclei via lib/ SDK or calling Set() directly with -scan-all-ips style ipOptions before protocolstate.Init registered dialers for that executionId; passing a mismatched/empty executionId string between the caller and the one used during Init; calling Set after dialers were torn down for the id.","commonSituations":"SDK users constructing their own input provider instead of letting the runner set everything up; concurrent executions reusing one provider with per-run execution ids where one run skipped Init; upstream refactors that made ExecutionId mandatory when it used to be a single global dialer.","solutions":["Call protocolstate.Init(options) (the runner does this) with the same types.Options.ExecutionId you pass to Set before pushing inputs.","Prefer the standard path: let internal/runner create and drive the input provider so Init ordering is guaranteed.","Use protocolstate.ShouldInit(executionId) as a pre-check right before Set when ids are dynamic.","If you maintain a fork, consider converting this panic into an error return; meanwhile guard it explicitly."],"exampleFix":"// before\nprovider.Set(executionId, \"scanme.sh\") // panics: dialers never initialized\n\n// after\nif protocolstate.ShouldInit(executionId) {\n    if err := protocolstate.Init(opts); err != nil { // opts.ExecutionId == executionId\n        return err\n    }\n}\nprovider.Set(executionId, \"scanme.sh\")","handlingStrategy":"validation","validationCode":"if i.ipOptions.ScanAllIPs && protocolstate.ShouldInit(executionId) {\n    if err := protocolstate.Init(opts /* opts.ExecutionId == executionId */); err != nil {\n        return err\n    }\n}\nprovider.Set(executionId, target)","typeGuard":null,"tryCatchPattern":"// panic, not error: there is nothing to catch in-process; validate before calling.\n// In tests, use require/assert around the Set call so a panic names the failing line.","preventionTips":["Single source of truth for ExecutionId across Init/Set/Del.","Call protocolstate.Init before constructing or populating the input provider.","Prefer runner-managed input handling in SDK integrations."],"tags":["panic","dialers","input-provider","sdk","scan-all-ips"],"backgroundTag":null,"analyzedSha":"265b3a3dec374741614e342f813c10f8b38d2bb7","analyzedAt":"2026-08-15T20:05:51.855Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}