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

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

package crypto.extractparameter.transformation;

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

public class WrapperTransformation extends Transformation {

    private static final String INTEGER_PARSE_INT =
            "";
    private static final String BIG_INTEGER_VALUE_OF =
            "";

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

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

        InvokeExpr invokeExpr = statement.getInvokeExpr();
        String signature = invokeExpr.getMethod().getSignature();

        if (signature.equals(INTEGER_PARSE_INT)) {
            return evaluateIntegerParseInt(statement, invokeExpr);
        }

        if (signature.equals(BIG_INTEGER_VALUE_OF)) {
            return evaluateBigIntegerValueOf(statement, invokeExpr);
        }

        return Optional.empty();
    }

    private Optional evaluateIntegerParseInt(Statement statement, InvokeExpr invokeExpr) {
        Val param = invokeExpr.getArg(0);

        Optional stringParamOpt = extractStringFromVal(statement, param);
        if (stringParamOpt.isEmpty()) {
            return Optional.empty();
        }

        String paramString = stringParamOpt.get();

        try {
            int result = Integer.parseInt(paramString);

            AllocVal allocVal = createTransformedAllocVal(result, statement);
            return Optional.of(allocVal);
        } catch (NumberFormatException e) {
            return Optional.empty();
        }
    }

    private Optional evaluateBigIntegerValueOf(
            Statement statement, InvokeExpr invokeExpr) {
        Val param = invokeExpr.getArg(0);

        Optional longParamOpt = extractLongFromVal(statement, param);
        if (longParamOpt.isEmpty()) {
            return Optional.empty();
        }

        long extractedParam = longParamOpt.get();

        AllocVal allocVal = createTransformedAllocVal(extractedParam, statement);
        return Optional.of(allocVal);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy