Skip to content

Commit d928fec

Browse files
authored
Fix statement counting code in MaxStatementsConstraint (#2035)
* Fix MaxStatementsConstraint Current implementation of MaxStatementsConstraint allows one more statement to be executed. * Add unit test
1 parent a3c7444 commit d928fec

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

Jint.Tests/Runtime/ExecutionConstraintTests.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@ public void ShouldThrowStatementCountOverflow()
1313
);
1414
}
1515

16+
[Fact]
17+
public void ShouldCountStatementsPrecisely()
18+
{
19+
var script = "var x = 0; x++; x + 5";
20+
21+
// Should not throw if MaxStatements is not exceeded.
22+
new Engine(cfg => cfg.MaxStatements(3)).Execute(script);
23+
24+
// Should throw if MaxStatements is exceeded.
25+
Assert.Throws<StatementsCountOverflowException>(
26+
() => new Engine(cfg => cfg.MaxStatements(2)).Evaluate(script)
27+
);
28+
}
29+
1630
[Fact]
1731
public void ShouldThrowMemoryLimitExceeded()
1832
{

Jint/Constraints/MaxStatementsConstraint.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ internal MaxStatementsConstraint(int maxStatements)
1818

1919
public override void Check()
2020
{
21-
if (MaxStatements > 0 && _statementsCount++ > MaxStatements)
21+
if (MaxStatements > 0 && ++_statementsCount > MaxStatements)
2222
{
2323
ExceptionHelper.ThrowStatementsCountOverflowException();
2424
}

0 commit comments

Comments
 (0)