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]

Reply via email to