use of net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression in project pmd by pmd.
the class ApexOpenRedirectRule method getObjectValue.
/**
* Finds any variables being present in PageReference constructor
*
* @param node
* - PageReference
* @param data
*/
private void getObjectValue(ApexNode<?> node, Object data) {
// PageReference(foo);
final List<ASTVariableExpression> variableExpressions = node.findChildrenOfType(ASTVariableExpression.class);
for (ASTVariableExpression variable : variableExpressions) {
if (variable.jjtGetChildIndex() == 0 && !listOfStringLiteralVariables.contains(Helper.getFQVariableName(variable))) {
addViolation(data, variable);
}
}
// PageReference(foo + bar)
final List<ASTBinaryExpression> binaryExpressions = node.findChildrenOfType(ASTBinaryExpression.class);
for (ASTBinaryExpression z : binaryExpressions) {
getObjectValue(z, data);
}
}
use of net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression in project pmd by pmd.
the class ApexOpenRedirectRule method addVariable.
private void addVariable(ASTVariableDeclaration node) {
ASTVariableExpression variable = node.getFirstChildOfType(ASTVariableExpression.class);
addVariable(variable);
}
use of net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression in project pmd by pmd.
the class ApexSOQLInjectionRule method findSelectContainingVariables.
private void findSelectContainingVariables(AbstractApexNode<?> node) {
final ASTVariableExpression left = node.getFirstChildOfType(ASTVariableExpression.class);
final ASTBinaryExpression right = node.getFirstChildOfType(ASTBinaryExpression.class);
if (left != null && right != null) {
recursivelyCheckForSelect(left, right);
}
}
use of net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression in project pmd by pmd.
the class ApexSOQLInjectionRule method reportStrings.
private void reportStrings(ASTMethodCallExpression m, Object data) {
final HashSet<ASTVariableExpression> setOfSafeVars = new HashSet<>();
final List<ASTStandardCondition> conditions = m.findDescendantsOfType(ASTStandardCondition.class);
for (ASTStandardCondition c : conditions) {
List<ASTVariableExpression> vars = c.findDescendantsOfType(ASTVariableExpression.class);
setOfSafeVars.addAll(vars);
}
final List<ASTBinaryExpression> binaryExpr = m.findChildrenOfType(ASTBinaryExpression.class);
for (ASTBinaryExpression b : binaryExpr) {
List<ASTVariableExpression> vars = b.findDescendantsOfType(ASTVariableExpression.class);
for (ASTVariableExpression v : vars) {
String fqName = Helper.getFQVariableName(v);
if (selectContainingVariables.containsKey(fqName)) {
boolean isLiteral = selectContainingVariables.get(fqName);
if (isLiteral) {
continue;
}
}
if (setOfSafeVars.contains(v) || safeVariables.contains(fqName)) {
continue;
}
final ASTMethodCallExpression parentCall = v.getFirstParentOfType(ASTMethodCallExpression.class);
boolean isSafeMethod = Helper.isMethodName(parentCall, STRING, ESCAPE_SINGLE_QUOTES) || Helper.isMethodName(parentCall, STRING, JOIN);
if (!isSafeMethod) {
addViolation(data, v);
}
}
}
}
use of net.sourceforge.pmd.lang.apex.ast.ASTVariableExpression in project pmd by pmd.
the class ApexXSSFromURLParamRule method findTaintedVariables.
private void findTaintedVariables(AbstractApexNode<?> node, Object data) {
final ASTMethodCallExpression right = node.getFirstChildOfType(ASTMethodCallExpression.class);
if (right != null) {
if (Helper.isMethodCallChain(right, URL_PARAMETER_METHOD)) {
ASTVariableExpression left = node.getFirstChildOfType(ASTVariableExpression.class);
String varType = null;
if (node instanceof ASTVariableDeclaration) {
varType = ((ASTVariableDeclaration) node).getNode().getLocalInfo().getType().getApexName();
}
if (left != null) {
if (varType == null || !"id".equalsIgnoreCase(varType)) {
urlParameterStrings.add(Helper.getFQVariableName(left));
}
}
}
processEscapingMethodCalls(right, data);
}
}
Aggregations