{"record":{"id":"6c8b6fb2b66e9ecc","repo":"flowable/flowable-engine","slug":"increment-12","errorCode":null,"errorMessage":"Increment > 12 : ","messagePattern":"Increment > 12 : ","errorType":"exception","errorClass":"ParseException","httpStatus":null,"severity":"error","filePath":"modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CronExpression.java","lineNumber":719,"sourceCode":"            }\n        } else {\n            throw new ParseException(\"Unexpected character: \" + c, i);\n        }\n\n        return i;\n    }\n\n    private void checkIncrementRange(int incr, int type, int idxPos) throws ParseException {\n        if (incr > 59 && (type == SECOND || type == MINUTE)) {\n            throw new ParseException(\"Increment > 60 : \" + incr, idxPos);\n        } else if (incr > 23 && (type == HOUR)) {\n            throw new ParseException(\"Increment > 24 : \" + incr, idxPos);\n        } else if (incr > 31 && (type == DAY_OF_MONTH)) {\n            throw new ParseException(\"Increment > 31 : \" + incr, idxPos);\n        } else if (incr > 7 && (type == DAY_OF_WEEK)) {\n            throw new ParseException(\"Increment > 7 : \" + incr, idxPos);\n        } else if (incr > 12 && (type == MONTH)) {\n            throw new ParseException(\"Increment > 12 : \" + incr, idxPos);\n        }\n    }\n\n    protected int checkNext(int pos, String s, int val, int type) throws ParseException {\n\n        int end = -1;\n        int i = pos;\n\n        if (i >= s.length()) {\n            addToSet(val, end, -1, type);\n            return i;\n        }\n\n        char c = s.charAt(pos);\n\n        if (c == 'L') {\n            if (type == DAY_OF_WEEK) {\n                if (val < 1 || val > 7) {","sourceCodeStart":701,"sourceCodeEnd":737,"githubUrl":"https://github.com/flowable/flowable-engine/blob/d6d39ce1c69ff244f2d9dc6af756a9b95e865586/modules/flowable-engine-common/src/main/java/org/flowable/common/engine/impl/calendar/CronExpression.java#L701-L737","documentation":"Parse-time guard in CronExpression.checkIncrementRange: the step value in the month field exceeds 12, which is impossible for a 1-12 field, so the cron expression is rejected with the offending position.","triggerScenarios":"Expressions like \"0 0 0 1 1/13 ?\" where the month step exceeds 12.","commonSituations":"Attempts to express 'every 2 years' with a month step; generated expressions from configuration values not clamped to field ranges.","solutions":["Cap the month step at 12","Use the year field or a separate scheduling mechanism for multi-year periods","Validate the step value against 1-12 before constructing the CronExpression"],"exampleFix":"// before\nnew CronExpression(\"0 0 0 1 1/24 ?\");\n// after\nnew CronExpression(\"0 0 0 1 1 ? 2026/2\"); // or use a non-cron trigger","handlingStrategy":"validation","validationCode":"if (monthStep > 12) throw new IllegalArgumentException(\"Month step must be <= 12\");","typeGuard":null,"tryCatchPattern":"try {\n    CronExpression cron = new CronExpression(expr);\n} catch (ParseException e) {\n    if (e.getMessage().startsWith(\"Increment > 12\")) {\n        throw new ConfigurationException(\"Month step must be <= 12: \" + expr, e);\n    }\n    throw e;\n}","preventionTips":["Clamp month steps to 12","Use the year field (e.g. 2026/2) for multi-year recurrence","Sanitize configuration inputs at load time"],"tags":["cron","increment","quartz","scheduling"],"backgroundTag":"value-out-of-range","analyzedSha":"d6d39ce1c69ff244f2d9dc6af756a9b95e865586","analyzedAt":"2026-09-11T06:41:19.413Z","contentChangedAt":"2026-09-11T06:41:19.413Z","schemaVersion":2},"datasetVersion":"2026-09-18T11:17:12.947Z"}