{"record":{"id":"f08dbf07fa87cec4","repo":"projectdiscovery/subfinder","slug":"could-not-init-multi-rate-limiter-for-s-s","errorCode":null,"errorMessage":"could not init multi rate limiter for %s: %s","messagePattern":"could not init multi rate limiter for (.+?): (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"pkg/passive/passive.go","lineNumber":68,"sourceCode":"\treturn a.EnumerateSubdomainsWithCtx(context.Background(), domain, proxy, rateLimit, timeout, maxEnumTime, options...)\n}\n\n// EnumerateSubdomainsWithCtx enumerates all the subdomains for a given domain\nfunc (a *Agent) EnumerateSubdomainsWithCtx(ctx context.Context, domain string, proxy string, rateLimit int, timeout int, maxEnumTime time.Duration, options ...EnumerateOption) chan subscraping.Result {\n\tresults := make(chan subscraping.Result)\n\n\tgo func() {\n\t\tdefer close(results)\n\n\t\tvar enumerateOptions EnumerationOptions\n\t\tfor _, enumerateOption := range options {\n\t\t\tenumerateOption(&enumerateOptions)\n\t\t}\n\n\t\tmultiRateLimiter, err := a.buildMultiRateLimiter(ctx, rateLimit, enumerateOptions.customRateLimiter)\n\t\tif err != nil {\n\t\t\tresults <- subscraping.Result{\n\t\t\t\tType: subscraping.Error, Error: fmt.Errorf(\"could not init multi rate limiter for %s: %s\", domain, err),\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tsession, err := subscraping.NewSession(domain, proxy, multiRateLimiter, timeout)\n\t\tif err != nil {\n\t\t\tresults <- subscraping.Result{\n\t\t\t\tType: subscraping.Error, Error: fmt.Errorf(\"could not init passive session for %s: %s\", domain, err),\n\t\t\t}\n\t\t\treturn\n\t\t}\n\t\tdefer session.Close()\n\t\tsession.MaxResults = enumerateOptions.maxResults\n\t\tsession.MaxResponseBodySize = enumerateOptions.maxResponseBodySize\n\n\t\tctx, cancel := context.WithTimeout(ctx, maxEnumTime)\n\n\t\twg := &sync.WaitGroup{}\n\t\t// Run each source in parallel on the target domain","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/projectdiscovery/subfinder/blob/7a0b91f0fac01b62c65328bd771a3560ae611d6a/pkg/passive/passive.go#L50-L86","documentation":"Runtime error emitted on the results channel by Agent.EnumerateSubdomainsWithCtx when buildMultiRateLimiter fails for a domain — typically because the configured rate limit string or custom per-source limiter cannot be parsed/initialized. The domain and the underlying error are interpolated into the message, and enumeration for that domain is aborted (the goroutine returns after pushing a subscraping.Error result).","triggerScenarios":"Thrown at pkg/passive/passive.go:68 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Inspect the trailing %s in the message — it carries the underlying limiter initialization error (e.g. an unparseable rate-limit spec)","Fix or remove the -rl/rls rate-limit configuration so a valid MultiLimiter can be built","Since the error arrives as a Result of Type Error on the channel, drain the channel and surface the error to the user instead of treating the run as complete"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"7a0b91f0fac01b62c65328bd771a3560ae611d6a","analyzedAt":"2026-09-06T23:52:02.109Z","contentChangedAt":"2026-09-06T23:52:02.109Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}