owasp-amass/amass · error
alterations wordlist_file item is not a string
Error message
alterations wordlist_file item is not a string
What it means
loadAlterationSettings reads the 'alterations.wordlist_file' option from the config, which must be a YAML array of file paths. Each element is type-asserted to a string; if any element is not a string (e.g. a number, boolean, or nested map), the library aborts config loading with this error. It exists to fail fast on malformed alteration wordlist configuration instead of silently skipping entries.
Source
Thrown at config/brute.go:94
if !ok {
return fmt.Errorf("alterations enabled is not a bool")
}
c.Alterations = enabled
if !c.Alterations {
return nil
}
if wordlistPathRaw, ok := alterations["wordlists"]; ok {
wordlistPaths, ok := wordlistPathRaw.([]interface{})
if !ok {
return fmt.Errorf("alterations wordlist_file is not an array")
}
for _, wordlistPathRaw := range wordlistPaths {
wordlistPath, ok := wordlistPathRaw.(string)
if !ok {
return fmt.Errorf("alterations wordlist_file item is not a string")
}
absPath, err := c.AbsPathFromConfigDir(wordlistPath)
if err != nil {
return fmt.Errorf("failed to get absolute path for wordlist file: %w", err)
}
wordlist, err := GetListFromFile(absPath)
if err != nil {
return fmt.Errorf("unable to load the file in the alterations wordlist_file setting: %s: %v", absPath, err)
}
c.AltWordlist = append(c.AltWordlist, wordlist...)
}
}
c.AltWordlist = stringset.Deduplicate(c.AltWordlist)
return nilView on GitHub (pinned to 79299dce87)
Solutions
- Quote each wordlist path in the config so YAML parses it as a string: wordlist_file: ["2024.txt", "/usr/share/wordlists/common.txt"].
- Validate the parsed config structure with a YAML tool or by printing the loaded options to confirm wordlist_file is an array of strings.
- If paths are generated programmatically, convert them to strings before writing the config.
Example fix
// before (config.yaml)
alterations:
wordlist_file:
- 2024
// after
alterations:
wordlist_file:
- "2024.txt" Defensive patterns
Strategy: validation
Validate before calling
raw, _ := os.ReadFile(cfgPath)
var doc map[string]any
_ = yaml.Unmarshal(raw, &doc)
alt, _ := doc["alterations"].(map[string]any)
wlf, _ := alt["wordlist_file"].([]any)
for i, item := range wlf {
if _, ok := item.(string); !ok {
return fmt.Errorf("alterations.wordlist_file[%d] must be a string, got %T", i, item)
}
} Type guard
func isStringList(v []any) bool {
for _, item := range v {
if _, ok := item.(string); !ok {
return false
}
}
return true
} Try / catch
if err := cfg.LoadSettings(path); err != nil {
if strings.Contains(err.Error(), "wordlist_file item is not a string") {
// fix config or fall back to defaults
}
return err
} Prevention
- Quote every wordlist path in YAML configs
- Lint configs with yamllint before deployment
- Add a CI step that parses and validates config structure
- Avoid generating wordlist values programmatically without string conversion
When it happens
Trigger: A config file where 'alterations: wordlist_file:' contains a non-string item, e.g. wordlist_file: [123], [true], or a nested list. Produced by the type assertion wordlistPathRaw.(string) failing while iterating wordlistPaths.
Common situations: Hand-edited YAML without quotes where a value looks numeric (e.g. 2024.txt becomes a number); templated config generation injecting non-string values; copy-paste mistakes nesting a list inside the list.
Related errors
- datasources option is not a string
- resolvers section is not a list
- error mapping configuration settings to internal values: %v
- brute forcing cannot be performed without DNS resolution
- active enumeration cannot be performed without DNS resolutio
AI-assisted analysis of owasp-amass/amass@79299dce87 (2026-09-06).
Data as JSON: /api/errors/42a05c1bfaf3b8b7.
Report an issue: GitHub.