This is an automated email from the ASF dual-hosted git repository.
tkobayas pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-drools.git
The following commit(s) were added to refs/heads/main by this push:
new 0d57e1b81c [incubator-kie-drools-6539] Parser throws exception if
condition has number with leading zeros (DRL10) (#6541)
0d57e1b81c is described below
commit 0d57e1b81cedbaffbc96e950fe0e56dfe39edf36
Author: Toshiya Kobayashi <[email protected]>
AuthorDate: Thu Dec 4 18:15:39 2025 +0900
[incubator-kie-drools-6539] Parser throws exception if condition has number
with leading zeros (DRL10) (#6541)
---
.../drools/drl/parser/antlr4/DRLExprParserTest.java | 11 +++++++++++
.../org/drools/drl/parser/antlr4/DRL10Expressions.g4 | 1 +
.../drools/model/codegen/execmodel/CompilerTest.java | 20 ++++++++++++++++++++
3 files changed, 32 insertions(+)
diff --git
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
index 4cbff01586..098e02b844 100644
---
a/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
+++
b/drools-drl/drools-drl-parser-tests/src/test/java/org/drools/drl/parser/antlr4/DRLExprParserTest.java
@@ -22,9 +22,11 @@ import java.util.Arrays;
import java.util.List;
import org.drools.drl.ast.descr.AtomicExprDescr;
+import org.drools.drl.ast.descr.BaseDescr;
import org.drools.drl.ast.descr.BindingDescr;
import org.drools.drl.ast.descr.ConnectiveType;
import org.drools.drl.ast.descr.ConstraintConnectiveDescr;
+import org.drools.drl.ast.descr.ExprConstraintDescr;
import org.drools.drl.ast.descr.RelationalExprDescr;
import org.drools.drl.parser.DrlExprParser;
import org.drools.drl.parser.DrlParser;
@@ -620,4 +622,13 @@ class DRLExprParserTest {
AtomicExprDescr right = (AtomicExprDescr) rel.getRight();
assertThat(right.getExpression()).isEqualTo("$list");
}
+
+ @Test
+ void octalDigit() {
+ final String source = "age == 013";
+ ConstraintConnectiveDescr result = parser.parse(source);
+ RelationalExprDescr relationalExprDescr = (RelationalExprDescr)
result.getDescrs().get(0);
+ AtomicExprDescr right = (AtomicExprDescr)
relationalExprDescr.getRight();
+ assertThat(right.getExpression()).isEqualTo("013");
+ }
}
diff --git
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4
index a022c96c12..a917719164 100644
---
a/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4
+++
b/drools-drl/drools-drl-parser/src/main/antlr4/org/drools/drl/parser/antlr4/DRL10Expressions.g4
@@ -113,6 +113,7 @@ literal
: STRING_LITERAL { helper.emit($STRING_LITERAL,
DroolsEditorType.STRING_CONST); }
| DRL_STRING_LITERAL { helper.emit($DRL_STRING_LITERAL,
DroolsEditorType.STRING_CONST); }
| DECIMAL_LITERAL { helper.emit($DECIMAL_LITERAL,
DroolsEditorType.NUMERIC_CONST); }
+ | OCT_LITERAL { helper.emit($OCT_LITERAL,
DroolsEditorType.NUMERIC_CONST); }
| DRL_BIG_INTEGER_LITERAL { helper.emit($DRL_BIG_INTEGER_LITERAL,
DroolsEditorType.NUMERIC_CONST); }
| HEX_LITERAL { helper.emit($HEX_LITERAL,
DroolsEditorType.NUMERIC_CONST); }
| FLOAT_LITERAL { helper.emit($FLOAT_LITERAL,
DroolsEditorType.NUMERIC_CONST); }
diff --git
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
index 1a8310ef71..4bad33ea75 100644
---
a/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
+++
b/drools-model/drools-model-codegen/src/test/java/org/drools/model/codegen/execmodel/CompilerTest.java
@@ -43,7 +43,9 @@ import org.drools.model.codegen.execmodel.domain.Result;
import org.drools.model.codegen.execmodel.domain.StockTick;
import org.drools.model.codegen.execmodel.domain.Toy;
import org.drools.model.codegen.execmodel.domain.Woman;
+import org.drools.modelcompiler.util.EvaluationUtil;
import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.params.ParameterizedTest;
@@ -3337,4 +3339,22 @@ public class CompilerTest extends BaseModelTest {
return 4;
}
}
+
+ @ParameterizedTest
+ @MethodSource("parameters")
+ public void octalDigit(RUN_TYPE runType) {
+ final String str =
+ "package org.example\n" +
+ "import " + Person.class.getCanonicalName() + ";" +
+ "rule r1 when\n" +
+ " Person( age == 013 )\n" +
+ "then\n" +
+ "end\n";
+
+ KieSession ksession = getKieSession(runType, str);
+
+ ksession.insert(new Person("John", 11)); // Octal 013 = Decimal 11
+ int fired = ksession.fireAllRules();
+ assertThat(fired).isEqualTo(1);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]