зеркало из https://github.com/github/codeql.git
6.2 KiB
6.2 KiB
Improvements to C# analysis
General improvements
- Control flow analysis has been improved for
catch
clauses with filters.
New queries
Query | Tags | Purpose |
---|---|---|
Arbitrary file write during zip extraction ("Zip Slip") (cs/zipslip ) |
security, external/cwe/cwe-022 | Identifies zip extraction routines which allow arbitrary file overwrite vulnerabilities. |
Local scope variable shadows member (cs/local-shadows-member ) |
maintainability, readability | Replaces the existing queries Local variable shadows class member (cs/local-shadows-class-member ), Local variable shadows struct member (cs/local-shadows-struct-member ), Parameter shadows class member (cs/parameter-shadows-class-member ), and Parameter shadows struct member (cs/parameter-shadows-struct-member ). |
Changes to existing queries
Query | Expected impact | Change |
---|---|---|
Constant condition (cs/constant-condition ) |
More results | The query has been generalized to report alerts for the old queries Null-coalescing left operand is constant (cs/constant-null-coalescing ) and Switch selector is constant (cs/constant-switch-selector ). |
Exposing internal representation (cs/expose-implementation ) |
Different results | The query has been rewritten, based on the equivalent Java query. |
Local variable shadows class member (cs/local-shadows-class-member ) |
No results | The query has been replaced by the new query: Local scope variable shadows member (cs/local-shadows-member ). |
Local variable shadows struct member (cs/local-shadows-struct-member ) |
No results | The query has been replaced by the new query: Local scope variable shadows member (cs/local-shadows-member ). |
Missing Dispose call on local IDisposable (cs/local-not-disposed ) |
Fewer false positive results | The query identifies more cases where the local variable may be disposed by a library call. |
Nested loops with same variable (cs/nested-loops-with-same-variable ) |
Fewer false positive results | Results are no longer highlighted in nested loops that share the same condition, and do not use the variable after the inner loop. |
Null-coalescing left operand is constant (cs/constant-null-coalescing ) |
No results | The query has been removed, as alerts for this problem are now reported by the new query: Constant condition (cs/constant-condition ). |
Parameter shadows class member (cs/parameter-shadows-class-member ) |
No results | The query has been replaced by the new query: Local scope variable shadows member (cs/local-shadows-member ). |
Parameter shadows struct member (cs/parameter-shadows-struct-member ) |
No results | The query has been replaced by the new query: Local scope variable shadows member (cs/local-shadows-member ). |
Potentially incorrect CompareTo(...) signature (cs/wrong-compareto-signature ) |
Fewer false positive results | Results are no longer highlighted in constructed types. |
Switch selector is constant (cs/constant-switch-selector ) |
No results | The query has been removed, as alerts for this problem are now reported by the new query: Constant condition (cs/constant-condition ). |
Useless upcast (cs/useless-upcast ) |
Fewer false positive results | The query has been improved to cover more cases where upcasts may be needed. |
Changes to code extraction
- The
into
part ofjoin
clauses is now extracted. - The
when
part of constant cases is now extracted. - Fixed a bug where
while(x is T y) ...
was not extracted correctly.
Changes to QL libraries
- A new non-member predicate
mayBeDisposed()
can be used to determine if a variable is potentially disposed inside a library. It will analyze the CIL code in the library to determine this. - The predicate
getCondition()
has been moved fromTypeCase
toCaseStmt
. It is now possible to get the condition of aConstCase
using itsgetCondition()
predicate. - Several control flow graph entities have been renamed (the old names are deprecated but are still available in this release for backwards compatibility):
ControlFlowNode
has been renamed toControlFlow::Node
.CallableEntryNode
has been renamed toControlFlow::Nodes::EntryNode
.CallableExitNode
has been renamed toControlFlow::Nodes::ExitNode
.ControlFlowEdgeType
has been renamed toControlFlow::SuccessorType
.ControlFlowEdgeSuccessor
has been renamed toControlFlow::SuccessorTypes::NormalSuccessor
.ControlFlowEdgeConditional
has been renamed toControlFlow::SuccessorTypes::ConditionalSuccessor
.ControlFlowEdgeBoolean
has been renamed toControlFlow::SuccessorTypes::BooleanSuccessor
.ControlFlowEdgeNullness
has been renamed toControlFlow::SuccessorTypes::NullnessSuccessor
.ControlFlowEdgeMatching
has been renamed toControlFlow::SuccessorTypes::MatchingSuccessor
.ControlFlowEdgeEmptiness
has been renamed toControlFlow::SuccessorTypes::EmptinessSuccessor
.ControlFlowEdgeReturn
has been renamed toControlFlow::SuccessorTypes::ReturnSuccessor
.ControlFlowEdgeBreak
has been renamed toControlFlow::SuccessorTypes::BreakSuccessor
.ControlFlowEdgeContinue
has been renamed toControlFlow::SuccessorTypes::ContinueSuccessor
.ControlFlowEdgeGotoLabel
has been renamed toControlFlow::SuccessorTypes::GotoLabelSuccessor
.ControlFlowEdgeGotoCase
has been renamed toControlFlow::SuccessorTypes::GotoCaseSuccessor
.ControlFlowEdgeGotoDefault
has been renamed toControlFlow::SuccessorTypes::GotoDefaultSuccessor
.ControlFlowEdgeException
has been renamed toControlFlow::SuccessorTypes::ExceptionSuccessor
.
You should update any custom queries that use these entities to ensure that they continue working when the old names are removed in a future release.