projectdiscovery/subfinder · error
response-size-read cannot be negative
Error message
response-size-read cannot be negative
What it means
validateOptions enforces that the response-body read size limit (response-size-read) is not negative. Negative MaxResponseBodySize is not a valid byte cap, so option validation fails before any HTTP requests are made.
Solutions
- Provide a non-negative byte value for -response-size-read
- Remove the flag to use the library default limit
- If unlimited reads are intended, use the documented option for disabling the cap rather than a negative number
Example fix
// before subfinder -d example.com -response-size-read -1024 // after subfinder -d example.com -response-size-read 1048576
Defensive patterns
Strategy: validation
Validate before calling
if maxBodySize < 0 {
return fmt.Errorf("response-size-read must be >= 0, got %d", maxBodySize)
} Type guard
func validBodySize(n int) bool { return n >= 0 } Try / catch
opts, err := runner.ParseOptions()
if err != nil && strings.Contains(err.Error(), "response-size-read cannot be negative") {
// correct the flag and re-parse
} Prevention
- Pass non-negative byte sizes to -response-size-read
- Don't use negative numbers to mean 'unlimited'
- Sanitize values templated into scripts
When it happens
Trigger: Passing -response-size-read with a negative value on the CLI, or setting Options.MaxResponseBodySize < 0 in code before ParseOptions.
Common situations: Automation scripts templating sizes with values that default to -1; misunderstanding the flag as 'unlimited' by using negative numbers (unlimited is configured differently).
Understand the failure class
Background: "unknown output mode", "invalid value for flag", "expects true/false": fixing invalid flag value errors in CLI tools — this error's family across 24 libraries.
Related errors
AI-assisted analysis of projectdiscovery/subfinder@7a0b91f0fa (2026-09-06).
Data as JSON: /api/errors/0daa9871670bedaa.
Report an issue: GitHub.
Appendix: source
Thrown at pkg/runner/validate.go:50
return errors.New("threads cannot be zero")
}
if options.Timeout == 0 {
return errors.New("timeout cannot be zero")
}
// Always remove wildcard with hostip
if options.HostIP && !options.RemoveWildcard {
return errors.New("hostip flag must be used with RemoveWildcard option")
}
// The per-source results limit cannot be negative.
if options.MaxResults < 0 {
return fmt.Errorf("max-results cannot be negative")
}
// The response body size limit cannot be negative.
if options.MaxResponseBodySize < 0 {
return fmt.Errorf("response-size-read cannot be negative")
}
if options.Match != nil {
options.matchRegexes = make([]*regexp.Regexp, len(options.Match))
var err error
for i, re := range options.Match {
if options.matchRegexes[i], err = regexp.Compile(stripRegexString(re)); err != nil {
return errors.New("invalid value for match regex option")
}
}
}
if options.Filter != nil {
options.filterRegexes = make([]*regexp.Regexp, len(options.Filter))
var err error
for i, re := range options.Filter {
if options.filterRegexes[i], err = regexp.Compile(stripRegexString(re)); err != nil {
return errors.New("invalid value for filter regex option")
}View on GitHub (pinned to 7a0b91f0fa)