mirror of
https://github.com/github/codeql.git
synced 2025-12-16 08:43:11 +01:00
3.2 KiB
3.2 KiB
Improvements to C# analysis
General improvements
Changes to the autobuilder
During code extraction, when determining the target of msbuild or dotnet build, the autobuilder now looks for:
.projfiles,- then
.slnfiles, - and finally
.csproj/.vcxprojfiles.
In all three cases, when multiple files of the same type are found, the project/solution file closest to the root is used to build the project.
Control flow graph improvements
- The control flow graph construction now takes simple Boolean conditions on local scope variables into account. For example, in
if (b) x = 0; if (b) x = 1;, the control flow graph will reflect the fact that taking thetrue(resp.false) branch in the first condition implies taking the same branch in the second condition. In effect, the first assignment toxwill now be identified as being dead. - Code that is only reachable from a constant failing assertion, such as
Debug.Assert(false), is considered to be unreachable.
New queries
| Query | Tags | Purpose |
|---|---|---|
Uncontrolled format string (cs/uncontrolled-format-string) |
security, external/cwe/cwe-134 | Finds data flow from remote inputs to the format string in String.Format. Results are shown on LGTM by default. |
Using a package with a known vulnerability (cs/use-of-vulnerable-package) |
security, external/cwe/cwe-937 | Finds project build files that import packages with known vulnerabilities. Results are shown on LGTM by default. |
Changes to existing queries
| Query | Expected impact | Change |
|---|---|---|
Cross-site scripting (cs/web/xss) |
More results | Finds cross-site scripting vulnerabilities in ASP.NET Core applications. |
Inconsistent lock sequence (cs/inconsistent-lock-sequence) |
More results | Finds inconsistent lock sequences globally across calls. |
Local scope variable shadows member (cs/local-shadows-member) |
Fewer results | Results have been removed where a constructor parameter shadows a member, because the parameter is probably used to initialize the member. |
Changes to code extraction
- Arguments passed using
inare now extracted. - Fixed a bug where the
dynamictype name was not extracted correctly in certain circumstances. - Fixed a bug where method type signatures were extracted incorrectly in some circumstances.
Changes to QL libraries
getArgument()onAccessorCallhas been improved so it now takes tuple assignments into account. For example, the argument for the implicitvalueparameter in the setter of propertyPis0in(P, x) = (0, 1). Additionally, the argument for thevalueparameter in compound assignments is now only the expanded value, for example, inP += 7the argument isP + 7and not7.- The predicate
isInArgument()has been added to theAssignableAccessclass. This holds for expressions that are passed as arguments usingin