From 507f78783e5b2066b5917ad42fba131c08dfb674 Mon Sep 17 00:00:00 2001 From: Dave Parker Date: Fri, 24 May 2019 11:27:41 +0100 Subject: [PATCH] Bug fix: out of range reward indices in explicit engine. Also expand previously created bugfix regression test to multiple engines. --- prism-tests/bugfixes/invalidrewardindexsim.sm.props.args | 3 +++ prism/src/parser/ast/ExpressionReward.java | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/prism-tests/bugfixes/invalidrewardindexsim.sm.props.args b/prism-tests/bugfixes/invalidrewardindexsim.sm.props.args index c016d0c3..85203854 100644 --- a/prism-tests/bugfixes/invalidrewardindexsim.sm.props.args +++ b/prism-tests/bugfixes/invalidrewardindexsim.sm.props.args @@ -1 +1,4 @@ +# Originally a simulation bug, but now test on all engines -sim +-ex +-h diff --git a/prism/src/parser/ast/ExpressionReward.java b/prism/src/parser/ast/ExpressionReward.java index 2d6ffb95..35504b7f 100644 --- a/prism/src/parser/ast/ExpressionReward.java +++ b/prism/src/parser/ast/ExpressionReward.java @@ -140,7 +140,8 @@ public class ExpressionReward extends ExpressionQuant else if (rsi instanceof Expression) { int i = ((Expression) rsi).evaluateInt(constantValues); rsi = new Integer(i); // (for better error reporting below) - rewStruct = i - 1; + // Check in range (set to -1 if not) and convert to zero-indexed + rewStruct = (i < 1 || i > modelInfo.getNumRewardStructs()) ? -1 : i - 1; } // String - name of reward structure else if (rsi instanceof String) {