{"record":{"id":"1181b692d82a0fe3","repo":"apache/cassandra","slug":"maxtokenlength-must-be-greater-than-zero","errorCode":null,"errorMessage":"maxTokenLength must be greater than zero","messagePattern":"maxTokenLength must be greater than zero","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/java/org/apache/cassandra/index/sasi/analyzer/StandardTokenizerOptions.java","lineNumber":197,"sourceCode":"         * Set the min allowed token length.  Any token shorter\n         * than this is skipped.\n         */\n        public OptionsBuilder minTokenLength(int minTokenLength)\n        {\n            if (minTokenLength < 1)\n                throw new IllegalArgumentException(\"minTokenLength must be greater than zero\");\n            this.minTokenLength = minTokenLength;\n            return this;\n        }\n\n        /**\n         * Set the max allowed token length.  Any token longer\n         * than this is skipped.\n         */\n        public OptionsBuilder maxTokenLength(int maxTokenLength)\n        {\n            if (maxTokenLength < 1)\n                throw new IllegalArgumentException(\"maxTokenLength must be greater than zero\");\n            this.maxTokenLength = maxTokenLength;\n            return this;\n        }\n\n        public StandardTokenizerOptions build()\n        {\n            if(allTermsToLowerCase && allTermsToUpperCase)\n                throw new IllegalArgumentException(\"Options to normalize terms cannot be \" +\n                        \"both uppercase and lowercase at the same time\");\n\n            StandardTokenizerOptions options = new StandardTokenizerOptions();\n            options.setIgnoreStopTerms(ignoreStopTerms);\n            options.setStemTerms(stemTerms);\n            options.setLocale(locale);\n            options.setCaseSensitive(caseSensitive);\n            options.setAllTermsToLowerCase(allTermsToLowerCase);\n            options.setAllTermsToUpperCase(allTermsToUpperCase);\n            options.setMinTokenLength(minTokenLength);","sourceCodeStart":179,"sourceCodeEnd":215,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/index/sasi/analyzer/StandardTokenizerOptions.java#L179-L215","documentation":"StandardTokenizerOptions.OptionsBuilder.maxTokenLength requires a positive value; tokens longer than maxTokenLength are skipped during tokenization. Passing 0 or a negative number throws IllegalArgumentException.","triggerScenarios":"Building StandardAnalyzer options with .maxTokenLength(0) or negative, e.g. from an option map value 'token_length_max': '0'.","commonSituations":"Config mistakes where users intend 'unlimited' by using 0; string-to-int conversions of malformed options.","solutions":["Pass maxTokenLength >= 1","Omit maxTokenLength to use the default (e.g. Lucene's standard limit)","Ensure maxTokenLength >= minTokenLength when both are set"],"exampleFix":"// before\nbuilder.maxTokenLength(0).build();\n// after\nbuilder.maxTokenLength(255).build();","handlingStrategy":"validation","validationCode":"int max = Integer.parseInt(options.getOrDefault(\"token_length_max\", String.valueOf(DEFAULT)));\nif (max < 1) throw new IllegalArgumentException(\"maxTokenLength must be >= 1\");","typeGuard":null,"tryCatchPattern":"try { builder.maxTokenLength(max).build(); } catch (IllegalArgumentException e) { if (e.getMessage().contains(\"maxTokenLength\")) { builder.maxTokenLength(defaultMax).build(); } else throw e; }","preventionTips":["Never use 0 for 'unlimited' token length","Ensure maxTokenLength >= minTokenLength when both are set"],"tags":["sasi","tokenizer","options-builder","validation"],"backgroundTag":"value-out-of-range","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}