| Summary: | Using single quote inside double quotes followed by 'update()' results in 'String index out of range' exception | ||
|---|---|---|---|
| Product: | [Retired] JBoss BRMS Platform 6 | Reporter: | Petr Široký <psiroky> |
| Component: | BRE | Assignee: | Mario Fusco <mfusco> |
| Status: | CLOSED CURRENTRELEASE | QA Contact: | Petr Široký <psiroky> |
| Severity: | medium | Docs Contact: | |
| Priority: | unspecified | ||
| Version: | 6.0.0 | ||
| Target Milestone: | ER4 | ||
| Target Release: | 6.0.0 | ||
| Hardware: | Unspecified | ||
| OS: | Unspecified | ||
| Whiteboard: | |||
| Fixed In Version: | Doc Type: | Bug Fix | |
| Doc Text: | Story Points: | --- | |
| Clone Of: | Environment: | ||
| Last Closed: | 2014-08-06 20:19:08 UTC | Type: | Bug |
| Regression: | --- | Mount Type: | --- |
| Documentation: | --- | CRM: | |
| Verified Versions: | Category: | --- | |
| oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
| Cloudforms Team: | --- | Target Upstream Version: | |
PR with the test: https://github.com/droolsjbpm/drools/pull/252 I merged Petr's fix https://github.com/droolsjbpm/drools/commit/c5df0eff84c72e8cc2b2e8c6f133313d40d57cc2 Verified fixed in ER4. |
Description of problem: Using single quote only once (not in pair) inside double qouotes (e.g. "Some string with single _'_ quote") and followed by an 'update()' results in java.lang.StringIndexOutOfBoundsException. See example DRL below to reproduce the issue. I will create PR with the test case that can be merged into Drools. Sample DRL: declare Person name: String end rule "test" when $p: Person() then $p.setName("Some name with' single quote inside"); update($p); end Stacktrace: java.lang.StringIndexOutOfBoundsException: String index out of range: -9 at java.lang.String.substring(String.java:1937) at org.drools.compiler.rule.builder.dialect.DialectUtil.parseModifiedProperties(DialectUtil.java:716) at org.drools.compiler.rule.builder.dialect.DialectUtil.rewriteUpdateDescr(DialectUtil.java:683) at org.drools.compiler.rule.builder.dialect.DialectUtil.rewriteDescr(DialectUtil.java:592) at org.drools.compiler.rule.builder.dialect.DialectUtil.fixBlockDescr(DialectUtil.java:151) at org.drools.compiler.rule.builder.dialect.DialectUtil.fixBlockDescr(DialectUtil.java:109) at org.drools.compiler.rule.builder.dialect.asm.AbstractASMConsequenceBuilder.consequenceContext(AbstractASMConsequenceBuilder.java:44) at org.drools.compiler.rule.builder.dialect.asm.AbstractASMConsequenceBuilder.build(AbstractASMConsequenceBuilder.java:20) at org.drools.compiler.rule.builder.RuleBuilder.build(RuleBuilder.java:103) at org.drools.compiler.compiler.PackageBuilder.addRule(PackageBuilder.java:3160) at org.drools.compiler.compiler.PackageBuilder.compileRules(PackageBuilder.java:1047) at org.drools.compiler.compiler.PackageBuilder.compileAllRules(PackageBuilder.java:952) at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildRules(CompositeKnowledgeBuilderImpl.java:231) at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.buildPackages(CompositeKnowledgeBuilderImpl.java:86) at org.drools.compiler.compiler.CompositeKnowledgeBuilderImpl.build(CompositeKnowledgeBuilderImpl.java:75) at org.drools.compiler.kie.builder.impl.AbstractKieModule.buildKnowledgePackages(AbstractKieModule.java:205) at org.drools.compiler.kie.builder.impl.AbstractKieProject.verify(AbstractKieProject.java:39) at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildKieModule(KieBuilderImpl.java:297) at org.drools.compiler.kie.builder.impl.KieBuilderImpl.buildAll(KieBuilderImpl.java:182) at org.kie.internal.utils.KieHelper.build(KieHelper.java:44) Version-Release number of selected component (if applicable): Community 6.1.0-SNAPSHOT Actual results: StringIndexOutOfBoundsException thrown. Expected results: DRL should be successfully parsed. Additional info: This comes from customer's use case so we need to fix it in 6.0.