From 8f76c3e716a0e8ae3bb0388511bb40b265f6ce9f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Efe=20G=C3=B6kdemir?= Date: Thu, 24 Sep 2026 08:40:50 +0300 Subject: [PATCH] fix: reject empty shared subscription filters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Efe Gökdemir --- .../src/main/java/org/apache/bifromq/util/TopicUtil.java | 3 +++ .../src/test/java/org/apache/bifromq/util/TopicUtilsTest.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/bifromq-util/src/main/java/org/apache/bifromq/util/TopicUtil.java b/bifromq-util/src/main/java/org/apache/bifromq/util/TopicUtil.java index 73288fd49..21f3e0028 100644 --- a/bifromq-util/src/main/java/org/apache/bifromq/util/TopicUtil.java +++ b/bifromq-util/src/main/java/org/apache/bifromq/util/TopicUtil.java @@ -110,6 +110,9 @@ public static boolean isValidTopicFilter(String topicFilter, int maxLevelLength, topicLevelLength = 0; // skip one separator to real topicFilter start pos i++; + if (i >= topicFilter.length()) { + return false; + } } int startIdx = i; int level = 1; diff --git a/bifromq-util/src/test/java/org/apache/bifromq/util/TopicUtilsTest.java b/bifromq-util/src/test/java/org/apache/bifromq/util/TopicUtilsTest.java index 25b096a83..2ea138fa2 100644 --- a/bifromq-util/src/test/java/org/apache/bifromq/util/TopicUtilsTest.java +++ b/bifromq-util/src/test/java/org/apache/bifromq/util/TopicUtilsTest.java @@ -132,7 +132,7 @@ public void testIsValidTopicFilter() { assertTrue(TopicUtil.isValidTopicFilter("$oshare", 10, 4, 100)); assertTrue(TopicUtil.isValidTopicFilter("$shared/", 10, 4, 10)); assertTrue(TopicUtil.isValidTopicFilter("$oshared/", 10, 4, 100)); - assertTrue(TopicUtil.isValidTopicFilter("$share/g/", 10, 4, 100)); + assertFalse(TopicUtil.isValidTopicFilter("$share/g/", 10, 4, 100)); assertTrue(TopicUtil.isValidTopicFilter("$share/g//", 10, 4, 100)); assertFalse(TopicUtil.isValidTopicFilter("$share/g/abcdef/", 5, 4, 10)); assertFalse(TopicUtil.isValidTopicFilter("$share/g/1/2/3/4/5", 5, 4, 255));