[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