Uploaded image for project: 'Drools'
  1. Drools
  2. DROOLS-6925

ArrayIndexOutOfBoundsException coming from EvaluatorWrapper

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Cannot Reproduce
    • Icon: Major Major
    • None
    • 7.68.0.Final
    • core engine
    • None
    • 2022 Week 17-19 (from Apr 25)
    • Hide

      Unfortunately, we don't have a single rule file that triggers this error. We need to run all our test unit suite with all rule files. So not clear how to reproduce.

      Show
      Unfortunately, we don't have a single rule file that triggers this error. We need to run all our test unit suite with all rule files. So not clear how to reproduce.
    • Hide

      No known workaround.

       

      Show
      No known workaround.  
    • Low
    • NEW
    • NEW
    • ---
    • ---

      We are successfully using Drools engine version 7.51. However, we have been unable to update to any later releases because of commit 54c3bf1a0b. Specifically this line:

      @@ -246,6 +257,6 @@ public class EvaluatorWrapper
       
           private static InternalFactHandle getFactHandle( Declaration declaration,
                                                           InternalFactHandle[] handles ) {
      -        return handles != null && handles.length > declaration.getOffset() ? handles[declaration.getOffset()] : null;
      +        return handles[declaration.getObjectIndex()];
           }
       }
      

      Because of that we are getting these exceptions:

      2022-04-06 11:19:11,170 ERROR SYSTEM      linux/new_process/impacket_usage/detect_impacket_usage                                 BATCH:NONE - [232/1968] Test failed: java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
      java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
              at org.drools.core.base.EvaluatorWrapper.getFactHandle(EvaluatorWrapper.java:260)
              at org.drools.core.base.EvaluatorWrapper.loadHandles(EvaluatorWrapper.java:219)
              at org.drools.core.rule.constraint.EvaluatorHelper.initOperators(EvaluatorHelper.java:54)
              at ConditionEvaluator34abbf38350b490c8789d556d5011762.evaluate(Unknown Source)
              at org.drools.mvel.MVELConstraint.evaluate(MVELConstraint.java:284)
              at org.drools.mvel.MVELConstraint.isAllowed(MVELConstraint.java:234)
              at org.drools.core.reteoo.AlphaNode.assertObject(AlphaNode.java:134)
              at org.drools.core.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:742)
              at org.drools.core.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:595)
              at org.drools.core.reteoo.ObjectTypeNode.propagateAssert(ObjectTypeNode.java:297)
              at org.drools.core.phreak.PropagationEntry$Insert.propagate(PropagationEntry.java:162)
              at org.drools.core.phreak.PropagationEntry$Insert.execute(PropagationEntry.java:167)
              at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:100)
              at org.drools.core.phreak.SynchronizedPropagationList.flush(SynchronizedPropagationList.java:95)
              at org.drools.core.common.DefaultAgenda.fireLoop(DefaultAgenda.java:853)
              at org.drools.core.common.DefaultAgenda.internalFireAllRules(DefaultAgenda.java:816)
              at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:808)
              at org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules(StatefulKnowledgeSessionImpl.java:1343)
              at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1334)
              at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1318)
              at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:294)
              at com.fsecure.atp.rules.engine.drools.StatelessKieSessionEventProcessor.lambda$executeRules$2(StatelessKieSessionEventProcessor.java:46)
              at com.fsecure.atp.config.XRay.wrapIn(XRay.java:266)
              at com.fsecure.atp.rules.engine.drools.StatelessKieSessionEventProcessor.executeRules(StatelessKieSessionEventProcessor.java:46)
              at com.fsecure.atp.rules.engine.drools.KieSessionEventProcessor.lambda$internalProcess$1(KieSessionEventProcessor.java:126)
              at com.fsecure.atp.config.XRay.wrapIn(XRay.java:266)
              at com.fsecure.atp.rules.engine.drools.KieSessionEventProcessor.internalProcess(KieSessionEventProcessor.java:126)
              at com.fsecure.atp.rules.engine.drools.KieSessionEventProcessor.process(KieSessionEventProcessor.java:104)
              at com.fsecure.atp.rules.stream.EventProcessorSupport.fireEvent(EventProcessorSupport.java:29)
              at com.fsecure.atp.rules.stream.AbstractEventStreamHandler.fireEvent(AbstractEventStreamHandler.java:34)
              at com.fsecure.atp.rules.stream.direct.DirectEventStreamReader.push(DirectEventStreamReader.java:36)
              at com.fsecure.atp.rules.stream.direct.DirectEventStreamReader.push(DirectEventStreamReader.java:32)
              at com.fsecure.atp.kie.rules.test.support.EventProducer.publish(EventProducer.java:41)
              at com.fsecure.atp.kie.rules.test.support.groovy.GroovyTestSpecRunner.runTestSpec(GroovyTestSpecRunner.java:187)
              at com.fsecure.atp.kie.rules.test.support.groovy.RuleTest.test(RuleTest.java:76)
              at jdk.internal.reflect.GeneratedMethodAccessor91.invoke(Unknown Source)
              at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
              at java.base/java.lang.reflect.Method.invoke(Method.java:566)
              at org.testng.internal.invokers.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:135)
              at org.testng.internal.invokers.InvokeMethodRunnable.runOne(InvokeMethodRunnable.java:44)
              at org.testng.internal.invokers.InvokeMethodRunnable.call(InvokeMethodRunnable.java:72)
              at org.testng.internal.invokers.InvokeMethodRunnable.call(InvokeMethodRunnable.java:10)
              at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
              at java.base/java.lang.Thread.run(Thread.java:829) 

       
      Putting the length check back would make it possible for us to upgrade to 7.68.

            mfusco@redhat.com Mario Fusco
            g1torres Giovanni Torres (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: