projectdiscovery/subfinder · error
%v
Error message
%v
What it means
API-level error from the domains.project passive source: the JSON response decoded successfully but contained a non-empty Error field, which is passed through verbatim as '%v'. It indicates the service reported a problem (e.g. invalid domain or upstream failure) even though the HTTP request itself completed.
Solutions
- Read the passed-through error string from domains.project to identify the cause
- Confirm the queried domain is well-formed and resolvable by the service
- Retry later if the message suggests a transient upstream issue
- Ignore this source for the affected domain and continue with other passive sources
Defensive patterns
Strategy: fallback
When it happens
Trigger: Thrown at pkg/subscraping/sources/domainsproject/domainsproject.go:89 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of projectdiscovery/subfinder@7a0b91f0fa (2026-09-06).
Data as JSON: /api/errors/3d384063d4c42fde.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/subscraping/sources/domainsproject/domainsproject.go:89
defer func() {
if err := resp.Body.Close(); err != nil {
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
s.errors++
}
}()
var response domainsProjectResponse
err = jsoniter.NewDecoder(resp.Body).Decode(&response)
if err != nil {
results <- subscraping.Result{Source: s.Name(), Type: subscraping.Error, Error: err}
s.errors++
return
}
if response.Error != "" {
results <- subscraping.Result{
Source: s.Name(), Type: subscraping.Error, Error: fmt.Errorf("%v", response.Error),
}
s.errors++
return
}
for _, subdomain := range response.Domains {
if !strings.HasPrefix(subdomain, ".") {
select {
case <-ctx.Done():
return
case results <- subscraping.Result{Source: s.Name(), Type: subscraping.Subdomain, Value: subdomain}:
s.results++
}
}
}
}()
return resultsView on GitHub (pinned to 7a0b91f0fa)