From d06e1b5680fe3cf775c41ba784a55ad9e7a7de06 Mon Sep 17 00:00:00 2001 From: Nikita Date: Tue, 26 Jun 2018 16:06:36 +0300 Subject: [PATCH] Fixed - validation of cron expression parameter of RScheduledExecutorService.schedule method #1494 --- .../src/main/java/org/redisson/RedissonExecutorService.java | 3 +++ .../executor/RedissonScheduledExecutorServiceTest.java | 6 ++++++ 2 files changed, 9 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonExecutorService.java b/redisson/src/main/java/org/redisson/RedissonExecutorService.java index a5d0d66eb..15c2ffbed 100644 --- a/redisson/src/main/java/org/redisson/RedissonExecutorService.java +++ b/redisson/src/main/java/org/redisson/RedissonExecutorService.java @@ -850,6 +850,9 @@ public class RedissonExecutorService implements RScheduledExecutorService { byte[] classBody = getClassBody(task); byte[] state = encode(task); final Date startDate = cronSchedule.getExpression().getNextValidTimeAfter(new Date()); + if (startDate == null) { + throw new IllegalArgumentException("Wrong cron expression! Unable to calculate start date"); + } long startTime = startDate.getTime(); RemotePromise result = (RemotePromise) asyncScheduledServiceAtFixed.schedule(task.getClass().getName(), classBody, state, startTime, cronSchedule.getExpression().getCronExpression(), executorId, null); addListener(result); diff --git a/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java b/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java index 7788bfb96..2c66e532a 100644 --- a/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java +++ b/redisson/src/test/java/org/redisson/executor/RedissonScheduledExecutorServiceTest.java @@ -138,6 +138,12 @@ public class RedissonScheduledExecutorServiceTest extends BaseTest { assertThat(redisson.getAtomicLong("executed").get()).isEqualTo(2); } + @Test(expected = IllegalArgumentException.class) + public void testWrongCronExpression() throws InterruptedException, ExecutionException { + RScheduledExecutorService executor = redisson.getExecutorService("test"); + executor.schedule(new ScheduledRunnableTask("executed"), CronSchedule.of("0 44 12 19 JUN ? 2018")); + } + @Test public void testCronExpressionMultipleTasks() throws InterruptedException, ExecutionException { RScheduledExecutorService executor = redisson.getExecutorService("test");