Skip to content

Commit 4702df5

Browse files
fixes #23 consider default assignments in declare section
1 parent 1bcce96 commit 4702df5

File tree

1 file changed

+47
-4
lines changed

1 file changed

+47
-4
lines changed

src/main/java/com/trivadis/tvdcc/validators/SQLInjection.xtend

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,18 +21,21 @@ import com.trivadis.oracle.plsql.plsql.Body
2121
import com.trivadis.oracle.plsql.plsql.ConstructorDeclaration
2222
import com.trivadis.oracle.plsql.plsql.CreateFunction
2323
import com.trivadis.oracle.plsql.plsql.CreateProcedure
24+
import com.trivadis.oracle.plsql.plsql.DeclareSection
2425
import com.trivadis.oracle.plsql.plsql.ExecuteImmediateStatement
2526
import com.trivadis.oracle.plsql.plsql.FuncDeclInType
2627
import com.trivadis.oracle.plsql.plsql.FunctionDefinition
2728
import com.trivadis.oracle.plsql.plsql.FunctionOrParenthesisParameter
2829
import com.trivadis.oracle.plsql.plsql.OpenForStatement
2930
import com.trivadis.oracle.plsql.plsql.ParameterDeclaration
31+
import com.trivadis.oracle.plsql.plsql.PlsqlBlock
3032
import com.trivadis.oracle.plsql.plsql.ProcDeclInType
3133
import com.trivadis.oracle.plsql.plsql.ProcedureCallOrAssignmentStatement
3234
import com.trivadis.oracle.plsql.plsql.ProcedureDefinition
3335
import com.trivadis.oracle.plsql.plsql.SimpleExpressionNameValue
3436
import com.trivadis.oracle.plsql.plsql.SimpleExpressionStringValue
3537
import com.trivadis.oracle.plsql.plsql.UserDefinedType
38+
import com.trivadis.oracle.plsql.plsql.VariableDeclaration
3639
import com.trivadis.oracle.plsql.validation.PLSQLCopGuideline
3740
import com.trivadis.oracle.plsql.validation.PLSQLCopValidator
3841
import com.trivadis.oracle.plsql.validation.PLSQLJavaValidator
@@ -213,8 +216,11 @@ class SQLInjection extends PLSQLJavaValidator implements PLSQLCopValidator {
213216
214217
215218
def isAsserted(SimpleExpressionNameValue n) {
216-
val body = EcoreUtil2.getContainerOfType(n, Body)
217-
val usages = EcoreUtil2.getAllContentsOfType(body, SimpleExpressionNameValue).filter[it.value.equalsIgnoreCase(n.value)]
219+
var EObject obj = EcoreUtil2.getContainerOfType(n, Body)
220+
if (obj === null) {
221+
obj = EcoreUtil2.getContainerOfType(n, DeclareSection)
222+
}
223+
val usages = EcoreUtil2.getAllContentsOfType(obj, SimpleExpressionNameValue).filter[it.value.equalsIgnoreCase(n.value)]
218224
for (usage : usages) {
219225
val name = usage.qualifiedFunctionName
220226
for (assertPackage : ASSERT_PACKAGES) {
@@ -262,6 +268,32 @@ class SQLInjection extends PLSQLJavaValidator implements PLSQLCopValidator {
262268
}
263269
}
264270
271+
def getDeclareSection(Body body) {
272+
val parent = body.eContainer
273+
var DeclareSection declareSection;
274+
if (parent instanceof CreateFunction) {
275+
declareSection = parent.declareSection
276+
} else if (parent instanceof CreateProcedure) {
277+
declareSection = parent.declareSection
278+
} else if (parent instanceof FuncDeclInType) {
279+
declareSection = parent.declareSection
280+
} else if (parent instanceof ProcDeclInType) {
281+
declareSection = parent.declareSection
282+
} else if (parent instanceof ConstructorDeclaration) {
283+
declareSection = parent.declareSection
284+
} else if (parent instanceof PlsqlBlock) {
285+
declareSection = parent.declareSection
286+
} else if (parent instanceof FunctionDefinition) {
287+
declareSection = parent.declareSection
288+
} else if (parent instanceof ProcedureDefinition) {
289+
declareSection = parent.declareSection
290+
} else {
291+
// CreatePackageBody, CreateTrigger, CreateTypeBody
292+
declareSection = null;
293+
}
294+
return declareSection;
295+
}
296+
265297
def HashMap<String, SimpleExpressionNameValue> getSimpleExpressinNamesFromAssignments(SimpleExpressionNameValue n) {
266298
val expressions = new HashMap<String, SimpleExpressionNameValue>
267299
val body = EcoreUtil2.getContainerOfType(n, Body)
@@ -281,8 +313,16 @@ class SQLInjection extends PLSQLJavaValidator implements PLSQLCopValidator {
281313
}
282314
}
283315
}
284-
if (expressions.size == 0) {
285-
expressions.put(n.value.toLowerCase, n);
316+
val declareSection = body.declareSection
317+
if (declareSection !== null) {
318+
val variable = EcoreUtil2.getAllContentsOfType(declareSection, VariableDeclaration).findFirst [
319+
it.variable.value.equalsIgnoreCase(n.value) && it.getDefault() !== null
320+
]
321+
if (variable !== null) {
322+
for (name : getRelevantSimplExpressionNameValues(variable.getDefault())) {
323+
expressions.put(name.value.toLowerCase, name)
324+
}
325+
}
286326
}
287327
return expressions;
288328
}
@@ -292,6 +332,9 @@ class SQLInjection extends PLSQLJavaValidator implements PLSQLCopValidator {
292332
if (obj !== null) {
293333
if (obj instanceof SimpleExpressionNameValue) {
294334
expressions.putAll(obj.simpleExpressinNamesFromAssignments)
335+
if (expressions.size == 0) {
336+
expressions.put(obj.value.toLowerCase, obj);
337+
}
295338
} else {
296339
for (name : getRelevantSimplExpressionNameValues(obj)) {
297340
expressions.put(name.value.toLowerCase, name)

0 commit comments

Comments
 (0)