Skip to content

Commit dcff87f

Browse files
authored
Merge pull request github#3366 from hvitved/csharp/dataflow/arrays
C#: Precise data-flow for collections
2 parents 0bee068 + 9e3a6e8 commit dcff87f

36 files changed

+3715
-2453
lines changed

csharp/ql/src/Language Abuse/ForeachCapture.ql

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -75,15 +75,13 @@ Element getAssignmentTarget(Expr e) {
7575
Element getCollectionAssignmentTarget(Expr e) {
7676
// Store into collection via method
7777
exists(
78-
MethodCall mc, Method m, IEnumerableFlow ief, CallableFlowSourceArg source,
79-
CallableFlowSinkQualifier sink, int i
78+
MethodCall mc, Method m, LibraryTypeDataFlow ltdf, CallableFlowSource source,
79+
CallableFlowSink sink
8080
|
81-
mc.getQualifier() = result.(Variable).getAnAccess() and
82-
ief = mc.getQualifier().getType().getSourceDeclaration() and
8381
m = mc.getTarget().getSourceDeclaration() and
84-
ief.callableFlow(source, sink, m, _) and
85-
source.getArgumentIndex() = i and
86-
e = mc.getArgument(i)
82+
ltdf.callableFlow(source, AccessPath::empty(), sink, AccessPath::element(), m, _) and
83+
e = source.getSource(mc) and
84+
result.(Variable).getAnAccess() = sink.getSink(mc)
8785
)
8886
or
8987
// Array initializer

csharp/ql/src/semmle/code/csharp/Assignable.qll

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,10 @@ class Assignable extends Declaration, @assignable {
2929
* An assignable that is also a member. Either a field (`Field`), a
3030
* property (`Property`), an indexer (`Indexer`), or an event (`Event`).
3131
*/
32-
class AssignableMember extends Member, Assignable {
32+
class AssignableMember extends Member, Assignable, Attributable {
3333
override AssignableMemberAccess getAnAccess() { result = Assignable.super.getAnAccess() }
34+
35+
override string toString() { result = Assignable.super.toString() }
3436
}
3537

3638
/**

csharp/ql/src/semmle/code/csharp/Caching.qll

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ module Stages {
5858

5959
cached
6060
private predicate forceCachingInSameStageRev() {
61-
localAdditionalTaintStep(_, _)
61+
defaultAdditionalTaintStep(_, _)
6262
or
6363
any(ArgumentNode n).argumentOf(_, _)
6464
or

0 commit comments

Comments
 (0)