Skip to content

Commit 6e95154

Browse files
committed
SONARJAVA-1400 Proper support of postfix operators
1 parent b6dc73e commit 6e95154

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

java-squid/src/main/java/org/sonar/java/se/ExplodedGraphWalker.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.sonar.plugins.java.api.tree.NewClassTree;
5555
import org.sonar.plugins.java.api.tree.Tree;
5656
import org.sonar.plugins.java.api.tree.TypeCastTree;
57+
import org.sonar.plugins.java.api.tree.UnaryExpressionTree;
5758
import org.sonar.plugins.java.api.tree.VariableTree;
5859
import org.sonar.plugins.java.api.tree.WhileStatementTree;
5960

@@ -446,7 +447,15 @@ private void executeUnaryExpression(Tree tree) {
446447
programState = unstackUnary.a;
447448
SymbolicValue unarySymbolicValue = constraintManager.createSymbolicValue(tree);
448449
unarySymbolicValue.computedFrom(unstackUnary.b);
449-
programState = programState.stackValue(unarySymbolicValue);
450+
if(tree.is(Tree.Kind.POSTFIX_DECREMENT, Tree.Kind.POSTFIX_INCREMENT, Tree.Kind.PREFIX_DECREMENT, Tree.Kind.PREFIX_DECREMENT)
451+
&& ((UnaryExpressionTree) tree).expression().is(Tree.Kind.IDENTIFIER)) {
452+
programState = programState.put(((IdentifierTree) ((UnaryExpressionTree) tree).expression()).symbol(), unarySymbolicValue);
453+
}
454+
if(tree.is(Tree.Kind.POSTFIX_DECREMENT, Tree.Kind.POSTFIX_INCREMENT)) {
455+
programState = programState.stackValue(unstackUnary.b.get(0));
456+
} else {
457+
programState = programState.stackValue(unarySymbolicValue);
458+
}
450459
}
451460

452461
private void executeIdentifier(IdentifierTree tree) {

java-squid/src/test/files/se/Reproducer.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,15 @@ public void continue_foreach(boolean a, boolean b, Map<String, String> map) {
7272
}
7373
}
7474

75+
private void increment(int index, int index2) {
76+
int start = index;
77+
index++;
78+
if(start == index) {
79+
80+
}
81+
start = index2;
82+
if(start == index2++) { // Noncompliant
83+
}
84+
}
85+
7586
}

0 commit comments

Comments
 (0)