Index: src/test/java/org/quartz/CronExpressionTest.java =================================================================== --- src/test/java/org/quartz/CronExpressionTest.java (revision 691) +++ src/test/java/org/quartz/CronExpressionTest.java (working copy) @@ -100,4 +100,25 @@ newExpression.getNextValidTimeAfter(new Date()); } + /* + * QUARTZ-574: Showing that storeExpressionVals correctly calculates the month number + */ + public void testQuartz574() { + try { + CronExpression cronExpression = new CronExpression("* * * * Foo ? "); + fail("Expected ParseException did not fire for non-existent month"); + } catch(ParseException pe) { + assertTrue("Incorrect ParseException thrown", + pe.getMessage().startsWith("Invalid Month value:")); + } + + try { + CronExpression cronExpression = new CronExpression("* * * * Jan-Foo ? "); + fail("Expected ParseException did not fire for non-existent month"); + } catch(ParseException pe) { + assertTrue("Incorrect ParseException thrown", + pe.getMessage().startsWith("Invalid Month value:")); + } + } + } Index: src/java/org/quartz/CronExpression.java =================================================================== --- src/java/org/quartz/CronExpression.java (revision 691) +++ src/java/org/quartz/CronExpression.java (working copy) @@ -446,7 +446,7 @@ int eval = -1; if (type == MONTH) { sval = getMonthNumber(sub) + 1; - if (sval < 0) { + if (sval <= 0) { throw new ParseException("Invalid Month value: '" + sub + "'", i); } if (s.length() > i + 3) { @@ -455,7 +455,7 @@ i += 4; sub = s.substring(i, i + 3); eval = getMonthNumber(sub) + 1; - if (eval < 0) { + if (eval <= 0) { throw new ParseException("Invalid Month value: '" + sub + "'", i); } }