{"record":{"id":"ed2b89ca3f5e8279","repo":"epi052/feroxbuster","slug":"did-not-find-any-words-in","errorCode":null,"errorMessage":"Did not find any words in {}","messagePattern":"Did not find any words in (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/main.rs","lineNumber":318,"sourceCode":"                        if single_local_source && Path::new(SECONDARY_WORDLIST).exists() {\n                            eprintln!(\"Found wordlist in secondary location\");\n                            append_words_from_path(SECONDARY_WORDLIST, &mut words, &mut seen)?;\n                        } else {\n                            return Err(err);\n                        }\n                    }\n                }\n            }\n        }\n\n        Arc::new(words)\n    };\n\n    if words.len() <= 1 {\n        // the check is now <= 1 due to the initial empty string added in 2.6.0\n        // 1 -> empty wordlist\n        // 0 -> error\n        bail!(\"Did not find any words in {}\", config.wordlist.join(\", \"));\n    }\n\n    // spawn all event handlers, expect back a JoinHandle and a *Handle to the specific event\n    let (stats_task, stats_handle) = StatsHandler::initialize(config.clone());\n    let (filters_task, filters_handle) = FiltersHandler::initialize();\n    let (out_task, out_handle) =\n        TermOutHandler::initialize(config.clone(), stats_handle.tx.clone());\n\n    // bundle up all the disparate handles and JoinHandles (tasks)\n    let handles = Arc::new(Handles::new(\n        stats_handle,\n        filters_handle,\n        out_handle,\n        config.clone(),\n        words,\n    ));\n\n    let (scan_task, scan_handle) = ScanHandler::initialize(handles.clone());","sourceCodeStart":300,"sourceCodeEnd":336,"githubUrl":"https://github.com/epi052/feroxbuster/blob/1f595dab5c76858d5a14fbc47dabf2563d729c62/src/main.rs#L300-L336","documentation":"After loading the wordlist (file or remote), wrapped_main checks if words.len() <= 1; since 2.6.0 an initial empty string is added, so 1 means an empty wordlist and 0 an error. Either way there are no words to scan with, so it bails naming the wordlist source(s).","triggerScenarios":"--wordlist points at an empty file, a file containing only blank lines/comments filtered out, or a remote wordlist whose body produced zero usable entries.","commonSituations":"Typos in the local wordlist path resolved via config to an empty file, a downloaded wordlist that was actually an HTML error page with no valid lines, or pipes/filters (e.g. --filter-status pipelines) emptying the list.","solutions":["Check the wordlist file exists and is non-empty (wc -l wordlist.txt)","Confirm the downloaded content is the actual wordlist, not an error page","Point --wordlist at a known-good list (e.g. raft/seclists)","Remove filters or transformations that strip all entries"],"exampleFix":"// before\nferox -u https://t.com --wordlist ./empty.txt\n// after\nferox -u https://t.com --wordlist /usr/share/seclists/Discovery/Web-Content/common.txt","handlingStrategy":"validation","validationCode":"const lines = fs.readFileSync(wordlistPath, 'utf8').split('\\n').filter(l => l.trim()); if (lines.length === 0) throw new Error('wordlist is empty');","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Run wc -l on wordlists before use","Confirm downloaded wordlists are not HTML error pages","Keep known-good wordlists locally and reference them explicitly"],"tags":["wordlist","empty-input","configuration"],"backgroundTag":"empty-required-field","analyzedSha":"1f595dab5c76858d5a14fbc47dabf2563d729c62","analyzedAt":"2026-09-13T19:33:06.208Z","contentChangedAt":"2026-09-13T19:33:06.208Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}