When 2 rules share the same segment in sequential mode as in the following example: rule R1 when $s : String() $m : Message() $i : Integer( this < $s.length ) then modify($m) { setMessage($s) }; end rule R2 when $s : String() $m : Message() $i : Integer( this > $s.length ) then end the following NPE can be thrown: java.lang.NullPointerException at org.drools.core.reteoo.BetaNode.getLeftIterator(BetaNode.java:418) at org.drools.core.phreak.PhreakJoinNode.doRightUpdates(PhreakJoinNode.java:287) at org.drools.core.phreak.PhreakJoinNode.doNode(PhreakJoinNode.java:48) at org.drools.core.phreak.RuleNetworkEvaluator.switchOnDoBetaNode(RuleNetworkEvaluator.java:547) at org.drools.core.phreak.RuleNetworkEvaluator.evalBetaNode(RuleNetworkEvaluator.java:533) at org.drools.core.phreak.RuleNetworkEvaluator.innerEval(RuleNetworkEvaluator.java:334) at org.drools.core.phreak.RuleNetworkEvaluator.outerEval(RuleNetworkEvaluator.java:161) at org.drools.core.phreak.RuleNetworkEvaluator.evaluateNetwork(RuleNetworkEvaluator.java:116) at org.drools.core.phreak.RuleExecutor.evaluateNetwork(RuleExecutor.java:87) at org.drools.core.common.DefaultAgenda.evaluateEagerList(DefaultAgenda.java:999) at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:954) at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1243) at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:950) at org.drools.core.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:924) at org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:256) at org.drools.core.impl.StatelessKnowledgeSessionImpl.execute(StatelessKnowledgeSessionImpl.java:364)
Fixed by https://github.com/droolsjbpm/drools/commit/87ee53c88
Verified in BRMS 6.2.0 ER3.