All Downloads are FREE. Search and download functionalities are using the official Maven repository.

crypto.extractparameter.transformation.OperatorTransformation Maven / Gradle / Ivy

package crypto.extractparameter.transformation;

import boomerang.ForwardQuery;
import boomerang.scene.AllocVal;
import boomerang.scene.Statement;
import boomerang.scene.Val;
import crypto.extractparameter.ExtractParameterDefinition;
import java.util.Optional;

public class OperatorTransformation extends Transformation {

    public OperatorTransformation(ExtractParameterDefinition definition) {
        super(definition);
    }

    @Override
    public Optional evaluateExpression(Statement statement) {
        if (!statement.isAssign()) {
            return Optional.empty();
        }

        Val rightOp = statement.getRightOp();
        if (rightOp.isLengthExpr()) {
            return evaluateLengthExpr(statement, rightOp);
        }

        return Optional.empty();
    }

    private Optional evaluateLengthExpr(Statement statement, Val lengthExpr) {
        Val lengthOp = lengthExpr.getLengthOp();

        Optional allocSite = triggerBackwardQuery(statement, lengthOp);
        if (allocSite.isEmpty()) {
            return Optional.empty();
        }

        Val val = allocSite.get().var();
        if (!(val instanceof AllocVal)) {
            return Optional.empty();
        }

        Val allocVal = ((AllocVal) val).getAllocVal();

        if (allocVal.isArrayAllocationVal()) {
            Val arraySize = allocVal.getArrayAllocationSize();

            AllocVal arrayLengthVal =
                    new TransformedAllocVal(statement.getLeftOp(), statement, arraySize);
            return Optional.of(arrayLengthVal);
        } else if (allocVal.isStringConstant()) {
            int stringLength = allocVal.getStringValue().length();

            AllocVal stringLengthVal = createTransformedAllocVal(stringLength, statement);
            return Optional.of(stringLengthVal);
        }

        return Optional.empty();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy