Skip to content

Commit

Permalink
Fixes a bug in the if transformer where a string constant can appear …
Browse files Browse the repository at this point in the history
…in real-world code
  • Loading branch information
MarcMil committed Oct 8, 2024
1 parent 38c9e53 commit fd371c3
Showing 1 changed file with 4 additions and 43 deletions.
47 changes: 4 additions & 43 deletions src/main/java/soot/dexpler/DexIfTransformer.java
Original file line number Diff line number Diff line change
Expand Up @@ -229,34 +229,10 @@ public void caseAssignStmt(AssignStmt stmt) {

if (left instanceof ArrayRef) {
if (((ArrayRef) left).getIndex() == l) {
// doBreak = true;
return;
}
}

// IMPOSSIBLE! WOULD BE DEF!
// // gets value assigned
// if (stmt.getLeftOp() == l) {
// if (r instanceof FieldRef)
// usedAsObject = isObject(((FieldRef)
// r).getFieldRef().type());
// else if (r instanceof ArrayRef)
// usedAsObject = isObject(((ArrayRef)
// r).getType());
// else if (r instanceof StringConstant || r
// instanceof NewExpr || r instanceof
// NewArrayExpr)
// usedAsObject = true;
// else if (r instanceof CastExpr)
// usedAsObject = isObject
// (((CastExpr)r).getCastType());
// else if (r instanceof InvokeExpr)
// usedAsObject = isObject(((InvokeExpr)
// r).getType());
// // introduces alias
// else if (r instanceof Local) {}
//
// }
// used to assign
if (stmt.getRightOp() == l) {
Value l = stmt.getLeftOp();
Expand Down Expand Up @@ -289,11 +265,9 @@ public void caseAssignStmt(AssignStmt stmt) {
// is used as value (does not exclude
// assignment)
if (r instanceof FieldRef) {
usedAsObject = true; // isObject(((FieldRef)
// r).getFieldRef().type());
usedAsObject = true;
doBreak = true;

return;
} else if (r instanceof ArrayRef) {
ArrayRef ar = (ArrayRef) r;
if (ar.getBase() == l) {
Expand All @@ -302,39 +276,26 @@ public void caseAssignStmt(AssignStmt stmt) {
} else { // used as index
usedAsObject = false;
}
return;
} else if (r instanceof StringConstant || r instanceof NewExpr) {
throw new RuntimeException("NOT POSSIBLE StringConstant or NewExpr at " + stmt);
usedAsObject = true;
doBreak = true;
} else if (r instanceof NewArrayExpr) {
usedAsObject = false;
if (usedAsObject) {
doBreak = true;
}
return;
} else if (r instanceof CastExpr) {
usedAsObject = isObject(((CastExpr) r).getCastType());
if (usedAsObject) {
doBreak = true;
}
return;
} else if (r instanceof InvokeExpr) {
usedAsObject = examineInvokeExpr((InvokeExpr) stmt.getRightOp());
if (usedAsObject) {
doBreak = true;
}
return;
} else if (r instanceof LengthExpr) {
usedAsObject = true;
if (usedAsObject) {
doBreak = true;
}
return;
doBreak = true;
} else if (r instanceof BinopExpr) {
usedAsObject = false;
if (usedAsObject) {
doBreak = true;
}
return;
}
}

Expand Down

0 comments on commit fd371c3

Please sign in to comment.