{"record":{"id":"e9390b6ac3c026a9","repo":"theonedev/onedev","slug":"cannot-match-on-empty-string-e9390b","errorCode":null,"errorMessage":"Cannot match on empty string.","messagePattern":"Cannot match on empty string\\.","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"server-core/src/main/java/org/eclipse/jgit/revwalk/filter/CommitterRevFilter.java","lineNumber":41,"sourceCode":"public class CommitterRevFilter {\n\t/**\n\t * Create a new committer filter.\n\t * <p>\n\t * An optimized substring search may be automatically selected if the\n\t * pattern does not contain any regular expression meta-characters.\n\t * <p>\n\t * The search is performed using a case-insensitive comparison. The\n\t * character encoding of the commit message itself is not respected. The\n\t * filter matches on raw UTF-8 byte sequences.\n\t *\n\t * @param pattern\n\t *            regular expression pattern to match.\n\t * @return a new filter that matches the given expression against the author\n\t *         name and address of a commit.\n\t */\n\tpublic static RevFilter create(String pattern) {\n\t\tif (pattern.length() == 0)\n\t\t\tthrow new IllegalArgumentException(JGitText.get().cannotMatchOnEmptyString);\n\t\tif (SubStringRevFilter.safe(pattern))\n\t\t\treturn new SubStringSearch(pattern);\n\t\treturn new PatternSearch(pattern);\n\t}\n\n\tprivate CommitterRevFilter() {\n\t\t// Don't permit us to be created.\n\t}\n\n\tstatic RawCharSequence textFor(RevCommit cmit) {\n\t\tfinal byte[] raw = cmit.getRawBuffer();\n\t\tfinal int b = RawParseUtils.committer(raw, 0);\n\t\tif (b < 0)\n\t\t\treturn RawCharSequence.EMPTY;\n\t\tfinal int e = RawParseUtils.nextLF(raw, b, '>');\n\t\treturn new RawCharSequence(raw, b, e);\n\t}\n","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/theonedev/onedev/blob/d44925c47c37992c828ea673a5f9620539bc3ff2/server-core/src/main/java/org/eclipse/jgit/revwalk/filter/CommitterRevFilter.java#L23-L59","documentation":"CommitterRevFilter.create(String) throws IllegalArgumentException when given an empty pattern string. Committer matching with an empty expression would match every commit, so JGit rejects it as a programming error.","triggerScenarios":"Calling CommitterRevFilter.create(\"\") — e.g. an empty search term passed straight from user input or an unset config default.","commonSituations":"Search forms submitted blank; scripts building commit queries with optional committer criteria that defaulted to \"\" rather than being omitted.","solutions":["Check pattern.length() > 0 before calling create; omit the filter entirely when empty","Trim/validate user input at the entry point","Represent 'no committer filter' with null or Optional instead of an empty string"],"exampleFix":"// before\nRevFilter f = CommitterRevFilter.create(pattern);\n// after\nif (pattern.isEmpty()) {\n    return RevFilter.ALL; // or skip adding the filter\n}\nRevFilter f = CommitterRevFilter.create(pattern);","handlingStrategy":"validation","validationCode":"String p = userInput == null ? \"\" : userInput.trim();\nif (p.isEmpty()) { throw new IllegalArgumentException(\"committer pattern must not be empty\"); }","typeGuard":"boolean validPattern(String s) { return s != null && !s.trim().isEmpty(); }","tryCatchPattern":"try {\n    RevFilter f = CommitterRevFilter.create(pattern);\n} catch (IllegalArgumentException e) {\n    // use RevFilter.ALL or surface a validation message\n}","preventionTips":["Never pass empty strings as match patterns; use null/Optional for 'absent'","Validate at the input boundary (CLI args, form fields)","Include committer-pattern emptiness in input validation tests"],"tags":["jgit","revfilter","illegal-argument","empty-string"],"backgroundTag":"empty-required-field","analyzedSha":"d44925c47c37992c828ea673a5f9620539bc3ff2","analyzedAt":"2026-09-06T07:18:27.995Z","contentChangedAt":"2026-09-06T07:18:27.995Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}