From 395cdf4ba5fcd42b120a913d940c50066bae6fb2 Mon Sep 17 00:00:00 2001 From: yuluo-yx Date: Sun, 9 Aug 2026 12:21:22 +0800 Subject: [PATCH] fix(filter): convert boolean string operands safely --- .../filter/expression/ComparisonExpression.java | 2 +- .../org/apache/rocketmq/filter/ExpressionTest.java | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java b/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java index 14fd7045b41..4d25f4cb774 100644 --- a/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java +++ b/filter/src/main/java/org/apache/rocketmq/filter/expression/ComparisonExpression.java @@ -536,7 +536,7 @@ protected static int __compare(Comparable lv, Comparable rv, boolean convertStri try { if (lc == Boolean.class) { if (convertStringExpressions && rc == String.class) { - lv = Boolean.valueOf((String) lv).booleanValue(); + rv = Boolean.valueOf((String) rv); } else { return -1; } diff --git a/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java b/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java index df883458ed6..5ea1ae132f0 100644 --- a/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java +++ b/filter/src/test/java/org/apache/rocketmq/filter/ExpressionTest.java @@ -598,6 +598,17 @@ public void testEvaluate_boolean() throws Exception { eval(expression, context, Boolean.FALSE); } + @Test + public void testEvaluate_booleanConstantComparedToStringProperty() throws Exception { + EvaluationContext trueContext = genContext(KeyValue.c("a", "true")); + EvaluationContext falseContext = genContext(KeyValue.c("a", "false")); + + eval(genExp("TRUE=a"), trueContext, Boolean.TRUE); + eval(genExp("TRUE<>a"), falseContext, Boolean.TRUE); + eval(genExp("FALSE=a"), falseContext, Boolean.TRUE); + eval(genExp("FALSE<>a"), trueContext, Boolean.TRUE); + } + @Test public void testEvaluate_equal() throws Exception { Expression expression = genExp(equalExpression);