[jboss-svn-commits] JBL Code SVN: r25865 - in labs/jbossrules/trunk/drools-compiler/src: test/java/org/drools/integrationtests and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Mar 28 01:46:01 EDT 2009


Author: mark.proctor at jboss.com
Date: 2009-03-28 01:46:01 -0400 (Sat, 28 Mar 2009)
New Revision: 25865

Modified:
   labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
Log:
JBRULES-2022 syntax error in modify block causes OutOfBounds in consequence builder
-Added END check, which should hopefully catch any bad syntax

Modified: labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2009-03-28 05:15:41 UTC (rev 25864)
+++ labs/jbossrules/trunk/drools-compiler/src/main/java/org/drools/rule/builder/dialect/java/JavaConsequenceBuilder.java	2009-03-28 05:46:01 UTC (rev 25865)
@@ -234,6 +234,16 @@
 
             return;
         }
+        
+        if ( d.getEnd() <= 0 ) {
+            // not correctly parse
+            context.getErrors().add( new DescrBuildError( context.getParentDescr(),
+                                                          context.getRuleDescr(),
+                                                          originalCode,
+                                                          "Incorrect syntax for expression: " + d.getModifyExpression() + "\n" ) );
+
+            return;
+        }        
         String retString = ClassUtils.canonicalName( ret );
 
         // adding modify expression
@@ -246,7 +256,7 @@
         consequence.append( "; " );
         // adding the modifyRetract call:
         consequence.append( "modifyRetract( __obj__ ); " );
-
+        
         // the following is a hack to preserve line breaks.
         String originalBlock = originalCode.substring( d.getStart() - 1,
                                                        d.getEnd() );

Modified: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-03-28 05:15:41 UTC (rev 25864)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/MiscTest.java	2009-03-28 05:46:01 UTC (rev 25865)
@@ -512,7 +512,57 @@
         }
         assertTrue( kbuilder.hasErrors() );
     }    
+    
+    public void testInvalidModify1() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Person\n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    no-loop \n";
+        str += "when \n";
+        str += "    $i : Cheese() \n";
+        str += "then \n";
+        str += "    modify( $i ); ";
+        str += "    list.add( $i ); \n";
+        str += "end \n";
 
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
+        if ( kbuilder.hasErrors() ) {
+            System.err.println( kbuilder.getErrors() );
+        }
+        assertTrue( kbuilder.hasErrors() );
+    }     
+    
+    public void testInvalidModify2() throws Exception {
+        String str = "";
+        str += "package org.drools \n";
+        str += "import org.drools.Person\n";
+        str += "global java.util.List list \n";
+        str += "rule rule1 \n";
+        str += "    no-loop \n";
+        str += "when \n";
+        str += "    $i : Cheese() \n";
+        str += "then \n";
+        str += "    modify( $i ) { setType( \"stilton\" ); setType( \"stilton\" );}; ";
+        str += "    list.add( $i ); \n";
+        str += "end \n";
+
+        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
+
+        kbuilder.add( ResourceFactory.newByteArrayResource( str.getBytes() ),
+                      ResourceType.DRL );
+
+        if ( kbuilder.hasErrors() ) {
+            System.err.println( kbuilder.getErrors() );
+        }
+        assertTrue( kbuilder.hasErrors() );
+    }     
+
     public void testIncrementOperator() throws Exception {
         String str = "";
         str += "package org.drools \n";




More information about the jboss-svn-commits mailing list