mirror of
https://github.com/github/codeql.git
synced 2025-12-16 08:43:11 +01:00
4.3 KiB
4.3 KiB
Improvements to C# analysis
General improvements
C# analysis now supports the extraction and analysis of many C# 8 features. For details see Changes to code extraction and Changes to QL libraries below.
New queries
| Query | Tags | Purpose |
|---|---|---|
Thread-unsafe capturing of an ICryptoTransform object (cs/thread-unsafe-icryptotransform-captured-in-lambda) |
concurrency, security, external/cwe/cwe-362 | Highlights instances of classes where a field of type System.Security.Cryptography.ICryptoTransform is captured by a lambda, and appears to be used in a thread initialization method. Results are not shown on LGTM by default. |
Changes to existing queries
| Query | Expected impact | Change |
|---|---|---|
Constant condition (cs/constant-condition) |
Fewer false positive results | The query now ignores code where the null value is in a conditional expression on the left hand side of a null-coalescing expression. For example, in (a ? b : null) ?? c, null is not considered to be a constant condition. |
Thread-unsafe use of a static ICryptoTransform field (cs/thread-unsafe-icryptotransform-field-in-class) |
Fewer false positive results | The criteria for a result has changed to include nested properties, nested fields, and collections. The format of the alert message has changed to highlight the static field. The query name has been updated. |
Useless upcast (cs/useless-upcast) |
Fewer false positive results | The query now ignores code where the upcast is used to disambiguate the target of a constructor call. |
Changes to code extraction
-
The following C# 8 features are now extracted:
- Range expressions
- Recursive patterns
- Using declaration statements
staticmodifiers on local functions- Null-coalescing assignment expressions
-
The
unmanagedtype parameter constraint is also now extracted.
Changes to QL libraries
- The class
Attributehas two new predicates:getConstructorArgument()andgetNamedArgument(). The first predicate returns arguments to the underlying constructor call and the second returns named arguments for initializing fields and properties. - The class
TypeParameterConstraintshas a new predicatehasUnmanagedTypeConstraint(). This shows whether the type parameter has theunmanagedconstraint. - The following QL classes have been added to model C# 8 features:
- Class
AssignCoalesceExprmodels null-coalescing assignment, for examplex ??= y - Class
IndexExprmodels from-end index expressions, for example^1 - Class
PatternExpris anExprthat appears in a pattern. It has the new subclassesDiscardPatternExpr,LabeledPatternExpr,RecursivePatternExpr,TypeAccessPatternExpr,TypePatternExpr, andVariablePatternExpr. - Class
PatternMatchmodels a pattern being matched. It has the subclassesCaseandIsExpr. - Class
PositionalPatternExprmodels position patterns, for example(int x, int y) - Class
PropertyPatternExprmodels property patterns, for exampleLength: int len - Class
RangeExprmodels range expressions, for example1..^1 - Class
SwitchCaseExprmodels the arm of a switch expression, for example(false, false) => true - Class
SwitchExprmodelsswitchexpressions, for example(a, b) switch { ... } - Classes
IsConstantExpr,IsTypeExprandIsPatternExprare deprecated in favour ofIsExpr - Class
Switchmodels bothSwitchExprandSwitchStmt - Class
Casemodels bothCaseStmtandSwitchCaseExpr - Class
UsingStmtmodels bothUsingBlockStmtandUsingDeclStmt
- Class