From 1333802783901bde178a9ad651d3de265477e605 Mon Sep 17 00:00:00 2001 From: Chao Date: Sat, 30 May 2026 12:50:49 +0800 Subject: [PATCH] [ISSUE #8262] Harden UtilAll.isItTimeToDo and add tests --- .../org/apache/rocketmq/common/UtilAll.java | 22 ++++++++++++++++--- .../apache/rocketmq/common/UtilAllTest.java | 16 ++++++++++++++ 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java index e44f71589c0..748d0300753 100644 --- a/common/src/main/java/org/apache/rocketmq/common/UtilAll.java +++ b/common/src/main/java/org/apache/rocketmq/common/UtilAll.java @@ -117,13 +117,29 @@ public static long computeElapsedTimeMilliseconds(final long beginTime) { } public static boolean isItTimeToDo(final String when) { + if (StringUtils.isBlank(when)) { + return false; + } + String[] whiles = when.split(";"); if (whiles.length > 0) { Calendar now = Calendar.getInstance(); + int nowHour = now.get(Calendar.HOUR_OF_DAY); for (String w : whiles) { - int nowHour = Integer.parseInt(w); - if (nowHour == now.get(Calendar.HOUR_OF_DAY)) { - return true; + if (StringUtils.isBlank(w)) { + continue; + } + String trimmed = w.trim(); + try { + int hour = Integer.parseInt(trimmed); + if (hour < 0 || hour > 23) { + continue; + } + if (hour == nowHour) { + return true; + } + } catch (NumberFormatException ignored) { + // Ignore invalid hour tokens to avoid breaking scheduled tasks. } } } diff --git a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java index a2b498f0770..3fbb239d9ea 100644 --- a/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java +++ b/common/src/test/java/org/apache/rocketmq/common/UtilAllTest.java @@ -23,6 +23,7 @@ import java.net.UnknownHostException; import java.nio.ByteBuffer; import java.util.Arrays; +import java.util.Calendar; import java.util.Collections; import java.util.List; import java.util.Properties; @@ -34,6 +35,7 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.within; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; public class UtilAllTest { @@ -151,6 +153,20 @@ public void testSplit() { assertEquals(Collections.EMPTY_LIST, UtilAll.split("", comma)); } + @Test + public void testIsItTimeToDo() { + int currentHour = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); + assertTrue(UtilAll.isItTimeToDo(String.valueOf(currentHour))); + assertTrue(UtilAll.isItTimeToDo("foo; " + currentHour + " ; 25")); + assertTrue(UtilAll.isItTimeToDo(" " + currentHour + " ")); + + assertFalse(UtilAll.isItTimeToDo(null)); + assertFalse(UtilAll.isItTimeToDo("")); + assertFalse(UtilAll.isItTimeToDo(" ; ")); + assertFalse(UtilAll.isItTimeToDo("not_a_number")); + assertFalse(UtilAll.isItTimeToDo("99")); + } + static class DemoConfig { private int demoWidth = 0; private int demoLength = 0;