diff --git a/src/main/java/it/unipr/analysis/taint/TaintAbstractDomain.java b/src/main/java/it/unipr/analysis/taint/TaintAbstractDomain.java index f8b9b144e..0b5e53fe3 100644 --- a/src/main/java/it/unipr/analysis/taint/TaintAbstractDomain.java +++ b/src/main/java/it/unipr/analysis/taint/TaintAbstractDomain.java @@ -163,12 +163,24 @@ public TaintAbstractDomain smallStepSemantics(ValueExpression expression, Progra return resultStack; } + case "CalldatacopyOperator": { + if (hasBottomUntil(3)) + return bottom(); + + TaintAbstractDomain resultStack = clone(); + resultStack.popX(3); + + if (this.getTaintedOpcode().contains(op)) + return mk(resultStack.circularArray, TaintElement.TAINT); + + return resultStack; + } + case "BlobHashOperator": case "BalanceOperator": case "BlockhashOperator": case "NotOperator": case "CalldataloadOperator": - case "CalldatacopyOperator": case "SloadOperator": case "IszeroOperator": { // pop 1, push 1 if (hasBottomUntil(1))