Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1051874

Browse files
committed
C#: Remove expressions inside attributes from CFG
1 parent e24e5b1 commit 1051874

4 files changed

Lines changed: 12 additions & 17 deletions

File tree

csharp/ql/src/semmle/code/csharp/controlflow/internal/ControlFlowGraphImpl.qll

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,21 @@ private import Splitting
5151
private import semmle.code.csharp.ExprOrStmtParent
5252

5353
/** An element that defines a new CFG scope. */
54-
class CfgScope extends Element, @top_level_exprorstmt_parent { }
54+
class CfgScope extends Element, @top_level_exprorstmt_parent {
55+
CfgScope() { not this instanceof Attribute }
56+
}
5557

5658
module ControlFlowTree {
5759
private class Range_ = @callable or @control_flow_element;
5860

59-
class Range extends Element, Range_ { }
61+
class Range extends Element, Range_ {
62+
Range() { this = getAChild*(any(CfgScope scope)) }
63+
}
64+
65+
private Element getAChild(Element p) {
66+
result = p.getAChild() or
67+
result = p.(AssignOperation).getExpandedAssignment()
68+
}
6069

6170
private predicate id(Range x, Range y) { x = y }
6271

csharp/ql/src/semmle/code/csharp/controlflow/internal/Splitting.qll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1541,11 +1541,7 @@ predicate succEntrySplits(CfgScope pred, ControlFlowElement succ, Splits succSpl
15411541
exists(int rnk |
15421542
scopeFirst(pred, succ) and
15431543
t instanceof NormalSuccessor and
1544-
succEntrySplitsFromRank(pred, succ, succSplits, rnk) and
1545-
// Attribute arguments in assemblies are represented as expressions, even though
1546-
// they are not from source. We are not interested in constructing a CFG for such
1547-
// expressions.
1548-
succ.fromSource()
1544+
succEntrySplitsFromRank(pred, succ, succSplits, rnk)
15491545
|
15501546
rnk = 0 and
15511547
not any(SplitImpl split).hasEntryScope(pred, succ)

csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@
189189
| AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:22:58:25 | this access |
190190
| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:22:58:25 | this access |
191191
| AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:37:58:40 | this access |
192-
| AccessorCalls.cs:58:34:58:34 | 1 | AccessorCalls.cs:58:34:58:34 | 1 |
193192
| AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:37:58:40 | this access |
194193
| AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:37:58:40 | this access |
195194
| AccessorCalls.cs:58:42:58:42 | 0 | AccessorCalls.cs:58:42:58:42 | 0 |
@@ -660,8 +659,6 @@
660659
| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:36 | ...; |
661660
| Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s |
662661
| Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:27 | access to local variable s |
663-
| Assert.cs:132:61:132:65 | false | Assert.cs:132:61:132:65 | false |
664-
| Assert.cs:133:61:133:64 | true | Assert.cs:133:61:133:64 | true |
665662
| Assert.cs:135:5:136:5 | {...} | Assert.cs:135:5:136:5 | {...} |
666663
| Assert.cs:139:5:142:5 | {...} | Assert.cs:139:5:142:5 | {...} |
667664
| Assert.cs:140:9:140:35 | call to method AssertTrueFalse | Assert.cs:140:9:140:35 | this access |
@@ -1660,9 +1657,7 @@
16601657
| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:25:5:28:5 | {...} |
16611658
| Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | Foreach.cs:26:36:26:39 | access to parameter args |
16621659
| Foreach.cs:26:18:26:31 | (..., ...) | Foreach.cs:26:23:26:23 | String x |
1663-
| Foreach.cs:26:19:26:23 | 1 | Foreach.cs:26:19:26:23 | 1 |
16641660
| Foreach.cs:26:23:26:23 | String x | Foreach.cs:26:23:26:23 | String x |
1665-
| Foreach.cs:26:26:26:30 | 1 | Foreach.cs:26:26:26:30 | 1 |
16661661
| Foreach.cs:26:30:26:30 | Int32 y | Foreach.cs:26:30:26:30 | Int32 y |
16671662
| Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | access to parameter args |
16681663
| Foreach.cs:27:11:27:11 | ; | Foreach.cs:27:11:27:11 | ; |

csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,6 @@
189189
| AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:22:58:25 | this access | normal |
190190
| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:22:58:25 | this access | normal |
191191
| AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:33:58:44 | (..., ...) | normal |
192-
| AccessorCalls.cs:58:34:58:34 | 1 | AccessorCalls.cs:58:34:58:34 | 1 | normal |
193192
| AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:37:58:40 | this access | normal |
194193
| AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:42:58:42 | 0 | normal |
195194
| AccessorCalls.cs:58:42:58:42 | 0 | AccessorCalls.cs:58:42:58:42 | 0 | normal |
@@ -788,8 +787,6 @@
788787
| Assert.cs:128:9:128:36 | ...; | Assert.cs:128:9:128:35 | call to method WriteLine | normal |
789788
| Assert.cs:128:27:128:27 | access to local variable s | Assert.cs:128:27:128:27 | access to local variable s | normal |
790789
| Assert.cs:128:27:128:34 | access to property Length | Assert.cs:128:27:128:34 | access to property Length | normal |
791-
| Assert.cs:132:61:132:65 | false | Assert.cs:132:61:132:65 | false | normal |
792-
| Assert.cs:133:61:133:64 | true | Assert.cs:133:61:133:64 | true | normal |
793790
| Assert.cs:135:5:136:5 | {...} | Assert.cs:135:5:136:5 | {...} | normal |
794791
| Assert.cs:139:5:142:5 | {...} | Assert.cs:140:9:140:35 | call to method AssertTrueFalse | throw(Exception) |
795792
| Assert.cs:139:5:142:5 | {...} | Assert.cs:141:9:141:15 | return ...; | return |
@@ -2298,9 +2295,7 @@
22982295
| Foreach.cs:25:5:28:5 | {...} | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | empty |
22992296
| Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | Foreach.cs:26:9:27:11 | foreach (... ... in ...) ... | empty |
23002297
| Foreach.cs:26:18:26:31 | (..., ...) | Foreach.cs:26:18:26:31 | (..., ...) | normal |
2301-
| Foreach.cs:26:19:26:23 | 1 | Foreach.cs:26:19:26:23 | 1 | normal |
23022298
| Foreach.cs:26:23:26:23 | String x | Foreach.cs:26:23:26:23 | String x | normal |
2303-
| Foreach.cs:26:26:26:30 | 1 | Foreach.cs:26:26:26:30 | 1 | normal |
23042299
| Foreach.cs:26:30:26:30 | Int32 y | Foreach.cs:26:30:26:30 | Int32 y | normal |
23052300
| Foreach.cs:26:36:26:39 | access to parameter args | Foreach.cs:26:36:26:39 | access to parameter args | normal |
23062301
| Foreach.cs:27:11:27:11 | ; | Foreach.cs:27:11:27:11 | ; | normal |

0 commit comments

Comments
 (0)