Commit Graph

1778 Commits

Author SHA1 Message Date
calumgrant
43d14ce011 Merge pull request #586 from hvitved/csharp/cfg/field-split
C#: Handle multiple-field Boolean CFG splitting
2018-12-03 12:52:43 +00:00
Tom Hvitved
ab9aa7d338 C#: Teach guards library about conditional assignments
For example, in

```
void M(object x)
{
    var y = x != null ? "" : null;
    if (y != null)
        x.ToString();
}
```

the guard `y != null` implies that the guard `x != null` must be true.
2018-11-30 17:41:36 +01:00
Tom Hvitved
80144a00c8 C#: Update nullness analyses
Port the SSA-based logic from the Java nullness analyses.
2018-11-30 17:41:31 +01:00
calumgrant
1c2dd3e7b9 Merge pull request #570 from hvitved/csharp/ssa/split-to-string
C#: Include CFG splits in `Ssa::Definition::toString()`
2018-11-30 15:04:36 +00:00
calumgrant
08f5c2b6a6 Merge pull request #567 from hvitved/csharp/guards-splitting
C#: Account for split SSA definitions in guards library
2018-11-30 14:57:57 +00:00
Tom Hvitved
05b9519e9a C#: Handle multiple-field Boolean CFG splitting
The internal pre-SSA library was extended on 3e78c2671f
to include fields/properties that are local-scope-like. The CFG splitting logic
uses ranking of SSA definitions to define an (arbitrary) order of splits, but for
fields/properties the implicit entry definition all have the same line and column.
In effect, such SSA definitions incorrectly get the same rank. Adding the name
of the field/property to the lexicographic ordering resolves the issue.
2018-11-30 10:57:34 +01:00
Tom Hvitved
610be85c8c C#: Add CFG test for multiple-field Boolean splitting 2018-11-30 10:32:08 +01:00
Tom Hvitved
a12a72e90f C#: Fix bug in guards library when the guarded expression is in a loop
Follow-up on 03e69e9945.
2018-11-29 15:53:03 +01:00
Tom Hvitved
ab7a094439 C#: Include CFG splits in Ssa::Definition::toString()
Just like syntax elements can be split in the control flow graph, so can SSA
definitions. To make this clear, and to make debugging easier, this commit
adds the splits as a prefix in the textual representation of SSA definitions.
2018-11-29 10:00:08 +01:00
Tom Hvitved
3eb163f656 C#: Account for split SSA definitions in guards library
On 03e69e9945, I updated the guards library to account
for control flow graph splitting. However, the logic that relates SSA qualifiers for
the guard and the guarded expression was not updated accordingly.
2018-11-28 20:00:13 +01:00
Tom Hvitved
1a25f0a068 C#: Add test for guard inside a split CFG block 2018-11-28 19:59:05 +01:00
Tom Hvitved
41edd61e2e Merge pull request #545 from calumgrant/cs/typemention-constraints
C#: Fix for type mentions of type parameter constraints
2018-11-27 14:25:48 +01:00
calumgrant
d1f7eef7eb Merge pull request #537 from hvitved/csharp/guards-splitting
C#: Make guards library work with CFG splitting
2018-11-26 18:19:37 +00:00
calum
de36151c4a C#: Add regression test and fix for type mentions of type parameter constraints. 2018-11-26 13:51:02 +00:00
Tom Hvitved
03e69e9945 C#: Make guards library work with CFG splitting 2018-11-23 15:20:33 +01:00
Tom Hvitved
228189db5a C#: Add tests for guards inside split CFG blocks 2018-11-23 15:20:27 +01:00
calum
b67bc7b612 C#: Fix id generation of constructed methods, by avoid id clashes by ensuring that method type parameters are qualified where necessary. Add a qltest. 2018-11-23 12:11:10 +00:00
Tom Hvitved
201f64ef8e Merge pull request #367 from calumgrant/cs/path-problems
C#: Update all security queries to path-problems
2018-11-22 12:02:11 +01:00
calum
3eae1cd500 C#: Update test outputs. 2018-11-21 17:28:48 +00:00
Tom Hvitved
8233e34ba2 C#: Fix Boolean splitting for variables defined in a loop 2018-11-20 21:22:00 +01:00
Tom Hvitved
89d5daa137 C#: Fix Boolean splitting negation bug 2018-11-20 21:22:00 +01:00
Tom Hvitved
841218540e C#: Add CFG test
This test exhibits two issues with Boolean CFG splitting: incorrect handling of
negated variables and incorrect splitting for variables defined inside a loop.
2018-11-20 21:22:00 +01:00
Tom Hvitved
3e78c2671f C#: Generalize pre-SSA library to include local-scope-like fields/properties 2018-11-20 15:07:44 +01:00
Tom Hvitved
25150265dc C#: Compute phi inputs in pre-SSA library
Logic is copied directly from the ordinary SSA library.
2018-11-20 15:07:43 +01:00
Tom Hvitved
57bbe0291b Merge pull request #393 from calumgrant/cs/extractor/dynamic-type-name
C#: Minor extractor fixes
2018-11-16 09:09:46 +01:00
calum
090e896ff5 C#: Change Property TagStackBehaviour to push a tag, to give the expression body a tag stack. 2018-11-15 18:28:17 +00:00
calum
bb49fe170b C# extractor: Handle the type name of dynamic. 2018-11-15 18:27:53 +00:00
semmle-qlci
536f3f36b8 Merge pull request #428 from hvitved/csharp/more-guards
Approved by calumgrant
2018-11-15 15:07:56 +00:00
calum
a5d50fc1db C#: Handle in arguments, and add AssignableAccess::isInArgument() predicate. 2018-11-13 10:58:43 +00:00
Tom Hvitved
29f163fd4e C#: Fix guards implications logic 2018-11-08 20:21:34 +01:00
Tom Hvitved
e4aa196c37 C#: Teach guards library about custom null guards 2018-11-08 20:21:34 +01:00
Tom Hvitved
a5dfc10197 C#: Add tests for custom null guards 2018-11-08 20:21:34 +01:00
Tom Hvitved
5921a9ea51 C#: Teach guards library about assertions 2018-11-08 20:21:34 +01:00
Tom Hvitved
0fb7ddc956 C#: Add assertion guard tests 2018-11-08 20:21:34 +01:00
Tom Hvitved
5d8162cc8b C#: Improve AccessorCall::getArgument()
- Handle tuple assignments.
- Handle compound `+=` assignments.
2018-11-07 11:30:04 +01:00
Tom Hvitved
7423916214 C#: Add tests for calls to accessors with arguments 2018-11-07 10:38:36 +01:00
Tom Hvitved
2d25a04a2e C#: Add test for guard implications logic 2018-11-05 16:47:10 +01:00
Tom Hvitved
f5e6b79add C#: Address review comments 2018-11-05 16:14:15 +01:00
Tom Hvitved
665173692c C#: Fix whitespaces 2018-10-30 13:15:46 +01:00
Tom Hvitved
e76e448953 C#: Unify logic in guards library
Unify the logic for Boolean/nullness/matching guards.
2018-10-30 13:15:15 +01:00
Tom Hvitved
a3d74b00e0 C#: Address review comments 2018-10-25 14:15:09 +02:00
Tom Hvitved
515d6b6d26 C#: Detect constantly failing assertions in the CFG 2018-10-19 14:07:40 +02:00
Tom Hvitved
acea4ddfc4 C#: Introduce control flow exit completions 2018-10-19 14:07:35 +02:00
Tom Hvitved
0c1db6afc3 C#: Add more CFG tests
Added tests for exits inside `try` statements and constantly failing assertions.
2018-10-19 14:05:30 +02:00
Tom Hvitved
b233961a9a C#: Add assertion tests 2018-10-19 14:05:30 +02:00
Tom Hvitved
603c3d6a43 C#: Teach null-guards library about pattern matching 2018-10-15 10:55:16 +02:00
semmle-qlci
76af2d2e3d Merge pull request #249 from hvitved/csharp/cfg/boolean-splitting
Approved by calumgrant
2018-10-11 20:14:37 +01:00
Tom Hvitved
98db3f89c2 C#: Extend pre-SSA consistency tests 2018-10-11 13:59:06 +02:00
Tom Hvitved
e8cd99335a C#: Simple Boolean control flow graph splitting 2018-09-28 14:59:39 +02:00
Tom Hvitved
d0f63ca303 C#: Introduce SplitKind class 2018-09-28 14:59:39 +02:00