-The expression highlighted by this rule creates a buffer that is of insufficient size to contain
-the data being copied. This makes the code vulnerable to buffer overflow which can result in anything from a segmentation fault to a security vulnerability (particularly if the array is on stack-allocated memory).
+The highlighted code segment creates a buffer without ensuring it's large enough to accommodate the copied data.
+This leaves the code susceptible to a buffer overflow attack, which could lead to anything from program crashes to malicious code execution.
diff --git a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
index 84ef99ce955..8e99d6163d8 100644
--- a/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
+++ b/cpp/ql/src/Security/CWE/CWE-416/UseOfUniquePointerAfterLifetimeEnds.ql
@@ -30,6 +30,8 @@ where
outlivesFullExpr(c) and
not c.isFromUninstantiatedTemplate(_) and
isUniquePointerDerefFunction(c.getTarget()) and
+ // Exclude cases where the pointer is implicitly converted to a non-pointer type
+ not c.getActualType() instanceof IntegralType and
isTemporary(c.getQualifier().getFullyConverted())
select c,
"The underlying unique pointer object is destroyed after the call to '" + c.getTarget() +
diff --git a/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql b/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
index 3f511069271..76382b200af 100644
--- a/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
+++ b/cpp/ql/src/Security/CWE/CWE-676/DangerousFunctionOverflow.ql
@@ -17,5 +17,6 @@ import cpp
from FunctionCall call, Function target
where
call.getTarget() = target and
- target.hasGlobalOrStdName("gets")
+ target.hasGlobalOrStdName("gets") and
+ target.getNumberOfParameters() = 1
select call, "'gets' does not guard against buffer overflow."
diff --git a/cpp/ql/src/change-notes/2024-04-29-iterator-to-expired-container.md b/cpp/ql/src/change-notes/released/0.9.12.md
similarity index 84%
rename from cpp/ql/src/change-notes/2024-04-29-iterator-to-expired-container.md
rename to cpp/ql/src/change-notes/released/0.9.12.md
index ce06805a8f3..0a66e72ed44 100644
--- a/cpp/ql/src/change-notes/2024-04-29-iterator-to-expired-container.md
+++ b/cpp/ql/src/change-notes/released/0.9.12.md
@@ -1,4 +1,5 @@
----
-category: newQuery
----
+## 0.9.12
+
+### New Queries
+
* Added a new query, `cpp/iterator-to-expired-container`, to detect the creation of iterators owned by a temporary objects that are about to be destroyed.
diff --git a/cpp/ql/src/change-notes/released/1.0.0.md b/cpp/ql/src/change-notes/released/1.0.0.md
new file mode 100644
index 00000000000..6f9b4e6e6b1
--- /dev/null
+++ b/cpp/ql/src/change-notes/released/1.0.0.md
@@ -0,0 +1,10 @@
+## 1.0.0
+
+### Breaking Changes
+
+* CodeQL package management is now generally available, and all GitHub-produced CodeQL packages have had their version numbers increased to 1.0.0.
+
+### Minor Analysis Improvements
+
+* The "Use of unique pointer after lifetime ends" query (`cpp/use-of-unique-pointer-after-lifetime-ends`) no longer reports an alert when the pointer is converted to a boolean
+* The "Variable not initialized before use" query (`cpp/not-initialised`) no longer reports an alert on static variables.
diff --git a/cpp/ql/src/change-notes/released/1.0.1.md b/cpp/ql/src/change-notes/released/1.0.1.md
new file mode 100644
index 00000000000..bf6aa6fba4b
--- /dev/null
+++ b/cpp/ql/src/change-notes/released/1.0.1.md
@@ -0,0 +1,5 @@
+## 1.0.1
+
+### Minor Analysis Improvements
+
+* The `cpp/dangerous-function-overflow` no longer produces a false positive alert when the `gets` function does not have exactly one parameter.
diff --git a/cpp/ql/src/codeql-pack.release.yml b/cpp/ql/src/codeql-pack.release.yml
index 47eb8b55bab..2f5886268c6 100644
--- a/cpp/ql/src/codeql-pack.release.yml
+++ b/cpp/ql/src/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.9.11
+lastReleaseVersion: 1.0.1
diff --git a/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.cpp b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.cpp
new file mode 100644
index 00000000000..f96d67517b7
--- /dev/null
+++ b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.cpp
@@ -0,0 +1,23 @@
+char * create (int arg) {
+ if (arg > 42) {
+ // this function may return NULL
+ return NULL;
+ }
+ char * r = malloc(arg);
+ snprintf(r, arg -1, "Hello");
+ return r;
+}
+
+void process(char *str) {
+ // str is dereferenced
+ if (str[0] == 'H') {
+ printf("Hello H\n");
+ }
+}
+
+void test(int arg) {
+ // first function returns a pointer that may be NULL
+ char *str = create(arg);
+ // str is not checked for nullness before being passed to process function
+ process(str);
+}
diff --git a/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.qhelp b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.qhelp
new file mode 100644
index 00000000000..6c802a9b60b
--- /dev/null
+++ b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.qhelp
@@ -0,0 +1,26 @@
+
+
+
+
+This rule finds a dereference of a function parameter, whose value comes from another function call that may return NULL, without checks in the meantime.
+
+
+
+A check should be added between the return of the function which may return NULL, and its use by the function dereferencing ths pointer.
+
+
+
+
+
+
+
+
+
+ Null Dereference
+
+
+
+
+
diff --git a/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.ql b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.ql
new file mode 100644
index 00000000000..875c4f1dd96
--- /dev/null
+++ b/cpp/ql/src/experimental/Likely Bugs/DerefNullResult.ql
@@ -0,0 +1,34 @@
+/**
+ * @name Null dereference from a function result
+ * @description A function parameter is dereferenced,
+ * while it comes from a function that may return NULL,
+ * and is not checked for nullness by the caller.
+ * @kind problem
+ * @id cpp/deref-null-result
+ * @problem.severity recommendation
+ * @tags reliability
+ * security
+ * external/cwe/cwe-476
+ */
+
+import cpp
+import semmle.code.cpp.dataflow.new.DataFlow
+
+from Function nuller, Parameter pd, FunctionCall fc, Variable v
+where
+ mayReturnNull(nuller) and
+ functionDereferences(pd.getFunction(), pd.getIndex()) and
+ // there is a function call which will deref parameter pd
+ fc.getTarget() = pd.getFunction() and
+ // the parameter pd comes from a variable v
+ DataFlow::localFlow(DataFlow::exprNode(v.getAnAccess()),
+ DataFlow::exprNode(fc.getArgument(pd.getIndex()))) and
+ // this variable v was assigned by a call to the nuller function
+ unique( | | v.getAnAssignedValue()) = nuller.getACallToThisFunction() and
+ // this variable v is not accessed for an operation (check for NULLness)
+ not exists(VariableAccess vc |
+ vc.getTarget() = v and
+ (vc.getParent() instanceof Operation or vc.getParent() instanceof IfStmt)
+ )
+select fc, "This function call may deref $@ when it can be NULL from $@", v, v.getName(), nuller,
+ nuller.getName()
diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml
index e3f87e5a635..bb0e03fecd5 100644
--- a/cpp/ql/src/qlpack.yml
+++ b/cpp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-queries
-version: 0.9.12-dev
+version: 1.0.2-dev
groups:
- cpp
- queries
diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected
index 805d87c9645..fa7f625210d 100644
--- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected
+++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-193/constant-size/ConstantSizeArrayOffByOne.expected
@@ -1,55 +1,55 @@
edges
-| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | provenance | |
-| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | provenance | |
-| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | provenance | |
-| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | provenance | |
-| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | provenance | |
-| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | provenance | |
-| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | provenance | |
-| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | provenance | |
-| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | provenance | |
-| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | provenance | |
-| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | provenance | |
-| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | provenance | |
-| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | provenance | |
+| test.cpp:34:10:34:12 | buf | test.cpp:34:5:34:24 | access to array | provenance | Config |
+| test.cpp:35:10:35:12 | buf | test.cpp:35:5:35:22 | access to array | provenance | Config |
+| test.cpp:36:10:36:12 | buf | test.cpp:36:5:36:24 | access to array | provenance | Config |
+| test.cpp:39:14:39:16 | buf | test.cpp:39:9:39:19 | access to array | provenance | Config |
+| test.cpp:43:14:43:16 | buf | test.cpp:43:9:43:19 | access to array | provenance | Config |
+| test.cpp:48:10:48:12 | buf | test.cpp:48:5:48:24 | access to array | provenance | Config |
+| test.cpp:49:10:49:12 | buf | test.cpp:49:5:49:22 | access to array | provenance | Config |
+| test.cpp:50:10:50:12 | buf | test.cpp:50:5:50:24 | access to array | provenance | Config |
+| test.cpp:53:14:53:16 | buf | test.cpp:53:9:53:19 | access to array | provenance | Config |
+| test.cpp:57:14:57:16 | buf | test.cpp:57:9:57:19 | access to array | provenance | Config |
+| test.cpp:61:14:61:16 | buf | test.cpp:61:9:61:19 | access to array | provenance | Config |
+| test.cpp:70:33:70:33 | p | test.cpp:71:5:71:17 | access to array | provenance | Config |
+| test.cpp:70:33:70:33 | p | test.cpp:72:5:72:15 | access to array | provenance | Config |
| test.cpp:76:26:76:46 | & ... | test.cpp:66:32:66:32 | p | provenance | |
-| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | provenance | |
+| test.cpp:76:32:76:34 | buf | test.cpp:76:26:76:46 | & ... | provenance | Config |
| test.cpp:77:26:77:44 | & ... | test.cpp:66:32:66:32 | p | provenance | |
-| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | provenance | |
+| test.cpp:77:32:77:34 | buf | test.cpp:77:26:77:44 | & ... | provenance | Config |
| test.cpp:79:27:79:34 | buf | test.cpp:70:33:70:33 | p | provenance | |
| test.cpp:79:32:79:34 | buf | test.cpp:79:27:79:34 | buf | provenance | |
-| test.cpp:85:21:85:36 | buf | test.cpp:87:5:87:31 | access to array | provenance | |
-| test.cpp:85:21:85:36 | buf | test.cpp:88:5:88:27 | access to array | provenance | |
+| test.cpp:85:21:85:36 | buf | test.cpp:87:5:87:31 | access to array | provenance | Config |
+| test.cpp:85:21:85:36 | buf | test.cpp:88:5:88:27 | access to array | provenance | Config |
| test.cpp:85:34:85:36 | buf | test.cpp:85:21:85:36 | buf | provenance | |
-| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | provenance | |
-| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | |
-| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | |
-| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | |
-| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | provenance | |
-| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | provenance | |
-| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | provenance | |
-| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | |
-| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | |
-| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | |
-| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | provenance | |
-| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | provenance | |
+| test.cpp:96:13:96:15 | arr | test.cpp:96:13:96:18 | access to array | provenance | Config |
+| test.cpp:111:17:111:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | Config |
+| test.cpp:111:17:111:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | Config |
+| test.cpp:111:17:111:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | Config |
+| test.cpp:115:35:115:37 | arr | test.cpp:111:17:111:22 | access to array | provenance | Config |
+| test.cpp:115:35:115:37 | arr | test.cpp:115:35:115:40 | access to array | provenance | Config |
+| test.cpp:115:35:115:37 | arr | test.cpp:119:17:119:22 | access to array | provenance | Config |
+| test.cpp:119:17:119:19 | arr | test.cpp:111:17:111:22 | access to array | provenance | Config |
+| test.cpp:119:17:119:19 | arr | test.cpp:115:35:115:40 | access to array | provenance | Config |
+| test.cpp:119:17:119:19 | arr | test.cpp:119:17:119:22 | access to array | provenance | Config |
+| test.cpp:128:9:128:11 | arr | test.cpp:128:9:128:14 | access to array | provenance | Config |
+| test.cpp:134:25:134:27 | arr | test.cpp:136:9:136:16 | ... += ... | provenance | Config |
| test.cpp:136:9:136:16 | ... += ... | test.cpp:136:9:136:16 | ... += ... | provenance | |
| test.cpp:136:9:136:16 | ... += ... | test.cpp:138:13:138:15 | arr | provenance | |
| test.cpp:143:18:143:21 | asdf | test.cpp:134:25:134:27 | arr | provenance | |
| test.cpp:143:18:143:21 | asdf | test.cpp:143:18:143:21 | asdf | provenance | |
| test.cpp:146:26:146:26 | *p | test.cpp:147:4:147:9 | -- ... | provenance | |
-| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | provenance | |
+| test.cpp:156:12:156:14 | buf | test.cpp:156:12:156:18 | ... + ... | provenance | Config |
| test.cpp:156:12:156:18 | ... + ... | test.cpp:156:12:156:18 | ... + ... | provenance | |
| test.cpp:156:12:156:18 | ... + ... | test.cpp:158:17:158:18 | *& ... | provenance | |
| test.cpp:158:17:158:18 | *& ... | test.cpp:146:26:146:26 | *p | provenance | |
-| test.cpp:218:16:218:28 | buffer | test.cpp:220:5:220:11 | access to array | provenance | |
-| test.cpp:218:16:218:28 | buffer | test.cpp:221:5:221:11 | access to array | provenance | |
+| test.cpp:218:16:218:28 | buffer | test.cpp:220:5:220:11 | access to array | provenance | Config |
+| test.cpp:218:16:218:28 | buffer | test.cpp:221:5:221:11 | access to array | provenance | Config |
| test.cpp:218:23:218:28 | buffer | test.cpp:218:16:218:28 | buffer | provenance | |
-| test.cpp:229:17:229:29 | array | test.cpp:231:5:231:10 | access to array | provenance | |
-| test.cpp:229:17:229:29 | array | test.cpp:232:5:232:10 | access to array | provenance | |
+| test.cpp:229:17:229:29 | array | test.cpp:231:5:231:10 | access to array | provenance | Config |
+| test.cpp:229:17:229:29 | array | test.cpp:232:5:232:10 | access to array | provenance | Config |
| test.cpp:229:25:229:29 | array | test.cpp:229:17:229:29 | array | provenance | |
-| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | |
-| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | |
+| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | Config |
+| test.cpp:245:30:245:30 | p | test.cpp:261:27:261:30 | access to array | provenance | Config |
| test.cpp:274:14:274:20 | buffer3 | test.cpp:245:30:245:30 | p | provenance | |
| test.cpp:274:14:274:20 | buffer3 | test.cpp:274:14:274:20 | buffer3 | provenance | |
| test.cpp:277:35:277:35 | p | test.cpp:278:14:278:14 | p | provenance | |
@@ -60,21 +60,20 @@ edges
| test.cpp:286:19:286:25 | buffer2 | test.cpp:286:19:286:25 | buffer2 | provenance | |
| test.cpp:289:19:289:25 | buffer3 | test.cpp:277:35:277:35 | p | provenance | |
| test.cpp:289:19:289:25 | buffer3 | test.cpp:289:19:289:25 | buffer3 | provenance | |
-| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | |
-| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | |
+| test.cpp:292:25:292:27 | arr | test.cpp:299:16:299:21 | access to array | provenance | Config |
| test.cpp:306:20:306:23 | arr1 | test.cpp:292:25:292:27 | arr | provenance | |
| test.cpp:306:20:306:23 | arr1 | test.cpp:306:20:306:23 | arr1 | provenance | |
| test.cpp:309:20:309:23 | arr2 | test.cpp:292:25:292:27 | arr | provenance | |
| test.cpp:309:20:309:23 | arr2 | test.cpp:309:20:309:23 | arr2 | provenance | |
| test.cpp:319:13:319:27 | ... = ... | test.cpp:325:24:325:26 | end | provenance | |
-| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | provenance | |
-| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | |
+| test.cpp:319:19:319:22 | temp | test.cpp:319:19:319:27 | ... + ... | provenance | Config |
+| test.cpp:319:19:319:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | Config |
| test.cpp:319:19:319:27 | ... + ... | test.cpp:319:13:319:27 | ... = ... | provenance | |
| test.cpp:322:13:322:27 | ... = ... | test.cpp:325:24:325:26 | end | provenance | |
-| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | provenance | |
-| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | |
+| test.cpp:322:19:322:22 | temp | test.cpp:322:19:322:27 | ... + ... | provenance | Config |
+| test.cpp:322:19:322:22 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | Config |
| test.cpp:322:19:322:27 | ... + ... | test.cpp:322:13:322:27 | ... = ... | provenance | |
-| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | |
+| test.cpp:324:23:324:26 | temp | test.cpp:324:23:324:32 | ... + ... | provenance | Config |
| test.cpp:324:23:324:32 | ... + ... | test.cpp:324:23:324:32 | ... + ... | provenance | |
| test.cpp:324:23:324:32 | ... + ... | test.cpp:325:15:325:19 | temp2 | provenance | |
nodes
@@ -159,7 +158,6 @@ nodes
| test.cpp:289:19:289:25 | buffer3 | semmle.label | buffer3 |
| test.cpp:289:19:289:25 | buffer3 | semmle.label | buffer3 |
| test.cpp:292:25:292:27 | arr | semmle.label | arr |
-| test.cpp:292:25:292:27 | arr | semmle.label | arr |
| test.cpp:299:16:299:21 | access to array | semmle.label | access to array |
| test.cpp:306:20:306:23 | arr1 | semmle.label | arr1 |
| test.cpp:306:20:306:23 | arr1 | semmle.label | arr1 |
diff --git a/cpp/ql/test/library-tests/attributes/routine_attributes/arguments.expected b/cpp/ql/test/library-tests/attributes/routine_attributes/arguments.expected
index 7be35948ed8..363b5ed1c7e 100644
--- a/cpp/ql/test/library-tests/attributes/routine_attributes/arguments.expected
+++ b/cpp/ql/test/library-tests/attributes/routine_attributes/arguments.expected
@@ -1,4 +1,8 @@
| declspec.cpp:4:23:4:43 | Use fatal() instead | declspec.cpp:4:59:4:62 | exit | declspec.cpp:4:12:4:21 | deprecated | Use fatal() instead |
+| routine_attributes2.cpp:5:6:5:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility | hidden |
+| routine_attributes2.cpp:5:6:5:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility | hidden |
+| routine_attributes2.h:3:6:3:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility | hidden |
+| routine_attributes2.h:3:6:3:11 | hidden | routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility | hidden |
| routine_attributes.c:3:53:3:59 | dummy | routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref | dummy |
| routine_attributes.c:4:62:4:68 | dummy | routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias | dummy |
| routine_attributes.c:6:49:6:55 | dummy | routine_attributes.c:6:12:6:22 | plain_alias | routine_attributes.c:6:42:6:46 | alias | dummy |
diff --git a/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes.expected b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes.expected
index 1d2d5f1d395..529b2d5f78c 100644
--- a/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes.expected
+++ b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes.expected
@@ -18,6 +18,10 @@
| header_export.cpp:14:16:14:26 | myFunction4 | header_export.cpp:14:1:14:9 | dllexport |
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllexport |
| header_export.cpp:18:6:18:16 | myFunction5 | header.h:10:2:10:10 | dllimport |
+| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility |
+| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.cpp:5:6:5:11 | visibility |
+| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility |
+| routine_attributes2.cpp:5:13:5:21 | a_routine | routine_attributes2.h:3:6:3:11 | visibility |
| routine_attributes.c:3:12:3:24 | named_weakref | routine_attributes.c:3:44:3:50 | weakref |
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:46:4:52 | weakref |
| routine_attributes.c:4:12:4:26 | aliased_weakref | routine_attributes.c:4:55:4:59 | alias |
diff --git a/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.cpp b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.cpp
new file mode 100644
index 00000000000..f4c8f2f7c55
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.cpp
@@ -0,0 +1,7 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "routine_attributes2.h"
+
+void HIDDEN a_routine() {
+ return;
+}
diff --git a/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.h b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.h
new file mode 100644
index 00000000000..f9d28c2fe8d
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes2.h
@@ -0,0 +1,3 @@
+#pragma once
+
+void HIDDEN a_routine();
diff --git a/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes3.cpp b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes3.cpp
new file mode 100644
index 00000000000..a36d3c967d1
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/routine_attributes/routine_attributes3.cpp
@@ -0,0 +1,3 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "routine_attributes2.h"
diff --git a/cpp/ql/test/library-tests/attributes/type_attributes/arguments.expected b/cpp/ql/test/library-tests/attributes/type_attributes/arguments.expected
index b668523ad4e..bf1fac00610 100644
--- a/cpp/ql/test/library-tests/attributes/type_attributes/arguments.expected
+++ b/cpp/ql/test/library-tests/attributes/type_attributes/arguments.expected
@@ -1,3 +1,6 @@
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.cpp:5:7:5:12 | visibility | type_attributes2.cpp:5:7:5:12 | hidden |
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility | type_attributes2.h:3:7:3:12 | hidden |
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility | type_attributes2.h:3:7:3:12 | hidden |
| type_attributes_ms.cpp:4:67:4:75 | IDispatch | type_attributes_ms.cpp:4:19:4:22 | uuid | type_attributes_ms.cpp:4:24:4:63 | {00020400-0000-0000-c000-000000000046} |
| type_attributes_ms.cpp:5:30:5:33 | Str1 | type_attributes_ms.cpp:5:12:5:16 | align | type_attributes_ms.cpp:5:18:5:19 | 32 |
| type_attributes_ms.cpp:6:55:6:62 | IUnknown | type_attributes_ms.cpp:6:2:6:2 | uuid | type_attributes_ms.cpp:6:2:6:2 | 00000000-0000-0000-c000-000000000046 |
diff --git a/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes.expected b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes.expected
index 19a65b83ba4..d03209b4bfe 100644
--- a/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes.expected
+++ b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes.expected
@@ -1,4 +1,7 @@
| file://:0:0:0:0 | short __attribute((__may_alias__)) | type_attributes.c:25:30:25:42 | may_alias |
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.cpp:5:7:5:12 | visibility |
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility |
+| type_attributes2.cpp:5:14:5:20 | a_class | type_attributes2.h:3:7:3:12 | visibility |
| type_attributes.c:5:36:5:51 | my_packed_struct | type_attributes.c:5:23:5:32 | packed |
| type_attributes.c:10:54:10:54 | (unnamed class/struct/union) | type_attributes.c:10:30:10:50 | transparent_union |
| type_attributes.c:16:54:16:54 | (unnamed class/struct/union) | type_attributes.c:16:30:16:50 | transparent_union |
diff --git a/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.cpp b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.cpp
new file mode 100644
index 00000000000..7d567dfa463
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.cpp
@@ -0,0 +1,6 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "type_attributes2.h"
+
+class HIDDEN a_class {
+};
diff --git a/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.h b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.h
new file mode 100644
index 00000000000..1f378827c16
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes2.h
@@ -0,0 +1,3 @@
+#pragma once
+
+class HIDDEN a_class;
diff --git a/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes3.cpp b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes3.cpp
new file mode 100644
index 00000000000..978fc3bb1c4
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/type_attributes/type_attributes3.cpp
@@ -0,0 +1,3 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "type_attributes2.h"
diff --git a/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes.expected b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes.expected
index 376224b167d..96e2d5defc7 100644
--- a/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes.expected
+++ b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes.expected
@@ -6,6 +6,10 @@
| ms_var_attributes.cpp:12:42:12:46 | field | ms_var_attributes.cpp:12:14:12:21 | property |
| ms_var_attributes.cpp:20:34:20:37 | pBuf | ms_var_attributes.cpp:20:12:20:12 | SAL_volatile |
| ms_var_attributes.h:5:22:5:27 | myInt3 | ms_var_attributes.h:5:1:5:9 | dllexport |
+| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.cpp:5:5:5:10 | visibility |
+| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.cpp:5:5:5:10 | visibility |
+| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.h:3:12:3:17 | visibility |
+| var_attributes2.cpp:5:12:5:21 | a_variable | var_attributes2.h:3:12:3:17 | visibility |
| var_attributes.c:1:12:1:19 | weak_var | var_attributes.c:1:36:1:39 | weak |
| var_attributes.c:2:12:2:22 | weakref_var | var_attributes.c:2:39:2:45 | weakref |
| var_attributes.c:3:12:3:19 | used_var | var_attributes.c:3:36:3:39 | used |
diff --git a/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.cpp b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.cpp
new file mode 100644
index 00000000000..375caf4b2a4
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.cpp
@@ -0,0 +1,5 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "var_attributes2.h"
+
+int HIDDEN a_variable;
diff --git a/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.h b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.h
new file mode 100644
index 00000000000..7b996c7c2f2
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes2.h
@@ -0,0 +1,3 @@
+#pragma once
+
+extern int HIDDEN a_variable;
diff --git a/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes3.cpp b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes3.cpp
new file mode 100644
index 00000000000..0f9fab5bfcd
--- /dev/null
+++ b/cpp/ql/test/library-tests/attributes/var_attributes/var_attributes3.cpp
@@ -0,0 +1,3 @@
+#define HIDDEN __attribute__((visibility("hidden")))
+
+#include "var_attributes2.h"
diff --git a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected
index d50ca160916..d097fa7dfa6 100644
--- a/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards-ir/tests.expected
@@ -74,6 +74,8 @@ astGuardsCompare
| 34 | j >= 10+0 when ... < ... is false |
| 42 | 10 < j+1 when ... < ... is false |
| 42 | 10 >= j+1 when ... < ... is true |
+| 42 | call to getABool != 0 when call to getABool is true |
+| 42 | call to getABool == 0 when call to getABool is false |
| 42 | j < 10+0 when ... < ... is true |
| 42 | j >= 10+0 when ... < ... is false |
| 44 | 0 < z+0 when ... > ... is true |
@@ -160,6 +162,9 @@ astGuardsCompare
| 137 | 0 == 0 when 0 is false |
| 146 | ! ... != 0 when ! ... is true |
| 146 | ! ... == 0 when ! ... is false |
+| 146 | x != 0 when ! ... is false |
+| 146 | x != 0 when x is true |
+| 146 | x == 0 when x is false |
| 152 | x != 0 when ... && ... is true |
| 152 | x != 0 when x is true |
| 152 | x == 0 when x is false |
@@ -518,6 +523,7 @@ astGuardsEnsure_const
| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 |
| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | 142 | 136 |
| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 |
+| test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | 146 | 147 |
| test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | != | 0 | 151 | 152 |
| test.c:152:10:152:10 | x | test.c:152:10:152:10 | x | != | 0 | 152 | 152 |
| test.c:152:10:152:15 | ... && ... | test.c:152:10:152:10 | x | != | 0 | 151 | 152 |
@@ -533,6 +539,8 @@ astGuardsEnsure_const
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 0 | 53 | 53 |
irGuards
| test.c:7:9:7:13 | CompareGT: ... > ... |
| test.c:17:8:17:12 | CompareLT: ... < ... |
@@ -609,6 +617,8 @@ irGuardsCompare
| 34 | j >= 10+0 when CompareLT: ... < ... is false |
| 42 | 10 < j+1 when CompareLT: ... < ... is false |
| 42 | 10 >= j+1 when CompareLT: ... < ... is true |
+| 42 | call to getABool != 0 when Call: call to getABool is true |
+| 42 | call to getABool == 0 when Call: call to getABool is false |
| 42 | j < 10 when CompareLT: ... < ... is true |
| 42 | j < 10+0 when CompareLT: ... < ... is true |
| 42 | j >= 10 when CompareLT: ... < ... is false |
@@ -689,6 +699,9 @@ irGuardsCompare
| 137 | 0 == 0 when Constant: 0 is false |
| 146 | ! ... != 0 when LogicalNot: ! ... is true |
| 146 | ! ... == 0 when LogicalNot: ! ... is false |
+| 146 | x != 0 when Load: x is true |
+| 146 | x != 0 when LogicalNot: ! ... is false |
+| 146 | x == 0 when Load: x is false |
| 152 | x != 0 when Load: x is true |
| 152 | x == 0 when Load: x is false |
| 152 | y != 0 when Load: y is true |
@@ -1063,6 +1076,7 @@ irGuardsEnsure_const
| test.c:131:7:131:7 | Load: b | test.c:131:7:131:7 | Load: b | != | 0 | 132 | 132 |
| test.c:137:7:137:7 | Constant: 0 | test.c:137:7:137:7 | Constant: 0 | == | 0 | 142 | 142 |
| test.c:146:7:146:8 | LogicalNot: ! ... | test.c:146:7:146:8 | LogicalNot: ! ... | != | 0 | 147 | 147 |
+| test.c:146:8:146:8 | Load: x | test.c:146:8:146:8 | Load: x | == | 0 | 147 | 147 |
| test.c:152:10:152:10 | Load: x | test.c:152:10:152:10 | Load: x | != | 0 | 152 | 152 |
| test.c:152:15:152:15 | Load: y | test.c:152:15:152:15 | Load: y | != | 0 | 152 | 152 |
| test.c:175:13:175:32 | CompareEQ: ... == ... | test.c:175:13:175:15 | Call: call to foo | != | 0 | 175 | 175 |
@@ -1073,3 +1087,5 @@ irGuardsEnsure_const
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | != | -1 | 34 | 34 |
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 30 | 30 |
| test.cpp:31:7:31:13 | CompareEQ: ... == ... | test.cpp:31:7:31:7 | Load: x | == | -1 | 32 | 32 |
+| test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | != | 0 | 44 | 44 |
+| test.cpp:42:13:42:20 | Call: call to getABool | test.cpp:42:13:42:20 | Call: call to getABool | == | 0 | 53 | 53 |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
index 13d6c2b654f..757356c247c 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/Guards.expected
@@ -42,3 +42,10 @@
| test.cpp:99:6:99:6 | f |
| test.cpp:105:6:105:14 | ... != ... |
| test.cpp:111:6:111:14 | ... != ... |
+| test.cpp:122:9:122:9 | b |
+| test.cpp:125:13:125:20 | ! ... |
+| test.cpp:125:14:125:17 | call to safe |
+| test.cpp:131:6:131:21 | call to __builtin_expect |
+| test.cpp:135:6:135:21 | call to __builtin_expect |
+| test.cpp:141:6:141:21 | call to __builtin_expect |
+| test.cpp:145:6:145:21 | call to __builtin_expect |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
index a2f418b3d7b..8480a1f8613 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsCompare.expected
@@ -44,6 +44,8 @@
| 34 | j >= 10+0 when ... < ... is false |
| 42 | 10 < j+1 when ... < ... is false |
| 42 | 10 >= j+1 when ... < ... is true |
+| 42 | call to getABool != 0 when call to getABool is true |
+| 42 | call to getABool == 0 when call to getABool is false |
| 42 | j < 10 when ... < ... is true |
| 42 | j < 10+0 when ... < ... is true |
| 42 | j >= 10 when ... < ... is false |
@@ -149,23 +151,75 @@
| 111 | 0.0 == i+0 when ... != ... is false |
| 111 | i != 0.0+0 when ... != ... is true |
| 111 | i == 0.0+0 when ... != ... is false |
+| 122 | b != 0 when b is true |
+| 122 | b == 0 when b is false |
+| 125 | ! ... != 0 when ! ... is true |
+| 125 | ! ... == 0 when ! ... is false |
+| 125 | call to safe != 0 when ! ... is false |
+| 125 | call to safe != 0 when call to safe is true |
+| 125 | call to safe == 0 when call to safe is false |
| 126 | 1 != 0 when 1 is true |
| 126 | 1 != 0 when ... && ... is true |
| 126 | 1 == 0 when 1 is false |
| 126 | call to test3_condition != 0 when ... && ... is true |
| 126 | call to test3_condition != 0 when call to test3_condition is true |
| 126 | call to test3_condition == 0 when call to test3_condition is false |
+| 131 | ... + ... != a+0 when call to __builtin_expect is false |
+| 131 | ... + ... == a+0 when call to __builtin_expect is true |
+| 131 | a != ... + ...+0 when call to __builtin_expect is false |
+| 131 | a != b+42 when call to __builtin_expect is false |
+| 131 | a == ... + ...+0 when call to __builtin_expect is true |
+| 131 | a == b+42 when call to __builtin_expect is true |
| 131 | b != 0 when b is true |
+| 131 | b != a+-42 when call to __builtin_expect is false |
| 131 | b == 0 when b is false |
+| 131 | b == a+-42 when call to __builtin_expect is true |
+| 131 | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| 131 | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| 135 | ... + ... != a+0 when call to __builtin_expect is true |
+| 135 | ... + ... == a+0 when call to __builtin_expect is false |
+| 135 | a != ... + ...+0 when call to __builtin_expect is true |
+| 135 | a != b+42 when call to __builtin_expect is true |
+| 135 | a == ... + ...+0 when call to __builtin_expect is false |
+| 135 | a == b+42 when call to __builtin_expect is false |
+| 135 | b != a+-42 when call to __builtin_expect is true |
+| 135 | b == a+-42 when call to __builtin_expect is false |
+| 135 | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| 135 | call to __builtin_expect == 0 when call to __builtin_expect is false |
| 137 | 0 != 0 when 0 is true |
| 137 | 0 == 0 when 0 is false |
+| 141 | 42 != a+0 when call to __builtin_expect is false |
+| 141 | 42 == a+0 when call to __builtin_expect is true |
+| 141 | a != 42 when call to __builtin_expect is false |
+| 141 | a != 42+0 when call to __builtin_expect is false |
+| 141 | a == 42 when call to __builtin_expect is true |
+| 141 | a == 42+0 when call to __builtin_expect is true |
+| 141 | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| 141 | call to __builtin_expect == 0 when call to __builtin_expect is false |
+| 145 | 42 != a+0 when call to __builtin_expect is true |
+| 145 | 42 == a+0 when call to __builtin_expect is false |
+| 145 | a != 42 when call to __builtin_expect is true |
+| 145 | a != 42+0 when call to __builtin_expect is true |
+| 145 | a == 42 when call to __builtin_expect is false |
+| 145 | a == 42+0 when call to __builtin_expect is false |
+| 145 | call to __builtin_expect != 0 when call to __builtin_expect is true |
+| 145 | call to __builtin_expect == 0 when call to __builtin_expect is false |
| 146 | ! ... != 0 when ! ... is true |
| 146 | ! ... == 0 when ! ... is false |
+| 146 | x != 0 when ! ... is false |
+| 146 | x != 0 when x is true |
+| 146 | x == 0 when x is false |
| 152 | p != 0 when p is true |
| 152 | p == 0 when p is false |
| 158 | ! ... != 0 when ! ... is true |
| 158 | ! ... == 0 when ! ... is false |
+| 158 | p != 0 when ! ... is false |
+| 158 | p != 0 when p is true |
+| 158 | p == 0 when p is false |
| 164 | s != 0 when s is true |
| 164 | s == 0 when s is false |
| 170 | ! ... != 0 when ! ... is true |
| 170 | ! ... == 0 when ! ... is false |
+| 170 | s != 0 when ! ... is false |
+| 170 | s != 0 when s is true |
+| 170 | s == 0 when s is false |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
index cf36a58a515..83275c8011f 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsControl.expected
@@ -100,3 +100,11 @@
| test.cpp:99:6:99:6 | f | true | 99 | 100 |
| test.cpp:105:6:105:14 | ... != ... | true | 105 | 106 |
| test.cpp:111:6:111:14 | ... != ... | true | 111 | 112 |
+| test.cpp:122:9:122:9 | b | true | 123 | 125 |
+| test.cpp:122:9:122:9 | b | true | 125 | 125 |
+| test.cpp:125:13:125:20 | ! ... | true | 125 | 125 |
+| test.cpp:125:14:125:17 | call to safe | false | 125 | 125 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | true | 131 | 132 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | true | 135 | 136 |
+| test.cpp:141:6:141:21 | call to __builtin_expect | true | 141 | 142 |
+| test.cpp:145:6:145:21 | call to __builtin_expect | true | 145 | 146 |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
index 45d63f6dd53..c520b48f94e 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
+++ b/cpp/ql/test/library-tests/controlflow/guards/GuardsEnsure.expected
@@ -159,6 +159,18 @@ binary
| test.cpp:105:6:105:14 | ... != ... | test.cpp:105:11:105:14 | 0.0 | != | test.cpp:105:6:105:6 | f | 0 | 105 | 106 |
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:6:111:6 | i | != | test.cpp:111:11:111:14 | 0.0 | 0 | 111 | 112 |
| test.cpp:111:6:111:14 | ... != ... | test.cpp:111:11:111:14 | 0.0 | != | test.cpp:111:6:111:6 | i | 0 | 111 | 112 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:28 | b | 42 | 131 | 132 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:23:131:23 | a | == | test.cpp:131:28:131:33 | ... + ... | 0 | 131 | 132 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:28 | b | == | test.cpp:131:23:131:23 | a | -42 | 131 | 132 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:28:131:33 | ... + ... | == | test.cpp:131:23:131:23 | a | 0 | 131 | 132 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:28 | b | 42 | 135 | 136 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:23:135:23 | a | != | test.cpp:135:28:135:33 | ... + ... | 0 | 135 | 136 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:28 | b | != | test.cpp:135:23:135:23 | a | -42 | 135 | 136 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:28:135:33 | ... + ... | != | test.cpp:135:23:135:23 | a | 0 | 135 | 136 |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | test.cpp:141:28:141:29 | 42 | 0 | 141 | 142 |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:28:141:29 | 42 | == | test.cpp:141:23:141:23 | a | 0 | 141 | 142 |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | test.cpp:145:28:145:29 | 42 | 0 | 145 | 146 |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:28:145:29 | 42 | != | test.cpp:145:23:145:23 | a | 0 | 145 | 146 |
unary
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | < | 1 | 10 | 11 |
| test.c:7:9:7:13 | ... > ... | test.c:7:9:7:9 | x | >= | 1 | 7 | 9 |
@@ -245,15 +257,20 @@ unary
| test.c:131:7:131:7 | b | test.c:131:7:131:7 | b | != | 0 | 131 | 132 |
| test.c:137:7:137:7 | 0 | test.c:137:7:137:7 | 0 | == | 0 | 142 | 136 |
| test.c:146:7:146:8 | ! ... | test.c:146:7:146:8 | ! ... | != | 0 | 146 | 147 |
+| test.c:146:8:146:8 | x | test.c:146:8:146:8 | x | == | 0 | 146 | 147 |
| test.c:152:8:152:8 | p | test.c:152:8:152:8 | p | != | 0 | 152 | 154 |
| test.c:158:8:158:9 | ! ... | test.c:158:8:158:9 | ! ... | != | 0 | 158 | 160 |
+| test.c:158:9:158:9 | p | test.c:158:9:158:9 | p | == | 0 | 158 | 160 |
| test.c:164:8:164:8 | s | test.c:164:8:164:8 | s | != | 0 | 164 | 166 |
| test.c:170:8:170:9 | ! ... | test.c:170:8:170:9 | ! ... | != | 0 | 170 | 172 |
+| test.c:170:9:170:9 | s | test.c:170:9:170:9 | s | == | 0 | 170 | 172 |
| test.cpp:18:8:18:10 | call to get | test.cpp:18:8:18:10 | call to get | != | 0 | 19 | 19 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 30 | 30 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | != | -1 | 34 | 34 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 30 | 30 |
| test.cpp:31:7:31:13 | ... == ... | test.cpp:31:7:31:7 | x | == | -1 | 31 | 32 |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | != | 0 | 43 | 45 |
+| test.cpp:42:13:42:20 | call to getABool | test.cpp:42:13:42:20 | call to getABool | == | 0 | 53 | 53 |
| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 0 | 62 | 64 |
| test.cpp:61:10:61:10 | i | test.cpp:61:10:61:10 | i | == | 1 | 65 | 66 |
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | < | 11 | 75 | 77 |
@@ -261,3 +278,13 @@ unary
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 0 | 75 | 77 |
| test.cpp:74:10:74:10 | i | test.cpp:74:10:74:10 | i | >= | 11 | 78 | 79 |
| test.cpp:93:6:93:6 | c | test.cpp:93:6:93:6 | c | != | 0 | 93 | 94 |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 123 | 125 |
+| test.cpp:122:9:122:9 | b | test.cpp:122:9:122:9 | b | != | 0 | 125 | 125 |
+| test.cpp:125:13:125:20 | ! ... | test.cpp:125:13:125:20 | ! ... | != | 0 | 125 | 125 |
+| test.cpp:125:14:125:17 | call to safe | test.cpp:125:14:125:17 | call to safe | == | 0 | 125 | 125 |
+| test.cpp:131:6:131:21 | call to __builtin_expect | test.cpp:131:6:131:21 | call to __builtin_expect | != | 0 | 131 | 132 |
+| test.cpp:135:6:135:21 | call to __builtin_expect | test.cpp:135:6:135:21 | call to __builtin_expect | != | 0 | 135 | 136 |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:6:141:21 | call to __builtin_expect | != | 0 | 141 | 142 |
+| test.cpp:141:6:141:21 | call to __builtin_expect | test.cpp:141:23:141:23 | a | == | 42 | 141 | 142 |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:6:145:21 | call to __builtin_expect | != | 0 | 145 | 146 |
+| test.cpp:145:6:145:21 | call to __builtin_expect | test.cpp:145:23:145:23 | a | != | 42 | 145 | 146 |
diff --git a/cpp/ql/test/library-tests/controlflow/guards/test.cpp b/cpp/ql/test/library-tests/controlflow/guards/test.cpp
index 84d02ca4efa..e3e48c48237 100644
--- a/cpp/ql/test/library-tests/controlflow/guards/test.cpp
+++ b/cpp/ql/test/library-tests/controlflow/guards/test.cpp
@@ -112,3 +112,37 @@ void int_float_comparison(int i) {
use(i);
}
}
+
+int source();
+bool safe(int);
+
+void test(bool b)
+{
+ int x;
+ if (b)
+ {
+ x = source();
+ if (!safe(x)) return;
+ }
+ use(x);
+}
+
+void binary_test_builtin_expected(int a, int b) {
+ if(__builtin_expect(a == b + 42, 0)) {
+ use(a);
+ }
+
+ if(__builtin_expect(a != b + 42, 0)) {
+ use(a);
+ }
+}
+
+void unary_test_builtin_expected(int a) {
+ if(__builtin_expect(a == 42, 0)) {
+ use(a);
+ }
+
+ if(__builtin_expect(a != 42, 0)) {
+ use(a);
+ }
+}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp
index 0e9c9f1bc77..71d22ad4edd 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/BarrierGuard.cpp
@@ -75,4 +75,54 @@ void bg_indirect_expr() {
if (guarded(buf)) {
sink(buf);
}
+}
+
+void test_guard_and_reassign() {
+ int x = source();
+
+ if(!guarded(x)) {
+ x = 0;
+ }
+ sink(x); // $ SPURIOUS: ast
+}
+
+void test_phi_read_guard(bool b) {
+ int x = source();
+
+ if(b) {
+ if(!guarded(x))
+ return;
+ }
+ else {
+ if(!guarded(x))
+ return;
+ }
+
+ sink(x); // $ SPURIOUS: ast
+}
+
+bool unsafe(int);
+
+void test_guard_and_reassign_2() {
+ int x = source();
+
+ if(unsafe(x)) {
+ x = 0;
+ }
+ sink(x); // $ SPURIOUS: ast
+}
+
+void test_phi_read_guard_2(bool b) {
+ int x = source();
+
+ if(b) {
+ if(unsafe(x))
+ return;
+ }
+ else {
+ if(unsafe(x))
+ return;
+ }
+
+ sink(x); // $ SPURIOUS: ast
}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/TestBase.qll b/cpp/ql/test/library-tests/dataflow/dataflow-tests/TestBase.qll
index c91bd782c05..426098084ca 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/TestBase.qll
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/TestBase.qll
@@ -7,10 +7,17 @@ module AstTest {
* S in `if (guarded(x)) S`.
*/
// This is tested in `BarrierGuard.cpp`.
- predicate testBarrierGuard(GuardCondition g, Expr checked, boolean isTrue) {
- g.(FunctionCall).getTarget().getName() = "guarded" and
- checked = g.(FunctionCall).getArgument(0) and
- isTrue = true
+ predicate testBarrierGuard(GuardCondition g, Expr checked, boolean branch) {
+ exists(Call call, boolean b |
+ checked = call.getArgument(0) and
+ g.comparesEq(call, 0, b, any(BooleanValue bv | bv.getValue() = branch))
+ |
+ call.getTarget().hasName("guarded") and
+ b = false
+ or
+ call.getTarget().hasName("unsafe") and
+ b = true
+ )
}
/** Common data flow configuration to be used by tests. */
@@ -102,12 +109,16 @@ module IRTest {
* S in `if (guarded(x)) S`.
*/
// This is tested in `BarrierGuard.cpp`.
- predicate testBarrierGuard(IRGuardCondition g, Expr checked, boolean isTrue) {
- exists(Call call |
- call = g.getUnconvertedResultExpression() and
- call.getTarget().hasName("guarded") and
- checked = call.getArgument(0) and
- isTrue = true
+ predicate testBarrierGuard(IRGuardCondition g, Expr checked, boolean branch) {
+ exists(CallInstruction call, boolean b |
+ checked = call.getArgument(0).getUnconvertedResultExpression() and
+ g.comparesEq(call.getAUse(), 0, b, any(BooleanValue bv | bv.getValue() = branch))
+ |
+ call.getStaticCallTarget().hasName("guarded") and
+ b = false
+ or
+ call.getStaticCallTarget().hasName("unsafe") and
+ b = true
)
}
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/clang.cpp b/cpp/ql/test/library-tests/dataflow/dataflow-tests/clang.cpp
index 7b4759ec0bf..f157f75adcd 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/clang.cpp
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/clang.cpp
@@ -52,3 +52,9 @@ void following_pointers( // $ ast-def=sourceStruct1_ptr ir-def=*cleanArray1 ir-d
sink(stackArray); // $ ast,ir
indirect_sink(stackArray); // $ ast ir=50:25 ir=50:35 ir=51:19
}
+
+void test_bitcast() {
+ unsigned long x = source();
+ double d = __builtin_bit_cast(double, x);
+ sink(d); // $ ir MISSING: ast
+}
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected
index 00e6b03b931..f6c8375660c 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/localFlow-ir.expected
@@ -69,45 +69,61 @@
| test.cpp:8:8:8:9 | t1 | test.cpp:9:8:9:9 | t1 |
| test.cpp:9:8:9:9 | t1 | test.cpp:11:7:11:8 | t1 |
| test.cpp:9:8:9:9 | t1 | test.cpp:11:7:11:8 | t1 |
+| test.cpp:10:8:10:9 | t2 | test.cpp:11:7:11:8 | Phi input |
+| test.cpp:10:8:10:9 | t2 | test.cpp:11:7:11:8 | Phi input |
| test.cpp:10:8:10:9 | t2 | test.cpp:13:10:13:11 | t2 |
-| test.cpp:10:8:10:9 | t2 | test.cpp:15:3:15:6 | Phi |
-| test.cpp:10:8:10:9 | t2 | test.cpp:15:3:15:6 | Phi |
+| test.cpp:11:7:11:8 | Phi input | test.cpp:15:3:15:6 | SSA phi read(t2) |
+| test.cpp:11:7:11:8 | Phi input | test.cpp:15:3:15:6 | SSA phi(*t2) |
| test.cpp:11:7:11:8 | t1 | test.cpp:21:8:21:9 | t1 |
| test.cpp:12:5:12:10 | ... = ... | test.cpp:13:10:13:11 | t2 |
| test.cpp:12:10:12:10 | 0 | test.cpp:12:5:12:10 | ... = ... |
-| test.cpp:13:10:13:11 | t2 | test.cpp:15:3:15:6 | Phi |
-| test.cpp:13:10:13:11 | t2 | test.cpp:15:3:15:6 | Phi |
-| test.cpp:15:3:15:6 | Phi | test.cpp:15:8:15:9 | t2 |
-| test.cpp:15:3:15:6 | Phi | test.cpp:15:8:15:9 | t2 |
-| test.cpp:15:8:15:9 | t2 | test.cpp:23:19:23:19 | Phi |
-| test.cpp:15:8:15:9 | t2 | test.cpp:23:19:23:19 | Phi |
+| test.cpp:13:5:13:8 | Phi input | test.cpp:15:3:15:6 | SSA phi read(t2) |
+| test.cpp:13:5:13:8 | Phi input | test.cpp:15:3:15:6 | SSA phi(*t2) |
+| test.cpp:13:10:13:11 | t2 | test.cpp:13:5:13:8 | Phi input |
+| test.cpp:13:10:13:11 | t2 | test.cpp:13:5:13:8 | Phi input |
+| test.cpp:15:3:15:6 | SSA phi read(t2) | test.cpp:15:8:15:9 | t2 |
+| test.cpp:15:3:15:6 | SSA phi(*t2) | test.cpp:15:8:15:9 | t2 |
+| test.cpp:15:8:15:9 | t2 | test.cpp:23:15:23:16 | Phi input |
+| test.cpp:15:8:15:9 | t2 | test.cpp:23:15:23:16 | Phi input |
| test.cpp:17:3:17:8 | ... = ... | test.cpp:21:8:21:9 | t1 |
| test.cpp:17:8:17:8 | 0 | test.cpp:17:3:17:8 | ... = ... |
-| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | Phi |
-| test.cpp:21:8:21:9 | t1 | test.cpp:23:19:23:19 | Phi |
+| test.cpp:21:8:21:9 | t1 | test.cpp:23:15:23:16 | Phi input |
+| test.cpp:21:8:21:9 | t1 | test.cpp:23:15:23:16 | Phi input |
| test.cpp:23:15:23:16 | 0 | test.cpp:23:15:23:16 | 0 |
-| test.cpp:23:15:23:16 | 0 | test.cpp:23:19:23:19 | Phi |
-| test.cpp:23:19:23:19 | Phi | test.cpp:23:19:23:19 | i |
-| test.cpp:23:19:23:19 | Phi | test.cpp:23:19:23:19 | i |
-| test.cpp:23:19:23:19 | Phi | test.cpp:23:23:23:24 | t1 |
-| test.cpp:23:19:23:19 | Phi | test.cpp:23:23:23:24 | t1 |
-| test.cpp:23:19:23:19 | Phi | test.cpp:24:10:24:11 | t2 |
-| test.cpp:23:19:23:19 | Phi | test.cpp:24:10:24:11 | t2 |
+| test.cpp:23:15:23:16 | 0 | test.cpp:23:15:23:16 | Phi input |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi read(*t2) |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi read(i) |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi read(t1) |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi read(t2) |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi(*i) |
+| test.cpp:23:15:23:16 | Phi input | test.cpp:23:19:23:19 | SSA phi(*t1) |
+| test.cpp:23:19:23:19 | SSA phi read(*t2) | test.cpp:24:10:24:11 | t2 |
+| test.cpp:23:19:23:19 | SSA phi read(i) | test.cpp:23:19:23:19 | i |
+| test.cpp:23:19:23:19 | SSA phi read(t1) | test.cpp:23:23:23:24 | t1 |
+| test.cpp:23:19:23:19 | SSA phi read(t2) | test.cpp:24:10:24:11 | t2 |
+| test.cpp:23:19:23:19 | SSA phi(*i) | test.cpp:23:19:23:19 | i |
+| test.cpp:23:19:23:19 | SSA phi(*t1) | test.cpp:23:23:23:24 | t1 |
| test.cpp:23:19:23:19 | i | test.cpp:23:27:23:27 | i |
| test.cpp:23:19:23:19 | i | test.cpp:23:27:23:27 | i |
-| test.cpp:23:23:23:24 | t1 | test.cpp:23:19:23:19 | Phi |
+| test.cpp:23:23:23:24 | t1 | test.cpp:23:27:23:29 | Phi input |
| test.cpp:23:23:23:24 | t1 | test.cpp:26:8:26:9 | t1 |
| test.cpp:23:23:23:24 | t1 | test.cpp:26:8:26:9 | t1 |
| test.cpp:23:27:23:27 | *i | test.cpp:23:27:23:27 | *i |
| test.cpp:23:27:23:27 | *i | test.cpp:23:27:23:27 | i |
-| test.cpp:23:27:23:27 | i | test.cpp:23:19:23:19 | Phi |
| test.cpp:23:27:23:27 | i | test.cpp:23:27:23:27 | i |
| test.cpp:23:27:23:27 | i | test.cpp:23:27:23:27 | i |
-| test.cpp:23:27:23:29 | ... ++ | test.cpp:23:19:23:19 | Phi |
+| test.cpp:23:27:23:27 | i | test.cpp:23:27:23:29 | Phi input |
| test.cpp:23:27:23:29 | ... ++ | test.cpp:23:27:23:29 | ... ++ |
-| test.cpp:24:5:24:11 | ... = ... | test.cpp:23:19:23:19 | Phi |
-| test.cpp:24:10:24:11 | t2 | test.cpp:23:19:23:19 | Phi |
-| test.cpp:24:10:24:11 | t2 | test.cpp:23:19:23:19 | Phi |
+| test.cpp:23:27:23:29 | ... ++ | test.cpp:23:27:23:29 | Phi input |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi read(*t2) |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi read(i) |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi read(t1) |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi read(t2) |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi(*i) |
+| test.cpp:23:27:23:29 | Phi input | test.cpp:23:19:23:19 | SSA phi(*t1) |
+| test.cpp:24:5:24:11 | ... = ... | test.cpp:23:27:23:29 | Phi input |
+| test.cpp:24:10:24:11 | t2 | test.cpp:23:27:23:29 | Phi input |
+| test.cpp:24:10:24:11 | t2 | test.cpp:23:27:23:29 | Phi input |
| test.cpp:24:10:24:11 | t2 | test.cpp:24:5:24:11 | ... = ... |
| test.cpp:382:48:382:54 | source1 | test.cpp:384:16:384:23 | *& ... |
| test.cpp:383:12:383:13 | 0 | test.cpp:383:12:383:13 | 0 |
diff --git a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
index e8afa785492..42144e09814 100644
--- a/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
+++ b/cpp/ql/test/library-tests/dataflow/dataflow-tests/test-source-sink.expected
@@ -12,6 +12,10 @@ astFlow
| BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:62:14:62:14 | x |
| BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:64:14:64:14 | x |
| BarrierGuard.cpp:60:11:60:16 | call to source | BarrierGuard.cpp:66:14:66:14 | x |
+| BarrierGuard.cpp:81:11:81:16 | call to source | BarrierGuard.cpp:86:8:86:8 | x |
+| BarrierGuard.cpp:90:11:90:16 | call to source | BarrierGuard.cpp:101:8:101:8 | x |
+| BarrierGuard.cpp:107:11:107:16 | call to source | BarrierGuard.cpp:112:8:112:8 | x |
+| BarrierGuard.cpp:116:11:116:16 | call to source | BarrierGuard.cpp:127:8:127:8 | x |
| acrossLinkTargets.cpp:19:27:19:32 | call to source | acrossLinkTargets.cpp:12:8:12:8 | x |
| clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:18:8:18:19 | sourceArray1 |
| clang.cpp:12:9:12:20 | sourceArray1 | clang.cpp:22:8:22:20 | & ... |
@@ -153,6 +157,7 @@ irFlow
| clang.cpp:50:25:50:30 | call to source | clang.cpp:53:17:53:26 | *stackArray |
| clang.cpp:50:35:50:40 | call to source | clang.cpp:53:17:53:26 | *stackArray |
| clang.cpp:51:19:51:24 | call to source | clang.cpp:53:17:53:26 | *stackArray |
+| clang.cpp:57:21:57:28 | call to source | clang.cpp:59:8:59:8 | d |
| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:35:16:35:25 | call to notSource1 |
| dispatch.cpp:9:37:9:42 | call to source | dispatch.cpp:43:15:43:24 | call to notSource1 |
| dispatch.cpp:10:37:10:42 | call to source | dispatch.cpp:36:16:36:25 | call to notSource2 |
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/asio_streams.cpp b/cpp/ql/test/library-tests/dataflow/external-models/asio_streams.cpp
new file mode 100644
index 00000000000..401091122b8
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/asio_streams.cpp
@@ -0,0 +1,107 @@
+
+// --- stub library headers ---
+
+namespace std {
+ typedef unsigned long size_t;
+ #define SIZE_MAX 0xFFFFFFFF
+
+ template class allocator {
+ };
+
+ template struct char_traits {
+ };
+
+ template, class Allocator = allocator >
+ class basic_string {
+ public:
+ basic_string(const charT* s, const Allocator& a = Allocator());
+ };
+
+ typedef basic_string string;
+};
+
+namespace boost {
+ namespace system {
+ class error_code {
+ public:
+ operator bool() const;
+ };
+ };
+
+ namespace asio {
+ template
+ class basic_stream_socket /*: public basic_socket*/ {
+ };
+
+ namespace ip {
+ class tcp {
+ public:
+ typedef basic_stream_socket socket;
+ };
+ };
+
+ template> class basic_streambuf {
+ public:
+ basic_streambuf(
+ std::size_t maximum_size = SIZE_MAX,
+ const Allocator &allocator = Allocator());
+ };
+
+ typedef basic_streambuf<> streambuf;
+
+ class mutable_buffer {
+ };
+
+ template
+ mutable_buffer buffer(std::basic_string & data);
+
+ template std::size_t read_until(
+ SyncReadStream &s,
+ asio::basic_streambuf &b,
+ char delim,
+ boost::system::error_code &ec);
+
+ template std::size_t write(
+ SyncWriteStream &s,
+ const ConstBufferSequence &buffers,
+ boost::system::error_code &ec,
+ int constraint = 0); // simplified
+ };
+};
+
+// --- test code ---
+
+char *source();
+void sink(char *);
+void sink(std::string);
+void sink(boost::asio::streambuf);
+void sink(boost::asio::mutable_buffer);
+
+char *getenv(const char *name);
+int send(int, const void*, int, int);
+
+void test(boost::asio::ip::tcp::socket &socket) {
+ boost::asio::streambuf recv_buffer;
+ boost::system::error_code error;
+
+ boost::asio::read_until(socket, recv_buffer, '\0', error);
+ if (error) {
+ // ...
+ }
+ sink(recv_buffer); // $ ir
+
+ boost::asio::write(socket, recv_buffer, error); // $ ir
+
+ // ---
+
+ std::string send_str = std::string(source());
+ sink(send_str); // $ ir
+
+ boost::asio::mutable_buffer send_buffer = boost::asio::buffer(send_str);
+ sink(send_buffer); // $ ir
+
+ boost::asio::write(socket, send_buffer, error); // $ ir
+ if (error) {
+ // ...
+ }
+}
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.expected b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected
new file mode 100644
index 00000000000..8ec8033d086
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.expected
@@ -0,0 +1,2 @@
+testFailures
+failures
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml b/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml
new file mode 100644
index 00000000000..42ca51bc424
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.ext.yml
@@ -0,0 +1,16 @@
+extensions:
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: sourceModel
+ data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance
+ - ["", "", False, "ymlSource", "", "", "ReturnValue", "local", "manual"]
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: sinkModel
+ data: # namespace, type, subtypes, name, signature, ext, input, kind, provenance
+ - ["", "", False, "ymlSink", "", "", "Argument[0]", "test-sink", "manual"]
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: summaryModel
+ data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
+ - ["", "", False, "ymlStep", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
\ No newline at end of file
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/flow.ql b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql
new file mode 100644
index 00000000000..d6c2a70c4d9
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/flow.ql
@@ -0,0 +1,34 @@
+import TestUtilities.dataflow.FlowTestCommon
+import cpp
+import semmle.code.cpp.security.FlowSources
+
+module IRTest {
+ private import semmle.code.cpp.ir.IR
+ private import semmle.code.cpp.ir.dataflow.TaintTracking
+
+ /** Common data flow configuration to be used by tests. */
+ module TestAllocationConfig implements DataFlow::ConfigSig {
+ predicate isSource(DataFlow::Node source) {
+ // external flow source node
+ sourceNode(source, _)
+ or
+ // test source function
+ source.asExpr().(FunctionCall).getTarget().getName() = "source"
+ }
+
+ predicate isSink(DataFlow::Node sink) {
+ // external flow sink node
+ sinkNode(sink, _)
+ or
+ // test sink function
+ exists(FunctionCall call |
+ call.getTarget().getName() = "sink" and
+ sink.asExpr() = call.getAnArgument()
+ )
+ }
+ }
+
+ module IRFlow = TaintTracking::Global;
+}
+
+import MakeTest>
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected b/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected
new file mode 100644
index 00000000000..392c0bc03c1
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sinks.expected
@@ -0,0 +1,5 @@
+| asio_streams.cpp:93:29:93:39 | *recv_buffer | remote-sink |
+| asio_streams.cpp:103:29:103:39 | *send_buffer | remote-sink |
+| test.cpp:9:10:9:10 | 0 | test-sink |
+| test.cpp:11:10:11:10 | x | test-sink |
+| test.cpp:15:10:15:10 | y | test-sink |
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sinks.ext.yml b/cpp/ql/test/library-tests/dataflow/external-models/sinks.ext.yml
new file mode 100644
index 00000000000..b2ee15edfd3
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sinks.ext.yml
@@ -0,0 +1,6 @@
+extensions:
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: sinkModel
+ data: # namespace, type, subtypes, name, signature, ext, input, kind, provenance
+ - ["", "", False, "ymlSink", "", "", "Argument[0]", "test-sink", "manual"]
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sinks.ql b/cpp/ql/test/library-tests/dataflow/external-models/sinks.ql
new file mode 100644
index 00000000000..d3bafd1c369
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sinks.ql
@@ -0,0 +1,7 @@
+import cpp
+import semmle.code.cpp.ir.dataflow.DataFlow
+import semmle.code.cpp.dataflow.ExternalFlow
+
+from DataFlow::Node node, string kind
+where sinkNode(node, kind)
+select node, kind
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sources.expected b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected
new file mode 100644
index 00000000000..aa85e74fc03
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sources.expected
@@ -0,0 +1,2 @@
+| asio_streams.cpp:87:34:87:44 | read_until output argument | remote |
+| test.cpp:7:10:7:18 | call to ymlSource | local |
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sources.ext.yml b/cpp/ql/test/library-tests/dataflow/external-models/sources.ext.yml
new file mode 100644
index 00000000000..91bf18cf79b
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sources.ext.yml
@@ -0,0 +1,6 @@
+extensions:
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: sourceModel
+ data: # namespace, type, subtypes, name, signature, ext, output, kind, provenance
+ - ["", "", False, "ymlSource", "", "", "ReturnValue", "local", "manual"]
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/sources.ql b/cpp/ql/test/library-tests/dataflow/external-models/sources.ql
new file mode 100644
index 00000000000..ed79d740f88
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/sources.ql
@@ -0,0 +1,7 @@
+import cpp
+import semmle.code.cpp.ir.dataflow.DataFlow
+import semmle.code.cpp.dataflow.ExternalFlow
+
+from DataFlow::Node node, string kind
+where sourceNode(node, kind)
+select node, kind
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/steps.expected b/cpp/ql/test/library-tests/dataflow/external-models/steps.expected
new file mode 100644
index 00000000000..2bc7fb6b49a
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/steps.expected
@@ -0,0 +1,2 @@
+| asio_streams.cpp:100:64:100:71 | *send_str | asio_streams.cpp:100:44:100:62 | call to buffer |
+| test.cpp:13:18:13:18 | x | test.cpp:13:10:13:16 | call to ymlStep |
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/steps.ext.yml b/cpp/ql/test/library-tests/dataflow/external-models/steps.ext.yml
new file mode 100644
index 00000000000..c8a195b7aa6
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/steps.ext.yml
@@ -0,0 +1,6 @@
+extensions:
+ - addsTo:
+ pack: codeql/cpp-all
+ extensible: summaryModel
+ data: # namespace, type, subtypes, name, signature, ext, input, output, kind, provenance
+ - ["", "", False, "ymlStep", "", "", "Argument[0]", "ReturnValue", "taint", "manual"]
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/steps.ql b/cpp/ql/test/library-tests/dataflow/external-models/steps.ql
new file mode 100644
index 00000000000..2c141d8334b
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/steps.ql
@@ -0,0 +1,8 @@
+import cpp
+import semmle.code.cpp.ir.dataflow.DataFlow
+import semmle.code.cpp.dataflow.ExternalFlow
+import semmle.code.cpp.dataflow.internal.FlowSummaryImpl as FlowSummaryImpl
+
+from DataFlow::Node node1, DataFlow::Node node2
+where FlowSummaryImpl::Private::Steps::summaryThroughStepTaint(node1, node2, _)
+select node1, node2
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/test.cpp b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp
new file mode 100644
index 00000000000..aa50f6715f2
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/test.cpp
@@ -0,0 +1,16 @@
+
+int ymlSource();
+void ymlSink(int value);
+int ymlStep(int value);
+
+void test() {
+ int x = ymlSource();
+
+ ymlSink(0);
+
+ ymlSink(x); // $ ir
+
+ int y = ymlStep(x);
+
+ ymlSink(y); // $ ir
+}
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.expected
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql
new file mode 100644
index 00000000000..a162349b7cd
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/external-models/validatemodels.ql
@@ -0,0 +1,2 @@
+import cpp
+import semmle.code.cpp.dataflow.ExternalFlow::CsvValidation
diff --git a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected
index f49830443ca..0af54dc8570 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/dataflow-consistency.expected
@@ -184,6 +184,7 @@ postWithInFlow
| simple.cpp:65:7:65:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
| simple.cpp:83:12:83:13 | f1 [post update] | PostUpdateNode should not be the target of local flow. |
| simple.cpp:92:7:92:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
+| simple.cpp:118:7:118:7 | i [post update] | PostUpdateNode should not be the target of local flow. |
| struct_init.c:24:11:24:12 | ab [inner post update] | PostUpdateNode should not be the target of local flow. |
| struct_init.c:36:17:36:24 | nestedAB [inner post update] | PostUpdateNode should not be the target of local flow. |
viableImplInCallContextTooLarge
diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected
index 66439f38754..98ca0290f47 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected
@@ -1,7 +1,9 @@
edges
| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | |
+| A.cpp:25:7:25:10 | *this [post update] [c] | A.cpp:23:5:23:5 | *this [Return] [c] | provenance | |
| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | *this [post update] [c] | provenance | |
| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | |
+| A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:27:10:27:12 | *this [Return] [c] | provenance | |
| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | *this [post update] [c] | provenance | |
| A.cpp:28:8:28:10 | *this [c] | A.cpp:28:23:28:26 | *this [c] | provenance | |
| A.cpp:28:23:28:26 | *this [c] | A.cpp:28:29:28:29 | c | provenance | |
@@ -13,7 +15,7 @@ edges
| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | |
| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | |
| A.cpp:41:5:41:6 | insert output argument | A.cpp:43:10:43:12 | *& ... | provenance | |
-| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | provenance | |
+| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | insert output argument | provenance | Config |
| A.cpp:47:12:47:18 | new | A.cpp:47:12:47:18 | new | provenance | |
| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | |
| A.cpp:48:12:48:18 | *call to make [c] | A.cpp:48:12:48:18 | *call to make [c] | provenance | |
@@ -66,23 +68,28 @@ edges
| A.cpp:112:7:112:13 | *... = ... [a] | A.cpp:118:18:118:39 | *cc [a] | provenance | |
| A.cpp:118:18:118:39 | *cc [a] | A.cpp:120:12:120:13 | *c1 [a] | provenance | |
| A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | provenance | |
+| A.cpp:124:14:124:14 | *b [Return] [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | |
| A.cpp:124:14:124:14 | *b [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | |
+| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:124:14:124:14 | *b [Return] [c] | provenance | |
| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:124:14:124:14 | *b [c] | provenance | |
-| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | |
| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | |
| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | set output argument [c] | provenance | |
| A.cpp:126:12:126:18 | new | A.cpp:126:12:126:18 | new | provenance | |
| A.cpp:131:8:131:8 | f7 output argument [c] | A.cpp:132:10:132:10 | *b [c] | provenance | |
| A.cpp:132:10:132:10 | *b [c] | A.cpp:132:10:132:13 | c | provenance | |
+| A.cpp:140:5:140:5 | *this [Return] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | provenance | |
+| A.cpp:140:5:140:5 | *this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | |
+| A.cpp:140:13:140:13 | *b [Return] [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | |
| A.cpp:140:13:140:13 | *b [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | |
| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | |
+| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:140:13:140:13 | *b [Return] [c] | provenance | |
| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:140:13:140:13 | *b [c] | provenance | |
| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | provenance | |
-| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | |
| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | *b [post update] [c] | provenance | |
| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | |
-| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | provenance | |
-| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | |
+| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:140:5:140:5 | *this [Return] [*b, c] | provenance | |
+| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Return] [b] | provenance | |
+| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Return] [b] | provenance | |
| A.cpp:143:7:143:31 | *... = ... [c] | A.cpp:143:7:143:10 | *this [post update] [*b, c] | provenance | |
| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | |
| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | |
@@ -138,7 +145,10 @@ edges
| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | |
| A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:23 | *... = ... [*next, head] | provenance | |
| A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:23 | *... = ... [head] | provenance | |
+| A.cpp:183:7:183:10 | *this [post update] [head] | A.cpp:181:5:181:10 | *this [Return] [head] | provenance | |
| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [head] | provenance | |
+| A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | provenance | |
+| A.cpp:184:7:184:10 | *this [post update] [*next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, head] | provenance | |
| A.cpp:184:7:184:23 | *... = ... [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | provenance | |
| A.cpp:184:7:184:23 | *... = ... [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | provenance | |
| B.cpp:6:15:6:24 | new | B.cpp:6:15:6:24 | new | provenance | |
@@ -167,10 +177,14 @@ edges
| B.cpp:19:14:19:17 | *box1 [elem2] | B.cpp:19:10:19:24 | elem2 | provenance | |
| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | |
| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | |
+| B.cpp:35:7:35:10 | *this [post update] [elem1] | B.cpp:33:5:33:8 | *this [Return] [elem1] | provenance | |
| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | provenance | |
+| B.cpp:36:7:36:10 | *this [post update] [elem2] | B.cpp:33:5:33:8 | *this [Return] [elem2] | provenance | |
| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | *this [post update] [elem2] | provenance | |
| B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:21 | *... = ... [elem1] | provenance | |
| B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:21 | *... = ... [elem2] | provenance | |
+| B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | provenance | |
+| B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | provenance | |
| B.cpp:46:7:46:21 | *... = ... [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | provenance | |
| B.cpp:46:7:46:21 | *... = ... [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | provenance | |
| C.cpp:18:12:18:18 | *new [s1] | C.cpp:19:5:19:5 | *c [s1] | provenance | |
@@ -179,10 +193,12 @@ edges
| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:18:12:18:18 | *new [s3] | provenance | |
| C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | provenance | |
| C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | provenance | |
-| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | |
+| C.cpp:22:3:22:3 | *this [Return] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | |
+| C.cpp:22:3:22:3 | *this [Return] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | |
+| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:22:3:22:3 | *this [Return] [s1] | provenance | |
| C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | provenance | |
| C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | provenance | |
-| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | |
+| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:22:3:22:3 | *this [Return] [s3] | provenance | |
| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | provenance | |
| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | |
| C.cpp:27:8:27:11 | *this [s1] | C.cpp:29:10:29:11 | *this [s1] | provenance | |
@@ -194,6 +210,7 @@ edges
| D.cpp:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | provenance | |
| D.cpp:10:30:10:33 | elem | D.cpp:10:30:10:33 | elem | provenance | |
| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | |
+| D.cpp:11:29:11:32 | *this [post update] [elem] | D.cpp:11:10:11:16 | *this [Return] [elem] | provenance | |
| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | *this [post update] [elem] | provenance | |
| D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:30:17:32 | *this [*box, elem] | provenance | |
| D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | provenance | |
@@ -252,14 +269,16 @@ edges
| E.cpp:30:23:30:26 | *data [post update] [*buffer] | E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | provenance | |
| E.cpp:32:10:32:10 | *b [*buffer] | E.cpp:32:13:32:18 | *buffer | provenance | |
| E.cpp:33:18:33:19 | *& ... [data, *buffer] | E.cpp:19:27:19:27 | *p [data, *buffer] | provenance | |
+| aliasing.cpp:8:23:8:23 | *s [Return] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | |
| aliasing.cpp:8:23:8:23 | *s [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | |
+| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:8:23:8:23 | *s [Return] [m1] | provenance | |
| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:8:23:8:23 | *s [m1] | provenance | |
-| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | |
| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | provenance | |
| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | |
+| aliasing.cpp:12:25:12:25 | *s [Return] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | |
| aliasing.cpp:12:25:12:25 | *s [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | |
+| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:12:25:12:25 | *s [Return] [m1] | provenance | |
| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:12:25:12:25 | *s [m1] | provenance | |
-| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | |
| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | provenance | |
| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | |
| aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | aliasing.cpp:29:8:29:9 | *s1 [m1] | provenance | |
@@ -376,14 +395,18 @@ edges
| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:20:50:22 | *ptr [data] | provenance | |
| arrays.cpp:50:20:50:22 | *ptr [data] | arrays.cpp:50:8:50:25 | *access to array [data] | provenance | |
| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | |
+| by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:11:39:11:39 | *s [Return] [a] | provenance | |
| by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:11:39:11:39 | *s [a] | provenance | |
| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | *s [post update] [a] | provenance | |
| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | |
+| by_reference.cpp:16:5:16:8 | *this [post update] [a] | by_reference.cpp:15:8:15:18 | *this [Return] [a] | provenance | |
| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | *this [post update] [a] | provenance | |
| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | |
+| by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | by_reference.cpp:19:8:19:20 | *this [Return] [a] | provenance | |
| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | |
| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | provenance | |
| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | |
+| by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | by_reference.cpp:23:8:23:26 | *this [Return] [a] | provenance | |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | provenance | |
| by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:32:12:32:12 | *s [a] | provenance | |
@@ -424,26 +447,28 @@ edges
| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | provenance | |
| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | provenance | |
| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | |
+| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | |
| by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | |
| by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | |
| by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | |
| by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | |
+| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:83:31:83:35 | *inner [Return] [a] | provenance | |
| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:83:31:83:35 | *inner [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | |
| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | provenance | |
| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | |
+| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | |
| by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | |
| by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | |
| by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | |
| by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | |
+| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:87:31:87:35 | *inner [Return] [a] | provenance | |
| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:87:31:87:35 | *inner [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | |
| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | provenance | |
| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | |
| by_reference.cpp:91:25:91:26 | *pa | by_reference.cpp:104:15:104:22 | taint_a_ptr output argument | provenance | |
@@ -599,8 +624,10 @@ edges
| complex.cpp:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | provenance | |
| complex.cpp:10:20:10:21 | b_ | complex.cpp:10:20:10:21 | b_ | provenance | |
| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | |
+| complex.cpp:11:22:11:23 | *this [post update] [a_] | complex.cpp:11:8:11:11 | *this [Return] [a_] | provenance | |
| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | *this [post update] [a_] | provenance | |
| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | |
+| complex.cpp:12:22:12:23 | *this [post update] [b_] | complex.cpp:12:8:12:11 | *this [Return] [b_] | provenance | |
| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | *this [post update] [b_] | provenance | |
| complex.cpp:40:17:40:17 | *b [inner, f, a_] | complex.cpp:42:8:42:8 | *b [inner, f, a_] | provenance | |
| complex.cpp:40:17:40:17 | *b [inner, f, b_] | complex.cpp:43:8:43:8 | *b [inner, f, b_] | provenance | |
@@ -669,6 +696,8 @@ edges
| constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | |
| constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | provenance | |
| constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:22:19:23 | b_ | provenance | |
+| constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:23:5:23:7 | *this [Return] [a_] | provenance | |
+| constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:23:5:23:7 | *this [Return] [b_] | provenance | |
| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | |
| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | |
| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | provenance | |
@@ -696,11 +725,14 @@ edges
| constructors.cpp:46:9:46:9 | *h [a_] | constructors.cpp:26:15:26:15 | *f [a_] | provenance | |
| constructors.cpp:46:9:46:9 | *h [b_] | constructors.cpp:26:15:26:15 | *f [b_] | provenance | |
| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | |
+| qualifiers.cpp:9:30:9:33 | *this [post update] [a] | qualifiers.cpp:9:10:9:13 | *this [Return] [a] | provenance | |
| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | provenance | |
| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | |
+| qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | provenance | |
| qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:12:27:12:31 | *inner [a] | provenance | |
| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | provenance | |
| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | |
+| qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | provenance | |
| qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:13:29:13:33 | *inner [a] | provenance | |
| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | provenance | |
| qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | provenance | |
@@ -758,8 +790,10 @@ edges
| simple.cpp:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | provenance | |
| simple.cpp:19:22:19:23 | b_ | simple.cpp:19:22:19:23 | b_ | provenance | |
| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | |
+| simple.cpp:20:24:20:25 | *this [post update] [a_] | simple.cpp:20:10:20:13 | *this [Return] [a_] | provenance | |
| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | *this [post update] [a_] | provenance | |
| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | |
+| simple.cpp:21:24:21:25 | *this [post update] [b_] | simple.cpp:21:10:21:13 | *this [Return] [b_] | provenance | |
| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | *this [post update] [b_] | provenance | |
| simple.cpp:26:15:26:15 | *f [a_] | simple.cpp:28:10:28:10 | *f [a_] | provenance | |
| simple.cpp:26:15:26:15 | *f [b_] | simple.cpp:29:10:29:10 | *f [b_] | provenance | |
@@ -808,6 +842,10 @@ edges
| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:108:17:108:26 | call to user_input | provenance | |
| simple.cpp:108:17:108:26 | call to user_input | simple.cpp:109:43:109:43 | x | provenance | |
| simple.cpp:109:43:109:43 | x | simple.cpp:103:24:103:24 | x | provenance | |
+| simple.cpp:118:5:118:5 | *a [post update] [i] | simple.cpp:120:8:120:8 | *a [i] | provenance | |
+| simple.cpp:118:5:118:22 | ... = ... | simple.cpp:118:5:118:5 | *a [post update] [i] | provenance | |
+| simple.cpp:118:11:118:20 | call to user_input | simple.cpp:118:5:118:22 | ... = ... | provenance | |
+| simple.cpp:120:8:120:8 | *a [i] | simple.cpp:120:10:120:10 | i | provenance | |
| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | |
| struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:15:8:15:9 | *ab [a] | provenance | |
| struct_init.c:15:8:15:9 | *ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
@@ -844,9 +882,11 @@ edges
| struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | struct_init.c:46:16:46:24 | *pointerAB [a] | provenance | |
| struct_init.c:46:16:46:24 | *pointerAB [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | |
nodes
+| A.cpp:23:5:23:5 | *this [Return] [c] | semmle.label | *this [Return] [c] |
| A.cpp:23:10:23:10 | c | semmle.label | c |
| A.cpp:25:7:25:10 | *this [post update] [c] | semmle.label | *this [post update] [c] |
| A.cpp:25:7:25:17 | ... = ... | semmle.label | ... = ... |
+| A.cpp:27:10:27:12 | *this [Return] [c] | semmle.label | *this [Return] [c] |
| A.cpp:27:17:27:17 | c | semmle.label | c |
| A.cpp:27:22:27:25 | *this [post update] [c] | semmle.label | *this [post update] [c] |
| A.cpp:27:22:27:32 | ... = ... | semmle.label | ... = ... |
@@ -914,6 +954,7 @@ nodes
| A.cpp:118:18:118:39 | *cc [a] | semmle.label | *cc [a] |
| A.cpp:120:12:120:13 | *c1 [a] | semmle.label | *c1 [a] |
| A.cpp:120:12:120:16 | a | semmle.label | a |
+| A.cpp:124:14:124:14 | *b [Return] [c] | semmle.label | *b [Return] [c] |
| A.cpp:124:14:124:14 | *b [c] | semmle.label | *b [c] |
| A.cpp:126:5:126:5 | set output argument [c] | semmle.label | set output argument [c] |
| A.cpp:126:12:126:18 | new | semmle.label | new |
@@ -921,6 +962,10 @@ nodes
| A.cpp:131:8:131:8 | f7 output argument [c] | semmle.label | f7 output argument [c] |
| A.cpp:132:10:132:10 | *b [c] | semmle.label | *b [c] |
| A.cpp:132:10:132:13 | c | semmle.label | c |
+| A.cpp:140:5:140:5 | *this [Return] [*b, c] | semmle.label | *this [Return] [*b, c] |
+| A.cpp:140:5:140:5 | *this [Return] [b] | semmle.label | *this [Return] [b] |
+| A.cpp:140:5:140:5 | *this [Return] [b] | semmle.label | *this [Return] [b] |
+| A.cpp:140:13:140:13 | *b [Return] [c] | semmle.label | *b [Return] [c] |
| A.cpp:140:13:140:13 | *b [c] | semmle.label | *b [c] |
| A.cpp:140:13:140:13 | b | semmle.label | b |
| A.cpp:142:7:142:7 | *b [post update] [c] | semmle.label | *b [post update] [c] |
@@ -979,6 +1024,9 @@ nodes
| A.cpp:169:12:169:18 | head | semmle.label | head |
| A.cpp:173:26:173:26 | *o [c] | semmle.label | *o [c] |
| A.cpp:173:26:173:26 | *o [c] | semmle.label | *o [c] |
+| A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | semmle.label | *this [Return] [*next, *next, head] |
+| A.cpp:181:5:181:10 | *this [Return] [*next, head] | semmle.label | *this [Return] [*next, head] |
+| A.cpp:181:5:181:10 | *this [Return] [head] | semmle.label | *this [Return] [head] |
| A.cpp:181:15:181:21 | newHead | semmle.label | newHead |
| A.cpp:181:32:181:35 | *next [*next, head] | semmle.label | *next [*next, head] |
| A.cpp:181:32:181:35 | *next [head] | semmle.label | *next [head] |
@@ -1010,12 +1058,16 @@ nodes
| B.cpp:19:10:19:11 | *b2 [*box1, elem2] | semmle.label | *b2 [*box1, elem2] |
| B.cpp:19:10:19:24 | elem2 | semmle.label | elem2 |
| B.cpp:19:14:19:17 | *box1 [elem2] | semmle.label | *box1 [elem2] |
+| B.cpp:33:5:33:8 | *this [Return] [elem1] | semmle.label | *this [Return] [elem1] |
+| B.cpp:33:5:33:8 | *this [Return] [elem2] | semmle.label | *this [Return] [elem2] |
| B.cpp:33:16:33:17 | e1 | semmle.label | e1 |
| B.cpp:33:26:33:27 | e2 | semmle.label | e2 |
| B.cpp:35:7:35:10 | *this [post update] [elem1] | semmle.label | *this [post update] [elem1] |
| B.cpp:35:7:35:22 | ... = ... | semmle.label | ... = ... |
| B.cpp:36:7:36:10 | *this [post update] [elem2] | semmle.label | *this [post update] [elem2] |
| B.cpp:36:7:36:22 | ... = ... | semmle.label | ... = ... |
+| B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | semmle.label | *this [Return] [*box1, elem1] |
+| B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | semmle.label | *this [Return] [*box1, elem2] |
| B.cpp:44:16:44:17 | *b1 [elem1] | semmle.label | *b1 [elem1] |
| B.cpp:44:16:44:17 | *b1 [elem2] | semmle.label | *b1 [elem2] |
| B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | semmle.label | *this [post update] [*box1, elem1] |
@@ -1028,6 +1080,8 @@ nodes
| C.cpp:18:12:18:18 | call to C [s3] | semmle.label | call to C [s3] |
| C.cpp:19:5:19:5 | *c [s1] | semmle.label | *c [s1] |
| C.cpp:19:5:19:5 | *c [s3] | semmle.label | *c [s3] |
+| C.cpp:22:3:22:3 | *this [Return] [s1] | semmle.label | *this [Return] [s1] |
+| C.cpp:22:3:22:3 | *this [Return] [s3] | semmle.label | *this [Return] [s3] |
| C.cpp:22:3:22:3 | *this [post update] [s1] | semmle.label | *this [post update] [s1] |
| C.cpp:22:12:22:21 | new | semmle.label | new |
| C.cpp:22:12:22:21 | new | semmle.label | new |
@@ -1045,6 +1099,7 @@ nodes
| D.cpp:10:30:10:33 | *this [elem] | semmle.label | *this [elem] |
| D.cpp:10:30:10:33 | elem | semmle.label | elem |
| D.cpp:10:30:10:33 | elem | semmle.label | elem |
+| D.cpp:11:10:11:16 | *this [Return] [elem] | semmle.label | *this [Return] [elem] |
| D.cpp:11:24:11:24 | e | semmle.label | e |
| D.cpp:11:29:11:32 | *this [post update] [elem] | semmle.label | *this [post update] [elem] |
| D.cpp:11:29:11:36 | ... = ... | semmle.label | ... = ... |
@@ -1107,10 +1162,12 @@ nodes
| E.cpp:32:10:32:10 | *b [*buffer] | semmle.label | *b [*buffer] |
| E.cpp:32:13:32:18 | *buffer | semmle.label | *buffer |
| E.cpp:33:18:33:19 | *& ... [data, *buffer] | semmle.label | *& ... [data, *buffer] |
+| aliasing.cpp:8:23:8:23 | *s [Return] [m1] | semmle.label | *s [Return] [m1] |
| aliasing.cpp:8:23:8:23 | *s [m1] | semmle.label | *s [m1] |
| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | semmle.label | *s [post update] [m1] |
| aliasing.cpp:9:3:9:22 | ... = ... | semmle.label | ... = ... |
| aliasing.cpp:9:11:9:20 | call to user_input | semmle.label | call to user_input |
+| aliasing.cpp:12:25:12:25 | *s [Return] [m1] | semmle.label | *s [Return] [m1] |
| aliasing.cpp:12:25:12:25 | *s [m1] | semmle.label | *s [m1] |
| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | semmle.label | *s [post update] [m1] |
| aliasing.cpp:13:3:13:21 | ... = ... | semmle.label | ... = ... |
@@ -1236,16 +1293,20 @@ nodes
| arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | semmle.label | *indirect [*ptr, data] |
| arrays.cpp:50:20:50:22 | *ptr [data] | semmle.label | *ptr [data] |
| arrays.cpp:50:27:50:30 | data | semmle.label | data |
+| by_reference.cpp:11:39:11:39 | *s [Return] [a] | semmle.label | *s [Return] [a] |
| by_reference.cpp:11:39:11:39 | *s [a] | semmle.label | *s [a] |
| by_reference.cpp:11:48:11:52 | value | semmle.label | value |
| by_reference.cpp:12:5:12:5 | *s [post update] [a] | semmle.label | *s [post update] [a] |
| by_reference.cpp:12:5:12:16 | ... = ... | semmle.label | ... = ... |
+| by_reference.cpp:15:8:15:18 | *this [Return] [a] | semmle.label | *this [Return] [a] |
| by_reference.cpp:15:26:15:30 | value | semmle.label | value |
| by_reference.cpp:16:5:16:8 | *this [post update] [a] | semmle.label | *this [post update] [a] |
| by_reference.cpp:16:5:16:19 | ... = ... | semmle.label | ... = ... |
+| by_reference.cpp:19:8:19:20 | *this [Return] [a] | semmle.label | *this [Return] [a] |
| by_reference.cpp:19:28:19:32 | value | semmle.label | value |
| by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | semmle.label | setDirectly output argument [a] |
| by_reference.cpp:20:23:20:27 | value | semmle.label | value |
+| by_reference.cpp:23:8:23:26 | *this [Return] [a] | semmle.label | *this [Return] [a] |
| by_reference.cpp:23:34:23:38 | value | semmle.label | value |
| by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | semmle.label | nonMemberSetA output argument [a] |
| by_reference.cpp:24:25:24:29 | value | semmle.label | value |
@@ -1285,10 +1346,12 @@ nodes
| by_reference.cpp:68:21:68:30 | call to user_input | semmle.label | call to user_input |
| by_reference.cpp:69:8:69:20 | call to nonMemberGetA | semmle.label | call to nonMemberGetA |
| by_reference.cpp:69:22:69:23 | *& ... [a] | semmle.label | *& ... [a] |
+| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | semmle.label | *inner [Return] [a] |
| by_reference.cpp:83:31:83:35 | *inner [a] | semmle.label | *inner [a] |
| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | semmle.label | *inner [post update] [a] |
| by_reference.cpp:84:3:84:25 | ... = ... | semmle.label | ... = ... |
| by_reference.cpp:84:14:84:23 | call to user_input | semmle.label | call to user_input |
+| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | semmle.label | *inner [Return] [a] |
| by_reference.cpp:87:31:87:35 | *inner [a] | semmle.label | *inner [a] |
| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | semmle.label | *inner [post update] [a] |
| by_reference.cpp:88:3:88:24 | ... = ... | semmle.label | ... = ... |
@@ -1454,9 +1517,11 @@ nodes
| complex.cpp:10:20:10:21 | *this [b_] | semmle.label | *this [b_] |
| complex.cpp:10:20:10:21 | b_ | semmle.label | b_ |
| complex.cpp:10:20:10:21 | b_ | semmle.label | b_ |
+| complex.cpp:11:8:11:11 | *this [Return] [a_] | semmle.label | *this [Return] [a_] |
| complex.cpp:11:17:11:17 | a | semmle.label | a |
| complex.cpp:11:22:11:23 | *this [post update] [a_] | semmle.label | *this [post update] [a_] |
| complex.cpp:11:22:11:27 | ... = ... | semmle.label | ... = ... |
+| complex.cpp:12:8:12:11 | *this [Return] [b_] | semmle.label | *this [Return] [b_] |
| complex.cpp:12:17:12:17 | b | semmle.label | b |
| complex.cpp:12:22:12:23 | *this [post update] [b_] | semmle.label | *this [post update] [b_] |
| complex.cpp:12:22:12:27 | ... = ... | semmle.label | ... = ... |
@@ -1531,6 +1596,8 @@ nodes
| constructors.cpp:19:22:19:23 | *this [b_] | semmle.label | *this [b_] |
| constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ |
| constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ |
+| constructors.cpp:23:5:23:7 | *this [Return] [a_] | semmle.label | *this [Return] [a_] |
+| constructors.cpp:23:5:23:7 | *this [Return] [b_] | semmle.label | *this [Return] [b_] |
| constructors.cpp:23:5:23:7 | *this [post update] [a_] | semmle.label | *this [post update] [a_] |
| constructors.cpp:23:5:23:7 | *this [post update] [b_] | semmle.label | *this [post update] [b_] |
| constructors.cpp:23:13:23:13 | a | semmle.label | a |
@@ -1555,13 +1622,16 @@ nodes
| constructors.cpp:43:9:43:9 | *g [b_] | semmle.label | *g [b_] |
| constructors.cpp:46:9:46:9 | *h [a_] | semmle.label | *h [a_] |
| constructors.cpp:46:9:46:9 | *h [b_] | semmle.label | *h [b_] |
+| qualifiers.cpp:9:10:9:13 | *this [Return] [a] | semmle.label | *this [Return] [a] |
| qualifiers.cpp:9:21:9:25 | value | semmle.label | value |
| qualifiers.cpp:9:30:9:33 | *this [post update] [a] | semmle.label | *this [post update] [a] |
| qualifiers.cpp:9:30:9:44 | ... = ... | semmle.label | ... = ... |
+| qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | semmle.label | *inner [Return] [a] |
| qualifiers.cpp:12:27:12:31 | *inner [a] | semmle.label | *inner [a] |
| qualifiers.cpp:12:40:12:44 | value | semmle.label | value |
| qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | semmle.label | *inner [post update] [a] |
| qualifiers.cpp:12:49:12:64 | ... = ... | semmle.label | ... = ... |
+| qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | semmle.label | *inner [Return] [a] |
| qualifiers.cpp:13:29:13:33 | *inner [a] | semmle.label | *inner [a] |
| qualifiers.cpp:13:42:13:46 | value | semmle.label | value |
| qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | semmle.label | *inner [post update] [a] |
@@ -1626,9 +1696,11 @@ nodes
| simple.cpp:19:22:19:23 | *this [b_] | semmle.label | *this [b_] |
| simple.cpp:19:22:19:23 | b_ | semmle.label | b_ |
| simple.cpp:19:22:19:23 | b_ | semmle.label | b_ |
+| simple.cpp:20:10:20:13 | *this [Return] [a_] | semmle.label | *this [Return] [a_] |
| simple.cpp:20:19:20:19 | a | semmle.label | a |
| simple.cpp:20:24:20:25 | *this [post update] [a_] | semmle.label | *this [post update] [a_] |
| simple.cpp:20:24:20:29 | ... = ... | semmle.label | ... = ... |
+| simple.cpp:21:10:21:13 | *this [Return] [b_] | semmle.label | *this [Return] [b_] |
| simple.cpp:21:19:21:19 | b | semmle.label | b |
| simple.cpp:21:24:21:25 | *this [post update] [b_] | semmle.label | *this [post update] [b_] |
| simple.cpp:21:24:21:29 | ... = ... | semmle.label | ... = ... |
@@ -1679,6 +1751,11 @@ nodes
| simple.cpp:108:17:108:26 | call to user_input | semmle.label | call to user_input |
| simple.cpp:108:17:108:26 | call to user_input | semmle.label | call to user_input |
| simple.cpp:109:43:109:43 | x | semmle.label | x |
+| simple.cpp:118:5:118:5 | *a [post update] [i] | semmle.label | *a [post update] [i] |
+| simple.cpp:118:5:118:22 | ... = ... | semmle.label | ... = ... |
+| simple.cpp:118:11:118:20 | call to user_input | semmle.label | call to user_input |
+| simple.cpp:120:8:120:8 | *a [i] | semmle.label | *a [i] |
+| simple.cpp:120:10:120:10 | i | semmle.label | i |
| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] |
| struct_init.c:14:24:14:25 | *ab [a] | semmle.label | *ab [a] |
| struct_init.c:15:8:15:9 | *ab [a] | semmle.label | *ab [a] |
@@ -1715,67 +1792,67 @@ nodes
| struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | semmle.label | *outer [*pointerAB, a] |
| struct_init.c:46:16:46:24 | *pointerAB [a] | semmle.label | *pointerAB [a] |
subpaths
-| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:10 | *this [post update] [c] | A.cpp:31:14:31:21 | call to B [c] |
+| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Return] [c] | A.cpp:31:14:31:21 | call to B [c] |
| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | A.cpp:29:15:29:18 | **make [c] | A.cpp:48:12:48:18 | *call to make [c] |
-| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:55:5:55:5 | set output argument [c] |
+| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:55:5:55:5 | set output argument [c] |
| A.cpp:56:10:56:10 | *b [c] | A.cpp:28:8:28:10 | *this [c] | A.cpp:28:8:28:10 | *get | A.cpp:56:10:56:17 | call to get |
| A.cpp:57:11:57:24 | *new [c] | A.cpp:28:8:28:10 | *this [c] | A.cpp:28:8:28:10 | *get | A.cpp:57:10:57:32 | call to get |
-| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:10 | *this [post update] [c] | A.cpp:57:11:57:24 | call to B [c] |
+| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Return] [c] | A.cpp:57:11:57:24 | call to B [c] |
| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | A.cpp:85:9:85:14 | **setOnB [c] | A.cpp:64:10:64:15 | *call to setOnB [c] |
| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | A.cpp:78:6:78:15 | **setOnBWrap [c] | A.cpp:73:10:73:19 | *call to setOnBWrap [c] |
| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | A.cpp:85:9:85:14 | **setOnB [c] | A.cpp:81:10:81:15 | *call to setOnB [c] |
-| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:90:7:90:8 | set output argument [c] |
-| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:126:5:126:5 | set output argument [c] |
-| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] |
+| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:90:7:90:8 | set output argument [c] |
+| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:126:5:126:5 | set output argument [c] |
+| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | *this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] |
| A.cpp:152:10:152:13 | *b [c] | A.cpp:173:26:173:26 | *o [c] | A.cpp:173:26:173:26 | *o [c] | A.cpp:152:10:152:13 | sink output argument [c] |
-| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:10 | *this [post update] [head] | A.cpp:160:18:160:60 | call to MyList [head] |
-| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | A.cpp:161:18:161:40 | call to MyList [*next, head] |
-| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] |
-| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:10 | *this [post update] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] |
-| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] |
-| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:10 | *this [post update] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] |
-| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] |
+| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | *this [Return] [head] | A.cpp:160:18:160:60 | call to MyList [head] |
+| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | A.cpp:181:5:181:10 | *this [Return] [*next, head] | A.cpp:161:18:161:40 | call to MyList [*next, head] |
+| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] |
+| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | *this [Return] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] |
+| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] |
+| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | *this [Return] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] |
+| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] |
| D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] |
| D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:10:11:10:17 | *this [elem] | D.cpp:10:11:10:17 | *getElem | D.cpp:22:10:22:33 | call to getElem |
-| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:32 | *this [post update] [elem] | D.cpp:37:8:37:10 | setElem output argument [elem] |
-| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:32 | *this [post update] [elem] | D.cpp:51:8:51:14 | setElem output argument [elem] |
-| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:8 | *this [post update] [a] | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] |
+| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Return] [elem] | D.cpp:37:8:37:10 | setElem output argument [elem] |
+| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Return] [elem] | D.cpp:51:8:51:14 | setElem output argument [elem] |
+| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Return] [a] | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] |
+| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Return] [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] |
-| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] |
| by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:35:9:35:19 | *getDirectly | by_reference.cpp:40:18:40:28 | call to getDirectly |
| by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:31:16:31:28 | *nonMemberGetA | by_reference.cpp:44:12:44:24 | call to nonMemberGetA |
-| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:8 | *this [post update] [a] | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] |
+| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Return] [a] | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] |
| by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:35:9:35:19 | *getDirectly | by_reference.cpp:51:10:51:20 | call to getDirectly |
-| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] |
+| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | *this [Return] [a] | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] |
| by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:39:9:39:21 | *getIndirectly | by_reference.cpp:57:10:57:22 | call to getIndirectly |
-| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] |
+| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | *this [Return] [a] | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] |
| by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:43:9:43:27 | *getThroughNonMember | by_reference.cpp:63:10:63:28 | call to getThroughNonMember |
+| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Return] [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] |
| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] |
-| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] |
| by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:31:16:31:28 | *nonMemberGetA | by_reference.cpp:69:8:69:20 | call to nonMemberGetA |
| complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:7:9:7 | *a | complex.cpp:42:18:42:18 | call to a |
| complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | complex.cpp:10:7:10:7 | *b | complex.cpp:43:18:43:18 | call to b |
-| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:23 | *this [post update] [a_] | complex.cpp:53:12:53:12 | setA output argument [a_] |
-| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:23 | *this [post update] [b_] | complex.cpp:54:12:54:12 | setB output argument [b_] |
-| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:23 | *this [post update] [a_] | complex.cpp:55:12:55:12 | setA output argument [a_] |
-| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:23 | *this [post update] [b_] | complex.cpp:56:12:56:12 | setB output argument [b_] |
+| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Return] [a_] | complex.cpp:53:12:53:12 | setA output argument [a_] |
+| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Return] [b_] | complex.cpp:54:12:54:12 | setB output argument [b_] |
+| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Return] [a_] | complex.cpp:55:12:55:12 | setA output argument [a_] |
+| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Return] [b_] | complex.cpp:56:12:56:12 | setB output argument [b_] |
| constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:9:18:9 | *a | constructors.cpp:28:12:28:12 | call to a |
| constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:9:19:9 | *b | constructors.cpp:29:12:29:12 | call to b |
-| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:34:9:34:9 | call to Foo [a_] |
-| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:35:9:35:9 | call to Foo [b_] |
-| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:36:9:36:9 | call to Foo [a_] |
-| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:36:9:36:9 | call to Foo [b_] |
-| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | qualifiers.cpp:27:11:27:18 | setA output argument [a] |
+| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Return] [a_] | constructors.cpp:34:9:34:9 | call to Foo [a_] |
+| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Return] [b_] | constructors.cpp:35:9:35:9 | call to Foo [b_] |
+| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Return] [a_] | constructors.cpp:36:9:36:9 | call to Foo [a_] |
+| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Return] [b_] | constructors.cpp:36:9:36:9 | call to Foo [b_] |
+| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | *this [Return] [a] | qualifiers.cpp:27:11:27:18 | setA output argument [a] |
+| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] |
| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | *inner [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] |
-| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] |
+| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] |
| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | *inner [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] |
-| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] |
| simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:9:18:9 | *a | simple.cpp:28:12:28:12 | call to a |
| simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:19:9:19:9 | *this [b_] | simple.cpp:19:9:19:9 | *b | simple.cpp:29:12:29:12 | call to b |
-| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:25 | *this [post update] [a_] | simple.cpp:39:5:39:5 | setA output argument [a_] |
-| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:25 | *this [post update] [b_] | simple.cpp:40:5:40:5 | setB output argument [b_] |
-| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:25 | *this [post update] [a_] | simple.cpp:41:5:41:5 | setA output argument [a_] |
-| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:25 | *this [post update] [b_] | simple.cpp:42:5:42:5 | setB output argument [b_] |
+| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Return] [a_] | simple.cpp:39:5:39:5 | setA output argument [a_] |
+| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Return] [b_] | simple.cpp:40:5:40:5 | setB output argument [b_] |
+| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Return] [a_] | simple.cpp:41:5:41:5 | setA output argument [a_] |
+| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Return] [b_] | simple.cpp:42:5:42:5 | setB output argument [b_] |
| simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:78:9:78:15 | *getf2f1 | simple.cpp:84:14:84:20 | call to getf2f1 |
| struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:24:10:24:12 | absink output argument [a] |
#select
@@ -1889,6 +1966,7 @@ subpaths
| simple.cpp:84:14:84:20 | call to getf2f1 | simple.cpp:83:17:83:26 | call to user_input | simple.cpp:84:14:84:20 | call to getf2f1 | call to getf2f1 flows from $@ | simple.cpp:83:17:83:26 | call to user_input | call to user_input |
| simple.cpp:94:13:94:13 | i | simple.cpp:92:11:92:20 | call to user_input | simple.cpp:94:13:94:13 | i | i flows from $@ | simple.cpp:92:11:92:20 | call to user_input | call to user_input |
| simple.cpp:104:14:104:14 | x | simple.cpp:108:17:108:26 | call to user_input | simple.cpp:104:14:104:14 | x | x flows from $@ | simple.cpp:108:17:108:26 | call to user_input | call to user_input |
+| simple.cpp:120:10:120:10 | i | simple.cpp:118:11:118:20 | call to user_input | simple.cpp:120:10:120:10 | i | i flows from $@ | simple.cpp:118:11:118:20 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:20:20:20:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:20:20:20:29 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:27:7:27:16 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:27:7:27:16 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:40:20:40:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:40:20:40:29 | call to user_input | call to user_input |
diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected
index 4c85e26fc79..4d249e34664 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-diff.expected
@@ -289,3 +289,5 @@ WARNING: Module DataFlow has been deprecated and may be removed in future (parti
| simple.cpp:83:12:83:13 | f1 | AST only |
| simple.cpp:92:7:92:7 | i | AST only |
| simple.cpp:94:10:94:11 | a2 | IR only |
+| simple.cpp:118:7:118:7 | i | AST only |
+| simple.cpp:120:8:120:8 | a | IR only |
diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected
index 823997fd7d3..fcb70d77d5b 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition-ir.expected
@@ -649,6 +649,8 @@
| simple.cpp:84:14:84:20 | this |
| simple.cpp:92:5:92:5 | a |
| simple.cpp:94:10:94:11 | a2 |
+| simple.cpp:118:5:118:5 | a |
+| simple.cpp:120:8:120:8 | a |
| struct_init.c:15:8:15:9 | ab |
| struct_init.c:15:12:15:12 | a |
| struct_init.c:16:8:16:9 | ab |
diff --git a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected
index 608f884ddc0..48c0ff8cc9b 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/partial-definition.expected
@@ -579,6 +579,8 @@ WARNING: Module DataFlow has been deprecated and may be removed in future (parti
| simple.cpp:84:14:84:20 | this |
| simple.cpp:92:5:92:5 | a |
| simple.cpp:92:7:92:7 | i |
+| simple.cpp:118:5:118:5 | a |
+| simple.cpp:118:7:118:7 | i |
| struct_init.c:15:8:15:9 | ab |
| struct_init.c:15:12:15:12 | a |
| struct_init.c:16:8:16:9 | ab |
diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected
index 3eebd355b14..17cd0b7ce02 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected
+++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected
@@ -1,7 +1,9 @@
edges
| A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | |
+| A.cpp:25:7:25:10 | this [post update] [c] | A.cpp:23:5:23:5 | this [Return] [c] | provenance | |
| A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | this [post update] [c] | provenance | |
| A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | |
+| A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:27:10:27:12 | this [Return] [c] | provenance | |
| A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | this [post update] [c] | provenance | |
| A.cpp:28:8:28:10 | this [c] | A.cpp:28:23:28:26 | this [c] | provenance | |
| A.cpp:28:23:28:26 | this [c] | A.cpp:28:29:28:29 | c | provenance | |
@@ -10,8 +12,9 @@ edges
| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | provenance | |
| A.cpp:31:20:31:20 | c | A.cpp:31:14:31:21 | call to B [c] | provenance | |
| A.cpp:41:5:41:6 | ref arg ct | A.cpp:43:11:43:12 | ct | provenance | |
-| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | provenance | |
+| A.cpp:41:15:41:21 | new | A.cpp:41:5:41:6 | ref arg ct | provenance | Config |
| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | provenance | |
+| A.cpp:43:11:43:12 | ct | A.cpp:43:10:43:12 | & ... | provenance | Config |
| A.cpp:47:12:47:18 | new | A.cpp:48:20:48:20 | c | provenance | |
| A.cpp:48:12:48:18 | call to make [c] | A.cpp:49:10:49:10 | b [c] | provenance | |
| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | provenance | |
@@ -51,22 +54,27 @@ edges
| A.cpp:103:14:103:14 | c [a] | A.cpp:120:12:120:13 | c1 [a] | provenance | |
| A.cpp:107:12:107:13 | c1 [a] | A.cpp:107:16:107:16 | a | provenance | |
| A.cpp:120:12:120:13 | c1 [a] | A.cpp:120:16:120:16 | a | provenance | |
+| A.cpp:124:14:124:14 | b [Return] [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | |
| A.cpp:124:14:124:14 | b [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | |
+| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [Return] [c] | provenance | |
| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [c] | provenance | |
-| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | |
| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | |
| A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | ref arg b [c] | provenance | |
| A.cpp:131:8:131:8 | ref arg b [c] | A.cpp:132:10:132:10 | b [c] | provenance | |
| A.cpp:132:10:132:10 | b [c] | A.cpp:132:13:132:13 | c | provenance | |
+| A.cpp:140:5:140:5 | this [Return] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | provenance | |
+| A.cpp:140:5:140:5 | this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | |
| A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | |
+| A.cpp:140:13:140:13 | b [Return] [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | |
| A.cpp:140:13:140:13 | b [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | |
+| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [Return] [c] | provenance | |
| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [c] | provenance | |
| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:143:7:143:31 | ... = ... [c] | provenance | |
-| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | |
| A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | b [post update] [c] | provenance | |
| A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | |
-| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | provenance | |
-| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | |
+| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:140:5:140:5 | this [Return] [b, c] | provenance | |
+| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Return] [b] | provenance | |
+| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Return] [b] | provenance | |
| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | |
| A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | |
| A.cpp:143:7:143:31 | ... = ... [c] | A.cpp:143:7:143:10 | this [post update] [b, c] | provenance | |
@@ -118,7 +126,10 @@ edges
| A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | |
| A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:23 | ... = ... [head] | provenance | |
| A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:23 | ... = ... [next, head] | provenance | |
+| A.cpp:183:7:183:10 | this [post update] [head] | A.cpp:181:5:181:10 | this [Return] [head] | provenance | |
| A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [head] | provenance | |
+| A.cpp:184:7:184:10 | this [post update] [next, head] | A.cpp:181:5:181:10 | this [Return] [next, head] | provenance | |
+| A.cpp:184:7:184:10 | this [post update] [next, next, head] | A.cpp:181:5:181:10 | this [Return] [next, next, head] | provenance | |
| A.cpp:184:7:184:23 | ... = ... [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | provenance | |
| A.cpp:184:7:184:23 | ... = ... [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | provenance | |
| B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | provenance | |
@@ -141,19 +152,25 @@ edges
| B.cpp:19:14:19:17 | box1 [elem2] | B.cpp:19:20:19:24 | elem2 | provenance | |
| B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | |
| B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | |
+| B.cpp:35:7:35:10 | this [post update] [elem1] | B.cpp:33:5:33:8 | this [Return] [elem1] | provenance | |
| B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | provenance | |
+| B.cpp:36:7:36:10 | this [post update] [elem2] | B.cpp:33:5:33:8 | this [Return] [elem2] | provenance | |
| B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | this [post update] [elem2] | provenance | |
| B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:21 | ... = ... [elem1] | provenance | |
| B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:21 | ... = ... [elem2] | provenance | |
+| B.cpp:46:7:46:10 | this [post update] [box1, elem1] | B.cpp:44:5:44:8 | this [Return] [box1, elem1] | provenance | |
+| B.cpp:46:7:46:10 | this [post update] [box1, elem2] | B.cpp:44:5:44:8 | this [Return] [box1, elem2] | provenance | |
| B.cpp:46:7:46:21 | ... = ... [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | provenance | |
| B.cpp:46:7:46:21 | ... = ... [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | provenance | |
| C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | c [s1] | provenance | |
| C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | c [s3] | provenance | |
| C.cpp:19:5:19:5 | c [s1] | C.cpp:27:8:27:11 | this [s1] | provenance | |
| C.cpp:19:5:19:5 | c [s3] | C.cpp:27:8:27:11 | this [s3] | provenance | |
-| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | |
+| C.cpp:22:3:22:3 | this [Return] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | |
+| C.cpp:22:3:22:3 | this [Return] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | |
+| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:22:3:22:3 | this [Return] [s1] | provenance | |
| C.cpp:22:12:22:21 | new | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | provenance | |
-| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | |
+| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:22:3:22:3 | this [Return] [s3] | provenance | |
| C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | this [post update] [s3] | provenance | |
| C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | |
| C.cpp:27:8:27:11 | this [s1] | C.cpp:29:10:29:11 | this [s1] | provenance | |
@@ -163,6 +180,7 @@ edges
| D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | this [elem] | provenance | |
| D.cpp:10:30:10:33 | this [elem] | D.cpp:10:30:10:33 | elem | provenance | |
| D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | |
+| D.cpp:11:29:11:32 | this [post update] [elem] | D.cpp:11:10:11:16 | this [Return] [elem] | provenance | |
| D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | this [post update] [elem] | provenance | |
| D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | this [box, elem] | provenance | |
| D.cpp:17:30:17:32 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | provenance | |
@@ -215,14 +233,16 @@ edges
| E.cpp:32:10:32:10 | b [buffer] | E.cpp:32:13:32:18 | buffer | provenance | |
| E.cpp:33:18:33:19 | & ... [data, buffer] | E.cpp:19:27:19:27 | p [data, buffer] | provenance | |
| E.cpp:33:19:33:19 | p [data, buffer] | E.cpp:33:18:33:19 | & ... [data, buffer] | provenance | |
+| aliasing.cpp:8:23:8:23 | s [Return] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | |
| aliasing.cpp:8:23:8:23 | s [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | |
+| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [Return] [m1] | provenance | |
| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [m1] | provenance | |
-| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | |
| aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | s [post update] [m1] | provenance | |
| aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | |
+| aliasing.cpp:12:25:12:25 | s [Return] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | |
| aliasing.cpp:12:25:12:25 | s [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | |
+| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [Return] [m1] | provenance | |
| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [m1] | provenance | |
-| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | |
| aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | s [post update] [m1] | provenance | |
| aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | |
| aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | aliasing.cpp:29:8:29:9 | s1 [m1] | provenance | |
@@ -244,13 +264,13 @@ edges
| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | |
| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | |
| aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | |
+| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | |
+| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | |
+| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | |
+| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | |
+| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | |
| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa | provenance | |
-| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:106:4:106:5 | pa [inner post update] | provenance | |
+| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa [Return] | provenance | |
| aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] | provenance | |
| aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] | provenance | |
| aliasing.cpp:159:9:159:9 | s [data] | aliasing.cpp:159:11:159:14 | data | provenance | |
@@ -330,14 +350,18 @@ edges
| arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] | provenance | |
| arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] | provenance | |
| by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | |
+| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [Return] [a] | provenance | |
| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [a] | provenance | |
| by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | s [post update] [a] | provenance | |
| by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | |
+| by_reference.cpp:16:5:16:8 | this [post update] [a] | by_reference.cpp:15:8:15:18 | this [Return] [a] | provenance | |
| by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | this [post update] [a] | provenance | |
| by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | |
+| by_reference.cpp:20:5:20:8 | ref arg this [a] | by_reference.cpp:19:8:19:20 | this [Return] [a] | provenance | |
| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | |
| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | provenance | |
| by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | |
+| by_reference.cpp:24:19:24:22 | ref arg this [a] | by_reference.cpp:23:8:23:26 | this [Return] [a] | provenance | |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | provenance | |
| by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:12:32:12 | s [a] | provenance | |
@@ -371,34 +395,36 @@ edges
| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | provenance | |
| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | |
| by_reference.cpp:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | |
+| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | |
| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | |
| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | |
| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | |
| by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | |
+| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [Return] [a] | provenance | |
| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | |
-| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | |
| by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] | provenance | |
| by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | |
+| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | |
+| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | |
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | |
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | |
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | |
| by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | |
+| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [Return] [a] | provenance | |
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | |
-| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | |
| by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] | provenance | |
| by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | |
| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | |
| by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | |
-| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | |
-| by_reference.cpp:92:4:92:5 | pa [inner post update] | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | |
+| by_reference.cpp:91:25:91:26 | pa [Return] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | |
+| by_reference.cpp:91:25:91:26 | pa [Return] | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | |
| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa | provenance | |
-| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:92:4:92:5 | pa [inner post update] | provenance | |
+| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa [Return] | provenance | |
| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a | provenance | |
| by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a | provenance | |
| by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa | provenance | |
@@ -493,8 +519,10 @@ edges
| complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | provenance | |
| complex.cpp:10:20:10:21 | this [b_] | complex.cpp:10:20:10:21 | b_ | provenance | |
| complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | |
+| complex.cpp:11:22:11:23 | this [post update] [a_] | complex.cpp:11:8:11:11 | this [Return] [a_] | provenance | |
| complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | this [post update] [a_] | provenance | |
| complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | |
+| complex.cpp:12:22:12:23 | this [post update] [b_] | complex.cpp:12:8:12:11 | this [Return] [b_] | provenance | |
| complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | this [post update] [b_] | provenance | |
| complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] | provenance | |
| complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] | provenance | |
@@ -557,7 +585,9 @@ edges
| constructors.cpp:19:22:19:23 | this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | |
| constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | |
| constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | |
+| constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | constructors.cpp:23:5:23:7 | this [Return] [a_] | provenance | |
| constructors.cpp:23:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | provenance | |
+| constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | constructors.cpp:23:5:23:7 | this [Return] [b_] | provenance | |
| constructors.cpp:23:35:23:35 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | provenance | |
| constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] | provenance | |
| constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] | provenance | |
@@ -582,11 +612,14 @@ edges
| constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] | provenance | |
| constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] | provenance | |
| qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | |
+| qualifiers.cpp:9:30:9:33 | this [post update] [a] | qualifiers.cpp:9:10:9:13 | this [Return] [a] | provenance | |
| qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | this [post update] [a] | provenance | |
| qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | |
+| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [Return] [a] | provenance | |
| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [a] | provenance | |
| qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | provenance | |
| qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | |
+| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [Return] [a] | provenance | |
| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [a] | provenance | |
| qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | provenance | |
| qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] | provenance | |
@@ -654,8 +687,10 @@ edges
| simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | this [b_] | provenance | |
| simple.cpp:19:22:19:23 | this [b_] | simple.cpp:19:22:19:23 | b_ | provenance | |
| simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | |
+| simple.cpp:20:24:20:25 | this [post update] [a_] | simple.cpp:20:10:20:13 | this [Return] [a_] | provenance | |
| simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | this [post update] [a_] | provenance | |
| simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | |
+| simple.cpp:21:24:21:25 | this [post update] [b_] | simple.cpp:21:10:21:13 | this [Return] [b_] | provenance | |
| simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | this [post update] [b_] | provenance | |
| simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] | provenance | |
| simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] | provenance | |
@@ -696,6 +731,10 @@ edges
| simple.cpp:92:5:92:22 | ... = ... | simple.cpp:92:5:92:5 | a [post update] [i] | provenance | |
| simple.cpp:92:11:92:20 | call to user_input | simple.cpp:92:5:92:22 | ... = ... | provenance | |
| simple.cpp:94:10:94:11 | a2 [i] | simple.cpp:94:13:94:13 | i | provenance | |
+| simple.cpp:118:5:118:5 | a [post update] [i] | simple.cpp:120:8:120:8 | a [i] | provenance | |
+| simple.cpp:118:5:118:22 | ... = ... | simple.cpp:118:5:118:5 | a [post update] [i] | provenance | |
+| simple.cpp:118:11:118:20 | call to user_input | simple.cpp:118:5:118:22 | ... = ... | provenance | |
+| simple.cpp:120:8:120:8 | a [i] | simple.cpp:120:10:120:10 | i | provenance | |
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | |
| struct_init.c:14:24:14:25 | ab [a] | struct_init.c:15:8:15:9 | ab [a] | provenance | |
| struct_init.c:15:8:15:9 | ab [a] | struct_init.c:15:12:15:12 | a | provenance | |
@@ -747,9 +786,11 @@ edges
| struct_init.c:46:10:46:14 | outer [pointerAB, a] | struct_init.c:46:16:46:24 | pointerAB [a] | provenance | |
| struct_init.c:46:16:46:24 | pointerAB [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | |
nodes
+| A.cpp:23:5:23:5 | this [Return] [c] | semmle.label | this [Return] [c] |
| A.cpp:23:10:23:10 | c | semmle.label | c |
| A.cpp:25:7:25:10 | this [post update] [c] | semmle.label | this [post update] [c] |
| A.cpp:25:7:25:17 | ... = ... | semmle.label | ... = ... |
+| A.cpp:27:10:27:12 | this [Return] [c] | semmle.label | this [Return] [c] |
| A.cpp:27:17:27:17 | c | semmle.label | c |
| A.cpp:27:22:27:25 | this [post update] [c] | semmle.label | this [post update] [c] |
| A.cpp:27:22:27:32 | ... = ... | semmle.label | ... = ... |
@@ -802,13 +843,18 @@ nodes
| A.cpp:107:16:107:16 | a | semmle.label | a |
| A.cpp:120:12:120:13 | c1 [a] | semmle.label | c1 [a] |
| A.cpp:120:16:120:16 | a | semmle.label | a |
+| A.cpp:124:14:124:14 | b [Return] [c] | semmle.label | b [Return] [c] |
| A.cpp:124:14:124:14 | b [c] | semmle.label | b [c] |
| A.cpp:126:5:126:5 | ref arg b [c] | semmle.label | ref arg b [c] |
| A.cpp:126:12:126:18 | new | semmle.label | new |
| A.cpp:131:8:131:8 | ref arg b [c] | semmle.label | ref arg b [c] |
| A.cpp:132:10:132:10 | b [c] | semmle.label | b [c] |
| A.cpp:132:13:132:13 | c | semmle.label | c |
+| A.cpp:140:5:140:5 | this [Return] [b, c] | semmle.label | this [Return] [b, c] |
+| A.cpp:140:5:140:5 | this [Return] [b] | semmle.label | this [Return] [b] |
+| A.cpp:140:5:140:5 | this [Return] [b] | semmle.label | this [Return] [b] |
| A.cpp:140:13:140:13 | b | semmle.label | b |
+| A.cpp:140:13:140:13 | b [Return] [c] | semmle.label | b [Return] [c] |
| A.cpp:140:13:140:13 | b [c] | semmle.label | b [c] |
| A.cpp:142:7:142:7 | b [post update] [c] | semmle.label | b [post update] [c] |
| A.cpp:142:7:142:20 | ... = ... | semmle.label | ... = ... |
@@ -862,6 +908,9 @@ nodes
| A.cpp:173:26:173:26 | o | semmle.label | o |
| A.cpp:173:26:173:26 | o [c] | semmle.label | o [c] |
| A.cpp:173:26:173:26 | o [c] | semmle.label | o [c] |
+| A.cpp:181:5:181:10 | this [Return] [head] | semmle.label | this [Return] [head] |
+| A.cpp:181:5:181:10 | this [Return] [next, head] | semmle.label | this [Return] [next, head] |
+| A.cpp:181:5:181:10 | this [Return] [next, next, head] | semmle.label | this [Return] [next, next, head] |
| A.cpp:181:15:181:21 | newHead | semmle.label | newHead |
| A.cpp:181:32:181:35 | next [head] | semmle.label | next [head] |
| A.cpp:181:32:181:35 | next [next, head] | semmle.label | next [next, head] |
@@ -887,12 +936,16 @@ nodes
| B.cpp:19:10:19:11 | b2 [box1, elem2] | semmle.label | b2 [box1, elem2] |
| B.cpp:19:14:19:17 | box1 [elem2] | semmle.label | box1 [elem2] |
| B.cpp:19:20:19:24 | elem2 | semmle.label | elem2 |
+| B.cpp:33:5:33:8 | this [Return] [elem1] | semmle.label | this [Return] [elem1] |
+| B.cpp:33:5:33:8 | this [Return] [elem2] | semmle.label | this [Return] [elem2] |
| B.cpp:33:16:33:17 | e1 | semmle.label | e1 |
| B.cpp:33:26:33:27 | e2 | semmle.label | e2 |
| B.cpp:35:7:35:10 | this [post update] [elem1] | semmle.label | this [post update] [elem1] |
| B.cpp:35:7:35:22 | ... = ... | semmle.label | ... = ... |
| B.cpp:36:7:36:10 | this [post update] [elem2] | semmle.label | this [post update] [elem2] |
| B.cpp:36:7:36:22 | ... = ... | semmle.label | ... = ... |
+| B.cpp:44:5:44:8 | this [Return] [box1, elem1] | semmle.label | this [Return] [box1, elem1] |
+| B.cpp:44:5:44:8 | this [Return] [box1, elem2] | semmle.label | this [Return] [box1, elem2] |
| B.cpp:44:16:44:17 | b1 [elem1] | semmle.label | b1 [elem1] |
| B.cpp:44:16:44:17 | b1 [elem2] | semmle.label | b1 [elem2] |
| B.cpp:46:7:46:10 | this [post update] [box1, elem1] | semmle.label | this [post update] [box1, elem1] |
@@ -903,6 +956,8 @@ nodes
| C.cpp:18:12:18:18 | call to C [s3] | semmle.label | call to C [s3] |
| C.cpp:19:5:19:5 | c [s1] | semmle.label | c [s1] |
| C.cpp:19:5:19:5 | c [s3] | semmle.label | c [s3] |
+| C.cpp:22:3:22:3 | this [Return] [s1] | semmle.label | this [Return] [s1] |
+| C.cpp:22:3:22:3 | this [Return] [s3] | semmle.label | this [Return] [s3] |
| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | semmle.label | constructor init of field s1 [post-this] [s1] |
| C.cpp:22:12:22:21 | new | semmle.label | new |
| C.cpp:24:5:24:8 | this [post update] [s3] | semmle.label | this [post update] [s3] |
@@ -917,6 +972,7 @@ nodes
| D.cpp:10:11:10:17 | this [elem] | semmle.label | this [elem] |
| D.cpp:10:30:10:33 | elem | semmle.label | elem |
| D.cpp:10:30:10:33 | this [elem] | semmle.label | this [elem] |
+| D.cpp:11:10:11:16 | this [Return] [elem] | semmle.label | this [Return] [elem] |
| D.cpp:11:24:11:24 | e | semmle.label | e |
| D.cpp:11:29:11:32 | this [post update] [elem] | semmle.label | this [post update] [elem] |
| D.cpp:11:29:11:36 | ... = ... | semmle.label | ... = ... |
@@ -973,10 +1029,12 @@ nodes
| E.cpp:32:13:32:18 | buffer | semmle.label | buffer |
| E.cpp:33:18:33:19 | & ... [data, buffer] | semmle.label | & ... [data, buffer] |
| E.cpp:33:19:33:19 | p [data, buffer] | semmle.label | p [data, buffer] |
+| aliasing.cpp:8:23:8:23 | s [Return] [m1] | semmle.label | s [Return] [m1] |
| aliasing.cpp:8:23:8:23 | s [m1] | semmle.label | s [m1] |
| aliasing.cpp:9:3:9:3 | s [post update] [m1] | semmle.label | s [post update] [m1] |
| aliasing.cpp:9:3:9:22 | ... = ... | semmle.label | ... = ... |
| aliasing.cpp:9:11:9:20 | call to user_input | semmle.label | call to user_input |
+| aliasing.cpp:12:25:12:25 | s [Return] [m1] | semmle.label | s [Return] [m1] |
| aliasing.cpp:12:25:12:25 | s [m1] | semmle.label | s [m1] |
| aliasing.cpp:13:3:13:3 | s [post update] [m1] | semmle.label | s [post update] [m1] |
| aliasing.cpp:13:3:13:21 | ... = ... | semmle.label | ... = ... |
@@ -1000,7 +1058,7 @@ nodes
| aliasing.cpp:93:10:93:10 | s [m1] | semmle.label | s [m1] |
| aliasing.cpp:93:12:93:13 | m1 | semmle.label | m1 |
| aliasing.cpp:105:23:105:24 | pa | semmle.label | pa |
-| aliasing.cpp:106:4:106:5 | pa [inner post update] | semmle.label | pa [inner post update] |
+| aliasing.cpp:105:23:105:24 | pa [Return] | semmle.label | pa [Return] |
| aliasing.cpp:106:9:106:18 | call to user_input | semmle.label | call to user_input |
| aliasing.cpp:158:15:158:15 | s [post update] [data] | semmle.label | s [post update] [data] |
| aliasing.cpp:158:17:158:20 | ref arg data | semmle.label | ref arg data |
@@ -1085,16 +1143,20 @@ nodes
| arrays.cpp:44:10:44:17 | indirect [arr, data] | semmle.label | indirect [arr, data] |
| arrays.cpp:44:20:44:22 | arr [data] | semmle.label | arr [data] |
| arrays.cpp:44:27:44:30 | data | semmle.label | data |
+| by_reference.cpp:11:39:11:39 | s [Return] [a] | semmle.label | s [Return] [a] |
| by_reference.cpp:11:39:11:39 | s [a] | semmle.label | s [a] |
| by_reference.cpp:11:48:11:52 | value | semmle.label | value |
| by_reference.cpp:12:5:12:5 | s [post update] [a] | semmle.label | s [post update] [a] |
| by_reference.cpp:12:5:12:16 | ... = ... | semmle.label | ... = ... |
+| by_reference.cpp:15:8:15:18 | this [Return] [a] | semmle.label | this [Return] [a] |
| by_reference.cpp:15:26:15:30 | value | semmle.label | value |
| by_reference.cpp:16:5:16:8 | this [post update] [a] | semmle.label | this [post update] [a] |
| by_reference.cpp:16:5:16:19 | ... = ... | semmle.label | ... = ... |
+| by_reference.cpp:19:8:19:20 | this [Return] [a] | semmle.label | this [Return] [a] |
| by_reference.cpp:19:28:19:32 | value | semmle.label | value |
| by_reference.cpp:20:5:20:8 | ref arg this [a] | semmle.label | ref arg this [a] |
| by_reference.cpp:20:23:20:27 | value | semmle.label | value |
+| by_reference.cpp:23:8:23:26 | this [Return] [a] | semmle.label | this [Return] [a] |
| by_reference.cpp:23:34:23:38 | value | semmle.label | value |
| by_reference.cpp:24:19:24:22 | ref arg this [a] | semmle.label | ref arg this [a] |
| by_reference.cpp:24:25:24:29 | value | semmle.label | value |
@@ -1127,16 +1189,18 @@ nodes
| by_reference.cpp:69:8:69:20 | call to nonMemberGetA | semmle.label | call to nonMemberGetA |
| by_reference.cpp:69:22:69:23 | & ... [a] | semmle.label | & ... [a] |
| by_reference.cpp:69:23:69:23 | s [a] | semmle.label | s [a] |
+| by_reference.cpp:83:31:83:35 | inner [Return] [a] | semmle.label | inner [Return] [a] |
| by_reference.cpp:83:31:83:35 | inner [a] | semmle.label | inner [a] |
| by_reference.cpp:84:3:84:7 | inner [post update] [a] | semmle.label | inner [post update] [a] |
| by_reference.cpp:84:3:84:25 | ... = ... | semmle.label | ... = ... |
| by_reference.cpp:84:14:84:23 | call to user_input | semmle.label | call to user_input |
+| by_reference.cpp:87:31:87:35 | inner [Return] [a] | semmle.label | inner [Return] [a] |
| by_reference.cpp:87:31:87:35 | inner [a] | semmle.label | inner [a] |
| by_reference.cpp:88:3:88:7 | inner [post update] [a] | semmle.label | inner [post update] [a] |
| by_reference.cpp:88:3:88:24 | ... = ... | semmle.label | ... = ... |
| by_reference.cpp:88:13:88:22 | call to user_input | semmle.label | call to user_input |
| by_reference.cpp:91:25:91:26 | pa | semmle.label | pa |
-| by_reference.cpp:92:4:92:5 | pa [inner post update] | semmle.label | pa [inner post update] |
+| by_reference.cpp:91:25:91:26 | pa [Return] | semmle.label | pa [Return] |
| by_reference.cpp:92:9:92:18 | call to user_input | semmle.label | call to user_input |
| by_reference.cpp:95:25:95:26 | pa | semmle.label | pa |
| by_reference.cpp:96:8:96:17 | call to user_input | semmle.label | call to user_input |
@@ -1253,9 +1317,11 @@ nodes
| complex.cpp:10:7:10:7 | this [b_] | semmle.label | this [b_] |
| complex.cpp:10:20:10:21 | b_ | semmle.label | b_ |
| complex.cpp:10:20:10:21 | this [b_] | semmle.label | this [b_] |
+| complex.cpp:11:8:11:11 | this [Return] [a_] | semmle.label | this [Return] [a_] |
| complex.cpp:11:17:11:17 | a | semmle.label | a |
| complex.cpp:11:22:11:23 | this [post update] [a_] | semmle.label | this [post update] [a_] |
| complex.cpp:11:22:11:27 | ... = ... | semmle.label | ... = ... |
+| complex.cpp:12:8:12:11 | this [Return] [b_] | semmle.label | this [Return] [b_] |
| complex.cpp:12:17:12:17 | b | semmle.label | b |
| complex.cpp:12:22:12:23 | this [post update] [b_] | semmle.label | this [post update] [b_] |
| complex.cpp:12:22:12:27 | ... = ... | semmle.label | ... = ... |
@@ -1321,6 +1387,8 @@ nodes
| constructors.cpp:19:9:19:9 | this [b_] | semmle.label | this [b_] |
| constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ |
| constructors.cpp:19:22:19:23 | this [b_] | semmle.label | this [b_] |
+| constructors.cpp:23:5:23:7 | this [Return] [a_] | semmle.label | this [Return] [a_] |
+| constructors.cpp:23:5:23:7 | this [Return] [b_] | semmle.label | this [Return] [b_] |
| constructors.cpp:23:13:23:13 | a | semmle.label | a |
| constructors.cpp:23:20:23:20 | b | semmle.label | b |
| constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | semmle.label | constructor init of field a_ [post-this] [a_] |
@@ -1345,13 +1413,16 @@ nodes
| constructors.cpp:43:9:43:9 | g [b_] | semmle.label | g [b_] |
| constructors.cpp:46:9:46:9 | h [a_] | semmle.label | h [a_] |
| constructors.cpp:46:9:46:9 | h [b_] | semmle.label | h [b_] |
+| qualifiers.cpp:9:10:9:13 | this [Return] [a] | semmle.label | this [Return] [a] |
| qualifiers.cpp:9:21:9:25 | value | semmle.label | value |
| qualifiers.cpp:9:30:9:33 | this [post update] [a] | semmle.label | this [post update] [a] |
| qualifiers.cpp:9:30:9:44 | ... = ... | semmle.label | ... = ... |
+| qualifiers.cpp:12:27:12:31 | inner [Return] [a] | semmle.label | inner [Return] [a] |
| qualifiers.cpp:12:27:12:31 | inner [a] | semmle.label | inner [a] |
| qualifiers.cpp:12:40:12:44 | value | semmle.label | value |
| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | semmle.label | inner [post update] [a] |
| qualifiers.cpp:12:49:12:64 | ... = ... | semmle.label | ... = ... |
+| qualifiers.cpp:13:29:13:33 | inner [Return] [a] | semmle.label | inner [Return] [a] |
| qualifiers.cpp:13:29:13:33 | inner [a] | semmle.label | inner [a] |
| qualifiers.cpp:13:42:13:46 | value | semmle.label | value |
| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | semmle.label | inner [post update] [a] |
@@ -1425,9 +1496,11 @@ nodes
| simple.cpp:19:9:19:9 | this [b_] | semmle.label | this [b_] |
| simple.cpp:19:22:19:23 | b_ | semmle.label | b_ |
| simple.cpp:19:22:19:23 | this [b_] | semmle.label | this [b_] |
+| simple.cpp:20:10:20:13 | this [Return] [a_] | semmle.label | this [Return] [a_] |
| simple.cpp:20:19:20:19 | a | semmle.label | a |
| simple.cpp:20:24:20:25 | this [post update] [a_] | semmle.label | this [post update] [a_] |
| simple.cpp:20:24:20:29 | ... = ... | semmle.label | ... = ... |
+| simple.cpp:21:10:21:13 | this [Return] [b_] | semmle.label | this [Return] [b_] |
| simple.cpp:21:19:21:19 | b | semmle.label | b |
| simple.cpp:21:24:21:25 | this [post update] [b_] | semmle.label | this [post update] [b_] |
| simple.cpp:21:24:21:29 | ... = ... | semmle.label | ... = ... |
@@ -1469,6 +1542,11 @@ nodes
| simple.cpp:92:11:92:20 | call to user_input | semmle.label | call to user_input |
| simple.cpp:94:10:94:11 | a2 [i] | semmle.label | a2 [i] |
| simple.cpp:94:13:94:13 | i | semmle.label | i |
+| simple.cpp:118:5:118:5 | a [post update] [i] | semmle.label | a [post update] [i] |
+| simple.cpp:118:5:118:22 | ... = ... | semmle.label | ... = ... |
+| simple.cpp:118:11:118:20 | call to user_input | semmle.label | call to user_input |
+| simple.cpp:120:8:120:8 | a [i] | semmle.label | a [i] |
+| simple.cpp:120:10:120:10 | i | semmle.label | i |
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
| struct_init.c:14:24:14:25 | ab [a] | semmle.label | ab [a] |
| struct_init.c:15:8:15:9 | ab [a] | semmle.label | ab [a] |
@@ -1513,71 +1591,71 @@ nodes
| struct_init.c:46:10:46:14 | outer [pointerAB, a] | semmle.label | outer [pointerAB, a] |
| struct_init.c:46:16:46:24 | pointerAB [a] | semmle.label | pointerAB [a] |
subpaths
-| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:10 | this [post update] [c] | A.cpp:31:14:31:21 | call to B [c] |
+| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Return] [c] | A.cpp:31:14:31:21 | call to B [c] |
| A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | A.cpp:31:14:31:21 | new [c] | A.cpp:48:12:48:18 | call to make [c] |
-| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:55:5:55:5 | ref arg b [c] |
+| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:55:5:55:5 | ref arg b [c] |
| A.cpp:56:10:56:10 | b [c] | A.cpp:28:8:28:10 | this [c] | A.cpp:28:29:28:29 | c | A.cpp:56:13:56:15 | call to get |
| A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | A.cpp:28:29:28:29 | c | A.cpp:57:28:57:30 | call to get |
-| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:10 | this [post update] [c] | A.cpp:57:11:57:24 | call to B [c] |
+| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Return] [c] | A.cpp:57:11:57:24 | call to B [c] |
| A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | A.cpp:91:14:91:15 | b2 [c] | A.cpp:64:10:64:15 | call to setOnB [c] |
| A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | A.cpp:82:12:82:24 | ... ? ... : ... [c] | A.cpp:73:10:73:19 | call to setOnBWrap [c] |
| A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | A.cpp:91:14:91:15 | b2 [c] | A.cpp:81:10:81:15 | call to setOnB [c] |
-| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:90:7:90:8 | ref arg b2 [c] |
-| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:126:5:126:5 | ref arg b [c] |
-| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:151:12:151:24 | call to D [b] |
+| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:90:7:90:8 | ref arg b2 [c] |
+| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:126:5:126:5 | ref arg b [c] |
+| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] |
| A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | A.cpp:152:13:152:13 | ref arg b [c] |
-| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:10 | this [post update] [head] | A.cpp:160:18:160:60 | call to MyList [head] |
-| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | A.cpp:161:18:161:40 | call to MyList [next, head] |
-| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] |
+| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | this [Return] [head] | A.cpp:160:18:160:60 | call to MyList [head] |
+| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | A.cpp:181:5:181:10 | this [Return] [next, head] | A.cpp:161:18:161:40 | call to MyList [next, head] |
+| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | A.cpp:181:5:181:10 | this [Return] [next, next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] |
| A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | A.cpp:165:26:165:29 | ref arg head |
-| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:10 | this [post update] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] |
-| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] |
-| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:10 | this [post update] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] |
-| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] |
+| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | this [Return] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] |
+| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:44:5:44:8 | this [Return] [box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] |
+| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | this [Return] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] |
+| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:44:5:44:8 | this [Return] [box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] |
| D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | D.cpp:22:14:22:20 | call to getBox1 [elem] |
| D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | elem | D.cpp:22:25:22:31 | call to getElem |
-| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:32 | this [post update] [elem] | D.cpp:37:8:37:10 | ref arg box [elem] |
-| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:32 | this [post update] [elem] | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] |
+| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Return] [elem] | D.cpp:37:8:37:10 | ref arg box [elem] |
+| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Return] [elem] | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] |
| arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | arrays.cpp:37:24:37:27 | ref arg data |
| arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | arrays.cpp:43:27:43:30 | ref arg data |
-| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:8 | this [post update] [a] | by_reference.cpp:20:5:20:8 | ref arg this [a] |
+| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Return] [a] | by_reference.cpp:20:5:20:8 | ref arg this [a] |
+| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Return] [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] |
| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] |
-| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] |
| by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:18:36:18 | a | by_reference.cpp:40:18:40:28 | call to getDirectly |
| by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:15:32:15 | a | by_reference.cpp:44:12:44:24 | call to nonMemberGetA |
-| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:8 | this [post update] [a] | by_reference.cpp:50:3:50:3 | ref arg s [a] |
+| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Return] [a] | by_reference.cpp:50:3:50:3 | ref arg s [a] |
| by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:18:36:18 | a | by_reference.cpp:51:10:51:20 | call to getDirectly |
-| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | by_reference.cpp:56:3:56:3 | ref arg s [a] |
+| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | this [Return] [a] | by_reference.cpp:56:3:56:3 | ref arg s [a] |
| by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:57:10:57:22 | call to getIndirectly |
-| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | by_reference.cpp:62:3:62:3 | ref arg s [a] |
+| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | this [Return] [a] | by_reference.cpp:62:3:62:3 | ref arg s [a] |
| by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:63:10:63:28 | call to getThroughNonMember |
+| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Return] [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] |
| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] |
-| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] |
| by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:15:32:15 | a | by_reference.cpp:69:8:69:20 | call to nonMemberGetA |
| complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | a_ | complex.cpp:42:18:42:18 | call to a |
| complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | b_ | complex.cpp:43:18:43:18 | call to b |
-| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:23 | this [post update] [a_] | complex.cpp:53:12:53:12 | ref arg f [a_] |
-| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:23 | this [post update] [b_] | complex.cpp:54:12:54:12 | ref arg f [b_] |
-| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:23 | this [post update] [a_] | complex.cpp:55:12:55:12 | ref arg f [a_] |
-| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:23 | this [post update] [b_] | complex.cpp:56:12:56:12 | ref arg f [b_] |
+| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Return] [a_] | complex.cpp:53:12:53:12 | ref arg f [a_] |
+| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Return] [b_] | complex.cpp:54:12:54:12 | ref arg f [b_] |
+| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Return] [a_] | complex.cpp:55:12:55:12 | ref arg f [a_] |
+| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Return] [b_] | complex.cpp:56:12:56:12 | ref arg f [b_] |
| constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | a_ | constructors.cpp:28:12:28:12 | call to a |
| constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:29:12:29:12 | call to b |
-| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | constructors.cpp:34:11:34:26 | call to Foo [a_] |
-| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | constructors.cpp:35:11:35:26 | call to Foo [b_] |
-| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | constructors.cpp:36:11:36:37 | call to Foo [a_] |
-| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | constructors.cpp:36:11:36:37 | call to Foo [b_] |
-| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:33 | this [post update] [a] | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] |
+| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Return] [a_] | constructors.cpp:34:11:34:26 | call to Foo [a_] |
+| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Return] [b_] | constructors.cpp:35:11:35:26 | call to Foo [b_] |
+| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Return] [a_] | constructors.cpp:36:11:36:37 | call to Foo [a_] |
+| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Return] [b_] | constructors.cpp:36:11:36:37 | call to Foo [b_] |
+| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | this [Return] [a] | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] |
+| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | inner [Return] [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] |
| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | inner [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] |
-| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] |
+| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | inner [Return] [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] |
| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | inner [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] |
-| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] |
| realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | realistic.cpp:61:47:61:55 | ref arg bufferLen |
| simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | a_ | simple.cpp:28:12:28:12 | call to a |
| simple.cpp:29:10:29:10 | f [b_] | simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | b_ | simple.cpp:29:12:29:12 | call to b |
-| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:25 | this [post update] [a_] | simple.cpp:39:5:39:5 | ref arg f [a_] |
-| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:25 | this [post update] [b_] | simple.cpp:40:5:40:5 | ref arg g [b_] |
-| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:25 | this [post update] [a_] | simple.cpp:41:5:41:5 | ref arg h [a_] |
-| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:25 | this [post update] [b_] | simple.cpp:42:5:42:5 | ref arg h [b_] |
+| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Return] [a_] | simple.cpp:39:5:39:5 | ref arg f [a_] |
+| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Return] [b_] | simple.cpp:40:5:40:5 | ref arg g [b_] |
+| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Return] [a_] | simple.cpp:41:5:41:5 | ref arg h [a_] |
+| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Return] [b_] | simple.cpp:42:5:42:5 | ref arg h [b_] |
| simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:19:79:20 | f1 | simple.cpp:84:14:84:20 | call to getf2f1 |
| struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:15:12:15:12 | ref arg a |
| struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:22:11:22:11 | ref arg a |
@@ -1682,6 +1760,7 @@ subpaths
| simple.cpp:67:13:67:13 | i | simple.cpp:65:11:65:20 | call to user_input | simple.cpp:67:13:67:13 | i | i flows from $@ | simple.cpp:65:11:65:20 | call to user_input | call to user_input |
| simple.cpp:84:14:84:20 | call to getf2f1 | simple.cpp:83:17:83:26 | call to user_input | simple.cpp:84:14:84:20 | call to getf2f1 | call to getf2f1 flows from $@ | simple.cpp:83:17:83:26 | call to user_input | call to user_input |
| simple.cpp:94:13:94:13 | i | simple.cpp:92:11:92:20 | call to user_input | simple.cpp:94:13:94:13 | i | i flows from $@ | simple.cpp:92:11:92:20 | call to user_input | call to user_input |
+| simple.cpp:120:10:120:10 | i | simple.cpp:118:11:118:20 | call to user_input | simple.cpp:120:10:120:10 | i | i flows from $@ | simple.cpp:118:11:118:20 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:20:20:20:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:20:20:20:29 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:27:7:27:16 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:27:7:27:16 | call to user_input | call to user_input |
| struct_init.c:15:12:15:12 | a | struct_init.c:40:20:40:29 | call to user_input | struct_init.c:15:12:15:12 | a | a flows from $@ | struct_init.c:40:20:40:29 | call to user_input | call to user_input |
diff --git a/cpp/ql/test/library-tests/dataflow/fields/simple.cpp b/cpp/ql/test/library-tests/dataflow/fields/simple.cpp
index 36756689855..9501bdaf63b 100644
--- a/cpp/ql/test/library-tests/dataflow/fields/simple.cpp
+++ b/cpp/ql/test/library-tests/dataflow/fields/simple.cpp
@@ -111,4 +111,13 @@ namespace TestAdditionalCallTargets {
}
+void post_update_to_phi_input(bool b)
+{
+ A a;
+ if(b) {
+ a.i = user_input();
+ }
+ sink(a.i); // $ ast,ir
+}
+
} // namespace Simple
diff --git a/cpp/ql/test/library-tests/dataflow/source-sink-tests/asio_streams.cpp b/cpp/ql/test/library-tests/dataflow/source-sink-tests/asio_streams.cpp
new file mode 100644
index 00000000000..bbcf41b0e36
--- /dev/null
+++ b/cpp/ql/test/library-tests/dataflow/source-sink-tests/asio_streams.cpp
@@ -0,0 +1,89 @@
+
+// --- stub library headers ---
+
+namespace std {
+ typedef unsigned long size_t;
+ #define SIZE_MAX 0xFFFFFFFF
+
+ template class allocator {
+ };
+
+ template struct char_traits {
+ };
+
+ template, class Allocator = allocator >
+ class basic_string {
+ public:
+ basic_string(const charT* s, const Allocator& a = Allocator());
+ };
+
+ typedef basic_string string;
+};
+
+namespace boost {
+ namespace system {
+ class error_code {
+ public:
+ operator bool() const;
+ };
+ };
+
+ namespace asio {
+ template
+ class basic_stream_socket /*: public basic_socket*/ {
+ };
+
+ namespace ip {
+ class tcp {
+ public:
+ typedef basic_stream_socket socket;
+ };
+ };
+
+ template> class basic_streambuf {
+ public:
+ basic_streambuf(
+ std::size_t maximum_size = SIZE_MAX,
+ const Allocator &allocator = Allocator());
+ };
+
+ typedef basic_streambuf<> streambuf;
+
+ class mutable_buffer {
+ };
+
+ template
+ mutable_buffer buffer(std::basic_string & data);
+
+ template std::size_t read_until(
+ SyncReadStream &s,
+ asio::basic_streambuf &b,
+ char delim,
+ boost::system::error_code &ec);
+
+ template std::size_t write(
+ SyncWriteStream &s,
+ const ConstBufferSequence &buffers,
+ boost::system::error_code &ec,
+ int constraint = 0); // simplified
+ };
+};
+
+// --- test code ---
+
+void test(boost::asio::ip::tcp::socket &socket) {
+ boost::asio::streambuf recv_buffer;
+ boost::system::error_code error;
+
+ boost::asio::read_until(socket, recv_buffer, '\0', error); // $ remote_source
+ if (error) {
+ // ...
+ }
+
+ std::string send_str = std::string("message");
+ boost::asio::mutable_buffer send_buffer = boost::asio::buffer(send_str);
+ boost::asio::write(socket, send_buffer, error); // $ remote_sink
+ if (error) {
+ // ...
+ }
+}
diff --git a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
index d7b240c8949..94f8d8bff3c 100644
--- a/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
+++ b/cpp/ql/test/library-tests/ir/ir/PrintAST.expected
@@ -22734,6 +22734,25 @@ ir.cpp:
# 2552| Type = [Class] ClassWithDestructor
# 2552| ValueCategory = xvalue
# 2553| getStmt(1): [ReturnStmt] return ...
+# 2555| [TopLevelFunction] void builtin_bitcast(unsigned long)
+# 2555| :
+# 2555| getParameter(0): [Parameter] ul
+# 2555| Type = [LongType] unsigned long
+# 2555| getEntryPoint(): [BlockStmt] { ... }
+# 2556| getStmt(0): [DeclStmt] declaration
+# 2556| getDeclarationEntry(0): [VariableDeclarationEntry] definition of d
+# 2556| Type = [DoubleType] double
+# 2556| getVariable().getInitializer(): [Initializer] initializer for d
+# 2556| getExpr(): [BuiltInBitCast] __builtin_bit_cast
+# 2556| Type = [DoubleType] double
+# 2556| ValueCategory = prvalue
+# 2556| getChild(0): [TypeName] double
+# 2556| Type = [DoubleType] double
+# 2556| ValueCategory = prvalue
+# 2556| getChild(1): [VariableAccess] ul
+# 2556| Type = [LongType] unsigned long
+# 2556| ValueCategory = prvalue(load)
+# 2557| getStmt(1): [ReturnStmt] return ...
perf-regression.cpp:
# 4| [CopyAssignmentOperator] Big& Big::operator=(Big const&)
# 4| :
diff --git a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected
index b7b9f1520bf..d3238068707 100644
--- a/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected
+++ b/cpp/ql/test/library-tests/ir/ir/aliased_ir.expected
@@ -13430,6 +13430,32 @@ ir.cpp:
# 1898| v1898_6(void) = AliasedUse : m1898_3
# 1898| v1898_7(void) = ExitFunction :
+# 1899| const char[17] __PRETTY_FUNCTION__
+# 1899| Block 0
+# 1899| v1899_1(void) = EnterFunction :
+# 1899| m1899_2(unknown) = AliasedDefinition :
+# 1899| r1899_3(glval) = VariableAddress[__PRETTY_FUNCTION__] :
+# 1899| r1899_4(glval) = StringConstant[__PRETTY_FUNCTION__] :
+# 1899| r1899_5(char[17]) = Load[?] : &:r1899_4, ~m?
+# 1899| m1899_6(char[17]) = Store[__PRETTY_FUNCTION__] : &:r1899_3, r1899_5
+# 1899| m1899_7(unknown) = Chi : total:m1899_2, partial:m1899_6
+# 1899| v1899_8(void) = ReturnVoid :
+# 1899| v1899_9(void) = AliasedUse : ~m1899_7
+# 1899| v1899_10(void) = ExitFunction :
+
+# 1900| const char[10] __func__
+# 1900| Block 0
+# 1900| v1900_1(void) = EnterFunction :
+# 1900| m1900_2(unknown) = AliasedDefinition :
+# 1900| r1900_3(glval) = VariableAddress[__func__] :
+# 1900| r1900_4(glval) = StringConstant[__func__] :
+# 1900| r1900_5(char[10]) = Load[?] : &:r1900_4, ~m?
+# 1900| m1900_6(char[10]) = Store[__func__] : &:r1900_3, r1900_5
+# 1900| m1900_7(unknown) = Chi : total:m1900_2, partial:m1900_6
+# 1900| v1900_8(void) = ReturnVoid :
+# 1900| v1900_9(void) = AliasedUse : ~m1900_7
+# 1900| v1900_10(void) = ExitFunction :
+
# 1911| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer)
# 1911| Block 0
# 1911| v1911_1(void) = EnterFunction :
@@ -18351,6 +18377,24 @@ ir.cpp:
# 2550| Block 2
# 2550| v2550_10(void) = Unreached :
+# 2555| void builtin_bitcast(unsigned long)
+# 2555| Block 0
+# 2555| v2555_1(void) = EnterFunction :
+# 2555| m2555_2(unknown) = AliasedDefinition :
+# 2555| m2555_3(unknown) = InitializeNonLocal :
+# 2555| m2555_4(unknown) = Chi : total:m2555_2, partial:m2555_3
+# 2555| r2555_5(glval) = VariableAddress[ul] :
+# 2555| m2555_6(unsigned long) = InitializeParameter[ul] : &:r2555_5
+# 2556| r2556_1(glval) = VariableAddress[d] :
+# 2556| r2556_2(glval) = VariableAddress[ul] :
+# 2556| r2556_3(unsigned long) = Load[ul] : &:r2556_2, m2555_6
+# 2556| r2556_4(double) = BuiltIn[__builtin_bit_cast] : 0:r2556_3
+# 2556| m2556_5(double) = Store[d] : &:r2556_1, r2556_4
+# 2557| v2557_1(void) = NoOp :
+# 2555| v2555_7(void) = ReturnVoid :
+# 2555| v2555_8(void) = AliasedUse : m2555_3
+# 2555| v2555_9(void) = ExitFunction :
+
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0
diff --git a/cpp/ql/test/library-tests/ir/ir/ir.cpp b/cpp/ql/test/library-tests/ir/ir/ir.cpp
index 3c6b1cdbbf0..67a252efad9 100644
--- a/cpp/ql/test/library-tests/ir/ir/ir.cpp
+++ b/cpp/ql/test/library-tests/ir/ir/ir.cpp
@@ -2552,4 +2552,8 @@ void constexpr_inconsistency(bool b) {
;
}
+void builtin_bitcast(unsigned long ul) {
+ double d = __builtin_bit_cast(double, ul);
+}
+
// semmle-extractor-options: -std=c++20 --clang
diff --git a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
index 842aa7ad4b7..76bea510ea0 100644
--- a/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
+++ b/cpp/ql/test/library-tests/ir/ir/raw_ir.expected
@@ -12384,6 +12384,30 @@ ir.cpp:
# 1898| v1898_5(void) = AliasedUse : ~m?
# 1898| v1898_6(void) = ExitFunction :
+# 1899| const char[17] __PRETTY_FUNCTION__
+# 1899| Block 0
+# 1899| v1899_1(void) = EnterFunction :
+# 1899| mu1899_2(unknown) = AliasedDefinition :
+# 1899| r1899_3(glval) = VariableAddress[__PRETTY_FUNCTION__] :
+# 1899| r1899_4(glval) = StringConstant[__PRETTY_FUNCTION__] :
+# 1899| r1899_5(char[17]) = Load[?] : &:r1899_4, ~m?
+# 1899| mu1899_6(char[17]) = Store[__PRETTY_FUNCTION__] : &:r1899_3, r1899_5
+# 1899| v1899_7(void) = ReturnVoid :
+# 1899| v1899_8(void) = AliasedUse : ~m?
+# 1899| v1899_9(void) = ExitFunction :
+
+# 1900| const char[10] __func__
+# 1900| Block 0
+# 1900| v1900_1(void) = EnterFunction :
+# 1900| mu1900_2(unknown) = AliasedDefinition :
+# 1900| r1900_3(glval) = VariableAddress[__func__] :
+# 1900| r1900_4(glval) = StringConstant[__func__] :
+# 1900| r1900_5(char[10]) = Load[?] : &:r1900_4, ~m?
+# 1900| mu1900_6(char[10]) = Store[__func__] : &:r1900_3, r1900_5
+# 1900| v1900_7(void) = ReturnVoid :
+# 1900| v1900_8(void) = AliasedUse : ~m?
+# 1900| v1900_9(void) = ExitFunction :
+
# 1911| void* missing_declaration_entries::Bar1::missing_type_decl_entry(missing_declaration_entries::Bar1::pointer)
# 1911| Block 0
# 1911| v1911_1(void) = EnterFunction :
@@ -16693,6 +16717,23 @@ ir.cpp:
# 2550| v2550_7(void) = AliasedUse : ~m?
# 2550| v2550_8(void) = ExitFunction :
+# 2555| void builtin_bitcast(unsigned long)
+# 2555| Block 0
+# 2555| v2555_1(void) = EnterFunction :
+# 2555| mu2555_2(unknown) = AliasedDefinition :
+# 2555| mu2555_3(unknown) = InitializeNonLocal :
+# 2555| r2555_4(glval) = VariableAddress[ul] :
+# 2555| mu2555_5(unsigned long) = InitializeParameter[ul] : &:r2555_4
+# 2556| r2556_1(glval) = VariableAddress[d] :
+# 2556| r2556_2(glval) = VariableAddress[ul] :
+# 2556| r2556_3(unsigned long) = Load[ul] : &:r2556_2, ~m?
+# 2556| r2556_4(double) = BuiltIn[__builtin_bit_cast] : 0:r2556_3
+# 2556| mu2556_5(double) = Store[d] : &:r2556_1, r2556_4
+# 2557| v2557_1(void) = NoOp :
+# 2555| v2555_6(void) = ReturnVoid :
+# 2555| v2555_7(void) = AliasedUse : ~m?
+# 2555| v2555_8(void) = ExitFunction :
+
perf-regression.cpp:
# 6| void Big::Big()
# 6| Block 0
diff --git a/cpp/ql/test/library-tests/padding/options b/cpp/ql/test/library-tests/padding/options
new file mode 100644
index 00000000000..042f2a05dbf
--- /dev/null
+++ b/cpp/ql/test/library-tests/padding/options
@@ -0,0 +1 @@
+semmle-extractor-options: -D__x86_64=1
diff --git a/cpp/ql/test/library-tests/variables/variables/variable.expected b/cpp/ql/test/library-tests/variables/variables/variable.expected
index f3a78dd6bcc..1ef5902a9a8 100644
--- a/cpp/ql/test/library-tests/variables/variables/variable.expected
+++ b/cpp/ql/test/library-tests/variables/variables/variable.expected
@@ -39,3 +39,4 @@
| variables.cpp:51:9:51:12 | town | file://:0:0:0:0 | char * | Field | | |
| variables.cpp:52:16:52:22 | country | file://:0:0:0:0 | char * | MemberVariable, StaticStorageDurationVariable | | static |
| variables.cpp:56:14:56:29 | externInFunction | file://:0:0:0:0 | int | GlobalLikeVariable, GlobalVariable, StaticStorageDurationVariable | | |
+| variables.cpp:60:10:60:17 | __func__ | file://:0:0:0:0 | const char[9] | GlobalLikeVariable, StaticInitializedStaticLocalVariable | | static |
diff --git a/cpp/ql/test/library-tests/variables/variables/variables.cpp b/cpp/ql/test/library-tests/variables/variables/variables.cpp
index 6cbbacebc3c..4c35b79f64f 100644
--- a/cpp/ql/test/library-tests/variables/variables/variables.cpp
+++ b/cpp/ql/test/library-tests/variables/variables/variables.cpp
@@ -55,3 +55,7 @@ struct address {
void hasExtern() {
extern int externInFunction;
}
+
+const char* isStatic() {
+ return __func__;
+}
diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected
index e839947c7b5..9636f170e0b 100644
--- a/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected
+++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/DoubleFree.expected
@@ -13,21 +13,6 @@ edges
| test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | provenance | |
| test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | provenance | |
| test_free.cpp:319:16:319:16 | pointer to operator delete output argument | test_free.cpp:322:12:322:12 | a | provenance | |
-| test_free.cpp:343:12:343:24 | *access to array [post update] [ptr] | test_free.cpp:344:12:344:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:343:12:343:24 | *access to array [post update] [ptr] | test_free.cpp:345:12:345:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:343:12:343:24 | *access to array [post update] [ptr] | test_free.cpp:346:12:346:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:343:26:343:28 | pointer to operator delete output argument | test_free.cpp:343:12:343:24 | *access to array [post update] [ptr] | provenance | |
-| test_free.cpp:344:12:344:24 | *access to array [post update] [ptr] | test_free.cpp:345:12:345:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:344:12:344:24 | *access to array [post update] [ptr] | test_free.cpp:346:12:346:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:344:12:344:24 | *access to array [ptr] | test_free.cpp:344:26:344:28 | ptr | provenance | |
-| test_free.cpp:344:26:344:28 | pointer to operator delete output argument | test_free.cpp:344:12:344:24 | *access to array [post update] [ptr] | provenance | |
-| test_free.cpp:345:12:345:24 | *access to array [post update] [ptr] | test_free.cpp:346:12:346:24 | *access to array [ptr] | provenance | |
-| test_free.cpp:345:12:345:24 | *access to array [ptr] | test_free.cpp:345:26:345:28 | ptr | provenance | |
-| test_free.cpp:345:12:345:24 | *access to array [ptr] | test_free.cpp:345:26:345:28 | ptr | provenance | |
-| test_free.cpp:345:26:345:28 | pointer to operator delete output argument | test_free.cpp:345:12:345:24 | *access to array [post update] [ptr] | provenance | |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | test_free.cpp:346:26:346:28 | ptr | provenance | |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | test_free.cpp:346:26:346:28 | ptr | provenance | |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | test_free.cpp:346:26:346:28 | ptr | provenance | |
nodes
| test_free.cpp:11:10:11:10 | pointer to free output argument | semmle.label | pointer to free output argument |
| test_free.cpp:14:10:14:10 | a | semmle.label | a |
@@ -57,24 +42,6 @@ nodes
| test_free.cpp:302:12:302:14 | buf | semmle.label | buf |
| test_free.cpp:319:16:319:16 | pointer to operator delete output argument | semmle.label | pointer to operator delete output argument |
| test_free.cpp:322:12:322:12 | a | semmle.label | a |
-| test_free.cpp:343:12:343:24 | *access to array [post update] [ptr] | semmle.label | *access to array [post update] [ptr] |
-| test_free.cpp:343:26:343:28 | pointer to operator delete output argument | semmle.label | pointer to operator delete output argument |
-| test_free.cpp:344:12:344:24 | *access to array [post update] [ptr] | semmle.label | *access to array [post update] [ptr] |
-| test_free.cpp:344:12:344:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:344:26:344:28 | pointer to operator delete output argument | semmle.label | pointer to operator delete output argument |
-| test_free.cpp:344:26:344:28 | ptr | semmle.label | ptr |
-| test_free.cpp:345:12:345:24 | *access to array [post update] [ptr] | semmle.label | *access to array [post update] [ptr] |
-| test_free.cpp:345:12:345:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:345:12:345:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:345:26:345:28 | pointer to operator delete output argument | semmle.label | pointer to operator delete output argument |
-| test_free.cpp:345:26:345:28 | ptr | semmle.label | ptr |
-| test_free.cpp:345:26:345:28 | ptr | semmle.label | ptr |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:346:12:346:24 | *access to array [ptr] | semmle.label | *access to array [ptr] |
-| test_free.cpp:346:26:346:28 | ptr | semmle.label | ptr |
-| test_free.cpp:346:26:346:28 | ptr | semmle.label | ptr |
-| test_free.cpp:346:26:346:28 | ptr | semmle.label | ptr |
subpaths
#select
| test_free.cpp:14:10:14:10 | a | test_free.cpp:11:10:11:10 | pointer to free output argument | test_free.cpp:14:10:14:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:14:10:14:10 | a | a | test_free.cpp:11:5:11:8 | call to free | call to free |
@@ -91,9 +58,3 @@ subpaths
| test_free.cpp:209:10:209:10 | a | test_free.cpp:207:10:207:10 | pointer to free output argument | test_free.cpp:209:10:209:10 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:209:10:209:10 | a | a | test_free.cpp:207:5:207:8 | call to free | call to free |
| test_free.cpp:302:12:302:14 | buf | test_free.cpp:301:12:301:14 | pointer to g_free output argument | test_free.cpp:302:12:302:14 | buf | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:302:12:302:14 | buf | buf | test_free.cpp:301:5:301:10 | call to g_free | call to g_free |
| test_free.cpp:322:12:322:12 | a | test_free.cpp:319:16:319:16 | pointer to operator delete output argument | test_free.cpp:322:12:322:12 | a | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:322:12:322:12 | a | a | test_free.cpp:319:9:319:16 | delete | delete |
-| test_free.cpp:344:26:344:28 | ptr | test_free.cpp:343:26:343:28 | pointer to operator delete output argument | test_free.cpp:344:26:344:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:344:26:344:28 | ptr | ptr | test_free.cpp:343:5:343:28 | delete | delete |
-| test_free.cpp:345:26:345:28 | ptr | test_free.cpp:343:26:343:28 | pointer to operator delete output argument | test_free.cpp:345:26:345:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:345:26:345:28 | ptr | ptr | test_free.cpp:343:5:343:28 | delete | delete |
-| test_free.cpp:345:26:345:28 | ptr | test_free.cpp:344:26:344:28 | pointer to operator delete output argument | test_free.cpp:345:26:345:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:345:26:345:28 | ptr | ptr | test_free.cpp:344:5:344:28 | delete | delete |
-| test_free.cpp:346:26:346:28 | ptr | test_free.cpp:343:26:343:28 | pointer to operator delete output argument | test_free.cpp:346:26:346:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:346:26:346:28 | ptr | ptr | test_free.cpp:343:5:343:28 | delete | delete |
-| test_free.cpp:346:26:346:28 | ptr | test_free.cpp:344:26:344:28 | pointer to operator delete output argument | test_free.cpp:346:26:346:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:346:26:346:28 | ptr | ptr | test_free.cpp:344:5:344:28 | delete | delete |
-| test_free.cpp:346:26:346:28 | ptr | test_free.cpp:345:26:345:28 | pointer to operator delete output argument | test_free.cpp:346:26:346:28 | ptr | Memory pointed to by $@ may already have been freed by $@. | test_free.cpp:346:26:346:28 | ptr | ptr | test_free.cpp:345:5:345:28 | delete | delete |
diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected b/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected
index 87b5ee6c4ab..ebd0edf9360 100644
--- a/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected
+++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/MemoryFreed.expected
@@ -115,6 +115,8 @@
| test_free.cpp:344:26:344:28 | ptr |
| test_free.cpp:345:26:345:28 | ptr |
| test_free.cpp:346:26:346:28 | ptr |
+| test_free.cpp:356:19:356:19 | a |
+| test_free.cpp:357:19:357:19 | a |
| virtual.cpp:18:10:18:10 | a |
| virtual.cpp:19:10:19:10 | c |
| virtual.cpp:38:10:38:10 | b |
diff --git a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp
index e0da5ea74ad..75047244151 100644
--- a/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp
+++ b/cpp/ql/test/query-tests/Critical/MemoryFreed/test_free.cpp
@@ -341,7 +341,18 @@ struct PtrContainer {
void test_array(PtrContainer *containers) {
delete containers[0].ptr; // GOOD
- delete containers[1].ptr; // GOOD [FALSE POSITIVE]
- delete containers[2].ptr; // GOOD [FALSE POSITIVE]
- delete containers[2].ptr; // BAD (double free)
+ delete containers[1].ptr; // GOOD
+ delete containers[2].ptr; // GOOD
+ delete containers[2].ptr; // BAD (double free) [NOT DETECTED]
}
+
+struct E {
+ struct EC {
+ int* a;
+ } ec[2];
+};
+
+void test(E* e) {
+ free(e->ec[0].a);
+ free(e->ec[1].a); // GOOD
+}
\ No newline at end of file
diff --git a/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.expected b/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.expected
new file mode 100644
index 00000000000..cf8b0cf88a3
--- /dev/null
+++ b/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.expected
@@ -0,0 +1,2 @@
+| test.cpp:3:11:3:15 | local | Variable 'local' is not initialized. |
+| test.cpp:12:5:12:24 | uninitialised_global | Variable 'uninitialised_global' is not initialized. |
diff --git a/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.qlref b/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.qlref
new file mode 100644
index 00000000000..b261c020f53
--- /dev/null
+++ b/cpp/ql/test/query-tests/Critical/NotInitialised/NotInitialised.qlref
@@ -0,0 +1 @@
+Critical/NotInitialised.ql
\ No newline at end of file
diff --git a/cpp/ql/test/query-tests/Critical/NotInitialised/test.cpp b/cpp/ql/test/query-tests/Critical/NotInitialised/test.cpp
new file mode 100644
index 00000000000..bc9093cd53d
--- /dev/null
+++ b/cpp/ql/test/query-tests/Critical/NotInitialised/test.cpp
@@ -0,0 +1,20 @@
+void test1() {
+ int local;
+ int x = local; // BAD
+
+ static int static_local;
+ int y = static_local; // GOOD
+
+ int initialised = 42;
+ int z = initialised; // GOOD
+}
+
+int uninitialised_global; // BAD
+static int uninitialised_static_global; // GOOD
+int initialized_global = 0; // GOOD
+
+void test2() {
+ int a = uninitialised_global;
+ int b = uninitialised_static_global;
+ int c = initialized_global;
+}
\ No newline at end of file
diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/NtohlArrayNoBound.expected b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/NtohlArrayNoBound.expected
index 1e5645353f8..ebdbc546dc9 100644
--- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/NtohlArrayNoBound.expected
+++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/NtohlArrayNoBound.expected
@@ -1,8 +1,9 @@
-| test.cpp:12:25:12:34 | call to ntohl | Unchecked use of data from network function $@. | test.cpp:12:25:12:34 | call to ntohl | call to ntohl |
-| test.cpp:21:26:21:29 | len2 | Unchecked use of data from network function $@. | test.cpp:10:16:10:25 | call to ntohl | call to ntohl |
-| test.cpp:31:26:31:29 | len2 | Unchecked use of data from network function $@. | test.cpp:10:16:10:25 | call to ntohl | call to ntohl |
-| test.cpp:61:26:61:29 | len2 | Unchecked use of data from network function $@. | test.cpp:10:16:10:25 | call to ntohl | call to ntohl |
-| test.cpp:64:9:64:12 | len2 | Unchecked use of data from network function $@. | test.cpp:10:16:10:25 | call to ntohl | call to ntohl |
-| test.cpp:73:10:73:13 | lens | Unchecked use of data from network function $@. | test.cpp:10:16:10:25 | call to ntohl | call to ntohl |
-| test.cpp:86:10:86:13 | len3 | Unchecked use of data from network function $@. | test.cpp:85:10:85:19 | call to ntohl | call to ntohl |
-| test.cpp:94:9:94:11 | len | Unchecked use of data from network function $@. | test.cpp:99:8:99:17 | call to ntohl | call to ntohl |
+| test.cpp:13:25:13:34 | call to ntohl | Unchecked use of data from network function $@. | test.cpp:13:25:13:34 | call to ntohl | call to ntohl |
+| test.cpp:22:26:22:29 | len2 | Unchecked use of data from network function $@. | test.cpp:11:16:11:25 | call to ntohl | call to ntohl |
+| test.cpp:32:26:32:29 | len2 | Unchecked use of data from network function $@. | test.cpp:11:16:11:25 | call to ntohl | call to ntohl |
+| test.cpp:62:26:62:29 | len2 | Unchecked use of data from network function $@. | test.cpp:11:16:11:25 | call to ntohl | call to ntohl |
+| test.cpp:65:9:65:12 | len2 | Unchecked use of data from network function $@. | test.cpp:11:16:11:25 | call to ntohl | call to ntohl |
+| test.cpp:74:10:74:13 | lens | Unchecked use of data from network function $@. | test.cpp:11:16:11:25 | call to ntohl | call to ntohl |
+| test.cpp:87:10:87:13 | len3 | Unchecked use of data from network function $@. | test.cpp:86:10:86:19 | call to ntohl | call to ntohl |
+| test.cpp:95:9:95:11 | len | Unchecked use of data from network function $@. | test.cpp:100:8:100:17 | call to ntohl | call to ntohl |
+| test.cpp:107:32:107:41 | call to ntohl | Unchecked use of data from network function $@. | test.cpp:107:32:107:41 | call to ntohl | call to ntohl |
diff --git a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/test.cpp b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/test.cpp
index e3f01f9ae77..24bdaee0f16 100644
--- a/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/test.cpp
+++ b/cpp/ql/test/query-tests/Likely Bugs/Memory Management/NtohlArrayNoBound/test.cpp
@@ -1,6 +1,7 @@
typedef unsigned int size_t;
void *memcpy(void *s1, const void *s2, size_t n);
+int memcmp(void *s1, const void *s2, size_t n);
size_t strlen(const char *s);
int ntohl(int x);
@@ -98,3 +99,10 @@ void test3(size_t len)
{
test2(ntohl(len));
}
+
+int test4(const char *source, size_t len)
+{
+ char buffer[256];
+
+ return memcmp(buffer, source, ntohl(len)); // BAD
+}
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected
index 0bbacc5a970..bb1caa71e12 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/SAMATE/ExecTainted/ExecTainted.expected
@@ -3,7 +3,7 @@ edges
| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:33:34:33:39 | *call to getenv | provenance | |
| tests.cpp:33:34:33:39 | *call to getenv | tests.cpp:38:39:38:49 | *environment | provenance | |
| tests.cpp:38:25:38:36 | strncat output argument | tests.cpp:42:12:42:15 | *data | provenance | |
-| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | provenance | |
+| tests.cpp:38:39:38:49 | *environment | tests.cpp:38:25:38:36 | strncat output argument | provenance | Config |
| tests.cpp:42:12:42:15 | *data | tests.cpp:26:15:26:23 | **badSource | provenance | |
| tests.cpp:51:5:51:26 | *... = ... | tests.cpp:53:16:53:19 | *data | provenance | |
| tests.cpp:51:12:51:20 | *call to badSource | tests.cpp:51:5:51:26 | *... = ... | provenance | |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected
index c90cf2e2bce..586aacd2819 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected
@@ -2,70 +2,72 @@ edges
| test.cpp:15:27:15:30 | **argv | test.cpp:16:20:16:26 | *access to array | provenance | |
| test.cpp:16:20:16:26 | *access to array | test.cpp:22:45:22:52 | *userName | provenance | |
| test.cpp:22:13:22:20 | sprintf output argument | test.cpp:23:12:23:19 | *command1 | provenance | |
-| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | provenance | |
+| test.cpp:22:45:22:52 | *userName | test.cpp:22:13:22:20 | sprintf output argument | provenance | Config |
| test.cpp:47:21:47:26 | *call to getenv | test.cpp:47:21:47:26 | *call to getenv | provenance | |
| test.cpp:47:21:47:26 | *call to getenv | test.cpp:50:35:50:43 | *envCflags | provenance | |
| test.cpp:50:11:50:17 | sprintf output argument | test.cpp:51:10:51:16 | *command | provenance | |
-| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | provenance | |
+| test.cpp:50:35:50:43 | *envCflags | test.cpp:50:11:50:17 | sprintf output argument | provenance | Config |
| test.cpp:62:9:62:16 | fread output argument | test.cpp:64:20:64:27 | *filename | provenance | |
| test.cpp:64:11:64:17 | strncat output argument | test.cpp:65:10:65:16 | *command | provenance | |
-| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | provenance | |
+| test.cpp:64:20:64:27 | *filename | test.cpp:64:11:64:17 | strncat output argument | provenance | Config |
| test.cpp:82:9:82:16 | fread output argument | test.cpp:84:20:84:27 | *filename | provenance | |
| test.cpp:84:11:84:17 | strncat output argument | test.cpp:85:32:85:38 | *command | provenance | |
-| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | provenance | |
+| test.cpp:84:20:84:27 | *filename | test.cpp:84:11:84:17 | strncat output argument | provenance | Config |
| test.cpp:91:9:91:16 | fread output argument | test.cpp:93:17:93:24 | *filename | provenance | |
| test.cpp:93:11:93:14 | strncat output argument | test.cpp:94:45:94:48 | *path | provenance | |
-| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | provenance | |
+| test.cpp:93:17:93:24 | *filename | test.cpp:93:11:93:14 | strncat output argument | provenance | Config |
| test.cpp:106:20:106:38 | *call to getenv | test.cpp:107:33:107:36 | *path | provenance | TaintFunction |
| test.cpp:107:31:107:31 | call to operator+ | test.cpp:107:31:107:31 | call to operator+ | provenance | |
| test.cpp:107:31:107:31 | call to operator+ | test.cpp:108:18:108:22 | *call to c_str | provenance | TaintFunction |
-| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | provenance | |
+| test.cpp:107:33:107:36 | *path | test.cpp:107:31:107:31 | call to operator+ | provenance | Config |
| test.cpp:113:20:113:38 | *call to getenv | test.cpp:114:19:114:22 | *path | provenance | TaintFunction |
| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | TaintFunction |
| test.cpp:114:10:114:23 | call to operator+ | test.cpp:114:25:114:29 | *call to c_str | provenance | TaintFunction |
| test.cpp:114:17:114:17 | call to operator+ | test.cpp:114:10:114:23 | call to operator+ | provenance | |
-| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | provenance | |
-| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | provenance | |
+| test.cpp:114:19:114:22 | *path | test.cpp:114:10:114:23 | call to operator+ | provenance | Config |
+| test.cpp:114:19:114:22 | *path | test.cpp:114:17:114:17 | call to operator+ | provenance | Config |
| test.cpp:119:20:119:38 | *call to getenv | test.cpp:120:19:120:22 | *path | provenance | TaintFunction |
| test.cpp:120:17:120:17 | call to operator+ | test.cpp:120:10:120:30 | *call to data | provenance | TaintFunction |
-| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | provenance | |
+| test.cpp:120:19:120:22 | *path | test.cpp:120:17:120:17 | call to operator+ | provenance | Config |
| test.cpp:140:9:140:11 | fread output argument | test.cpp:142:31:142:33 | *str | provenance | |
| test.cpp:142:11:142:17 | sprintf output argument | test.cpp:143:10:143:16 | *command | provenance | |
-| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | provenance | |
+| test.cpp:142:31:142:33 | *str | test.cpp:142:11:142:17 | sprintf output argument | provenance | Config |
| test.cpp:174:9:174:16 | fread output argument | test.cpp:177:20:177:27 | *filename | provenance | |
| test.cpp:174:9:174:16 | fread output argument | test.cpp:180:22:180:29 | *filename | provenance | |
| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | |
| test.cpp:177:13:177:17 | strncat output argument | test.cpp:178:22:178:26 | *flags | provenance | |
-| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | |
+| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | Config |
| test.cpp:177:20:177:27 | *filename | test.cpp:177:13:177:17 | strncat output argument | provenance | TaintFunction |
| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | |
| test.cpp:178:13:178:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | |
-| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | |
+| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | Config |
| test.cpp:178:22:178:26 | *flags | test.cpp:178:13:178:19 | strncat output argument | provenance | TaintFunction |
| test.cpp:180:13:180:19 | strncat output argument | test.cpp:183:32:183:38 | *command | provenance | |
-| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | provenance | |
+| test.cpp:180:22:180:29 | *filename | test.cpp:180:13:180:19 | strncat output argument | provenance | Config |
| test.cpp:186:47:186:54 | *filename | test.cpp:187:18:187:25 | *filename | provenance | |
| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | |
| test.cpp:187:11:187:15 | strncat output argument | test.cpp:188:20:188:24 | *flags | provenance | |
-| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | |
+| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | Config |
| test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | TaintFunction |
| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command | provenance | |
| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command | provenance | |
-| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | |
+| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Return] | provenance | |
+| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Return] | provenance | |
+| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | Config |
| test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | TaintFunction |
| test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | provenance | |
| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | |
| test.cpp:196:10:196:16 | concat output argument | test.cpp:198:32:198:38 | *command | provenance | |
| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | provenance | |
-| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | TaintFunction |
+| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | Config |
| test.cpp:196:26:196:33 | *filename | test.cpp:196:10:196:16 | concat output argument | provenance | TaintFunction |
| test.cpp:218:9:218:16 | fread output argument | test.cpp:220:19:220:26 | *filename | provenance | |
| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | TaintFunction |
| test.cpp:220:10:220:16 | strncat output argument | test.cpp:220:10:220:16 | strncat output argument | provenance | TaintFunction |
| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | |
| test.cpp:220:10:220:16 | strncat output argument | test.cpp:222:32:222:38 | *command | provenance | |
-| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | |
-| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | |
+| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | Config |
+| test.cpp:220:19:220:26 | *filename | test.cpp:220:10:220:16 | strncat output argument | provenance | Config |
| test.cpp:220:19:220:26 | *filename | test.cpp:220:19:220:26 | *filename | provenance | |
nodes
| test.cpp:15:27:15:30 | **argv | semmle.label | **argv |
@@ -125,6 +127,8 @@ nodes
| test.cpp:183:32:183:38 | *command | semmle.label | *command |
| test.cpp:186:19:186:25 | *command | semmle.label | *command |
| test.cpp:186:19:186:25 | *command | semmle.label | *command |
+| test.cpp:186:19:186:25 | *command [Return] | semmle.label | *command [Return] |
+| test.cpp:186:19:186:25 | *command [Return] | semmle.label | *command [Return] |
| test.cpp:186:47:186:54 | *filename | semmle.label | *filename |
| test.cpp:187:11:187:15 | strncat output argument | semmle.label | strncat output argument |
| test.cpp:187:11:187:15 | strncat output argument | semmle.label | strncat output argument |
@@ -151,8 +155,8 @@ nodes
subpaths
| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command | test.cpp:196:10:196:16 | concat output argument |
| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command | test.cpp:196:10:196:16 | concat output argument |
-| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:188:11:188:17 | strncat output argument | test.cpp:196:10:196:16 | concat output argument |
-| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:188:11:188:17 | strncat output argument | test.cpp:196:10:196:16 | concat output argument |
+| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Return] | test.cpp:196:10:196:16 | concat output argument |
+| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Return] | test.cpp:196:10:196:16 | concat output argument |
#select
| test.cpp:23:12:23:19 | command1 | test.cpp:15:27:15:30 | **argv | test.cpp:23:12:23:19 | *command1 | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string). | test.cpp:15:27:15:30 | **argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument |
| test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | *call to getenv | test.cpp:51:10:51:16 | *command | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string). | test.cpp:47:21:47:26 | *call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected
index 433a3293ffd..2f24a9a27cb 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected
@@ -53,6 +53,7 @@ edges
| test.cpp:228:27:228:54 | call to malloc | test.cpp:228:27:228:54 | call to malloc | provenance | |
| test.cpp:228:27:228:54 | call to malloc | test.cpp:232:10:232:15 | buffer | provenance | |
| test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | provenance | |
+| test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [Return] [string] | provenance | |
| test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [string] | provenance | |
| test.cpp:236:5:236:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | provenance | |
| test.cpp:241:20:241:38 | call to malloc | test.cpp:241:20:241:38 | call to malloc | provenance | |
@@ -128,6 +129,7 @@ nodes
| test.cpp:228:27:228:54 | call to malloc | semmle.label | call to malloc |
| test.cpp:228:27:228:54 | call to malloc | semmle.label | call to malloc |
| test.cpp:232:10:232:15 | buffer | semmle.label | buffer |
+| test.cpp:235:27:235:31 | *p_str [Return] [string] | semmle.label | *p_str [Return] [string] |
| test.cpp:235:27:235:31 | *p_str [string] | semmle.label | *p_str [string] |
| test.cpp:235:40:235:45 | buffer | semmle.label | buffer |
| test.cpp:236:5:236:9 | *p_str [post update] [string] | semmle.label | *p_str [post update] [string] |
@@ -150,8 +152,8 @@ nodes
| test.cpp:264:13:264:30 | call to malloc | semmle.label | call to malloc |
| test.cpp:266:12:266:12 | p | semmle.label | p |
subpaths
+| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:235:27:235:31 | *p_str [Return] [string] | test.cpp:242:16:242:19 | set_string output argument [string] |
| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:235:27:235:31 | *p_str [string] | test.cpp:242:16:242:19 | set_string output argument [string] |
-| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:242:16:242:19 | set_string output argument [string] |
#select
| test.cpp:42:5:42:11 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:42:18:42:23 | string | This write may overflow $@ by 1 element. | test.cpp:42:18:42:23 | string | string |
| test.cpp:72:9:72:15 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:72:22:72:27 | string | This write may overflow $@ by 1 element. | test.cpp:72:22:72:27 | string | string |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected
index 2eab396a234..e55caaa6372 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-193/InvalidPointerDeref.expected
@@ -1,138 +1,138 @@
edges
| test.cpp:4:15:4:33 | call to malloc | test.cpp:4:15:4:33 | call to malloc | provenance | |
-| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | provenance | |
+| test.cpp:4:15:4:33 | call to malloc | test.cpp:5:15:5:22 | ... + ... | provenance | Config |
| test.cpp:5:15:5:22 | ... + ... | test.cpp:5:15:5:22 | ... + ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | |
-| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | Config |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | Config |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | Config |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:6:14:6:15 | * ... | provenance | Config |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | Config |
+| test.cpp:5:15:5:22 | ... + ... | test.cpp:8:14:8:21 | * ... | provenance | Config |
| test.cpp:6:14:6:15 | * ... | test.cpp:8:14:8:21 | * ... | provenance | |
| test.cpp:16:15:16:33 | call to malloc | test.cpp:16:15:16:33 | call to malloc | provenance | |
-| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | provenance | |
+| test.cpp:16:15:16:33 | call to malloc | test.cpp:20:14:20:21 | * ... | provenance | Config |
| test.cpp:28:15:28:37 | call to malloc | test.cpp:28:15:28:37 | call to malloc | provenance | |
-| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | provenance | |
+| test.cpp:28:15:28:37 | call to malloc | test.cpp:29:15:29:28 | ... + ... | provenance | Config |
| test.cpp:29:15:29:28 | ... + ... | test.cpp:29:15:29:28 | ... + ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | |
-| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | Config |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | Config |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | Config |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:30:14:30:15 | * ... | provenance | Config |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | Config |
+| test.cpp:29:15:29:28 | ... + ... | test.cpp:32:14:32:21 | * ... | provenance | Config |
| test.cpp:30:14:30:15 | * ... | test.cpp:32:14:32:21 | * ... | provenance | |
| test.cpp:51:33:51:35 | *end | test.cpp:60:34:60:37 | mk_array output argument | provenance | |
| test.cpp:52:19:52:37 | call to malloc | test.cpp:52:19:52:37 | call to malloc | provenance | |
-| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | provenance | |
+| test.cpp:52:19:52:37 | call to malloc | test.cpp:53:12:53:23 | ... + ... | provenance | Config |
| test.cpp:53:5:53:23 | ... = ... | test.cpp:51:33:51:35 | *end | provenance | |
| test.cpp:53:12:53:23 | ... + ... | test.cpp:53:5:53:23 | ... = ... | provenance | |
-| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | provenance | |
+| test.cpp:60:34:60:37 | mk_array output argument | test.cpp:67:9:67:14 | ... = ... | provenance | Config |
| test.cpp:205:15:205:33 | call to malloc | test.cpp:205:15:205:33 | call to malloc | provenance | |
-| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | provenance | |
+| test.cpp:205:15:205:33 | call to malloc | test.cpp:206:17:206:23 | ... + ... | provenance | Config |
| test.cpp:206:17:206:23 | ... + ... | test.cpp:206:17:206:23 | ... + ... | provenance | |
-| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | |
-| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | |
+| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | Config |
+| test.cpp:206:17:206:23 | ... + ... | test.cpp:213:5:213:13 | ... = ... | provenance | Config |
| test.cpp:260:13:260:24 | new[] | test.cpp:260:13:260:24 | new[] | provenance | |
-| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | provenance | |
+| test.cpp:260:13:260:24 | new[] | test.cpp:261:14:261:21 | ... + ... | provenance | Config |
| test.cpp:261:14:261:21 | ... + ... | test.cpp:261:14:261:21 | ... + ... | provenance | |
-| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | |
-| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | |
-| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | |
-| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | |
+| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | Config |
+| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | Config |
+| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | Config |
+| test.cpp:261:14:261:21 | ... + ... | test.cpp:264:13:264:14 | * ... | provenance | Config |
| test.cpp:262:31:262:33 | *... ++ | test.cpp:264:13:264:14 | * ... | provenance | |
| test.cpp:262:31:262:33 | *... ++ | test.cpp:264:13:264:14 | * ... | provenance | |
| test.cpp:264:13:264:14 | * ... | test.cpp:262:31:262:33 | *... ++ | provenance | |
| test.cpp:270:13:270:24 | new[] | test.cpp:270:13:270:24 | new[] | provenance | |
-| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | provenance | |
+| test.cpp:270:13:270:24 | new[] | test.cpp:271:14:271:21 | ... + ... | provenance | Config |
| test.cpp:271:14:271:21 | ... + ... | test.cpp:271:14:271:21 | ... + ... | provenance | |
-| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | |
-| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | |
+| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | Config |
+| test.cpp:271:14:271:21 | ... + ... | test.cpp:274:5:274:10 | ... = ... | provenance | Config |
| test.cpp:355:14:355:27 | new[] | test.cpp:355:14:355:27 | new[] | provenance | |
-| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | provenance | |
+| test.cpp:355:14:355:27 | new[] | test.cpp:356:15:356:23 | ... + ... | provenance | Config |
| test.cpp:356:15:356:23 | ... + ... | test.cpp:356:15:356:23 | ... + ... | provenance | |
-| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | |
-| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | |
-| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | |
-| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | |
+| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | Config |
+| test.cpp:356:15:356:23 | ... + ... | test.cpp:358:14:358:26 | * ... | provenance | Config |
+| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | Config |
+| test.cpp:356:15:356:23 | ... + ... | test.cpp:359:14:359:32 | * ... | provenance | Config |
| test.cpp:377:14:377:27 | new[] | test.cpp:377:14:377:27 | new[] | provenance | |
-| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | provenance | |
+| test.cpp:377:14:377:27 | new[] | test.cpp:378:15:378:23 | ... + ... | provenance | Config |
| test.cpp:378:15:378:23 | ... + ... | test.cpp:378:15:378:23 | ... + ... | provenance | |
-| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | |
-| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | |
+| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | Config |
+| test.cpp:378:15:378:23 | ... + ... | test.cpp:384:13:384:16 | * ... | provenance | Config |
| test.cpp:410:14:410:27 | new[] | test.cpp:410:14:410:27 | new[] | provenance | |
-| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | provenance | |
-| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | provenance | |
+| test.cpp:410:14:410:27 | new[] | test.cpp:411:15:411:23 | & ... | provenance | Config |
+| test.cpp:410:14:410:27 | new[] | test.cpp:415:7:415:15 | ... = ... | provenance | Config |
| test.cpp:411:15:411:23 | & ... | test.cpp:411:15:411:23 | & ... | provenance | |
-| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | |
-| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | |
+| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | Config |
+| test.cpp:411:15:411:23 | & ... | test.cpp:415:7:415:15 | ... = ... | provenance | Config |
| test.cpp:421:14:421:27 | new[] | test.cpp:421:14:421:27 | new[] | provenance | |
-| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | provenance | |
-| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | provenance | |
+| test.cpp:421:14:421:27 | new[] | test.cpp:422:15:422:23 | & ... | provenance | Config |
+| test.cpp:421:14:421:27 | new[] | test.cpp:426:7:426:15 | ... = ... | provenance | Config |
| test.cpp:422:15:422:23 | & ... | test.cpp:422:15:422:23 | & ... | provenance | |
-| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | |
-| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | |
+| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | Config |
+| test.cpp:422:15:422:23 | & ... | test.cpp:426:7:426:15 | ... = ... | provenance | Config |
| test.cpp:432:14:432:27 | new[] | test.cpp:432:14:432:27 | new[] | provenance | |
-| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | provenance | |
-| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | provenance | |
+| test.cpp:432:14:432:27 | new[] | test.cpp:433:15:433:23 | & ... | provenance | Config |
+| test.cpp:432:14:432:27 | new[] | test.cpp:438:7:438:15 | ... = ... | provenance | Config |
| test.cpp:433:15:433:23 | & ... | test.cpp:433:15:433:23 | & ... | provenance | |
-| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | |
-| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | |
+| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | Config |
+| test.cpp:433:15:433:23 | & ... | test.cpp:438:7:438:15 | ... = ... | provenance | Config |
| test.cpp:444:14:444:27 | new[] | test.cpp:444:14:444:27 | new[] | provenance | |
-| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | provenance | |
-| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | provenance | |
+| test.cpp:444:14:444:27 | new[] | test.cpp:445:15:445:23 | & ... | provenance | Config |
+| test.cpp:444:14:444:27 | new[] | test.cpp:450:7:450:15 | ... = ... | provenance | Config |
| test.cpp:445:15:445:23 | & ... | test.cpp:445:15:445:23 | & ... | provenance | |
-| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | |
-| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | |
+| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | Config |
+| test.cpp:445:15:445:23 | & ... | test.cpp:450:7:450:15 | ... = ... | provenance | Config |
| test.cpp:480:14:480:27 | new[] | test.cpp:480:14:480:27 | new[] | provenance | |
-| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | provenance | |
-| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | provenance | |
+| test.cpp:480:14:480:27 | new[] | test.cpp:481:15:481:23 | & ... | provenance | Config |
+| test.cpp:480:14:480:27 | new[] | test.cpp:486:7:486:15 | ... = ... | provenance | Config |
| test.cpp:481:15:481:23 | & ... | test.cpp:481:15:481:23 | & ... | provenance | |
-| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | |
-| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | |
+| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | Config |
+| test.cpp:481:15:481:23 | & ... | test.cpp:486:7:486:15 | ... = ... | provenance | Config |
| test.cpp:543:14:543:27 | new[] | test.cpp:543:14:543:27 | new[] | provenance | |
-| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | provenance | |
+| test.cpp:543:14:543:27 | new[] | test.cpp:548:5:548:19 | ... = ... | provenance | Config |
| test.cpp:554:14:554:27 | new[] | test.cpp:554:14:554:27 | new[] | provenance | |
-| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | provenance | |
+| test.cpp:554:14:554:27 | new[] | test.cpp:559:5:559:19 | ... = ... | provenance | Config |
| test.cpp:642:14:642:31 | new[] | test.cpp:642:14:642:31 | new[] | provenance | |
-| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | provenance | |
+| test.cpp:642:14:642:31 | new[] | test.cpp:647:5:647:19 | ... = ... | provenance | Config |
| test.cpp:730:12:730:28 | new[] | test.cpp:730:12:730:28 | new[] | provenance | |
-| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | provenance | |
+| test.cpp:730:12:730:28 | new[] | test.cpp:732:16:732:26 | ... + ... | provenance | Config |
| test.cpp:732:16:732:26 | ... + ... | test.cpp:732:16:732:26 | ... + ... | provenance | |
-| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | |
-| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | |
+| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | Config |
+| test.cpp:732:16:732:26 | ... + ... | test.cpp:733:5:733:12 | ... = ... | provenance | Config |
| test.cpp:754:18:754:31 | new[] | test.cpp:754:18:754:31 | new[] | provenance | |
-| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | |
-| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | |
-| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | |
-| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | |
+| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | Config |
+| test.cpp:754:18:754:31 | new[] | test.cpp:767:16:767:29 | access to array | provenance | Config |
+| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | Config |
+| test.cpp:754:18:754:31 | new[] | test.cpp:772:16:772:29 | access to array | provenance | Config |
| test.cpp:781:14:781:27 | new[] | test.cpp:781:14:781:27 | new[] | provenance | |
-| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | provenance | |
+| test.cpp:781:14:781:27 | new[] | test.cpp:786:18:786:27 | access to array | provenance | Config |
| test.cpp:792:60:792:62 | *end | test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | provenance | |
| test.cpp:792:60:792:62 | *end | test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | provenance | |
-| test.cpp:793:5:793:32 | ... = ... | test.cpp:794:12:794:24 | ... + ... | provenance | |
+| test.cpp:793:5:793:32 | ... = ... | test.cpp:794:12:794:24 | ... + ... | provenance | Config |
| test.cpp:793:14:793:32 | call to malloc | test.cpp:793:5:793:32 | ... = ... | provenance | |
| test.cpp:794:5:794:24 | ... = ... | test.cpp:792:60:792:62 | *end | provenance | |
| test.cpp:794:12:794:24 | ... + ... | test.cpp:794:5:794:24 | ... = ... | provenance | |
-| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | provenance | |
+| test.cpp:800:40:800:43 | mk_array_no_field_flow output argument | test.cpp:807:7:807:12 | ... = ... | provenance | Config |
| test.cpp:815:52:815:54 | end | test.cpp:815:52:815:54 | end | provenance | |
-| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | |
-| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | |
+| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | Config |
+| test.cpp:815:52:815:54 | end | test.cpp:821:7:821:12 | ... = ... | provenance | Config |
| test.cpp:832:40:832:43 | mk_array_no_field_flow output argument | test.cpp:833:37:833:39 | end | provenance | |
| test.cpp:833:37:833:39 | end | test.cpp:815:52:815:54 | end | provenance | |
| test.cpp:841:18:841:35 | call to malloc | test.cpp:841:18:841:35 | call to malloc | provenance | |
-| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | provenance | |
+| test.cpp:841:18:841:35 | call to malloc | test.cpp:842:3:842:20 | ... = ... | provenance | Config |
| test.cpp:848:20:848:37 | call to malloc | test.cpp:848:20:848:37 | call to malloc | provenance | |
-| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | provenance | |
+| test.cpp:848:20:848:37 | call to malloc | test.cpp:849:5:849:22 | ... = ... | provenance | Config |
| test.cpp:856:12:856:35 | call to malloc | test.cpp:856:12:856:35 | call to malloc | provenance | |
-| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | provenance | |
+| test.cpp:856:12:856:35 | call to malloc | test.cpp:857:16:857:29 | ... + ... | provenance | Config |
| test.cpp:857:16:857:29 | ... + ... | test.cpp:857:16:857:29 | ... + ... | provenance | |
-| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | |
-| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | |
+| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | Config |
+| test.cpp:857:16:857:29 | ... + ... | test.cpp:860:5:860:11 | ... = ... | provenance | Config |
| test.cpp:868:15:868:35 | call to g_malloc | test.cpp:868:15:868:35 | call to g_malloc | provenance | |
-| test.cpp:868:15:868:35 | call to g_malloc | test.cpp:869:15:869:22 | ... + ... | provenance | |
+| test.cpp:868:15:868:35 | call to g_malloc | test.cpp:869:15:869:22 | ... + ... | provenance | Config |
| test.cpp:869:15:869:22 | ... + ... | test.cpp:869:15:869:22 | ... + ... | provenance | |
-| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | |
-| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | |
+| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | Config |
+| test.cpp:869:15:869:22 | ... + ... | test.cpp:870:14:870:15 | * ... | provenance | Config |
nodes
| test.cpp:4:15:4:33 | call to malloc | semmle.label | call to malloc |
| test.cpp:4:15:4:33 | call to malloc | semmle.label | call to malloc |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp
index 22eec736df7..18cc66b8367 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-416/semmle/tests/UseOfUniquePtrAfterLifetimeEnds/test.cpp
@@ -203,4 +203,12 @@ void test2(bool b1, bool b2) {
auto s11 = b2 ? nullptr : sRefRef.get(); // GOOD
const S* s12;
s12 = sRefRef.get(); // GOOD
+}
+
+void test_convert_to_bool() {
+ bool b = get_unique_ptr().get(); // GOOD
+
+ if(get_unique_ptr().get()) { // GOOD
+
+ }
}
\ No newline at end of file
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected
index cea82d21350..802546c92e5 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected
@@ -12,7 +12,7 @@ edges
| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | provenance | |
| tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | provenance | |
| tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | provenance | |
-| tests2.cpp:120:5:120:21 | [summary param] 1 indirection in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary] to write: Argument[0 indirection] in zmq_msg_init_data | provenance | |
+| tests2.cpp:120:5:120:21 | [summary param] 1 indirection in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] 0 indirection in zmq_msg_init_data [Return] | provenance | |
| tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:138:23:138:34 | *message_data | provenance | |
| tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:143:34:143:45 | *message_data | provenance | |
| tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:134:2:134:30 | *... = ... | provenance | |
@@ -52,8 +52,8 @@ nodes
| tests2.cpp:111:14:111:15 | *c1 [*ptr] | semmle.label | *c1 [*ptr] |
| tests2.cpp:111:14:111:19 | *ptr | semmle.label | *ptr |
| tests2.cpp:111:17:111:19 | *ptr | semmle.label | *ptr |
+| tests2.cpp:120:5:120:21 | [summary param] 0 indirection in zmq_msg_init_data [Return] | semmle.label | [summary param] 0 indirection in zmq_msg_init_data [Return] |
| tests2.cpp:120:5:120:21 | [summary param] 1 indirection in zmq_msg_init_data | semmle.label | [summary param] 1 indirection in zmq_msg_init_data |
-| tests2.cpp:120:5:120:21 | [summary] to write: Argument[0 indirection] in zmq_msg_init_data | semmle.label | [summary] to write: Argument[0 indirection] in zmq_msg_init_data |
| tests2.cpp:134:2:134:30 | *... = ... | semmle.label | *... = ... |
| tests2.cpp:134:17:134:22 | *call to getenv | semmle.label | *call to getenv |
| tests2.cpp:138:23:138:34 | *message_data | semmle.label | *message_data |
@@ -74,7 +74,7 @@ nodes
| tests_sysconf.cpp:36:21:36:27 | confstr output argument | semmle.label | confstr output argument |
| tests_sysconf.cpp:39:19:39:25 | *pathbuf | semmle.label | *pathbuf |
subpaths
-| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] 1 indirection in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary] to write: Argument[0 indirection] in zmq_msg_init_data | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument |
+| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] 1 indirection in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] 0 indirection in zmq_msg_init_data [Return] | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument |
#select
| tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:63:13:63:26 | *call to getenv | *call to getenv |
| tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:64:13:64:26 | *call to getenv | *call to getenv |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
index e9125a9ca4c..28f2b833532 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-611/XXE.expected
@@ -2,6 +2,7 @@ edges
| tests2.cpp:20:17:20:31 | *new | tests2.cpp:22:2:22:2 | *p | provenance | |
| tests2.cpp:20:17:20:31 | call to SAXParser | tests2.cpp:20:17:20:31 | *new | provenance | |
| tests2.cpp:33:17:33:31 | *new | tests2.cpp:37:2:37:2 | *p | provenance | |
+| tests2.cpp:33:17:33:31 | *new | tests2.cpp:37:2:37:2 | *p | provenance | Config |
| tests2.cpp:33:17:33:31 | call to SAXParser | tests2.cpp:33:17:33:31 | *new | provenance | |
| tests2.cpp:49:12:49:12 | call to SAXParser | tests2.cpp:51:2:51:2 | *p | provenance | |
| tests3.cpp:23:21:23:53 | *call to createXMLReader | tests3.cpp:23:21:23:53 | *call to createXMLReader | provenance | |
@@ -14,46 +15,51 @@ edges
| tests3.cpp:48:24:48:56 | *call to createXMLReader | tests3.cpp:48:24:48:56 | *call to createXMLReader | provenance | |
| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:60:21:60:53 | *call to createXMLReader | provenance | |
| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | provenance | |
+| tests3.cpp:60:21:60:53 | *call to createXMLReader | tests3.cpp:63:2:63:2 | *p | provenance | Config |
| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:67:21:67:53 | *call to createXMLReader | provenance | |
| tests3.cpp:67:21:67:53 | *call to createXMLReader | tests3.cpp:70:2:70:2 | *p | provenance | |
| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:27:25:27:38 | *call to createLSParser | provenance | |
| tests5.cpp:27:25:27:38 | *call to createLSParser | tests5.cpp:29:2:29:2 | *p | provenance | |
| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:40:25:40:38 | *call to createLSParser | provenance | |
| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | provenance | |
+| tests5.cpp:40:25:40:38 | *call to createLSParser | tests5.cpp:43:2:43:2 | *p | provenance | Config |
| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:55:25:55:38 | *call to createLSParser | provenance | |
| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | |
+| tests5.cpp:55:25:55:38 | *call to createLSParser | tests5.cpp:59:2:59:2 | *p | provenance | Config |
| tests5.cpp:63:21:63:24 | **g_p2 | tests5.cpp:77:2:77:5 | *g_p2 | provenance | |
| tests5.cpp:70:2:70:32 | *... = ... | tests5.cpp:63:21:63:24 | **g_p2 | provenance | |
| tests5.cpp:70:17:70:30 | *call to createLSParser | tests5.cpp:70:2:70:32 | *... = ... | provenance | |
| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:81:25:81:38 | *call to createLSParser | provenance | |
| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | |
| tests5.cpp:81:25:81:38 | *call to createLSParser | tests5.cpp:83:2:83:2 | *p | provenance | |
-| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | provenance | |
+| tests5.cpp:83:2:83:2 | *p | tests5.cpp:85:2:85:2 | *p | provenance | Config |
| tests5.cpp:85:2:85:2 | *p | tests5.cpp:86:2:86:2 | *p | provenance | |
-| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | provenance | |
+| tests5.cpp:86:2:86:2 | *p | tests5.cpp:88:2:88:2 | *p | provenance | Config |
| tests5.cpp:88:2:88:2 | *p | tests5.cpp:89:2:89:2 | *p | provenance | |
| tests.cpp:15:23:15:43 | *new | tests.cpp:17:2:17:2 | *p | provenance | |
| tests.cpp:15:23:15:43 | call to XercesDOMParser | tests.cpp:15:23:15:43 | *new | provenance | |
| tests.cpp:28:23:28:43 | *new | tests.cpp:31:2:31:2 | *p | provenance | |
+| tests.cpp:28:23:28:43 | *new | tests.cpp:31:2:31:2 | *p | provenance | Config |
| tests.cpp:28:23:28:43 | call to XercesDOMParser | tests.cpp:28:23:28:43 | *new | provenance | |
| tests.cpp:35:23:35:43 | *new | tests.cpp:37:2:37:2 | *p | provenance | |
| tests.cpp:35:23:35:43 | call to XercesDOMParser | tests.cpp:35:23:35:43 | *new | provenance | |
-| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | provenance | |
+| tests.cpp:37:2:37:2 | *p | tests.cpp:37:2:37:2 | *p | provenance | Config |
| tests.cpp:37:2:37:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | |
-| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | |
+| tests.cpp:38:2:38:2 | *p | tests.cpp:38:2:38:2 | *p | provenance | Config |
| tests.cpp:38:2:38:2 | *p | tests.cpp:39:2:39:2 | *p | provenance | |
| tests.cpp:51:23:51:43 | *new | tests.cpp:53:2:53:2 | *p | provenance | |
| tests.cpp:51:23:51:43 | call to XercesDOMParser | tests.cpp:51:23:51:43 | *new | provenance | |
-| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | provenance | |
+| tests.cpp:53:2:53:2 | *p | tests.cpp:53:2:53:2 | *p | provenance | Config |
| tests.cpp:53:2:53:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | |
-| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | |
+| tests.cpp:55:2:55:2 | *p | tests.cpp:55:2:55:2 | *p | provenance | Config |
| tests.cpp:55:2:55:2 | *p | tests.cpp:56:2:56:2 | *p | provenance | |
| tests.cpp:55:2:55:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | |
-| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | |
+| tests.cpp:57:2:57:2 | *p | tests.cpp:57:2:57:2 | *p | provenance | Config |
| tests.cpp:57:2:57:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | |
-| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | |
+| tests.cpp:59:2:59:2 | *p | tests.cpp:59:2:59:2 | *p | provenance | Config |
| tests.cpp:59:2:59:2 | *p | tests.cpp:60:2:60:2 | *p | provenance | |
| tests.cpp:66:23:66:43 | *new | tests.cpp:69:2:69:2 | *p | provenance | |
+| tests.cpp:66:23:66:43 | *new | tests.cpp:69:2:69:2 | *p | provenance | Config |
| tests.cpp:66:23:66:43 | call to XercesDOMParser | tests.cpp:66:23:66:43 | *new | provenance | |
| tests.cpp:73:23:73:43 | *new | tests.cpp:80:2:80:2 | *p | provenance | |
| tests.cpp:73:23:73:43 | call to XercesDOMParser | tests.cpp:73:23:73:43 | *new | provenance | |
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.c b/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.c
index 0de048210d6..34ca23748c8 100644
--- a/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.c
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.c
@@ -36,7 +36,7 @@ char *gets(char *s);
void testGets() {
char buf1[1024];
- char buf2 = malloc(1024);
+ char *buf2 = malloc(1024);
char *s;
gets(buf1); // BAD: use of gets
diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.cpp b/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.cpp
new file mode 100644
index 00000000000..a50478f7ed6
--- /dev/null
+++ b/cpp/ql/test/query-tests/Security/CWE/CWE-676/semmle/PotentiallyDangerousFunction/test.cpp
@@ -0,0 +1,7 @@
+char *gets();
+
+void testOtherGets() {
+ char *s;
+
+ s = gets(); // GOOD: this is not the gets from stdio.h
+}
diff --git a/csharp/.config/dotnet-tools.json b/csharp/.config/dotnet-tools.json
new file mode 100644
index 00000000000..b9052bc027d
--- /dev/null
+++ b/csharp/.config/dotnet-tools.json
@@ -0,0 +1,12 @@
+{
+ "version": 1,
+ "isRoot": true,
+ "tools": {
+ "paket": {
+ "version": "8.0.3",
+ "commands": [
+ "paket"
+ ]
+ }
+ }
+}
\ No newline at end of file
diff --git a/csharp/.gitignore b/csharp/.gitignore
index a030c9444fe..f3ea7470cb9 100644
--- a/csharp/.gitignore
+++ b/csharp/.gitignore
@@ -14,4 +14,4 @@ csharp.log
.vscode/launch.json
extractor/Semmle.Extraction.CSharp.Driver/Properties/launchSettings.json
-extractor-pack
\ No newline at end of file
+paket-files/
diff --git a/csharp/.paket/Paket.Restore.targets b/csharp/.paket/Paket.Restore.targets
new file mode 100644
index 00000000000..bbeec153f50
--- /dev/null
+++ b/csharp/.paket/Paket.Restore.targets
@@ -0,0 +1,560 @@
+
+
+
+
+
+
+ $(MSBuildAllProjects);$(MSBuildThisFileFullPath)
+
+ $(MSBuildVersion)
+ 15.0.0
+ false
+ true
+
+ true
+ $(MSBuildThisFileDirectory)
+ $(MSBuildThisFileDirectory)..\
+ $(PaketRootPath)paket-files\paket.restore.cached
+ $(PaketRootPath)paket.lock
+ classic
+ proj
+ assembly
+ native
+ /Library/Frameworks/Mono.framework/Commands/mono
+ mono
+
+
+ $(PaketRootPath)paket.bootstrapper.exe
+ $(PaketToolsPath)paket.bootstrapper.exe
+ $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\
+
+ "$(PaketBootStrapperExePath)"
+ $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"
+
+
+
+
+ true
+ true
+
+
+ True
+
+
+ False
+
+ $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/'))
+
+
+
+
+
+
+
+
+ $(PaketRootPath)paket
+ $(PaketToolsPath)paket
+
+
+
+
+
+ $(PaketRootPath)paket.exe
+ $(PaketToolsPath)paket.exe
+
+
+
+
+
+ <_DotnetToolsJson Condition="Exists('$(PaketRootPath)/.config/dotnet-tools.json')">$([System.IO.File]::ReadAllText("$(PaketRootPath)/.config/dotnet-tools.json"))
+ <_ConfigContainsPaket Condition=" '$(_DotnetToolsJson)' != ''">$(_DotnetToolsJson.Contains('"paket"'))
+ <_ConfigContainsPaket Condition=" '$(_ConfigContainsPaket)' == ''">false
+
+
+
+
+
+
+
+
+
+
+ <_PaketCommand>dotnet paket
+
+
+
+
+
+ $(PaketToolsPath)paket
+ $(PaketBootStrapperExeDir)paket
+
+
+ paket
+
+
+
+
+ <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(_PaketExeExtension)' == '.dll' ">dotnet "$(PaketExePath)"
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' AND '$(OS)' != 'Windows_NT' AND '$(_PaketExeExtension)' == '.exe' ">$(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
+ <_PaketCommand Condition=" '$(_PaketCommand)' == '' ">"$(PaketExePath)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(NoWarn);NU1603;NU1604;NU1605;NU1608
+ false
+ true
+
+
+
+
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketRestoreCacheFile)'))
+
+
+
+
+
+
+ $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[0].Replace(`"`, ``).Replace(` `, ``))
+ $([System.Text.RegularExpressions.Regex]::Split(`%(Identity)`, `": "`)[1].Replace(`"`, ``).Replace(` `, ``))
+
+
+
+
+ %(PaketRestoreCachedKeyValue.Value)
+ %(PaketRestoreCachedKeyValue.Value)
+
+
+
+
+ true
+ false
+ true
+
+
+
+
+ true
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.references.cached
+
+ $(MSBuildProjectFullPath).paket.references
+
+ $(MSBuildProjectDirectory)\$(MSBuildProjectName).paket.references
+
+ $(MSBuildProjectDirectory)\paket.references
+
+ false
+ true
+ true
+ references-file-or-cache-not-found
+
+
+
+
+ $([System.IO.File]::ReadAllText('$(PaketReferencesCachedFilePath)'))
+ $([System.IO.File]::ReadAllText('$(PaketOriginalReferencesFilePath)'))
+ references-file
+ false
+
+
+
+
+ false
+
+
+
+
+ true
+ target-framework '$(TargetFramework)' or '$(TargetFrameworks)' files @(PaketResolvedFilePaths)
+
+
+
+
+
+
+
+
+
+
+ false
+ true
+
+
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[6])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[7])
+ $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[8])
+
+
+ %(PaketReferencesFileLinesInfo.PackageVersion)
+ All
+ runtime
+ $(ExcludeAssets);contentFiles
+ $(ExcludeAssets);build;buildMultitargeting;buildTransitive
+ %(PaketReferencesFileLinesInfo.Aliases)
+ true
+ true
+
+
+
+
+
+ $(PaketIntermediateOutputPath)/$(MSBuildProjectFile).paket.clitools
+
+
+
+
+
+
+
+
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[0])
+ $([System.String]::Copy('%(PaketCliToolFileLines.Identity)').Split(',')[1])
+
+
+ %(PaketCliToolFileLinesInfo.PackageVersion)
+
+
+
+
+
+
+
+
+
+ false
+
+
+
+
+
+ <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/>
+
+
+
+
+
+ $(MSBuildProjectDirectory)/$(MSBuildProjectFile)
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ false
+ true
+ $(PaketIntermediateOutputPath)\$(Configuration)
+ $(PaketIntermediateOutputPath)
+
+
+
+ <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion.Split(`+`)[0]).nuspec"/>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/csharp/BUILD.bazel b/csharp/BUILD.bazel
index 657820b3395..fbe4213ab9e 100644
--- a/csharp/BUILD.bazel
+++ b/csharp/BUILD.bazel
@@ -1,3 +1,6 @@
+load("@rules_pkg//pkg:mappings.bzl", "pkg_filegroup", "pkg_files")
+load("//misc/bazel:pkg.bzl", "codeql_pack", "codeql_pkg_files_overlay")
+
package(default_visibility = ["//visibility:public"])
alias(
@@ -9,3 +12,70 @@ alias(
name = "dbscheme-stats",
actual = "//csharp/ql/lib:dbscheme-stats",
)
+
+pkg_files(
+ name = "dbscheme-group",
+ srcs = [
+ ":dbscheme",
+ ":dbscheme-stats",
+ ],
+ strip_prefix = None,
+)
+
+pkg_files(
+ name = "extractor-asp",
+ srcs = [
+ "@semmle_code//extractor-asp:extractor-asp-fat",
+ ],
+ prefix = "tools",
+ renames = {
+ "@semmle_code//extractor-asp:extractor-asp-fat": "extractor-asp.jar",
+ },
+)
+
+pkg_filegroup(
+ name = "db-files",
+ srcs = [
+ ":dbscheme-group",
+ "//csharp/downgrades",
+ ],
+)
+
+pkg_files(
+ name = "extra-files",
+ srcs = [
+ ":codeql-extractor.yml",
+ "//:LICENSE",
+ ],
+)
+
+codeql_pkg_files_overlay(
+ name = "extractor-arch-overlay",
+ srcs = [
+ "//csharp/autobuilder/Semmle.Autobuild.CSharp",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Driver",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Standalone",
+ ],
+)
+
+codeql_pack(
+ name = "csharp",
+ srcs = [
+ ":dbscheme-group",
+ ":extra-files",
+ ":extractor-arch-overlay",
+ ":extractor-asp",
+ "//csharp/downgrades",
+ "//csharp/tools",
+ ],
+)
+
+test_suite(
+ name = "unit-tests",
+ tags = ["csharp"],
+ tests = [
+ "//csharp/autobuilder/Semmle.Autobuild.CSharp.Tests",
+ "//csharp/autobuilder/Semmle.Autobuild.Cpp.Tests",
+ "//csharp/extractor/Semmle.Extraction.Tests",
+ ],
+)
diff --git a/csharp/CSharp.sln b/csharp/CSharp.sln
index 0578b5b8810..bfab79f56cc 100644
--- a/csharp/CSharp.sln
+++ b/csharp/CSharp.sln
@@ -30,9 +30,9 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.CSharp.Tes
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Extraction.CSharp.DependencyStubGenerator", "extractor\Semmle.Extraction.CSharp.DependencyStubGenerator\Semmle.Extraction.CSharp.DependencyStubGenerator.csproj", "{0EDA21A3-ADD8-4C10-B494-58B12B526B76}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp", "..\cpp\autobuilder\Semmle.Autobuild.Cpp\Semmle.Autobuild.Cpp.csproj", "{125C4FB7-34DA-442A-9095-3EA1514270CD}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp", "\autobuilder\Semmle.Autobuild.Cpp\Semmle.Autobuild.Cpp.csproj", "{125C4FB7-34DA-442A-9095-3EA1514270CD}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp.Tests", "..\cpp\autobuilder\Semmle.Autobuild.Cpp.Tests\Semmle.Autobuild.Cpp.Tests.csproj", "{72F369B7-0707-401A-802F-D526F272F9EE}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Semmle.Autobuild.Cpp.Tests", "autobuilder\Semmle.Autobuild.Cpp.Tests\Semmle.Autobuild.Cpp.Tests.csproj", "{72F369B7-0707-401A-802F-D526F272F9EE}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
diff --git a/csharp/Directory.Build.props b/csharp/Directory.Build.props
new file mode 100644
index 00000000000..08e24aa8dc9
--- /dev/null
+++ b/csharp/Directory.Build.props
@@ -0,0 +1,17 @@
+
+
+
+ net8.0
+ win-x64;linux-x64;osx-x64
+ enable
+ true
+
+ GitHub
+ CodeQL
+ Copyright © $([System.DateTime]::Now.Year) $(Company)
+ 1.0.0.0
+ $(Version)
+ $(Version)
+
+
+
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel
new file mode 100644
index 00000000000..65371c89393
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BUILD.bazel
@@ -0,0 +1,17 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_xunit_test",
+)
+
+codeql_xunit_test(
+ name = "Semmle.Autobuild.CSharp.Tests",
+ srcs = glob([
+ "*.cs",
+ ]),
+ deps = [
+ "//csharp/autobuilder/Semmle.Autobuild.CSharp:bin/Semmle.Autobuild.CSharp",
+ "//csharp/autobuilder/Semmle.Autobuild.Shared",
+ "@paket.main//microsoft.net.test.sdk",
+ "@paket.main//system.io.filesystem",
+ ],
+)
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs
index 3288eb5e852..612ca2320ce 100644
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/BuildScripts.cs
@@ -215,9 +215,9 @@ namespace Semmle.Autobuild.CSharp.Tests
internal class TestDiagnosticWriter : IDiagnosticsWriter
{
- public IList Diagnostics { get; } = new List();
+ public IList Diagnostics { get; } = new List();
- public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message);
+ public void AddEntry(Semmle.Util.DiagnosticMessage message) => this.Diagnostics.Add(message);
public void Dispose() { }
}
@@ -544,51 +544,6 @@ namespace Semmle.Autobuild.CSharp.Tests
Assert.Equal(2, vcvarsfiles.Length);
}
- [Fact]
- public void TestLinuxBuildlessExtractionSuccess()
- {
- actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0;
- actions.FileExists["csharp.log"] = true;
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch";
- actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln";
- actions.EnumerateDirectories[@"C:\Project"] = "";
-
- var autobuilder = CreateAutoBuilder(false, buildless: "true");
- TestAutobuilderScript(autobuilder, 0, 1);
- }
-
- [Fact]
- public void TestLinuxBuildlessExtractionFailed()
- {
- actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 10;
- actions.FileExists["csharp.log"] = true;
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch";
- actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln";
- actions.EnumerateDirectories[@"C:\Project"] = "";
-
- var autobuilder = CreateAutoBuilder(false, buildless: "true");
- TestAutobuilderScript(autobuilder, 10, 1);
- }
-
- [Fact]
- public void TestLinuxBuildlessExtractionSolution()
- {
- actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0;
- actions.FileExists["csharp.log"] = true;
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch";
- actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln";
- actions.EnumerateDirectories[@"C:\Project"] = "";
-
- var autobuilder = CreateAutoBuilder(false, buildless: "true");
- TestAutobuilderScript(autobuilder, 0, 1);
- }
-
private void TestAutobuilderScript(CSharpAutobuilder autobuilder, int expectedOutput, int commandsRun)
{
Assert.Equal(expectedOutput, autobuilder.GetBuildScript().Run(actions, StartCallback, EndCallback));
@@ -677,21 +632,6 @@ namespace Semmle.Autobuild.CSharp.Tests
TestAutobuilderScript(autobuilder, 0, 1);
}
- [Fact]
- public void TestSkipNugetBuildless()
- {
- actions.RunProcess[@"C:\codeql\csharp/tools/linux64/Semmle.Extraction.CSharp.Standalone"] = 0;
- actions.FileExists["csharp.log"] = true;
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_TRAP_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SOURCE_ARCHIVE_DIR"] = "";
- actions.GetEnvironmentVariable["CODEQL_EXTRACTOR_CSHARP_SCRATCH_DIR"] = "scratch";
- actions.EnumerateFiles[@"C:\Project"] = "foo.cs\ntest.sln";
- actions.EnumerateDirectories[@"C:\Project"] = "";
-
- var autobuilder = CreateAutoBuilder(false, buildless: "true");
- TestAutobuilderScript(autobuilder, 0, 1);
- }
-
[Fact]
public void TestDotnetVersionNotInstalled()
{
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj
index 06db1a3b722..381c67af007 100644
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/Semmle.Autobuild.CSharp.Tests.csproj
@@ -1,22 +1,8 @@
+
-
- net8.0
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
+
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references
new file mode 100644
index 00000000000..83bb87685b1
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp.Tests/paket.references
@@ -0,0 +1,4 @@
+System.IO.FileSystem
+xunit
+xunit.runner.visualstudio
+Microsoft.NET.Test.Sdk
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.CSharp/BUILD.bazel
new file mode 100644
index 00000000000..ee232650da6
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/BUILD.bazel
@@ -0,0 +1,21 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_binary",
+)
+
+codeql_csharp_binary(
+ name = "Semmle.Autobuild.CSharp",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/autobuilder/Semmle.Autobuild.Shared",
+ "//csharp/extractor/Semmle.Extraction.CSharp",
+ "//csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Standalone:bin/Semmle.Extraction.CSharp.Standalone",
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.build",
+ "@paket.main//newtonsoft.json",
+ ],
+)
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs
index 1b5e219c072..96532de153c 100644
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/CSharpAutobuilder.cs
@@ -12,7 +12,7 @@ namespace Semmle.Autobuild.CSharp
public class CSharpAutobuildOptions : AutobuildOptionsShared
{
private const string buildModeEnvironmentVariable = "CODEQL_EXTRACTOR_CSHARP_BUILD_MODE";
- private const string extractorOptionPrefix = "CODEQL_EXTRACTOR_CSHARP_OPTION_";
+ internal const string ExtractorOptionBuildless = "CODEQL_EXTRACTOR_CSHARP_OPTION_BUILDLESS";
public bool Buildless { get; }
@@ -26,7 +26,7 @@ namespace Semmle.Autobuild.CSharp
public CSharpAutobuildOptions(IBuildActions actions) : base(actions)
{
Buildless =
- actions.GetEnvironmentVariable(extractorOptionPrefix + "BUILDLESS").AsBool("buildless", false) ||
+ actions.GetEnvironmentVariable(ExtractorOptionBuildless).AsBool("buildless", false) ||
actions.GetEnvironmentVariable(buildModeEnvironmentVariable)?.ToLower() == "none";
@@ -51,7 +51,7 @@ namespace Semmle.Autobuild.CSharp
case CSharpBuildStrategy.Buildless:
// No need to check that the extractor has been executed in buildless mode
attempt = BuildScript.Bind(
- AddBuildlessStartedDiagnostic() & new StandaloneBuildRule().Analyse(this, false),
+ AddBuildlessWronglyConfiguredWarning() & AddBuildlessStartedDiagnostic() & new StandaloneBuildRule().Analyse(this, false),
AddBuildlessEndedDiagnostic);
break;
case CSharpBuildStrategy.Auto:
@@ -81,6 +81,27 @@ namespace Semmle.Autobuild.CSharp
return 1;
});
+ private BuildScript AddBuildlessWronglyConfiguredWarning()
+ {
+ return BuildScript.Create(actions =>
+ {
+ if (actions.GetEnvironmentVariable(CSharpAutobuildOptions.ExtractorOptionBuildless) is null)
+ {
+ return 0;
+ }
+
+ AddDiagnostic(new DiagnosticMessage(
+ Options.Language,
+ "buildless/use-build-mode",
+ "C# was extracted with the deprecated 'buildless' option, use build-mode instead",
+ visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true),
+ markdownMessage: "C# was extracted with the deprecated 'buildless' option, use build-mode instead.",
+ severity: DiagnosticMessage.TspSeverity.Warning
+ ));
+ return 0;
+ });
+ }
+
private BuildScript AddBuildlessStartedDiagnostic()
{
return BuildScript.Create(actions =>
@@ -88,9 +109,9 @@ namespace Semmle.Autobuild.CSharp
AddDiagnostic(new DiagnosticMessage(
Options.Language,
"buildless/mode-active",
- "C# with build-mode set to 'none'",
+ "C# was extracted with build-mode set to 'none'",
visibility: new DiagnosticMessage.TspVisibility(statusPage: true, cliSummaryTable: true, telemetry: true),
- markdownMessage: "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ markdownMessage: "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
severity: DiagnosticMessage.TspSeverity.Note
));
return 0;
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Properties/AssemblyInfo.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/Properties/AssemblyInfo.cs
deleted file mode 100644
index 7314539ace4..00000000000
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,32 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Autobuild.CSharp")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("GitHub")]
-[assembly: AssemblyProduct("CodeQL autobuilder for C#")]
-[assembly: AssemblyCopyright("Copyright © GitHub 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj
index 911e71bfdc9..7c4f1d68177 100644
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/Semmle.Autobuild.CSharp.csproj
@@ -1,26 +1,13 @@
-
- net8.0
- Semmle.Autobuild.CSharp
- Semmle.Autobuild.CSharp
-
- Exe
-
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+ Exe
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs b/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs
index c202a029674..5b844e6cf6c 100644
--- a/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/StandaloneBuildRule.cs
@@ -10,17 +10,7 @@ namespace Semmle.Autobuild.CSharp
{
public BuildScript Analyse(IAutobuilder builder, bool auto)
{
- if (builder.CodeQLExtractorLangRoot is null
- || builder.CodeQlPlatform is null)
- {
- return BuildScript.Failure;
- }
-
- var standalone = builder.Actions.PathCombine(builder.CodeQLExtractorLangRoot, "tools", builder.CodeQlPlatform, "Semmle.Extraction.CSharp.Standalone");
- var cmd = new CommandBuilder(builder.Actions);
- cmd.RunCommand(standalone);
-
- return cmd.Script;
+ return BuildScript.Create(_ => Semmle.Extraction.CSharp.Standalone.Program.Main([]));
}
}
}
diff --git a/csharp/autobuilder/Semmle.Autobuild.CSharp/paket.references b/csharp/autobuilder/Semmle.Autobuild.CSharp/paket.references
new file mode 100644
index 00000000000..53fe17d215e
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.CSharp/paket.references
@@ -0,0 +1,2 @@
+Newtonsoft.Json
+Microsoft.Build
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel
new file mode 100644
index 00000000000..10c8c6dc96c
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BUILD.bazel
@@ -0,0 +1,17 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_xunit_test",
+)
+
+codeql_xunit_test(
+ name = "Semmle.Autobuild.Cpp.Tests",
+ srcs = glob([
+ "*.cs",
+ ]),
+ deps = [
+ "//csharp/autobuilder/Semmle.Autobuild.Cpp:bin/Semmle.Autobuild.Cpp",
+ "//csharp/autobuilder/Semmle.Autobuild.Shared",
+ "@paket.main//microsoft.net.test.sdk",
+ "@paket.main//system.io.filesystem",
+ ],
+)
diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs
similarity index 98%
rename from cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs
rename to csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs
index f243bdb5401..605bb58755a 100644
--- a/cpp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/BuildScripts.cs
@@ -200,9 +200,9 @@ namespace Semmle.Autobuild.Cpp.Tests
internal class TestDiagnosticWriter : IDiagnosticsWriter
{
- public IList Diagnostics { get; } = new List();
+ public IList Diagnostics { get; } = new List();
- public void AddEntry(DiagnosticMessage message) => this.Diagnostics.Add(message);
+ public void AddEntry(Semmle.Util.DiagnosticMessage message) => this.Diagnostics.Add(message);
public void Dispose() { }
}
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj
new file mode 100644
index 00000000000..be75ecd74b2
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/Semmle.Autobuild.Cpp.Tests.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references
new file mode 100644
index 00000000000..83bb87685b1
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp.Tests/paket.references
@@ -0,0 +1,4 @@
+System.IO.FileSystem
+xunit
+xunit.runner.visualstudio
+Microsoft.NET.Test.Sdk
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.Cpp/BUILD.bazel
new file mode 100644
index 00000000000..0d9125cf1ee
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp/BUILD.bazel
@@ -0,0 +1,17 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_binary",
+)
+
+codeql_csharp_binary(
+ name = "Semmle.Autobuild.Cpp",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//visibility:public"],
+ deps = [
+ "//csharp/autobuilder/Semmle.Autobuild.Shared",
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.build",
+ ],
+)
diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs
similarity index 100%
rename from cpp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs
rename to csharp/autobuilder/Semmle.Autobuild.Cpp/CppAutobuilder.cs
diff --git a/cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs b/csharp/autobuilder/Semmle.Autobuild.Cpp/Program.cs
similarity index 100%
rename from cpp/autobuilder/Semmle.Autobuild.Cpp/Program.cs
rename to csharp/autobuilder/Semmle.Autobuild.Cpp/Program.cs
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj b/csharp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj
new file mode 100644
index 00000000000..eced8f9cc13
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp/Semmle.Autobuild.Cpp.csproj
@@ -0,0 +1,11 @@
+
+
+
+ Exe
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/autobuilder/Semmle.Autobuild.Cpp/paket.references b/csharp/autobuilder/Semmle.Autobuild.Cpp/paket.references
new file mode 100644
index 00000000000..ec65ce95b91
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Cpp/paket.references
@@ -0,0 +1 @@
+Microsoft.Build
diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs
index 2414791ad4c..371352cf5e2 100644
--- a/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs
+++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Autobuilder.cs
@@ -73,16 +73,6 @@ namespace Semmle.Autobuild.Shared
/// A logger.
///
ILogger Logger { get; }
-
- ///
- /// Value of CODEQL_EXTRACTOR__ROOT environment variable.
- ///
- string? CodeQLExtractorLangRoot { get; }
-
- ///
- /// Value of CODEQL_PLATFORM environment variable.
- ///
- string? CodeQlPlatform { get; }
}
///
@@ -197,9 +187,6 @@ namespace Semmle.Autobuild.Shared
return ret ?? new List();
});
- CodeQLExtractorLangRoot = Actions.GetEnvironmentVariable(EnvVars.Root(this.Options.Language));
- CodeQlPlatform = Actions.GetEnvironmentVariable(EnvVars.Platform);
-
TrapDir = RequireEnvironmentVariable(EnvVars.TrapDir(this.Options.Language));
SourceArchiveDir = RequireEnvironmentVariable(EnvVars.SourceArchiveDir(this.Options.Language));
DiagnosticsDir = RequireEnvironmentVariable(EnvVars.DiagnosticDir(this.Options.Language));
@@ -364,15 +351,5 @@ namespace Semmle.Autobuild.Shared
diagnostics.Dispose();
}
}
-
- ///
- /// Value of CODEQL_EXTRACTOR__ROOT environment variable.
- ///
- public string? CodeQLExtractorLangRoot { get; }
-
- ///
- /// Value of CODEQL_PLATFORM environment variable.
- ///
- public string? CodeQlPlatform { get; }
}
}
diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/BUILD.bazel b/csharp/autobuilder/Semmle.Autobuild.Shared/BUILD.bazel
new file mode 100644
index 00000000000..bc968ff8a4d
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Shared/BUILD.bazel
@@ -0,0 +1,16 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Autobuild.Shared",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//visibility:public"],
+ deps = [
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.build",
+ ],
+)
diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Properties/AssemblyInfo.cs b/csharp/autobuilder/Semmle.Autobuild.Shared/Properties/AssemblyInfo.cs
deleted file mode 100644
index 2eecfca8f52..00000000000
--- a/csharp/autobuilder/Semmle.Autobuild.Shared/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Autobuild.Shared")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("GitHub")]
-[assembly: AssemblyProduct("CodeQL autobuilder")]
-[assembly: AssemblyCopyright("Copyright © GitHub 2020")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("1d9920ad-7b00-4df1-8b01-9ff5b687828e")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj b/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj
index 79c652a8a4e..95ac7ee2cd6 100644
--- a/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj
+++ b/csharp/autobuilder/Semmle.Autobuild.Shared/Semmle.Autobuild.Shared.csproj
@@ -1,19 +1,7 @@
+
-
- net8.0
- Semmle.Autobuild.Shared
- Semmle.Autobuild.Shared
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
+
diff --git a/csharp/autobuilder/Semmle.Autobuild.Shared/paket.references b/csharp/autobuilder/Semmle.Autobuild.Shared/paket.references
new file mode 100644
index 00000000000..ec65ce95b91
--- /dev/null
+++ b/csharp/autobuilder/Semmle.Autobuild.Shared/paket.references
@@ -0,0 +1 @@
+Microsoft.Build
diff --git a/csharp/before.CSharp.sln.targets b/csharp/before.CSharp.sln.targets
new file mode 100644
index 00000000000..4a5ba8ca6b0
--- /dev/null
+++ b/csharp/before.CSharp.sln.targets
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/csharp/documentation/library-coverage/coverage.csv b/csharp/documentation/library-coverage/coverage.csv
index b0d32cc2084..20fc50bc1d3 100644
--- a/csharp/documentation/library-coverage/coverage.csv
+++ b/csharp/documentation/library-coverage/coverage.csv
@@ -2,43 +2,44 @@ package,sink,source,summary,sink:code-injection,sink:encryption-decryptor,sink:e
Amazon.Lambda.APIGatewayEvents,,6,,,,,,,,,,,,,,,,,,6,,,
Amazon.Lambda.Core,10,,,,,,,,,,,10,,,,,,,,,,,
Dapper,55,42,1,,,,,,,,,,55,,42,,,,,,,,1
-ILCompiler,,,81,,,,,,,,,,,,,,,,,,,81,
-ILLink.RoslynAnalyzer,,,63,,,,,,,,,,,,,,,,,,,63,
-ILLink.Shared,,,32,,,,,,,,,,,,,,,,,,,29,3
-ILLink.Tasks,,,3,,,,,,,,,,,,,,,,,,,3,
-Internal.IL,,,69,,,,,,,,,,,,,,,,,,,67,2
+ILCompiler,,,123,,,,,,,,,,,,,,,,,,,123,
+ILLink.RoslynAnalyzer,,,145,,,,,,,,,,,,,,,,,,,145,
+ILLink.Shared,,,34,,,,,,,,,,,,,,,,,,,32,2
+ILLink.Tasks,,,4,,,,,,,,,,,,,,,,,,,4,
+Internal.IL,,,46,,,,,,,,,,,,,,,,,,,44,2
Internal.Pgo,,,9,,,,,,,,,,,,,,,,,,,8,1
-Internal.TypeSystem,,,367,,,,,,,,,,,,,,,,,,,331,36
-JsonToItemsTaskFactory,,,5,,,,,,,,,,,,,,,,,,,5,
-Microsoft.Android.Build,,,14,,,,,,,,,,,,,,,,,,,14,
-Microsoft.Apple.Build,,,5,,,,,,,,,,,,,,,,,,,5,
+Internal.TypeSystem,,,315,,,,,,,,,,,,,,,,,,,299,16
+JsonToItemsTaskFactory,,,10,,,,,,,,,,,,,,,,,,,10,
+Microsoft.Android.Build,,,16,,,,,,,,,,,,,,,,,,,16,
+Microsoft.Apple.Build,,,8,,,,,,,,,,,,,,,,,,,8,
Microsoft.ApplicationBlocks.Data,28,,,,,,,,,,,,28,,,,,,,,,,
-Microsoft.CSharp,,,24,,,,,,,,,,,,,,,,,,,24,
-Microsoft.Diagnostics.Tools.Pgo,,,13,,,,,,,,,,,,,,,,,,,13,
+Microsoft.CSharp,,,13,,,,,,,,,,,,,,,,,,,13,
+Microsoft.Diagnostics.Tools.Pgo,,,12,,,,,,,,,,,,,,,,,,,12,
+Microsoft.DotNet.Build.Tasks,,,6,,,,,,,,,,,,,,,,,,,6,
Microsoft.EntityFrameworkCore,6,,12,,,,,,,,,,6,,,,,,,,,,12
-Microsoft.Extensions.Caching.Distributed,,,9,,,,,,,,,,,,,,,,,,,9,
-Microsoft.Extensions.Caching.Memory,,,30,,,,,,,,,,,,,,,,,,,29,1
-Microsoft.Extensions.Configuration,,2,83,,,,,,,,,,,,,2,,,,,,81,2
-Microsoft.Extensions.DependencyInjection,,,120,,,,,,,,,,,,,,,,,,,120,
-Microsoft.Extensions.DependencyModel,,,12,,,,,,,,,,,,,,,,,,,12,
-Microsoft.Extensions.Diagnostics.Metrics,,,13,,,,,,,,,,,,,,,,,,,13,
+Microsoft.Extensions.Caching.Distributed,,,10,,,,,,,,,,,,,,,,,,,10,
+Microsoft.Extensions.Caching.Memory,,,39,,,,,,,,,,,,,,,,,,,38,1
+Microsoft.Extensions.Configuration,,2,90,,,,,,,,,,,,,2,,,,,,89,1
+Microsoft.Extensions.DependencyInjection,,,134,,,,,,,,,,,,,,,,,,,133,1
+Microsoft.Extensions.DependencyModel,,,18,,,,,,,,,,,,,,,,,,,18,
+Microsoft.Extensions.Diagnostics.Metrics,,,15,,,,,,,,,,,,,,,,,,,15,
Microsoft.Extensions.FileProviders,,,15,,,,,,,,,,,,,,,,,,,15,
-Microsoft.Extensions.FileSystemGlobbing,,,16,,,,,,,,,,,,,,,,,,,14,2
-Microsoft.Extensions.Hosting,,,23,,,,,,,,,,,,,,,,,,,22,1
-Microsoft.Extensions.Http,,,8,,,,,,,,,,,,,,,,,,,8,
-Microsoft.Extensions.Logging,,,60,,,,,,,,,,,,,,,,,,,59,1
-Microsoft.Extensions.Options,,,8,,,,,,,,,,,,,,,,,,,8,
-Microsoft.Extensions.Primitives,,,64,,,,,,,,,,,,,,,,,,,64,
-Microsoft.Interop,,,78,,,,,,,,,,,,,,,,,,,78,
-Microsoft.NET.Build.Tasks,,,1,,,,,,,,,,,,,,,,,,,1,
-Microsoft.NET.WebAssembly.Webcil,,,7,,,,,,,,,,,,,,,,,,,7,
-Microsoft.VisualBasic,,,10,,,,,,,,,,,,,,,,,,,5,5
-Microsoft.WebAssembly.Build.Tasks,,,3,,,,,,,,,,,,,,,,,,,3,
+Microsoft.Extensions.FileSystemGlobbing,,,18,,,,,,,,,,,,,,,,,,,16,2
+Microsoft.Extensions.Hosting,,,41,,,,,,,,,,,,,,,,,,,40,1
+Microsoft.Extensions.Http,,,9,,,,,,,,,,,,,,,,,,,9,
+Microsoft.Extensions.Logging,,,65,,,,,,,,,,,,,,,,,,,64,1
+Microsoft.Extensions.Options,,,13,,,,,,,,,,,,,,,,,,,13,
+Microsoft.Extensions.Primitives,,,72,,,,,,,,,,,,,,,,,,,72,
+Microsoft.Interop,,,121,,,,,,,,,,,,,,,,,,,121,
+Microsoft.NET.Build.Tasks,,,4,,,,,,,,,,,,,,,,,,,4,
+Microsoft.NET.WebAssembly.Webcil,,,8,,,,,,,,,,,,,,,,,,,8,
+Microsoft.VisualBasic,,,6,,,,,,,,,,,,,,,,,,,1,5
+Microsoft.WebAssembly.Build.Tasks,,,4,,,,,,,,,,,,,,,,,,,4,
Microsoft.Win32,,4,4,,,,,,,,,,,,,,,,,,4,4,
-Mono.Linker,,,161,,,,,,,,,,,,,,,,,,,161,
+Mono.Linker,,,285,,,,,,,,,,,,,,,,,,,285,
MySql.Data.MySqlClient,48,,,,,,,,,,,,48,,,,,,,,,,
Newtonsoft.Json,,,91,,,,,,,,,,,,,,,,,,,73,18
ServiceStack,194,,7,27,,,,,75,,,,92,,,,,,,,,7,
-SourceGenerators,,,4,,,,,,,,,,,,,,,,,,,4,
-System,59,44,10429,,8,8,1,,,4,5,,33,2,,3,15,17,3,4,,8460,1969
+SourceGenerators,,,5,,,,,,,,,,,,,,,,,,,5,
+System,60,44,10614,,7,6,5,,,4,5,,33,2,,3,15,17,3,4,,8709,1905
Windows.Security.Cryptography.Core,1,,,,,,,1,,,,,,,,,,,,,,,
diff --git a/csharp/documentation/library-coverage/coverage.rst b/csharp/documentation/library-coverage/coverage.rst
index 2bb7c1d4ae5..b803d077dd1 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``",44,10429,59,9
- Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``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.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",54,1518,148,
- Totals,,98,11954,401,9
+ System,"``System.*``, ``System``",44,10614,60,9
+ Others,"``Amazon.Lambda.APIGatewayEvents``, ``Amazon.Lambda.Core``, ``Dapper``, ``ILCompiler``, ``ILLink.RoslynAnalyzer``, ``ILLink.Shared``, ``ILLink.Tasks``, ``Internal.IL``, ``Internal.Pgo``, ``Internal.TypeSystem``, ``JsonToItemsTaskFactory``, ``Microsoft.Android.Build``, ``Microsoft.Apple.Build``, ``Microsoft.ApplicationBlocks.Data``, ``Microsoft.CSharp``, ``Microsoft.Diagnostics.Tools.Pgo``, ``Microsoft.DotNet.Build.Tasks``, ``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.NET.Build.Tasks``, ``Microsoft.NET.WebAssembly.Webcil``, ``Microsoft.VisualBasic``, ``Microsoft.WebAssembly.Build.Tasks``, ``Microsoft.Win32``, ``Mono.Linker``, ``MySql.Data.MySqlClient``, ``Newtonsoft.Json``, ``SourceGenerators``, ``Windows.Security.Cryptography.Core``",54,1821,148,
+ Totals,,98,12442,402,9
diff --git a/csharp/downgrades/BUILD.bazel b/csharp/downgrades/BUILD.bazel
new file mode 100644
index 00000000000..9feec1649b5
--- /dev/null
+++ b/csharp/downgrades/BUILD.bazel
@@ -0,0 +1,12 @@
+load("@rules_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 = ["//csharp:__pkg__"],
+)
diff --git a/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties
index 520f175692e..bdd9f3ceb83 100644
--- a/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties
+++ b/csharp/downgrades/ab09ac8287516082b7a7367f8fda1862b1be47c5/upgrade.properties
@@ -1,3 +1,3 @@
description: Remove 'kind' from 'attributes'.
compatability: full
-attributes.rel: reorder attributes.rel (int id, int kind, int type_id, int target) id type_id target
\ No newline at end of file
+attributes.rel: reorder attributes.rel (@attribute id, int kind, @type_or_ref type_id, @attributable target) id type_id target
\ No newline at end of file
diff --git a/csharp/extractor/BUILD.bazel b/csharp/extractor/BUILD.bazel
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel
new file mode 100644
index 00000000000..71f54154077
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/BUILD.bazel
@@ -0,0 +1,20 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Extraction.CSharp.DependencyFetching",
+ srcs = glob([
+ "*.cs",
+ "SourceGenerators/**/*.cs",
+ ]),
+ allow_unsafe_blocks = True,
+ internals_visible_to = ["Semmle.Extraction.Tests"],
+ nowarn = ["CA1822"],
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction",
+ "//csharp/extractor/Semmle.Util",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs
index d03a2fc473c..d9a0eac4845 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/EnvironmentVariableNames.cs
@@ -60,6 +60,16 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
///
public const string FallbackNugetFeeds = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_FALLBACK";
+ ///
+ /// Controls whether to include NuGet feeds from nuget.config files in the fallback restore logic.
+ ///
+ public const string AddNugetConfigFeedsToFallback = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_FALLBACK_INCLUDE_NUGET_CONFIG_FEEDS";
+
+ ///
+ /// Specifies the path to the nuget executable to be used for package restoration.
+ ///
+ public const string NugetExePath = "CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_PATH";
+
///
/// Specifies the location of the diagnostic directory.
///
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileProvider.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileProvider.cs
index 7b88a1fc1a2..e908855df0a 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileProvider.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/FileProvider.cs
@@ -20,6 +20,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
private readonly Lazy solutions;
private readonly Lazy dlls;
private readonly Lazy nugetConfigs;
+ private readonly Lazy nugetExes;
private readonly Lazy globalJsons;
private readonly Lazy packagesConfigs;
private readonly Lazy razorViews;
@@ -45,6 +46,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
resources = new Lazy(() => SelectTextFileNamesByExtension("resource", ".resx"));
rootNugetConfig = new Lazy(() => all.SelectRootFiles(SourceDir).SelectFileNamesByName("nuget.config").FirstOrDefault());
+ nugetExes = new Lazy(() => all.SelectFileNamesByName("nuget.exe").ToArray());
}
private string[] ReturnAndLogFiles(string filetype, IEnumerable files)
@@ -123,6 +125,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
public ICollection Solutions => solutions.Value;
public IEnumerable Dlls => dlls.Value;
public ICollection NugetConfigs => nugetConfigs.Value;
+ public ICollection NugetExes => nugetExes.Value;
public string? RootNugetConfig => rootNugetConfig.Value;
public IEnumerable GlobalJsons => globalJsons.Value;
public ICollection PackagesConfigs => packagesConfigs.Value;
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs
index 8537e4b5e0e..262ae4b19ed 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetExeWrapper.cs
@@ -17,15 +17,11 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
private readonly string? nugetExe;
private readonly Util.Logging.ILogger logger;
- ///
- /// The list of package files.
- ///
- private readonly ICollection packageFiles;
-
- public int PackageCount => packageFiles.Count;
+ public int PackageCount => fileProvider.PackagesConfigs.Count;
private readonly string? backupNugetConfig;
private readonly string? nugetConfigPath;
+ private readonly FileProvider fileProvider;
///
/// The computed packages directory.
@@ -39,15 +35,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
///
public NugetExeWrapper(FileProvider fileProvider, TemporaryDirectory packageDirectory, Util.Logging.ILogger logger)
{
+ this.fileProvider = fileProvider;
this.packageDirectory = packageDirectory;
this.logger = logger;
- packageFiles = fileProvider.PackagesConfigs;
-
- if (packageFiles.Count > 0)
+ if (fileProvider.PackagesConfigs.Count > 0)
{
logger.LogInfo($"Found packages.config files, trying to use nuget.exe for package restore");
- nugetExe = ResolveNugetExe(fileProvider.SourceDir.FullName);
+ nugetExe = ResolveNugetExe();
if (HasNoPackageSource())
{
// We only modify or add a top level nuget.config file
@@ -87,25 +82,53 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
}
///
- /// Tries to find the location of `nuget.exe` in the nuget directory under the directory
- /// containing the executing assembly. If it can't be found, it is downloaded to the
- /// `.nuget` directory under the source directory.
+ /// Tries to find the location of `nuget.exe`. It looks for
+ /// - the environment variable specifying a location,
+ /// - files in the repository,
+ /// - tries to resolve nuget from the PATH, or
+ /// - downloads it if it is not found.
///
- /// The source directory.
- private string ResolveNugetExe(string sourceDir)
+ private string ResolveNugetExe()
{
- var currentAssembly = System.Reflection.Assembly.GetExecutingAssembly().Location;
- var directory = Path.GetDirectoryName(currentAssembly)
- ?? throw new FileNotFoundException($"Directory path '{currentAssembly}' of current assembly is null");
-
- var nuget = Path.Combine(directory, "nuget", "nuget.exe");
- if (File.Exists(nuget))
+ var envVarPath = Environment.GetEnvironmentVariable(EnvironmentVariableNames.NugetExePath);
+ if (!string.IsNullOrEmpty(envVarPath))
{
- logger.LogInfo($"Found nuget.exe at {nuget}");
- return nuget;
+ logger.LogInfo($"Using nuget.exe from environment variable: '{envVarPath}'");
+ return envVarPath;
}
- return DownloadNugetExe(sourceDir);
+ try
+ {
+ return DownloadNugetExe(fileProvider.SourceDir.FullName);
+ }
+ catch (Exception exc)
+ {
+ logger.LogInfo($"Download of nuget.exe failed: {exc.Message}");
+ }
+
+ var nugetExesInRepo = fileProvider.NugetExes;
+ if (nugetExesInRepo.Count > 1)
+ {
+ logger.LogInfo($"Found multiple nuget.exe files in the repository: {string.Join(", ", nugetExesInRepo.OrderBy(s => s))}");
+ }
+
+ if (nugetExesInRepo.Count > 0)
+ {
+ var path = nugetExesInRepo.First();
+ logger.LogInfo($"Using nuget.exe from path '{path}'");
+ return path;
+ }
+
+ var executableName = Win32.IsWindows() ? "nuget.exe" : "nuget";
+ var nugetPath = FileUtils.FindProgramOnPath(executableName);
+ if (nugetPath is not null)
+ {
+ nugetPath = Path.Combine(nugetPath, executableName);
+ logger.LogInfo($"Using nuget.exe from PATH: {nugetPath}");
+ return nugetPath;
+ }
+
+ throw new Exception("Could not find or download nuget.exe.");
}
private string DownloadNugetExe(string sourceDir)
@@ -122,26 +145,20 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
Directory.CreateDirectory(directory);
logger.LogInfo("Attempting to download nuget.exe");
- try
- {
- FileUtils.DownloadFile(FileUtils.NugetExeUrl, nuget);
- logger.LogInfo($"Downloaded nuget.exe to {nuget}");
- return nuget;
- }
- catch
- {
- // Download failed.
- throw new FileNotFoundException("Download of nuget.exe failed.");
- }
+ FileUtils.DownloadFile(FileUtils.NugetExeUrl, nuget);
+ logger.LogInfo($"Downloaded nuget.exe to {nuget}");
+ return nuget;
}
+ private bool RunWithMono => !Win32.IsWindows() && !string.IsNullOrEmpty(Path.GetExtension(nugetExe));
+
///
- /// Restore all files in a specified package.
+ /// Restore all packages in the specified packages.config file.
///
- /// The package file.
- private bool TryRestoreNugetPackage(string package)
+ /// The packages.config file.
+ private bool TryRestoreNugetPackage(string packagesConfig)
{
- logger.LogInfo($"Restoring file {package}...");
+ logger.LogInfo($"Restoring file \"{packagesConfig}\"...");
/* Use nuget.exe to install a package.
* Note that there is a clutch of NuGet assemblies which could be used to
@@ -150,15 +167,15 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
*/
string exe, args;
- if (Win32.IsWindows())
+ if (RunWithMono)
{
- exe = nugetExe!;
- args = $"install -OutputDirectory {packageDirectory} {package}";
+ exe = "mono";
+ args = $"\"{nugetExe}\" install -OutputDirectory \"{packageDirectory}\" \"{packagesConfig}\"";
}
else
{
- exe = "mono";
- args = $"{nugetExe} install -OutputDirectory {packageDirectory} {package}";
+ exe = nugetExe!;
+ args = $"install -OutputDirectory \"{packageDirectory}\" \"{packagesConfig}\"";
}
var pi = new ProcessStartInfo(exe, args)
@@ -179,7 +196,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
}
else
{
- logger.LogInfo($"Restored file {package}");
+ logger.LogInfo($"Restored file \"{packagesConfig}\"");
return true;
}
}
@@ -189,7 +206,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
///
public int InstallPackages()
{
- return packageFiles.Count(package => TryRestoreNugetPackage(package));
+ return fileProvider.PackagesConfigs.Count(TryRestoreNugetPackage);
}
private bool HasNoPackageSource()
@@ -219,8 +236,18 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
private void RunMonoNugetCommand(string command, out IList stdout)
{
- var exe = "mono";
- var args = $"{nugetExe} {command}";
+ string exe, args;
+ if (RunWithMono)
+ {
+ exe = "mono";
+ args = $"\"{nugetExe}\" {command}";
+ }
+ else
+ {
+ exe = nugetExe!;
+ args = command;
+ }
+
var pi = new ProcessStartInfo(exe, args)
{
RedirectStandardOutput = true,
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs
index 5e556682df2..0204e9b7c40 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/NugetPackageRestorer.cs
@@ -98,12 +98,14 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
logger.LogInfo($"Checking NuGet feed responsiveness: {checkNugetFeedResponsiveness}");
compilationInfoContainer.CompilationInfos.Add(("NuGet feed responsiveness checked", checkNugetFeedResponsiveness ? "1" : "0"));
+ HashSet? explicitFeeds = null;
+
try
{
- if (checkNugetFeedResponsiveness && !CheckFeeds())
+ if (checkNugetFeedResponsiveness && !CheckFeeds(out explicitFeeds))
{
// todo: we could also check the reachability of the inherited nuget feeds, but to use those in the fallback we would need to handle authentication too.
- var unresponsiveMissingPackageLocation = DownloadMissingPackagesFromSpecificFeeds();
+ var unresponsiveMissingPackageLocation = DownloadMissingPackagesFromSpecificFeeds(explicitFeeds);
return unresponsiveMissingPackageLocation is null
? []
: [unresponsiveMissingPackageLocation];
@@ -163,7 +165,7 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
LogAllUnusedPackages(dependencies);
var missingPackageLocation = checkNugetFeedResponsiveness
- ? DownloadMissingPackagesFromSpecificFeeds()
+ ? DownloadMissingPackagesFromSpecificFeeds(explicitFeeds)
: DownloadMissingPackages();
if (missingPackageLocation is not null)
@@ -173,13 +175,24 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
return assemblyLookupLocations;
}
- private List GetReachableFallbackNugetFeeds()
+ private List GetReachableFallbackNugetFeeds(HashSet? feedsFromNugetConfigs)
{
var fallbackFeeds = EnvironmentVariables.GetURLs(EnvironmentVariableNames.FallbackNugetFeeds).ToHashSet();
if (fallbackFeeds.Count == 0)
{
fallbackFeeds.Add(PublicNugetOrgFeed);
- logger.LogInfo($"No fallback Nuget feeds specified. Using default feed: {PublicNugetOrgFeed}");
+ logger.LogInfo($"No fallback Nuget feeds specified. Adding default feed: {PublicNugetOrgFeed}");
+
+ var shouldAddNugetConfigFeeds = EnvironmentVariables.GetBooleanOptOut(EnvironmentVariableNames.AddNugetConfigFeedsToFallback);
+ logger.LogInfo($"Adding feeds from nuget.config to fallback restore: {shouldAddNugetConfigFeeds}");
+
+ if (shouldAddNugetConfigFeeds && feedsFromNugetConfigs?.Count > 0)
+ {
+ // There are some feeds in `feedsFromNugetConfigs` that have already been checked for reachability, we could skip those.
+ // But we might use different responsiveness testing settings when we try them in the fallback logic, so checking them again is safer.
+ fallbackFeeds.UnionWith(feedsFromNugetConfigs);
+ logger.LogInfo($"Using Nuget feeds from nuget.config files as fallback feeds: {string.Join(", ", feedsFromNugetConfigs.OrderBy(f => f))}");
+ }
}
logger.LogInfo($"Checking fallback Nuget feed reachability on feeds: {string.Join(", ", fallbackFeeds.OrderBy(f => f))}");
@@ -194,6 +207,8 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
logger.LogInfo($"Reachable fallback Nuget feeds: {string.Join(", ", reachableFallbackFeeds.OrderBy(f => f))}");
}
+ compilationInfoContainer.CompilationInfos.Add(("Reachable fallback Nuget feed count", reachableFallbackFeeds.Count.ToString()));
+
return reachableFallbackFeeds;
}
@@ -272,9 +287,9 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
compilationInfoContainer.CompilationInfos.Add(("Failed project restore with package source error", nugetSourceFailures.ToString()));
}
- private AssemblyLookupLocation? DownloadMissingPackagesFromSpecificFeeds()
+ private AssemblyLookupLocation? DownloadMissingPackagesFromSpecificFeeds(HashSet? feedsFromNugetConfigs)
{
- var reachableFallbackFeeds = GetReachableFallbackNugetFeeds();
+ var reachableFallbackFeeds = GetReachableFallbackNugetFeeds(feedsFromNugetConfigs);
if (reachableFallbackFeeds.Count > 0)
{
return DownloadMissingPackages(fallbackNugetFeeds: reachableFallbackFeeds);
@@ -623,10 +638,10 @@ namespace Semmle.Extraction.CSharp.DependencyFetching
return (timeoutMilliSeconds, tryCount);
}
- private bool CheckFeeds()
+ private bool CheckFeeds(out HashSet explicitFeeds)
{
logger.LogInfo("Checking Nuget feeds...");
- var (explicitFeeds, allFeeds) = GetAllFeeds();
+ (explicitFeeds, var allFeeds) = GetAllFeeds();
var excludedFeeds = EnvironmentVariables.GetURLs(EnvironmentVariableNames.ExcludedNugetFeedsFromResponsivenessCheck)
.ToHashSet() ?? [];
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Properties/AssemblyInfo.cs
deleted file mode 100644
index 8bacbaf4f38..00000000000
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.CSharp.DependencyFetching")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction.CSharp.DependencyFetching")]
-[assembly: AssemblyCopyright("Copyright © 2023")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("8e902d1e-f639-4f9f-a6d2-71e8ade7c5a3")]
-
-// Expose internals for testing purposes.
-[assembly: InternalsVisibleTo("Semmle.Extraction.Tests")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj
index 785ae5fd665..82003c4dd14 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/Semmle.Extraction.CSharp.DependencyFetching.csproj
@@ -1,23 +1,13 @@
+
-
- net8.0
- Semmle.Extraction.CSharp.DependencyFetching
- Semmle.Extraction.CSharp.DependencyFetching
- false
- true
- win-x64;linux-x64;osx-x64
- enable
$(NoWarn);CA1822
-
-
-
-
+
-
+
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching/paket.references
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/BUILD.bazel
new file mode 100644
index 00000000000..c12457650c2
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/BUILD.bazel
@@ -0,0 +1,17 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_binary",
+)
+
+codeql_csharp_binary(
+ name = "Semmle.Extraction.CSharp.DependencyStubGenerator",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//csharp:__pkg__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching",
+ "//csharp/extractor/Semmle.Extraction.CSharp.StubGenerator",
+ "//csharp/extractor/Semmle.Util",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj
index b4840bf1737..a2925dc32af 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/Semmle.Extraction.CSharp.DependencyStubGenerator.csproj
@@ -1,5 +1,5 @@
+
-
Exe
net8.0
@@ -8,11 +8,10 @@
enable
enable
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.DependencyStubGenerator/paket.references
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Driver/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.Driver/BUILD.bazel
new file mode 100644
index 00000000000..1689f452004
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Driver/BUILD.bazel
@@ -0,0 +1,15 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_binary",
+)
+
+codeql_csharp_binary(
+ name = "Semmle.Extraction.CSharp.Driver",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//csharp:__pkg__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction.CSharp",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/AssemblyInfo.cs
deleted file mode 100644
index 4ef49f38f26..00000000000
--- a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.CSharp.Driver")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction.CSharp.Driver")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("c02a2b0e-8884-4b82-8275-ea282403a775")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj b/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj
index 7713b45c00c..22a9d3f073f 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Driver/Semmle.Extraction.CSharp.Driver.csproj
@@ -1,16 +1,10 @@
-
-
+
+
Exe
- net8.0
- Semmle.Extraction.CSharp.Driver
- Semmle.Extraction.CSharp.Driver
- false
- win-x64;linux-x64;osx-x64
-
-
-
+
+
\ No newline at end of file
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Driver/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.Driver/paket.references
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BUILD.bazel
new file mode 100644
index 00000000000..99b75e60737
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/BUILD.bazel
@@ -0,0 +1,17 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_binary",
+)
+
+codeql_csharp_binary(
+ name = "Semmle.Extraction.CSharp.Standalone",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction.CSharp",
+ "//csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching",
+ "//csharp/extractor/Semmle.Util",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs
index e578dd4aa31..adde7ea7111 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Extractor.cs
@@ -42,17 +42,17 @@ namespace Semmle.Extraction.CSharp.Standalone
(compilation, options) => analyser.Initialize(output.FullName, extractionInput.CompilationInfos, compilation, options),
() =>
{
- foreach (var type in analyser.MissingNamespaces)
+ foreach (var type in analyser.ExtractionContext!.MissingNamespaces)
{
progressMonitor.MissingNamespace(type);
}
- foreach (var type in analyser.MissingTypes)
+ foreach (var type in analyser.ExtractionContext!.MissingTypes)
{
progressMonitor.MissingType(type);
}
- progressMonitor.MissingSummary(analyser.MissingTypes.Count(), analyser.MissingNamespaces.Count());
+ progressMonitor.MissingSummary(analyser.ExtractionContext!.MissingTypes.Count(), analyser.ExtractionContext!.MissingNamespaces.Count());
});
}
finally
@@ -69,29 +69,6 @@ namespace Semmle.Extraction.CSharp.Standalone
}
}
- private static void ExtractStandalone(
- ExtractionInput extractionInput,
- IProgressMonitor pm,
- ILogger logger,
- CommonOptions options)
- {
- var stopwatch = new Stopwatch();
- stopwatch.Start();
-
- var canonicalPathCache = CanonicalPathCache.Create(logger, 1000);
- var pathTransformer = new PathTransformer(canonicalPathCache);
-
- using var analyser = new StandaloneAnalyser(pm, logger, false, pathTransformer);
- try
- {
- AnalyseStandalone(analyser, extractionInput, options, pm, stopwatch);
- }
- catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
- {
- analyser.Logger.Log(Severity.Error, " Unhandled exception: {0}", ex);
- }
- }
-
private class ExtractionProgress : IProgressMonitor
{
public ExtractionProgress(ILogger output)
@@ -141,8 +118,8 @@ namespace Semmle.Extraction.CSharp.Standalone
public static ExitCode Run(Options options)
{
- var stopwatch = new Stopwatch();
- stopwatch.Start();
+ var overallStopwatch = new Stopwatch();
+ overallStopwatch.Start();
using var logger = new ConsoleLogger(options.Verbosity, logThreadId: true);
logger.Log(Severity.Info, "Extracting C# with build-mode set to 'none'");
@@ -158,12 +135,26 @@ namespace Semmle.Extraction.CSharp.Standalone
logger.Log(Severity.Info, "");
logger.Log(Severity.Info, "Extracting...");
- ExtractStandalone(
- new ExtractionInput(dependencyManager.AllSourceFiles, dependencyManager.ReferenceFiles, dependencyManager.CompilationInfos),
- new ExtractionProgress(logger),
- fileLogger,
- options);
- logger.Log(Severity.Info, $"Extraction completed in {stopwatch.Elapsed}");
+
+ var analyzerStopwatch = new Stopwatch();
+ analyzerStopwatch.Start();
+
+ var canonicalPathCache = CanonicalPathCache.Create(fileLogger, 1000);
+ var pathTransformer = new PathTransformer(canonicalPathCache);
+
+ var progressMonitor = new ExtractionProgress(logger);
+ using var analyser = new StandaloneAnalyser(progressMonitor, fileLogger, pathTransformer, canonicalPathCache, false);
+ try
+ {
+ var extractionInput = new ExtractionInput(dependencyManager.AllSourceFiles, dependencyManager.ReferenceFiles, dependencyManager.CompilationInfos);
+ AnalyseStandalone(analyser, extractionInput, options, progressMonitor, analyzerStopwatch);
+ }
+ catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
+ {
+ fileLogger.Log(Severity.Error, " Unhandled exception: {0}", ex);
+ }
+
+ logger.Log(Severity.Info, $"Extraction completed in {overallStopwatch.Elapsed}");
return ExitCode.Ok;
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Properties/AssemblyInfo.cs
deleted file mode 100644
index 4c5502fcde5..00000000000
--- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.CSharp.Standalone")]
-[assembly: AssemblyDescription("Standalone extractor for C#")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Semmle Ltd.")]
-[assembly: AssemblyProduct("Semmle.Extraction.CSharp.Standalone")]
-[assembly: AssemblyCopyright("Copyright © Semmle 2016")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("bb71e9da-7e0a-43e8-989c-c8e87c828e7c")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj
index c2d37b414d6..72e0504b351 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/Semmle.Extraction.CSharp.Standalone.csproj
@@ -1,28 +1,14 @@
+
Exe
- net8.0
- Semmle.Extraction.CSharp.Standalone
- Semmle.Extraction.CSharp.Standalone
- false
false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
-
-
-
+
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references
new file mode 100644
index 00000000000..9a2eede6b35
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Standalone/paket.references
@@ -0,0 +1,5 @@
+Microsoft.Build
+Microsoft.Win32.Primitives
+System.Net.Primitives
+System.Security.Principal
+System.Threading.ThreadPool
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/BUILD.bazel
new file mode 100644
index 00000000000..563168cdf48
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/BUILD.bazel
@@ -0,0 +1,19 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Extraction.CSharp.StubGenerator",
+ srcs = glob([
+ "*.cs",
+ ]),
+ internals_visible_to = ["Semmle.Extraction.Tests"],
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Util",
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.codeanalysis.csharp",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Properties/AssemblyInfo.cs
deleted file mode 100644
index b4eb39d9e88..00000000000
--- a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,39 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.CSharp.StubGenerator")]
-[assembly: AssemblyDescription("Stub generator for C#")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction.CSharp.StubGenerator")]
-[assembly: AssemblyCopyright("Copyright © 2023")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("6d55ca39-615a-4c1b-a648-a4010995e1ea")]
-
-// Expose internals for testing purposes.
-[assembly: InternalsVisibleTo("Semmle.Extraction.Tests")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Semmle.Extraction.CSharp.StubGenerator.csproj b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Semmle.Extraction.CSharp.StubGenerator.csproj
index 5788fff3476..e0076e4abdc 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Semmle.Extraction.CSharp.StubGenerator.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/Semmle.Extraction.CSharp.StubGenerator.csproj
@@ -1,18 +1,11 @@
+
-
- net8.0
- Semmle.Extraction.CSharp.StubGenerator
- Semmle.Extraction.CSharp.StubGenerator
- false
- win-x64;linux-x64;osx-x64
- enable
-
+
+
-
-
-
+
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/paket.references
new file mode 100644
index 00000000000..f01722271b9
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.StubGenerator/paket.references
@@ -0,0 +1 @@
+Microsoft.CodeAnalysis.CSharp
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Util/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp.Util/BUILD.bazel
new file mode 100644
index 00000000000..fae678c81e6
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Util/BUILD.bazel
@@ -0,0 +1,16 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Extraction.CSharp.Util",
+ srcs = glob([
+ "*.cs",
+ ]),
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.codeanalysis.csharp",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Util/Semmle.Extraction.CSharp.Util.csproj b/csharp/extractor/Semmle.Extraction.CSharp.Util/Semmle.Extraction.CSharp.Util.csproj
index 67c8a9da34c..0787bc207a1 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp.Util/Semmle.Extraction.CSharp.Util.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Util/Semmle.Extraction.CSharp.Util.csproj
@@ -1,17 +1,7 @@
+
-
- net8.0
- Semmle.Extraction.CSharp.Util
- Semmle.Extraction.CSharp.Util
- false
- true
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
+
+
+
+
diff --git a/csharp/extractor/Semmle.Extraction.CSharp.Util/paket.references b/csharp/extractor/Semmle.Extraction.CSharp.Util/paket.references
new file mode 100644
index 00000000000..f01722271b9
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp.Util/paket.references
@@ -0,0 +1 @@
+Microsoft.CodeAnalysis.CSharp
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/BUILD.bazel b/csharp/extractor/Semmle.Extraction.CSharp/BUILD.bazel
new file mode 100644
index 00000000000..0281521ef76
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp/BUILD.bazel
@@ -0,0 +1,25 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Extraction.CSharp",
+ srcs = glob([
+ "Comments/**/*.cs",
+ "Entities/**/*.cs",
+ "Extractor/**/*.cs",
+ "Kinds/**/*.cs",
+ "Populators/**/*.cs",
+ "*.cs",
+ ]),
+ allow_unsafe_blocks = True,
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Extraction",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Util",
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.build",
+ "@paket.main//microsoft.codeanalysis.csharp",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs
index a826aa5e02c..84905163253 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Assembly.cs
@@ -17,7 +17,7 @@ namespace Semmle.Extraction.CSharp.Entities
isOutputAssembly = init is null;
if (isOutputAssembly)
{
- assemblyPath = cx.Extractor.OutputPath;
+ assemblyPath = cx.ExtractionContext.OutputPath;
assembly = cx.Compilation.Assembly;
}
else
@@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities
assembly = init!.MetadataModule!.ContainingAssembly;
var identity = assembly.Identity;
var idString = identity.Name + " " + identity.Version;
- assemblyPath = cx.Extractor.GetAssemblyFile(idString);
+ assemblyPath = cx.ExtractionContext.GetAssemblyFile(idString);
}
}
@@ -33,7 +33,7 @@ namespace Semmle.Extraction.CSharp.Entities
{
if (assemblyPath is not null)
{
- var isBuildlessOutputAssembly = isOutputAssembly && Context.Extractor.Mode.HasFlag(ExtractorMode.Standalone);
+ var isBuildlessOutputAssembly = isOutputAssembly && Context.ExtractionContext.Mode.HasFlag(ExtractorMode.Standalone);
var identifier = isBuildlessOutputAssembly
? ""
: assembly.ToString() ?? "";
@@ -74,7 +74,7 @@ namespace Semmle.Extraction.CSharp.Entities
public override void WriteId(EscapingTextWriter trapFile)
{
- if (isOutputAssembly && Context.Extractor.Mode.HasFlag(ExtractorMode.Standalone))
+ if (isOutputAssembly && Context.ExtractionContext.Mode.HasFlag(ExtractorMode.Standalone))
{
trapFile.Write("buildlessOutputAssembly");
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs
index 0b575df2b69..0ba1965723e 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/Compilation.cs
@@ -11,26 +11,20 @@ namespace Semmle.Extraction.CSharp.Entities
{
internal readonly ConcurrentDictionary messageCounts = new();
- private static (string Cwd, string[] Args) settings;
- private static int hashCode;
-
- public static (string Cwd, string[] Args) Settings
- {
- get { return settings; }
- set
- {
- settings = value;
- hashCode = settings.Cwd.GetHashCode();
- for (var i = 0; i < settings.Args.Length; i++)
- {
- hashCode = HashCode.Combine(hashCode, settings.Args[i].GetHashCode());
- }
- }
- }
+ private readonly string cwd;
+ private readonly string[] args;
+ private readonly int hashCode;
#nullable disable warnings
private Compilation(Context cx) : base(cx, null)
{
+ cwd = cx.ExtractionContext.Cwd;
+ args = cx.ExtractionContext.Args;
+ hashCode = cwd.GetHashCode();
+ for (var i = 0; i < args.Length; i++)
+ {
+ hashCode = HashCode.Combine(hashCode, args[i].GetHashCode());
+ }
}
#nullable restore warnings
@@ -38,14 +32,14 @@ namespace Semmle.Extraction.CSharp.Entities
{
var assembly = Assembly.CreateOutputAssembly(Context);
- trapFile.compilations(this, FileUtils.ConvertToUnix(Compilation.Settings.Cwd));
+ trapFile.compilations(this, FileUtils.ConvertToUnix(cwd));
trapFile.compilation_assembly(this, assembly);
// Arguments
var expandedIndex = 0;
- for (var i = 0; i < Compilation.Settings.Args.Length; i++)
+ for (var i = 0; i < args.Length; i++)
{
- var arg = Compilation.Settings.Args[i];
+ var arg = args[i];
trapFile.compilation_args(this, i, arg);
if (CommandLineExtensions.IsFileArgument(arg))
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs
index c1227f2ffc0..b76cbfb910c 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Compilations/CompilerDiagnostic.cs
@@ -28,7 +28,7 @@ namespace Semmle.Extraction.CSharp.Entities
{
if (messageCount == limit + 1)
{
- Context.Extractor.Logger.LogWarning($"Stopped logging {key} compiler diagnostics for the current compilation after reaching {limit}");
+ Context.ExtractionContext.Logger.LogWarning($"Stopped logging {key} compiler diagnostics for the current compilation after reaching {limit}");
}
return;
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Invocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Invocation.cs
index 5563f48f4f1..4db35fda985 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Invocation.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Invocation.cs
@@ -133,7 +133,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
.Where(method => method.Parameters.Length >= Syntax.ArgumentList.Arguments.Count)
.Where(method => method.Parameters.Count(p => !p.HasExplicitDefaultValue) <= Syntax.ArgumentList.Arguments.Count);
- return Context.Extractor.Mode.HasFlag(ExtractorMode.Standalone) ?
+ return Context.ExtractionContext.Mode.HasFlag(ExtractorMode.Standalone) ?
candidates.FirstOrDefault() :
candidates.SingleOrDefault();
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/File.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/File.cs
index c3239d37871..e0940191a31 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/File.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/File.cs
@@ -61,7 +61,7 @@ namespace Semmle.Extraction.CSharp.Entities
}
}
- trapFile.file_extraction_mode(this, Context.Extractor.Mode);
+ trapFile.file_extraction_mode(this, Context.ExtractionContext.Mode);
}
private bool IsPossiblyTextFile()
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs
index a3b7877af4e..df41abd524d 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/NonGeneratedSourceLocation.cs
@@ -27,7 +27,7 @@ namespace Semmle.Extraction.CSharp.Entities
var mapped = Symbol.GetMappedLineSpan();
if (mapped.HasMappedPath && mapped.IsValid)
{
- var path = TryAdjustRelativeMappedFilePath(mapped.Path, Position.Path, Context.Extractor.Logger);
+ var path = Context.TryAdjustRelativeMappedFilePath(mapped.Path, Position.Path);
var mappedLoc = Create(Context, Location.Create(path, default, mapped.Span));
trapFile.locations_mapped(this, mappedLoc);
@@ -64,25 +64,5 @@ namespace Semmle.Extraction.CSharp.Entities
public override NonGeneratedSourceLocation Create(Context cx, Location init) => new NonGeneratedSourceLocation(cx, init);
}
-
- public static string TryAdjustRelativeMappedFilePath(string mappedToPath, string mappedFromPath, ILogger logger)
- {
- if (!Path.IsPathRooted(mappedToPath))
- {
- try
- {
- var fullPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(mappedFromPath)!, mappedToPath));
- logger.LogDebug($"Found relative path in line mapping: '{mappedToPath}', interpreting it as '{fullPath}'");
-
- mappedToPath = fullPath;
- }
- catch (Exception e)
- {
- logger.LogDebug($"Failed to compute absolute path for relative path in line mapping: '{mappedToPath}': {e}");
- }
- }
-
- return mappedToPath;
- }
}
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs
index c9ad1678ddd..e4c84c3f705 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/OrdinaryMethod.cs
@@ -63,7 +63,7 @@ namespace Semmle.Extraction.CSharp.Entities
{
if (method.MethodKind == MethodKind.ReducedExtension)
{
- cx.Extractor.Logger.Log(Semmle.Util.Logging.Severity.Warning, "Reduced extension method symbols should not be directly extracted.");
+ cx.ExtractionContext.Logger.Log(Semmle.Util.Logging.Severity.Warning, "Reduced extension method symbols should not be directly extracted.");
}
return OrdinaryMethodFactory.Instance.CreateEntityFromSymbol(cx, method);
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs
index 6d236220331..4c4806110f0 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/LineOrSpanDirective.cs
@@ -28,7 +28,7 @@ namespace Semmle.Extraction.CSharp.Entities
var path = Symbol.File.ValueText;
if (!string.IsNullOrWhiteSpace(path))
{
- path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(path, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger);
+ path = Context.TryAdjustRelativeMappedFilePath(path, Symbol.SyntaxTree.FilePath);
var file = File.Create(Context, path);
trapFile.directive_line_file(this, file);
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs
index 3e0c468d85b..66eab50331f 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/PreprocessorDirectives/PragmaChecksumDirective.cs
@@ -12,7 +12,7 @@ namespace Semmle.Extraction.CSharp.Entities
protected override void PopulatePreprocessor(TextWriter trapFile)
{
- var path = NonGeneratedSourceLocation.TryAdjustRelativeMappedFilePath(Symbol.File.ValueText, Symbol.SyntaxTree.FilePath, Context.Extractor.Logger);
+ var path = Context.TryAdjustRelativeMappedFilePath(Symbol.File.ValueText, Symbol.SyntaxTree.FilePath);
var file = File.Create(Context, path);
trapFile.pragma_checksums(this, file, Symbol.Guid.ToString(), Symbol.Bytes.ToString());
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs
index 93a9add36c4..5b8eb20bb1a 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/Types/NamedType.cs
@@ -36,7 +36,7 @@ namespace Semmle.Extraction.CSharp.Entities
if (Symbol.TypeKind == TypeKind.Error)
{
UnknownType.Create(Context); // make sure this exists so we can use it in `TypeRef::getReferencedType`
- Context.Extractor.MissingType(Symbol.ToString()!, Context.FromSource);
+ Context.ExtractionContext.MissingType(Symbol.ToString()!, Context.FromSource);
return;
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs
index 294935abbf5..04fe80dbcde 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Entities/UsingDirective.cs
@@ -36,7 +36,7 @@ namespace Semmle.Extraction.CSharp.Entities
}
else
{
- Context.Extractor.MissingNamespace(name.ToFullString(), Context.FromSource);
+ Context.ExtractionContext.MissingNamespace(name.ToFullString(), Context.FromSource);
Context.ModelError(node, "Namespace not found");
return;
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs
index 2f21716284f..a57c269128e 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Analyser.cs
@@ -10,6 +10,7 @@ using Microsoft.CodeAnalysis.CSharp;
using Semmle.Util;
using Semmle.Util.Logging;
using Semmle.Extraction.CSharp.Populators;
+using System.Reflection;
namespace Semmle.Extraction.CSharp
{
@@ -18,7 +19,7 @@ namespace Semmle.Extraction.CSharp
///
public class Analyser : IDisposable
{
- protected Extraction.Extractor? extractor;
+ public ExtractionContext? ExtractionContext { get; protected set; }
protected CSharpCompilation? compilation;
protected CommonOptions? options;
private protected Entities.Compilation? compilationEntity;
@@ -38,14 +39,23 @@ namespace Semmle.Extraction.CSharp
public PathTransformer PathTransformer { get; }
- protected Analyser(IProgressMonitor pm, ILogger logger, bool addAssemblyTrapPrefix, PathTransformer pathTransformer)
+ public IPathCache PathCache { get; }
+
+ protected Analyser(
+ IProgressMonitor pm,
+ ILogger logger,
+ PathTransformer pathTransformer,
+ IPathCache pathCache,
+ bool addAssemblyTrapPrefix)
{
Logger = logger;
+ PathTransformer = pathTransformer;
+ PathCache = pathCache;
this.addAssemblyTrapPrefix = addAssemblyTrapPrefix;
+ this.progressMonitor = pm;
+
Logger.Log(Severity.Info, "EXTRACTION STARTING at {0}", DateTime.Now);
stopWatch.Start();
- progressMonitor = pm;
- PathTransformer = pathTransformer;
}
///
@@ -98,12 +108,12 @@ namespace Semmle.Extraction.CSharp
var def = reader.GetAssemblyDefinition();
assemblyIdentity = reader.GetString(def.Name) + " " + def.Version;
}
- extractor.SetAssemblyFile(assemblyIdentity, refPath);
+ ExtractionContext.SetAssemblyFile(assemblyIdentity, refPath);
}
catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
- extractor.Message(new Message("Exception reading reference file", reference.FilePath, null, ex.StackTrace));
+ ExtractionContext.Message(new Message("Exception reading reference file", reference.FilePath, null, ex.StackTrace));
}
}
}
@@ -148,7 +158,7 @@ namespace Semmle.Extraction.CSharp
if (compilation.GetAssemblyOrModuleSymbol(r) is IAssemblySymbol assembly)
{
- var cx = new Context(extractor, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix);
+ var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix);
foreach (var module in assembly.Modules)
{
@@ -191,7 +201,7 @@ namespace Semmle.Extraction.CSharp
if (!upToDate)
{
- var cx = new Context(extractor, compilation, trapWriter, new SourceScope(tree), addAssemblyTrapPrefix);
+ var cx = new Context(ExtractionContext, compilation, trapWriter, new SourceScope(tree), addAssemblyTrapPrefix);
// Ensure that the file itself is populated in case the source file is totally empty
var root = tree.GetRoot();
Entities.File.Create(cx, root.SyntaxTree.FilePath);
@@ -213,7 +223,7 @@ namespace Semmle.Extraction.CSharp
}
catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
- extractor.Message(new Message($"Unhandled exception processing syntax tree. {ex.Message}", tree.FilePath, null, ex.StackTrace));
+ ExtractionContext.Message(new Message($"Unhandled exception processing syntax tree. {ex.Message}", tree.FilePath, null, ex.StackTrace));
}
}
@@ -221,7 +231,7 @@ namespace Semmle.Extraction.CSharp
{
try
{
- var assemblyPath = extractor.OutputPath;
+ var assemblyPath = ExtractionContext.OutputPath;
var stopwatch = new Stopwatch();
stopwatch.Start();
var currentTaskId = IncrementTaskCount();
@@ -231,11 +241,11 @@ namespace Semmle.Extraction.CSharp
var assembly = compilation.Assembly;
var trapWriter = transformedAssemblyPath.CreateTrapWriter(Logger, options.TrapCompression, discardDuplicates: false);
compilationTrapFile = trapWriter; // Dispose later
- var cx = new Context(extractor, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix);
+ var cx = new Context(ExtractionContext, compilation, trapWriter, new AssemblyScope(assembly, assemblyPath), addAssemblyTrapPrefix);
compilationEntity = Entities.Compilation.Create(cx);
- extractor.CompilationInfos.ForEach(ci => trapWriter.Writer.compilation_info(compilationEntity, ci.key, ci.value));
+ ExtractionContext.CompilationInfos.ForEach(ci => trapWriter.Writer.compilation_info(compilationEntity, ci.key, ci.value));
ReportProgressTaskDone(currentTaskId, assemblyPath, trapWriter.TrapFile, stopwatch.Elapsed, AnalysisAction.Extracted);
}
@@ -312,15 +322,13 @@ namespace Semmle.Extraction.CSharp
else
Logger.Log(Severity.Info, "EXTRACTION SUCCEEDED in {0}", stopWatch.Elapsed);
- Logger.Dispose();
-
compilationTrapFile?.Dispose();
}
///
/// Number of errors encountered during extraction.
///
- private int ExtractorErrors => extractor?.Errors ?? 0;
+ private int ExtractorErrors => ExtractionContext?.Errors ?? 0;
///
/// Number of errors encountered by the compiler.
@@ -335,11 +343,26 @@ namespace Semmle.Extraction.CSharp
///
/// Logs information about the extractor.
///
- public void LogExtractorInfo(string extractorVersion)
+ public void LogExtractorInfo()
{
Logger.Log(Severity.Info, " Extractor: {0}", Environment.GetCommandLineArgs().First());
- Logger.Log(Severity.Info, " Extractor version: {0}", extractorVersion);
+ Logger.Log(Severity.Info, " Extractor version: {0}", Version);
Logger.Log(Severity.Info, " Current working directory: {0}", Directory.GetCurrentDirectory());
}
+
+ private static string Version
+ {
+ get
+ {
+ // the attribute for the git information are always attached to the entry assembly by our build system
+ var assembly = Assembly.GetEntryAssembly();
+ var versionString = assembly?.GetCustomAttribute();
+ if (versionString == null)
+ {
+ return "unknown (not built from internal bazel workspace)";
+ }
+ return versionString.InformationalVersion;
+ }
+ }
}
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs
index e799eb4a387..57e9a5ca9f1 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Context.cs
@@ -1,6 +1,7 @@
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
+using System.IO;
using Microsoft.CodeAnalysis;
using Semmle.Extraction.Entities;
@@ -76,8 +77,8 @@ namespace Semmle.Extraction.CSharp
internal CommentProcessor CommentGenerator { get; } = new CommentProcessor();
- public Context(Extraction.Extractor e, Compilation c, TrapWriter trapWriter, IExtractionScope scope, bool addAssemblyTrapPrefix)
- : base(e, trapWriter, addAssemblyTrapPrefix)
+ public Context(ExtractionContext extractionContext, Compilation c, TrapWriter trapWriter, IExtractionScope scope, bool addAssemblyTrapPrefix)
+ : base(extractionContext, trapWriter, addAssemblyTrapPrefix)
{
Compilation = c;
this.scope = scope;
@@ -178,5 +179,25 @@ namespace Semmle.Extraction.CSharp
extractedGenerics.Add(entity.Label);
return true;
}
+
+ public string TryAdjustRelativeMappedFilePath(string mappedToPath, string mappedFromPath)
+ {
+ if (!Path.IsPathRooted(mappedToPath))
+ {
+ try
+ {
+ var fullPath = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(mappedFromPath)!, mappedToPath));
+ ExtractionContext.Logger.LogDebug($"Found relative path in line mapping: '{mappedToPath}', interpreting it as '{fullPath}'");
+
+ mappedToPath = fullPath;
+ }
+ catch (Exception e)
+ {
+ ExtractionContext.Logger.LogDebug($"Failed to compute absolute path for relative path in line mapping: '{mappedToPath}': {e}");
+ }
+ }
+
+ return mappedToPath;
+ }
}
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs
index 03369e7b601..700718fc1e5 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/Extractor.cs
@@ -93,19 +93,13 @@ namespace Semmle.Extraction.CSharp
///
public static ExitCode Run(string[] args)
{
- var stopwatch = new Stopwatch();
- stopwatch.Start();
+ var analyzerStopwatch = new Stopwatch();
+ analyzerStopwatch.Start();
var options = Options.CreateWithEnvironment(args);
- Entities.Compilation.Settings = (Directory.GetCurrentDirectory(), options.CompilerArguments.ToArray());
using var logger = MakeLogger(options.Verbosity, options.Console);
- var canonicalPathCache = CanonicalPathCache.Create(logger, 1000);
- var pathTransformer = new PathTransformer(canonicalPathCache);
-
- using var analyser = new TracingAnalyser(new LogProgressMonitor(logger), logger, options.AssemblySensitiveTrap, pathTransformer);
-
try
{
if (options.ProjectsToLoad.Any())
@@ -114,16 +108,23 @@ namespace Semmle.Extraction.CSharp
}
var compilerVersion = new CompilerVersion(options);
-
if (compilerVersion.SkipExtraction)
{
logger.Log(Severity.Warning, " Unrecognized compiler '{0}' because {1}", compilerVersion.SpecifiedCompiler, compilerVersion.SkipReason);
return ExitCode.Ok;
}
+ var workingDirectory = Directory.GetCurrentDirectory();
+ var compilerArgs = options.CompilerArguments.ToArray();
+
+ var canonicalPathCache = CanonicalPathCache.Create(logger, 1000);
+ var pathTransformer = new PathTransformer(canonicalPathCache);
+
+ using var analyser = new TracingAnalyser(new LogProgressMonitor(logger), logger, pathTransformer, canonicalPathCache, options.AssemblySensitiveTrap);
+
var compilerArguments = CSharpCommandLineParser.Default.Parse(
compilerVersion.ArgsWithResponse,
- Entities.Compilation.Settings.Cwd,
+ workingDirectory,
compilerVersion.FrameworkPath,
compilerVersion.AdditionalReferenceDirectories
);
@@ -131,7 +132,7 @@ namespace Semmle.Extraction.CSharp
if (compilerArguments is null)
{
var sb = new StringBuilder();
- sb.Append(" Failed to parse command line: ").AppendList(" ", Entities.Compilation.Settings.Args);
+ sb.Append(" Failed to parse command line: ").AppendList(" ", compilerArgs);
logger.Log(Severity.Error, sb.ToString());
++analyser.CompilationErrors;
return ExitCode.Failed;
@@ -143,7 +144,7 @@ namespace Semmle.Extraction.CSharp
return ExitCode.Ok;
}
- return AnalyseTracing(analyser, compilerArguments, options, canonicalPathCache, stopwatch);
+ return AnalyseTracing(workingDirectory, compilerArgs, analyser, compilerArguments, options, analyzerStopwatch);
}
catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
@@ -225,7 +226,7 @@ namespace Semmle.Extraction.CSharp
/// The resolved references will be added (thread-safely) to the supplied
/// list .
///
- private static IEnumerable ResolveReferences(Microsoft.CodeAnalysis.CommandLineArguments args, Analyser analyser, CanonicalPathCache canonicalPathCache, BlockingCollection ret)
+ private static IEnumerable ResolveReferences(Microsoft.CodeAnalysis.CommandLineArguments args, Analyser analyser, BlockingCollection ret)
{
var referencePaths = new Lazy(() => FixedReferencePaths(args).ToArray());
return args.MetadataReferences.Select(clref => () =>
@@ -234,7 +235,7 @@ namespace Semmle.Extraction.CSharp
{
if (File.Exists(clref.Reference))
{
- var reference = MakeReference(clref, canonicalPathCache.GetCanonicalPath(clref.Reference));
+ var reference = MakeReference(clref, analyser.PathCache.GetCanonicalPath(clref.Reference));
ret.Add(reference);
}
else
@@ -251,7 +252,7 @@ namespace Semmle.Extraction.CSharp
var composed = referencePaths.Value
.Select(path => Path.Combine(path, clref.Reference))
.Where(path => File.Exists(path))
- .Select(path => canonicalPathCache.GetCanonicalPath(path))
+ .Select(path => analyser.PathCache.GetCanonicalPath(path))
.FirstOrDefault();
if (composed is not null)
@@ -376,14 +377,15 @@ namespace Semmle.Extraction.CSharp
}
private static ExitCode AnalyseTracing(
+ string cwd,
+ string[] args,
TracingAnalyser analyser,
CSharpCommandLineArguments compilerArguments,
Options options,
- CanonicalPathCache canonicalPathCache,
Stopwatch stopwatch)
{
return Analyse(stopwatch, analyser, options,
- references => ResolveReferences(compilerArguments, analyser, canonicalPathCache, references),
+ references => ResolveReferences(compilerArguments, analyser, references),
(analyser, syntaxTrees) =>
{
var paths = compilerArguments.SourceFiles
@@ -396,7 +398,7 @@ namespace Semmle.Extraction.CSharp
}
return ReadSyntaxTrees(
- paths.Select(canonicalPathCache.GetCanonicalPath),
+ paths.Select(analyser.PathCache.GetCanonicalPath),
analyser,
compilerArguments.ParseOptions,
compilerArguments.Encoding,
@@ -420,7 +422,7 @@ namespace Semmle.Extraction.CSharp
.WithMetadataImportOptions(MetadataImportOptions.All)
);
},
- (compilation, options) => analyser.EndInitialize(compilerArguments, options, compilation),
+ (compilation, options) => analyser.EndInitialize(compilerArguments, options, compilation, cwd, args),
() => { });
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs
index d559d091214..3ce315b372f 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/StandaloneAnalyser.cs
@@ -1,35 +1,25 @@
-using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.CodeAnalysis.CSharp;
+using Semmle.Util;
using Semmle.Util.Logging;
namespace Semmle.Extraction.CSharp
{
public class StandaloneAnalyser : Analyser
{
- public StandaloneAnalyser(IProgressMonitor pm, ILogger logger, bool addAssemblyTrapPrefix, PathTransformer pathTransformer)
- : base(pm, logger, addAssemblyTrapPrefix, pathTransformer)
+ public StandaloneAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, bool addAssemblyTrapPrefix)
+ : base(pm, logger, pathTransformer, pathCache, addAssemblyTrapPrefix)
{
}
public void Initialize(string outputPath, IEnumerable<(string, string)> compilationInfos, CSharpCompilation compilationIn, CommonOptions options)
{
compilation = compilationIn;
- extractor = new StandaloneExtractor(outputPath, compilationInfos, Logger, PathTransformer, options);
+ ExtractionContext = new ExtractionContext(Directory.GetCurrentDirectory(), [], outputPath, compilationInfos, Logger, PathTransformer, ExtractorMode.Standalone, options.QlTest);
this.options = options;
- LogExtractorInfo(Extraction.Extractor.Version);
+ LogExtractorInfo();
SetReferencePaths();
-
- Entities.Compilation.Settings = (Directory.GetCurrentDirectory(), Array.Empty());
}
-
-#nullable disable warnings
-
- public IEnumerable MissingTypes => extractor.MissingTypes;
-
- public IEnumerable MissingNamespaces => extractor.MissingNamespaces;
-
-#nullable restore warnings
}
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs
index 3b73c35f55a..417b45c37bb 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Extractor/TracingAnalyser.cs
@@ -13,8 +13,8 @@ namespace Semmle.Extraction.CSharp
{
private bool init;
- public TracingAnalyser(IProgressMonitor pm, ILogger logger, bool addAssemblyTrapPrefix, PathTransformer pathTransformer)
- : base(pm, logger, addAssemblyTrapPrefix, pathTransformer)
+ public TracingAnalyser(IProgressMonitor pm, ILogger logger, PathTransformer pathTransformer, IPathCache pathCache, bool addAssemblyTrapPrefix)
+ : base(pm, logger, pathTransformer, pathCache, addAssemblyTrapPrefix)
{
}
@@ -25,7 +25,8 @@ namespace Semmle.Extraction.CSharp
/// A Boolean indicating whether to proceed with extraction.
public bool BeginInitialize(IEnumerable roslynArgs)
{
- return init = LogRoslynArgs(roslynArgs, Extraction.Extractor.Version);
+ LogExtractorInfo();
+ return init = LogRoslynArgs(roslynArgs);
}
///
@@ -38,18 +39,20 @@ namespace Semmle.Extraction.CSharp
public void EndInitialize(
CSharpCommandLineArguments commandLineArguments,
CommonOptions options,
- CSharpCompilation compilation)
+ CSharpCompilation compilation,
+ string cwd,
+ string[] args)
{
if (!init)
throw new InternalError("EndInitialize called without BeginInitialize returning true");
this.options = options;
this.compilation = compilation;
- this.extractor = new TracingExtractor(GetOutputName(compilation, commandLineArguments), Logger, PathTransformer, options);
- LogDiagnostics();
+ this.ExtractionContext = new ExtractionContext(cwd, args, GetOutputName(compilation, commandLineArguments), [], Logger, PathTransformer, ExtractorMode.None, options.QlTest);
+ var errorCount = LogDiagnostics();
SetReferencePaths();
- CompilationErrors += FilteredDiagnostics.Count();
+ CompilationErrors += errorCount;
}
///
@@ -57,9 +60,8 @@ namespace Semmle.Extraction.CSharp
///
/// The arguments passed to Roslyn.
/// A Boolean indicating whether the same arguments have been logged previously.
- private bool LogRoslynArgs(IEnumerable roslynArgs, string extractorVersion)
+ private bool LogRoslynArgs(IEnumerable roslynArgs)
{
- LogExtractorInfo(extractorVersion);
Logger.Log(Severity.Info, $" Arguments to Roslyn: {string.Join(' ', roslynArgs)}");
var tempFile = Extractor.GetCSharpArgsLogPath(Path.GetRandomFileName());
@@ -135,27 +137,27 @@ namespace Semmle.Extraction.CSharp
return Path.Combine(commandLineArguments.OutputDirectory, commandLineArguments.OutputFileName);
}
-#nullable disable warnings
-
- ///
- /// Logs detailed information about this invocation,
- /// in the event that errors were detected.
- ///
- /// A Boolean indicating whether to proceed with extraction.
- private void LogDiagnostics()
+ private int LogDiagnostics()
{
- foreach (var error in FilteredDiagnostics)
+ var filteredDiagnostics = compilation!
+ .GetDiagnostics()
+ .Where(e => e.Severity >= DiagnosticSeverity.Error && !errorsToIgnore.Contains(e.Id))
+ .ToList();
+
+ foreach (var error in filteredDiagnostics)
{
Logger.Log(Severity.Error, " Compilation error: {0}", error);
}
- if (FilteredDiagnostics.Any())
+ if (filteredDiagnostics.Count != 0)
{
foreach (var reference in compilation.References)
{
Logger.Log(Severity.Info, " Resolved reference {0}", reference.Display);
}
}
+
+ return filteredDiagnostics.Count;
}
private static readonly HashSet errorsToIgnore = new HashSet
@@ -164,17 +166,5 @@ namespace Semmle.Extraction.CSharp
"CS1589", // XML referencing not supported
"CS1569" // Error writing XML documentation
};
-
- private IEnumerable FilteredDiagnostics
- {
- get
- {
- return extractor is null || extractor.Mode.HasFlag(ExtractorMode.Standalone) || compilation is null ? Enumerable.Empty() :
- compilation.
- GetDiagnostics().
- Where(e => e.Severity >= DiagnosticSeverity.Error && !errorsToIgnore.Contains(e.Id));
- }
- }
-#nullable restore warnings
}
}
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.CSharp/Properties/AssemblyInfo.cs
deleted file mode 100644
index bb2ea1f4882..00000000000
--- a/csharp/extractor/Semmle.Extraction.CSharp/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.CSharp")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction.CSharp")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("09d7c55d-5ed3-4af8-9b9f-8f9342533ee9")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj
index 2a59f3716ce..00a84ec3627 100644
--- a/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj
+++ b/csharp/extractor/Semmle.Extraction.CSharp/Semmle.Extraction.CSharp.csproj
@@ -1,23 +1,9 @@
+
-
- net8.0
- Semmle.Extraction.CSharp
- Semmle.Extraction.CSharp
- false
- true
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
-
+
diff --git a/csharp/extractor/Semmle.Extraction.CSharp/paket.references b/csharp/extractor/Semmle.Extraction.CSharp/paket.references
new file mode 100644
index 00000000000..70cd7de8821
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.CSharp/paket.references
@@ -0,0 +1,3 @@
+Microsoft.Build
+Microsoft.CodeAnalysis.CSharp
+
diff --git a/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel b/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel
new file mode 100644
index 00000000000..dfdf41150ea
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.Tests/BUILD.bazel
@@ -0,0 +1,21 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_xunit_test",
+)
+
+codeql_xunit_test(
+ name = "Semmle.Extraction.Tests",
+ srcs = glob([
+ "*.cs",
+ ]),
+ deps = [
+ "//csharp/extractor/Semmle.Extraction",
+ "//csharp/extractor/Semmle.Extraction.CSharp",
+ "//csharp/extractor/Semmle.Extraction.CSharp.DependencyFetching",
+ "//csharp/extractor/Semmle.Extraction.CSharp.Standalone:bin/Semmle.Extraction.CSharp.Standalone",
+ "//csharp/extractor/Semmle.Extraction.CSharp.StubGenerator",
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.net.test.sdk",
+ "@paket.main//system.io.filesystem",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction.Tests/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction.Tests/Properties/AssemblyInfo.cs
deleted file mode 100644
index f87cf947b4d..00000000000
--- a/csharp/extractor/Semmle.Extraction.Tests/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction.Tests")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction.Tests")]
-[assembly: AssemblyCopyright("Copyright © 2016")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("23237396-31ef-41f8-b466-ee96ddd7b7bc")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj b/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj
index 930747bb8c0..60994237e15 100644
--- a/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj
+++ b/csharp/extractor/Semmle.Extraction.Tests/Semmle.Extraction.Tests.csproj
@@ -1,25 +1,11 @@
+
-
- net8.0
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
diff --git a/csharp/extractor/Semmle.Extraction.Tests/paket.references b/csharp/extractor/Semmle.Extraction.Tests/paket.references
new file mode 100644
index 00000000000..83bb87685b1
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction.Tests/paket.references
@@ -0,0 +1,4 @@
+System.IO.FileSystem
+xunit
+xunit.runner.visualstudio
+Microsoft.NET.Test.Sdk
diff --git a/csharp/extractor/Semmle.Extraction/BUILD.bazel b/csharp/extractor/Semmle.Extraction/BUILD.bazel
new file mode 100644
index 00000000000..de3a6c2d96a
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction/BUILD.bazel
@@ -0,0 +1,35 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+config_setting(
+ name = "debug_build",
+ values = {
+ "compilation_mode": "dbg",
+ },
+)
+
+codeql_csharp_library(
+ name = "Semmle.Extraction",
+ srcs = glob([
+ "Entities/**/*.cs",
+ "Extractor/**/*.cs",
+ "*.cs",
+ ]),
+ # enable via -c dbg on the bazel command line/in .bazelrc.local
+ defines = select({
+ ":debug_build": [
+ "TRACE",
+ "DEBUG",
+ "DEBUG_LABELS",
+ ],
+ "//conditions:default": [],
+ }),
+ visibility = ["//csharp:__subpackages__"],
+ deps = [
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.build",
+ "@paket.main//microsoft.codeanalysis",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Extraction/Context.cs b/csharp/extractor/Semmle.Extraction/Context.cs
index 6697bfb06fd..c83a79fbddc 100644
--- a/csharp/extractor/Semmle.Extraction/Context.cs
+++ b/csharp/extractor/Semmle.Extraction/Context.cs
@@ -18,7 +18,7 @@ namespace Semmle.Extraction
///
/// Access various extraction functions, e.g. logger, trap writer.
///
- public Extractor Extractor { get; }
+ public ExtractionContext ExtractionContext { get; }
///
/// Access to the trap file.
@@ -51,7 +51,7 @@ namespace Semmle.Extraction
try
{
writingLabel = true;
- entity.DefineLabel(TrapWriter.Writer, Extractor);
+ entity.DefineLabel(TrapWriter.Writer);
}
finally
{
@@ -190,9 +190,9 @@ namespace Semmle.Extraction
}
}
- protected Context(Extractor extractor, TrapWriter trapWriter, bool shouldAddAssemblyTrapPrefix = false)
+ protected Context(ExtractionContext extractionContext, TrapWriter trapWriter, bool shouldAddAssemblyTrapPrefix = false)
{
- Extractor = extractor;
+ ExtractionContext = extractionContext;
TrapWriter = trapWriter;
ShouldAddAssemblyTrapPrefix = shouldAddAssemblyTrapPrefix;
}
@@ -274,7 +274,7 @@ namespace Semmle.Extraction
bool duplicationGuard, deferred;
- if (Extractor.Mode is ExtractorMode.Standalone)
+ if (ExtractionContext.Mode is ExtractorMode.Standalone)
{
duplicationGuard = false;
deferred = false;
@@ -398,7 +398,7 @@ namespace Semmle.Extraction
private void ExtractionError(Message msg)
{
new ExtractionMessage(this, msg);
- Extractor.Message(msg);
+ ExtractionContext.Message(msg);
}
private void ExtractionError(InternalError error)
@@ -408,7 +408,7 @@ namespace Semmle.Extraction
private void ReportError(InternalError error)
{
- if (!Extractor.Mode.HasFlag(ExtractorMode.Standalone))
+ if (!ExtractionContext.Mode.HasFlag(ExtractorMode.Standalone))
throw error;
ExtractionError(error);
diff --git a/csharp/extractor/Semmle.Extraction/Entities/Base/Entity.cs b/csharp/extractor/Semmle.Extraction/Entities/Base/Entity.cs
index 49186582b0d..9cd645ae1d4 100644
--- a/csharp/extractor/Semmle.Extraction/Entities/Base/Entity.cs
+++ b/csharp/extractor/Semmle.Extraction/Entities/Base/Entity.cs
@@ -28,7 +28,7 @@ namespace Semmle.Extraction
public abstract TrapStackBehaviour TrapStackBehaviour { get; }
- public void DefineLabel(TextWriter trapFile, Extractor extractor)
+ public void DefineLabel(TextWriter trapFile)
{
trapFile.WriteLabel(this);
trapFile.Write("=");
@@ -40,7 +40,7 @@ namespace Semmle.Extraction
catch (Exception ex) // lgtm[cs/catch-of-all-exceptions]
{
trapFile.WriteLine("\"");
- extractor.Message(new Message($"Unhandled exception generating id: {ex.Message}", ToString() ?? "", null, ex.StackTrace));
+ Context.ExtractionContext.Message(new Message($"Unhandled exception generating id: {ex.Message}", ToString() ?? "", null, ex.StackTrace));
}
trapFile.WriteLine();
}
diff --git a/csharp/extractor/Semmle.Extraction/Entities/Base/IEntity.cs b/csharp/extractor/Semmle.Extraction/Entities/Base/IEntity.cs
index acb5d79d597..3700e61b22e 100644
--- a/csharp/extractor/Semmle.Extraction/Entities/Base/IEntity.cs
+++ b/csharp/extractor/Semmle.Extraction/Entities/Base/IEntity.cs
@@ -48,6 +48,6 @@ namespace Semmle.Extraction
///
TrapStackBehaviour TrapStackBehaviour { get; }
- void DefineLabel(TextWriter trapFile, Extractor extractor);
+ void DefineLabel(TextWriter trapFile);
}
}
diff --git a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs
index bc6ea5aa27d..c27263e2cba 100644
--- a/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs
+++ b/csharp/extractor/Semmle.Extraction/Entities/ExtractionMessage.cs
@@ -25,7 +25,7 @@ namespace Semmle.Extraction.Entities
{
if (messageCount == limit + 1)
{
- Context.Extractor.Logger.LogWarning($"Stopped logging extractor messages after reaching {limit}");
+ Context.ExtractionContext.Logger.LogWarning($"Stopped logging extractor messages after reaching {limit}");
}
return;
}
diff --git a/csharp/extractor/Semmle.Extraction/Entities/File.cs b/csharp/extractor/Semmle.Extraction/Entities/File.cs
index 952302360b1..b703362feb8 100644
--- a/csharp/extractor/Semmle.Extraction/Entities/File.cs
+++ b/csharp/extractor/Semmle.Extraction/Entities/File.cs
@@ -8,7 +8,7 @@ namespace Semmle.Extraction.Entities
: base(cx, path)
{
originalPath = path;
- transformedPathLazy = new Lazy(() => Context.Extractor.PathTransformer.Transform(originalPath));
+ transformedPathLazy = new Lazy(() => Context.ExtractionContext.PathTransformer.Transform(originalPath));
}
protected readonly string originalPath;
diff --git a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/ExtractionContext.cs
similarity index 84%
rename from csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs
rename to csharp/extractor/Semmle.Extraction/Extractor/ExtractionContext.cs
index db0b30fb2b8..3628e4bc80e 100644
--- a/csharp/extractor/Semmle.Extraction/Extractor/Extractor.cs
+++ b/csharp/extractor/Semmle.Extraction/Extractor/ExtractionContext.cs
@@ -1,6 +1,5 @@
using System.Collections.Generic;
using Semmle.Util.Logging;
-
using CompilationInfo = (string key, string value);
namespace Semmle.Extraction
@@ -8,23 +7,31 @@ namespace Semmle.Extraction
///
/// Implementation of the main extractor state.
///
- public abstract class Extractor
+ public class ExtractionContext
{
- public abstract ExtractorMode Mode { get; }
+ public string Cwd { get; init; }
+ public string[] Args { get; init; }
+ public ExtractorMode Mode { get; }
public string OutputPath { get; }
public IEnumerable CompilationInfos { get; }
///
/// Creates a new extractor instance for one compilation unit.
///
- /// The object used for logging.
- /// The object used for path transformations.
- protected Extractor(string outputPath, IEnumerable compilationInfos, ILogger logger, PathTransformer pathTransformer)
+ public ExtractionContext(string cwd, string[] args, string outputPath, IEnumerable compilationInfos, ILogger logger, PathTransformer pathTransformer, ExtractorMode mode, bool isQlTest)
{
OutputPath = outputPath;
Logger = logger;
PathTransformer = pathTransformer;
CompilationInfos = compilationInfos;
+ Cwd = cwd;
+ Args = args;
+
+ Mode = mode;
+ if (isQlTest)
+ {
+ Mode |= ExtractorMode.QlTest;
+ }
}
// Limit the number of error messages in the log file
@@ -102,8 +109,6 @@ namespace Semmle.Extraction
public ILogger Logger { get; private set; }
- public static string Version => $"{ThisAssembly.Git.BaseTag} ({ThisAssembly.Git.Sha})";
-
public PathTransformer PathTransformer { get; }
}
}
diff --git a/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs
deleted file mode 100644
index 67079a73214..00000000000
--- a/csharp/extractor/Semmle.Extraction/Extractor/StandaloneExtractor.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System.Collections.Generic;
-using Semmle.Util.Logging;
-
-namespace Semmle.Extraction
-{
- public class StandaloneExtractor : Extractor
- {
- public override ExtractorMode Mode { get; }
-
- ///
- /// Creates a new extractor instance for one compilation unit.
- ///
- /// The object used for logging.
- /// The object used for path transformations.
- public StandaloneExtractor(string outputPath, IEnumerable<(string, string)> compilationInfos, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, compilationInfos, logger, pathTransformer)
- {
- Mode = ExtractorMode.Standalone;
- if (options.QlTest)
- {
- Mode |= ExtractorMode.QlTest;
- }
- }
- }
-}
diff --git a/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs b/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs
deleted file mode 100644
index 4d54aef6d5b..00000000000
--- a/csharp/extractor/Semmle.Extraction/Extractor/TracingExtractor.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Linq;
-using Semmle.Util.Logging;
-
-namespace Semmle.Extraction
-{
- public class TracingExtractor : Extractor
- {
- public override ExtractorMode Mode { get; }
-
- ///
- /// Creates a new extractor instance for one compilation unit.
- ///
- /// The name of the output DLL/EXE, or null if not specified (standalone extraction).
- /// The object used for logging.
- /// The object used for path transformations.
- public TracingExtractor(string outputPath, ILogger logger, PathTransformer pathTransformer, CommonOptions options) : base(outputPath, Enumerable.Empty<(string, string)>(), logger, pathTransformer)
- {
- Mode = ExtractorMode.None;
- if (options.QlTest)
- {
- Mode |= ExtractorMode.QlTest;
- }
- }
- }
-}
diff --git a/csharp/extractor/Semmle.Extraction/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Extraction/Properties/AssemblyInfo.cs
deleted file mode 100644
index 6680f32f662..00000000000
--- a/csharp/extractor/Semmle.Extraction/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Extraction")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Extraction")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("3ccd1a26-1621-4f4d-afc3-21ef67eee1da")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj
index 2c70eccbafd..b4625b16017 100644
--- a/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj
+++ b/csharp/extractor/Semmle.Extraction/Semmle.Extraction.csproj
@@ -1,25 +1,10 @@
+
- net8.0
- Semmle.Extraction
- Semmle.Extraction
- false
- Semmle.Extraction.ruleset
- win-x64;linux-x64;osx-x64
- enable
+ Semmle.Extraction.ruleset
-
- TRACE;DEBUG;DEBUG_LABELS
-
-
-
-
-
- runtime; build; native; contentfiles; analyzers; buildtransitive
- all
-
-
+
diff --git a/csharp/extractor/Semmle.Extraction/paket.references b/csharp/extractor/Semmle.Extraction/paket.references
new file mode 100644
index 00000000000..310fffb853f
--- /dev/null
+++ b/csharp/extractor/Semmle.Extraction/paket.references
@@ -0,0 +1,2 @@
+Microsoft.Build
+Microsoft.CodeAnalysis
diff --git a/csharp/extractor/Semmle.Util.Tests/BUILD.bazel b/csharp/extractor/Semmle.Util.Tests/BUILD.bazel
new file mode 100644
index 00000000000..6c3fb64e662
--- /dev/null
+++ b/csharp/extractor/Semmle.Util.Tests/BUILD.bazel
@@ -0,0 +1,16 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_xunit_test",
+)
+
+codeql_xunit_test(
+ name = "Semmle.Util.Tests",
+ srcs = glob([
+ "*.cs",
+ ]),
+ deps = [
+ "//csharp/extractor/Semmle.Util",
+ "@paket.main//microsoft.net.test.sdk",
+ "@paket.main//newtonsoft.json",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Util.Tests/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Util.Tests/Properties/AssemblyInfo.cs
deleted file mode 100644
index 26cdc5277e1..00000000000
--- a/csharp/extractor/Semmle.Util.Tests/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Util.Tests")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Util.Tests")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("0d16a323-fde2-4231-9c60-4c593e151736")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj b/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj
index 8ec1bc9030b..0787bc207a1 100644
--- a/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj
+++ b/csharp/extractor/Semmle.Util.Tests/Semmle.Util.Tests.csproj
@@ -1,19 +1,7 @@
+
-
- net8.0
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
- all
- runtime; build; native; contentfiles; analyzers
-
-
-
-
-
-
+
+
+
+
diff --git a/csharp/extractor/Semmle.Util.Tests/paket.references b/csharp/extractor/Semmle.Util.Tests/paket.references
new file mode 100644
index 00000000000..0582094502a
--- /dev/null
+++ b/csharp/extractor/Semmle.Util.Tests/paket.references
@@ -0,0 +1,3 @@
+xunit
+xunit.runner.visualstudio
+Microsoft.NET.Test.Sdk
diff --git a/csharp/extractor/Semmle.Util/BUILD.bazel b/csharp/extractor/Semmle.Util/BUILD.bazel
new file mode 100644
index 00000000000..6a0b38762cf
--- /dev/null
+++ b/csharp/extractor/Semmle.Util/BUILD.bazel
@@ -0,0 +1,18 @@
+load(
+ "//misc/bazel:csharp.bzl",
+ "codeql_csharp_library",
+)
+
+codeql_csharp_library(
+ name = "Semmle.Util",
+ srcs = glob([
+ "Logging/**/*.cs",
+ "ToolStatusPage/**/*.cs",
+ "*.cs",
+ ]),
+ visibility = ["//visibility:public"],
+ deps = [
+ "@paket.main//mono.posix.netstandard",
+ "@paket.main//newtonsoft.json",
+ ],
+)
diff --git a/csharp/extractor/Semmle.Util/Properties/AssemblyInfo.cs b/csharp/extractor/Semmle.Util/Properties/AssemblyInfo.cs
deleted file mode 100644
index cc0a0875f19..00000000000
--- a/csharp/extractor/Semmle.Util/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,35 +0,0 @@
-using System.Reflection;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("Semmle.Util")]
-[assembly: AssemblyDescription("")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("")]
-[assembly: AssemblyProduct("Semmle.Util")]
-[assembly: AssemblyCopyright("Copyright © 2015")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("bafbef7d-b40e-4b6c-a7fc-c8add8413c56")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/csharp/extractor/Semmle.Util/Semmle.Util.csproj b/csharp/extractor/Semmle.Util/Semmle.Util.csproj
index a3c7a5aba55..b422f2a2d24 100644
--- a/csharp/extractor/Semmle.Util/Semmle.Util.csproj
+++ b/csharp/extractor/Semmle.Util/Semmle.Util.csproj
@@ -1,21 +1,5 @@
+
-
-
- net8.0
- Semmle.Util
- Semmle.Util
- false
- win-x64;linux-x64;osx-x64
- enable
-
-
-
-
-
-
-
-
-
-
-
+
+
diff --git a/csharp/extractor/Semmle.Util/paket.references b/csharp/extractor/Semmle.Util/paket.references
new file mode 100644
index 00000000000..0ea3a5c1334
--- /dev/null
+++ b/csharp/extractor/Semmle.Util/paket.references
@@ -0,0 +1,2 @@
+Mono.Posix.NETStandard
+Newtonsoft.Json
diff --git a/csharp/extractor/Testrunner/BUILD.bazel b/csharp/extractor/Testrunner/BUILD.bazel
new file mode 100644
index 00000000000..f2319080fb3
--- /dev/null
+++ b/csharp/extractor/Testrunner/BUILD.bazel
@@ -0,0 +1 @@
+exports_files(["Testrunner.cs"])
diff --git a/csharp/extractor/Testrunner/Testrunner.cs b/csharp/extractor/Testrunner/Testrunner.cs
new file mode 100644
index 00000000000..c19c7f461bd
--- /dev/null
+++ b/csharp/extractor/Testrunner/Testrunner.cs
@@ -0,0 +1,92 @@
+using System.Reflection;
+using System.Threading;
+using Xunit.Runners;
+using System;
+
+
+///
+/// A testrunner for xunit tests we can use with bazel.
+/// This file is compiled as part of each test target, due to limitations of the bazel `csharp_test`
+/// target: It cannot pull in the main method from a different target.
+/// Note: We're running the tests in parallel, which currently goes counter to the bazel execution model,
+/// as bazel doesn't expect us to spawm more than one active thread. This for now works fine in practice,
+/// as the tests finish quickly. If this ever becomes a problem, we need to implement the bazel sharding protocol explicitly.
+///
+public class Testrunner
+{
+ private static readonly object ConsoleLock = new();
+
+ private static readonly ManualResetEvent Finished = new(false);
+
+ private static int Result = 0;
+
+ private void OnDiscoveryComplete(DiscoveryCompleteInfo info)
+ {
+ lock (ConsoleLock)
+ Console.WriteLine($"Running {info.TestCasesToRun} of {info.TestCasesDiscovered} tests...");
+ }
+
+ private void OnExecutionComplete(ExecutionCompleteInfo info)
+ {
+ lock (ConsoleLock)
+ Console.WriteLine($"Finished: {info.TotalTests} tests in {Math.Round(info.ExecutionTime, 3)}s ({info.TestsFailed} failed, {info.TestsSkipped} skipped)");
+
+ Finished.Set();
+ }
+
+ private void OnTestFailed(TestFailedInfo info)
+ {
+ lock (ConsoleLock)
+ {
+ Console.ForegroundColor = ConsoleColor.Red;
+
+ Console.WriteLine("[FAIL] {0}: {1}", info.TestDisplayName, info.ExceptionMessage);
+ if (info.ExceptionStackTrace != null)
+ Console.WriteLine(info.ExceptionStackTrace);
+
+ Console.ResetColor();
+ }
+
+ Result = 1;
+ }
+
+ private void OnTestSkipped(TestSkippedInfo info)
+ {
+ lock (ConsoleLock)
+ {
+ Console.ForegroundColor = ConsoleColor.Yellow;
+ Console.WriteLine("[SKIP] {0}: {1}", info.TestDisplayName, info.SkipReason);
+ Console.ResetColor();
+ }
+ }
+
+ public int RunTests()
+ {
+ var assembly = Assembly.GetExecutingAssembly();
+ using (var testrunner = AssemblyRunner.WithoutAppDomain(assembly.Location))
+ {
+ testrunner.OnDiscoveryComplete = OnDiscoveryComplete;
+ testrunner.OnExecutionComplete = OnExecutionComplete;
+ testrunner.OnTestFailed = OnTestFailed;
+ testrunner.OnTestSkipped = OnTestSkipped;
+
+ Console.WriteLine("Discovering tests...");
+ testrunner.Start(parallelAlgorithm: null);
+
+ Finished.WaitOne();
+ Finished.Dispose();
+
+ // Wait for assembly runner to finish.
+ // If we try to dispose while runner is executing,
+ // it will throw an error.
+ while (testrunner.Status != AssemblyRunnerStatus.Idle)
+ Thread.Sleep(100);
+ }
+ return Result;
+ }
+
+ public static int Main(string[] args)
+ {
+ return new Testrunner().RunTests();
+ }
+}
diff --git a/csharp/paket.dependencies b/csharp/paket.dependencies
new file mode 100644
index 00000000000..5634fbc67de
--- /dev/null
+++ b/csharp/paket.dependencies
@@ -0,0 +1,20 @@
+framework: net8.0
+storage: none
+source https://api.nuget.org/v3/index.json
+# behave like nuget in choosing transitive dependency versions
+strategy: min
+
+nuget Mono.Posix.NETStandard
+nuget Newtonsoft.Json
+nuget xunit
+nuget xunit.runner.visualstudio
+nuget xunit.runner.utility
+nuget Microsoft.NET.Test.Sdk
+nuget Microsoft.CodeAnalysis.CSharp 4.8.0
+nuget Microsoft.CodeAnalysis 4.8.0
+nuget Microsoft.Build 17.8.3
+nuget Microsoft.Win32.Primitives
+nuget System.Net.Primitives
+nuget System.Security.Principal
+nuget System.Threading.ThreadPool
+nuget System.IO.FileSystem
diff --git a/csharp/paket.lock b/csharp/paket.lock
new file mode 100644
index 00000000000..df2c9a6585d
--- /dev/null
+++ b/csharp/paket.lock
@@ -0,0 +1,163 @@
+STORAGE: NONE
+STRATEGY: MIN
+RESTRICTION: == net8.0
+NUGET
+ remote: https://api.nuget.org/v3/index.json
+ Humanizer.Core (2.14.1)
+ Microsoft.Bcl.AsyncInterfaces (7.0)
+ Microsoft.Build (17.8.3)
+ Microsoft.Build.Framework (>= 17.8.3)
+ Microsoft.NET.StringTools (>= 17.8.3)
+ System.Collections.Immutable (>= 7.0)
+ System.Configuration.ConfigurationManager (>= 7.0)
+ System.Reflection.Metadata (>= 7.0)
+ System.Reflection.MetadataLoadContext (>= 7.0)
+ System.Security.Principal.Windows (>= 5.0)
+ System.Threading.Tasks.Dataflow (>= 7.0)
+ Microsoft.Build.Framework (17.8.3)
+ Microsoft.CodeAnalysis (4.8)
+ Microsoft.CodeAnalysis.CSharp.Workspaces (4.8)
+ Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.8)
+ Microsoft.CodeAnalysis.Analyzers (3.3.4)
+ Microsoft.CodeAnalysis.Common (4.8)
+ Microsoft.CodeAnalysis.Analyzers (>= 3.3.4)
+ System.Collections.Immutable (>= 7.0)
+ System.Reflection.Metadata (>= 7.0)
+ System.Runtime.CompilerServices.Unsafe (>= 6.0)
+ Microsoft.CodeAnalysis.CSharp (4.8)
+ Microsoft.CodeAnalysis.Common (4.8)
+ Microsoft.CodeAnalysis.CSharp.Workspaces (4.8)
+ Humanizer.Core (>= 2.14.1)
+ Microsoft.CodeAnalysis.Common (4.8)
+ Microsoft.CodeAnalysis.CSharp (4.8)
+ Microsoft.CodeAnalysis.Workspaces.Common (4.8)
+ Microsoft.CodeAnalysis.VisualBasic (4.8)
+ Microsoft.CodeAnalysis.Common (4.8)
+ Microsoft.CodeAnalysis.VisualBasic.Workspaces (4.8)
+ Microsoft.CodeAnalysis.Common (4.8)
+ Microsoft.CodeAnalysis.VisualBasic (4.8)
+ Microsoft.CodeAnalysis.Workspaces.Common (4.8)
+ Microsoft.CodeAnalysis.Workspaces.Common (4.8)
+ Humanizer.Core (>= 2.14.1)
+ Microsoft.Bcl.AsyncInterfaces (>= 7.0)
+ Microsoft.CodeAnalysis.Common (4.8)
+ System.Composition (>= 7.0)
+ System.IO.Pipelines (>= 7.0)
+ System.Threading.Channels (>= 7.0)
+ Microsoft.CodeCoverage (17.9)
+ Microsoft.NET.StringTools (17.8.3)
+ Microsoft.NET.Test.Sdk (17.9)
+ Microsoft.CodeCoverage (>= 17.9)
+ Microsoft.TestPlatform.TestHost (>= 17.9)
+ Microsoft.NETCore.Platforms (1.1.1)
+ Microsoft.NETCore.Targets (1.1.3)
+ Microsoft.TestPlatform.ObjectModel (17.9)
+ System.Reflection.Metadata (>= 1.6)
+ Microsoft.TestPlatform.TestHost (17.9)
+ Microsoft.TestPlatform.ObjectModel (>= 17.9)
+ Newtonsoft.Json (>= 13.0.1)
+ Microsoft.Win32.Primitives (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ Microsoft.Win32.SystemEvents (7.0)
+ Mono.Posix.NETStandard (1.0)
+ Newtonsoft.Json (13.0.3)
+ System.Collections.Immutable (7.0)
+ System.Composition (7.0)
+ System.Composition.AttributedModel (>= 7.0)
+ System.Composition.Convention (>= 7.0)
+ System.Composition.Hosting (>= 7.0)
+ System.Composition.Runtime (>= 7.0)
+ System.Composition.TypedParts (>= 7.0)
+ System.Composition.AttributedModel (7.0)
+ System.Composition.Convention (7.0)
+ System.Composition.AttributedModel (>= 7.0)
+ System.Composition.Hosting (7.0)
+ System.Composition.Runtime (>= 7.0)
+ System.Composition.Runtime (7.0)
+ System.Composition.TypedParts (7.0)
+ System.Composition.AttributedModel (>= 7.0)
+ System.Composition.Hosting (>= 7.0)
+ System.Composition.Runtime (>= 7.0)
+ System.Configuration.ConfigurationManager (7.0)
+ System.Diagnostics.EventLog (>= 7.0)
+ System.Security.Cryptography.ProtectedData (>= 7.0)
+ System.Security.Permissions (>= 7.0)
+ System.Diagnostics.EventLog (7.0)
+ System.Drawing.Common (7.0)
+ Microsoft.Win32.SystemEvents (>= 7.0)
+ System.IO (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.IO.FileSystem (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.IO (>= 4.3)
+ System.IO.FileSystem.Primitives (>= 4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Text.Encoding (>= 4.3)
+ System.Threading.Tasks (>= 4.3)
+ System.IO.FileSystem.Primitives (4.3)
+ System.Runtime (>= 4.3)
+ System.IO.Pipelines (7.0)
+ System.Net.Primitives (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ System.Runtime (>= 4.3.1)
+ System.Runtime.Handles (>= 4.3)
+ System.Reflection.Metadata (7.0)
+ System.Collections.Immutable (>= 7.0)
+ System.Reflection.MetadataLoadContext (7.0)
+ System.Collections.Immutable (>= 7.0)
+ System.Reflection.Metadata (>= 7.0)
+ System.Runtime (4.3.1)
+ Microsoft.NETCore.Platforms (>= 1.1.1)
+ Microsoft.NETCore.Targets (>= 1.1.3)
+ System.Runtime.CompilerServices.Unsafe (6.0)
+ System.Runtime.Handles (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ System.Security.Cryptography.ProtectedData (7.0)
+ System.Security.Permissions (7.0)
+ System.Windows.Extensions (>= 7.0)
+ System.Security.Principal (4.3)
+ System.Runtime (>= 4.3)
+ System.Security.Principal.Windows (5.0)
+ System.Text.Encoding (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ System.Threading.Channels (7.0)
+ System.Threading.Tasks (4.3)
+ Microsoft.NETCore.Platforms (>= 1.1)
+ Microsoft.NETCore.Targets (>= 1.1)
+ System.Runtime (>= 4.3)
+ System.Threading.Tasks.Dataflow (7.0)
+ System.Threading.ThreadPool (4.3)
+ System.Runtime (>= 4.3)
+ System.Runtime.Handles (>= 4.3)
+ System.Windows.Extensions (7.0)
+ System.Drawing.Common (>= 7.0)
+ xunit (2.8)
+ xunit.analyzers (>= 1.13)
+ xunit.assert (>= 2.8)
+ xunit.core (2.8)
+ xunit.abstractions (2.0.3)
+ xunit.analyzers (1.13)
+ xunit.assert (2.8)
+ xunit.core (2.8)
+ xunit.extensibility.core (2.8)
+ xunit.extensibility.execution (2.8)
+ xunit.extensibility.core (2.8)
+ xunit.abstractions (>= 2.0.3)
+ xunit.extensibility.execution (2.8)
+ xunit.extensibility.core (2.8)
+ xunit.runner.utility (2.8)
+ xunit.abstractions (>= 2.0.3)
+ xunit.runner.visualstudio (2.8)
diff --git a/csharp/paket.main.bzl b/csharp/paket.main.bzl
new file mode 100644
index 00000000000..49f5b59e216
--- /dev/null
+++ b/csharp/paket.main.bzl
@@ -0,0 +1,73 @@
+"GENERATED"
+
+load("@rules_dotnet//dotnet:defs.bzl", "nuget_repo")
+
+def main():
+ "main"
+ nuget_repo(
+ name = "paket.main",
+ packages = [
+ {"name": "Humanizer.Core", "id": "Humanizer.Core", "version": "2.14.1", "sha512": "sha512-yzqGU/HKNLZ9Uvr6kvSc3wYV/S5O/IvklIUW5WF7MuivGLY8wS5IZnLPkt7D1KW8Et2Enl0I3Lzg2vGWM24Xsw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.Bcl.AsyncInterfaces", "id": "Microsoft.Bcl.AsyncInterfaces", "version": "7.0.0", "sha512": "sha512-Nb9B1lxCab0LZi0ijNLEpw4hgwt0Wl8QQM1DxIhJS2otChAtIVMfyGrYl3YzdSjspvBYPliJlr0kCtizNAVe3w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.Build", "id": "Microsoft.Build", "version": "17.8.3", "sha512": "sha512-jRz++ltVTU9xGAYSnI7fGwLIsg/AwINaxlXaJrcMszO+fyh1xJ8gKZkDz10foT/5y26jZC6G93wyp85NVHc+lA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Security.Principal.Windows", "System.Threading.Tasks.Dataflow", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Security.Principal.Windows", "System.Threading.Tasks.Dataflow", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": ["Microsoft.Build.Framework", "Microsoft.NET.StringTools", "System.Collections.Immutable", "System.Configuration.ConfigurationManager", "System.Reflection.MetadataLoadContext", "System.Security.Principal.Windows", "System.Threading.Tasks.Dataflow", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.Build.Framework", "id": "Microsoft.Build.Framework", "version": "17.8.3", "sha512": "sha512-xDOoj8lpNohM0Sieo4sJ47m/3SAquclF8wFZeAYYuDRHc8hII4XWPhSafFmw5A4TMGOyV08Z1TrrqES9HxMB3Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net462": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net47": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net471": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net6.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net7.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe", "System.Security.Principal.Windows"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis", "id": "Microsoft.CodeAnalysis", "version": "4.8.0", "sha512": "sha512-KETFTRJCjhDGnULVvVDbA0miI0EMnx9m9N+TAKfvVywtTcVYXEukp5NOUQNzzOpU7XH231Vv7V2k50qCz/teVw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net462": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net47": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net471": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net472": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net48": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net5.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net6.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net7.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "net8.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"], "netstandard2.1": ["Microsoft.CodeAnalysis.CSharp.Workspaces", "Microsoft.CodeAnalysis.VisualBasic.Workspaces"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.Analyzers", "id": "Microsoft.CodeAnalysis.Analyzers", "version": "3.3.4", "sha512": "sha512-I+Riw6/6WjNICydoiNpDjN/GGP7u4XsL6VsI9lG/OjFufH3flvSEy/fxNhGDVGwZWwq/5BlnqX+LH2dmheaPfg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.Common", "id": "Microsoft.CodeAnalysis.Common", "version": "4.8.0", "sha512": "sha512-R3u+gGs/RakiGqnBf80niDI56pCaN1g+2n66QmKqj6fAv6xw9uES2BtwtKOkQsiTEDqPm6Vk0OwrgsP1S+rSbA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net462": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net47": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net471": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net472": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net48": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net5.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net6.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net7.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "net8.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["Microsoft.CodeAnalysis.Analyzers", "System.Collections.Immutable", "System.Reflection.Metadata", "System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.CSharp", "id": "Microsoft.CodeAnalysis.CSharp", "version": "4.8.0", "sha512": "sha512-1HVXCQh5b0w/KE7qni2T1k2dK/5+P9uXwOHu+NDUwX6ZplpNH94FSUQBC/wwzjFpxfmdYhen1LvGk0h40a/0aA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common"], "net462": ["Microsoft.CodeAnalysis.Common"], "net47": ["Microsoft.CodeAnalysis.Common"], "net471": ["Microsoft.CodeAnalysis.Common"], "net472": ["Microsoft.CodeAnalysis.Common"], "net48": ["Microsoft.CodeAnalysis.Common"], "net5.0": ["Microsoft.CodeAnalysis.Common"], "net6.0": ["Microsoft.CodeAnalysis.Common"], "net7.0": ["Microsoft.CodeAnalysis.Common"], "net8.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.CSharp.Workspaces", "id": "Microsoft.CodeAnalysis.CSharp.Workspaces", "version": "4.8.0", "sha512": "sha512-BuDq7Hcg1hRjqmK3kZQkDDJ6mR+j+C402+Vj7iBBApQAl47LuvFiJVwM1jNwMKHJs+/N3dkBV+25SAMJByohIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.CSharp", "Microsoft.CodeAnalysis.Workspaces.Common", "Humanizer.Core"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.VisualBasic", "id": "Microsoft.CodeAnalysis.VisualBasic", "version": "4.8.0", "sha512": "sha512-vMWxChp5TXtYVw3LwacOhuT8kRnzXxBnKjxTE95Xj1x1NPnBtL7sUBFFqnsCyVaaDwEAckK0QpVHhws4Zetcmg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common"], "net462": ["Microsoft.CodeAnalysis.Common"], "net47": ["Microsoft.CodeAnalysis.Common"], "net471": ["Microsoft.CodeAnalysis.Common"], "net472": ["Microsoft.CodeAnalysis.Common"], "net48": ["Microsoft.CodeAnalysis.Common"], "net5.0": ["Microsoft.CodeAnalysis.Common"], "net6.0": ["Microsoft.CodeAnalysis.Common"], "net7.0": ["Microsoft.CodeAnalysis.Common"], "net8.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "id": "Microsoft.CodeAnalysis.VisualBasic.Workspaces", "version": "4.8.0", "sha512": "sha512-KvjbWJc4bAgWfvbaIIBv1eHfjfkLxQzaCT6BtxmCZTQuFO+zEjewzbwA9QhK/PMaCOM686Fn+5fhiC6kzLwO4g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net462": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net47": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net471": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net472": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net48": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Microsoft.CodeAnalysis.VisualBasic", "Microsoft.CodeAnalysis.Workspaces.Common"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeAnalysis.Workspaces.Common", "id": "Microsoft.CodeAnalysis.Workspaces.Common", "version": "4.8.0", "sha512": "sha512-pTFm2FbSn0MonSJN2XxSBrMwHUWRM7wUWZczQvJdXXo1gZBaNbH8o9/tcsXc/AmMJqPtC7rY0HRJ/Mm95STaxA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net462": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net47": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net471": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net472": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net48": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net5.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net6.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net7.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "net8.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netcoreapp2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netcoreapp2.2": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netcoreapp3.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netcoreapp3.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"], "netstandard2.1": ["Microsoft.CodeAnalysis.Common", "Humanizer.Core", "Microsoft.Bcl.AsyncInterfaces", "System.Composition", "System.IO.Pipelines", "System.Threading.Channels"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.CodeCoverage", "id": "Microsoft.CodeCoverage", "version": "17.9.0", "sha512": "sha512-QEb48Z408yBfe/f156te98pfHwjvLOKl+UC1Pzg7KH1PDXXgk8KN8ZOEdYGrAiG43pC99Oo39bCb2R5WE+e5VA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.NET.StringTools", "id": "Microsoft.NET.StringTools", "version": "17.8.3", "sha512": "sha512-3N/Ika66JZeORrIZ68fap6M0LSQ9+SQz277NxjA/dxETnR3dZwJXj67jAAc4FkijG6w//QzrC5NEregtIVjz1w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": ["System.Runtime.CompilerServices.Unsafe"], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.NET.Test.Sdk", "id": "Microsoft.NET.Test.Sdk", "version": "17.9.0", "sha512": "sha512-1WsHeRGhVUDonn7uT+vAGkYmJF57QTR+0PDpoIvDPq+vJtaNzrUHJbPFrU3aV+y68D+0wlj4QRop5fzvxFBJkA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.CodeCoverage"], "net47": ["Microsoft.CodeCoverage"], "net471": ["Microsoft.CodeCoverage"], "net472": ["Microsoft.CodeCoverage"], "net48": ["Microsoft.CodeCoverage"], "net5.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net6.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net7.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "net8.0": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": ["Microsoft.TestPlatform.TestHost", "Microsoft.CodeCoverage"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.NETCore.Platforms", "id": "Microsoft.NETCore.Platforms", "version": "1.1.1", "sha512": "sha512-mDUJD1eLXIzmUnWCzWlmNQZGDp/cVGT8KyhzMcJNk2nlfdFUOoZai9idT8/FacJr8Nv8zhAmdf39FHm5qWUoGQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.NETCore.Targets", "id": "Microsoft.NETCore.Targets", "version": "1.1.3", "sha512": "sha512-pxwq8g2PYRiEF5KXVjmZFMNTqsg2Gr1puv/pR1sqAduAKHAGbaCuJ6+yc3pAJseClQUD29S2Ubrm7n/ZD78dUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.TestPlatform.ObjectModel", "id": "Microsoft.TestPlatform.ObjectModel", "version": "17.9.0", "sha512": "sha512-Y3BIxwsZCgJp1+B2HXy+x9qNMG9XcEgMuRKGwGBH1/TxZmVW38RJTsCQ2wEbA/tzbKAzE0ebVmAZpaVFZ+BfNw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Reflection.Metadata"], "net462": ["System.Reflection.Metadata"], "net47": ["System.Reflection.Metadata"], "net471": ["System.Reflection.Metadata"], "net472": ["System.Reflection.Metadata"], "net48": ["System.Reflection.Metadata"], "net5.0": ["System.Reflection.Metadata"], "net6.0": ["System.Reflection.Metadata"], "net7.0": ["System.Reflection.Metadata"], "net8.0": ["System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Reflection.Metadata"], "netcoreapp2.1": ["System.Reflection.Metadata"], "netcoreapp2.2": ["System.Reflection.Metadata"], "netcoreapp3.0": ["System.Reflection.Metadata"], "netcoreapp3.1": ["System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Reflection.Metadata"], "netstandard2.1": ["System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.TestPlatform.TestHost", "id": "Microsoft.TestPlatform.TestHost", "version": "17.9.0", "sha512": "sha512-yCRsmzZaiv6/NTFzVxJVY4GaPqaLGi7E2VzUSDjvsvEhvlcQJQpozrBsegUmBr/xwgKpUE7i0gz2X2ZGO0PTGg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net6.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net7.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "net8.0": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": ["Microsoft.TestPlatform.ObjectModel", "Newtonsoft.Json"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.Win32.Primitives", "id": "Microsoft.Win32.Primitives", "version": "4.3.0", "sha512": "sha512-Nm8Hp51y9tYcK3xD6qk43Wjftrg1mdH24CCJsTb6gr7HS21U1uA+CKPGEtUcVZbjU1y8Kynzm5eoJ7Pnx5gm8A==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Microsoft.Win32.SystemEvents", "id": "Microsoft.Win32.SystemEvents", "version": "7.0.0", "sha512": "sha512-GO6SWx/wSZIFvxOn67Y6OiIGdz9JGCg5CRDDbSAAvBDQeZFbybu9sEOUb9w/vUlQv+A2XakTFZg9Ug1w+tgbWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Mono.Posix.NETStandard", "id": "Mono.Posix.NETStandard", "version": "1.0.0", "sha512": "sha512-RtGiutQZJAmajvQ0QvBvh73VJye85iW9f9tjZlzF88idLxNMo4lAktP/4Y9ilCpais0LDO0tpoICt9Hdv6wooA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "Newtonsoft.Json", "id": "Newtonsoft.Json", "version": "13.0.3", "sha512": "sha512-mbJSvHfRxfX3tR/U6n1WU+mWHXswYc+SB/hkOpx8yZZe68hNZGfymJu0cjsaJEkVzCMqePiU6LdIyogqfIn7kg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Collections.Immutable", "id": "System.Collections.Immutable", "version": "7.0.0", "sha512": "sha512-8ISvyTlddLTyUsR7fQ43jmdta4tgM6aGNrZItYgF43ct0i/x3tBdPIyFU9LnaFspt1P+HLtaMz8Bir5kIqPr+g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Runtime.CompilerServices.Unsafe"], "net462": ["System.Runtime.CompilerServices.Unsafe"], "net47": ["System.Runtime.CompilerServices.Unsafe"], "net471": ["System.Runtime.CompilerServices.Unsafe"], "net472": ["System.Runtime.CompilerServices.Unsafe"], "net48": ["System.Runtime.CompilerServices.Unsafe"], "net5.0": ["System.Runtime.CompilerServices.Unsafe"], "net6.0": ["System.Runtime.CompilerServices.Unsafe"], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.1": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp2.2": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.0": ["System.Runtime.CompilerServices.Unsafe"], "netcoreapp3.1": ["System.Runtime.CompilerServices.Unsafe"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Runtime.CompilerServices.Unsafe"], "netstandard2.1": ["System.Runtime.CompilerServices.Unsafe"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition", "id": "System.Composition", "version": "7.0.0", "sha512": "sha512-+tzE7ykR8A8zNhvCbpLwfeWv6MsbR9V3ZG9dGuQ1/DKqpeP0qQeHsqgjv20njYmyj4uoEyw1VtSGr+v++fiwhg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net462": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net47": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net471": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net472": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net48": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Convention", "System.Composition.Hosting", "System.Composition.Runtime", "System.Composition.TypedParts"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition.AttributedModel", "id": "System.Composition.AttributedModel", "version": "7.0.0", "sha512": "sha512-yAbXw0KA75IDNreMGEixHualXguXa/Qz5azb0f9QCSpjZYYh1p/whNr4ilPBUWPKlev0CcWnwBfuP1me4o5HmA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition.Convention", "id": "System.Composition.Convention", "version": "7.0.0", "sha512": "sha512-q+McXhN7FAsWtZ/11cgHDXEaEFSTObA6sGpxoXCAf68qza24qHfk9LMbxIljnSEw1zohPmnMcRhOxWZoe6EtYw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel"], "net462": ["System.Composition.AttributedModel"], "net47": ["System.Composition.AttributedModel"], "net471": ["System.Composition.AttributedModel"], "net472": ["System.Composition.AttributedModel"], "net48": ["System.Composition.AttributedModel"], "net5.0": ["System.Composition.AttributedModel"], "net6.0": ["System.Composition.AttributedModel"], "net7.0": ["System.Composition.AttributedModel"], "net8.0": ["System.Composition.AttributedModel"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel"], "netcoreapp2.1": ["System.Composition.AttributedModel"], "netcoreapp2.2": ["System.Composition.AttributedModel"], "netcoreapp3.0": ["System.Composition.AttributedModel"], "netcoreapp3.1": ["System.Composition.AttributedModel"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel"], "netstandard2.1": ["System.Composition.AttributedModel"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition.Hosting", "id": "System.Composition.Hosting", "version": "7.0.0", "sha512": "sha512-bsn3YvBEQLr86nEEwbxCTYIAenNTzVjOdvlYkOAXEE9szq9s8D9QWs1a3nT0XKQrxYveVCmF6WOQWyX0dAESMg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.Runtime"], "net462": ["System.Composition.Runtime"], "net47": ["System.Composition.Runtime"], "net471": ["System.Composition.Runtime"], "net472": ["System.Composition.Runtime"], "net48": ["System.Composition.Runtime"], "net5.0": ["System.Composition.Runtime"], "net6.0": ["System.Composition.Runtime"], "net7.0": ["System.Composition.Runtime"], "net8.0": ["System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.Runtime"], "netstandard2.1": ["System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition.Runtime", "id": "System.Composition.Runtime", "version": "7.0.0", "sha512": "sha512-Ks9ujC23uONMqefwDOqxMJIf4m4t3r+IvPdYcphVIL07M3+j1Mjcrb3tv2PkZ04MW83yC17A/G47KMfCoX1nZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Composition.TypedParts", "id": "System.Composition.TypedParts", "version": "7.0.0", "sha512": "sha512-OScKjiZB5A3zaOFA9aqLFeNiqFLtnv/pUHPP14yRQA71819Nk4fZ6hrrraZbmccx9+ddXLQyB/OUwV0epDMlmA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net462": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net47": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net471": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net472": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net48": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net5.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net6.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net7.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "net8.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp2.2": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netcoreapp3.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"], "netstandard2.1": ["System.Composition.AttributedModel", "System.Composition.Hosting", "System.Composition.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Configuration.ConfigurationManager", "id": "System.Configuration.ConfigurationManager", "version": "7.0.0", "sha512": "sha512-g3iVgTpIcjMYpH+sMq5VKjytevOJv+ABsYLKOLj0UZrXp3diFFdnPPqL+orxMD5ktyaTagg2S7ONJInu8itIaQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "net462": ["System.Security.Permissions"], "net47": ["System.Security.Permissions"], "net471": ["System.Security.Permissions"], "net472": ["System.Security.Permissions"], "net48": ["System.Security.Permissions"], "net5.0": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "net6.0": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "net7.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "net8.0": ["System.Diagnostics.EventLog", "System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netcoreapp2.1": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netcoreapp2.2": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netcoreapp3.0": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netcoreapp3.1": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"], "netstandard2.1": ["System.Security.Cryptography.ProtectedData", "System.Security.Permissions"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Diagnostics.EventLog", "id": "System.Diagnostics.EventLog", "version": "7.0.0", "sha512": "sha512-m/H4Rg7KukGEmfRpl+rXU1UbMN3GYbv42cbMHRgMwHIiUL3svKoFFR76Fk/mHN5TgrwGx64fS0Fp+p3qICKg/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Security.Principal.Windows"], "net462": ["System.Security.Principal.Windows"], "net47": ["System.Security.Principal.Windows"], "net471": ["System.Security.Principal.Windows"], "net472": ["System.Security.Principal.Windows"], "net48": ["System.Security.Principal.Windows"], "net5.0": ["System.Security.Principal.Windows"], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Security.Principal.Windows"], "netcoreapp2.1": ["System.Security.Principal.Windows"], "netcoreapp2.2": ["System.Security.Principal.Windows"], "netcoreapp3.0": ["System.Security.Principal.Windows"], "netcoreapp3.1": ["System.Security.Principal.Windows"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Security.Principal.Windows"], "netstandard2.1": ["System.Security.Principal.Windows"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Drawing.Common", "id": "System.Drawing.Common", "version": "7.0.0", "sha512": "sha512-0TJd5U26gRDgGa/rqABgHC5OBAiyl7Mm3pIzPgKfpmPXFQ8CFVWyGi+4mkEaCK715ViOBDkU2pC2nAiPunLw7Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["Microsoft.Win32.SystemEvents"], "net7.0": ["Microsoft.Win32.SystemEvents"], "net8.0": ["Microsoft.Win32.SystemEvents"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.IO", "id": "System.IO", "version": "4.3.0", "sha512": "sha512-v8paIePhmGuXZbE9xvvNb4uJ5ME4OFXR1+8la/G/L1GIl2nbU2WFnddgb79kVK3U2us7q1aZT/uY/R0D/ovB5g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.IO.FileSystem", "id": "System.IO.FileSystem", "version": "4.3.0", "sha512": "sha512-T7WB1vhblSmgkaDpdGM3Uqo55Qsr5sip5eyowrwiXOoHBkzOx3ePd9+Zh97r9NzOwFCxqX7awO6RBxQuao7n7g==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": ["System.IO.FileSystem.Primitives"], "net461": ["System.IO.FileSystem.Primitives"], "net462": ["System.IO.FileSystem.Primitives"], "net47": ["System.IO.FileSystem.Primitives"], "net471": ["System.IO.FileSystem.Primitives"], "net472": ["System.IO.FileSystem.Primitives"], "net48": ["System.IO.FileSystem.Primitives"], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.IO", "System.IO.FileSystem.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Text.Encoding", "System.Threading.Tasks"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.IO.FileSystem.Primitives", "id": "System.IO.FileSystem.Primitives", "version": "4.3.0", "sha512": "sha512-WIWVPQlYLP/Zc9I6IakpBk1y8ryVGK83MtZx//zGKKi2hvHQWKAB7moRQCOz5Is/wNDksiYpocf3FeA3le6e5Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.IO.Pipelines", "id": "System.IO.Pipelines", "version": "7.0.0", "sha512": "sha512-TakLfQsVpFTezcI7L++PGtFZbIsjDxr+66c5PvUzTbVZycDIg0zSFs55ewk4b0IkpTKZAK39uf0m63hOEqFp/Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Net.Primitives", "id": "System.Net.Primitives", "version": "4.3.1", "sha512": "sha512-BgdlyYCI7rrdh36p3lMTqbkvaafPETpB1bk9iQlFdQxYE692kiXvmseXs8ghL+gEgQF2xgDc8GH4QLkSgUUs+Q==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Reflection.Metadata", "id": "System.Reflection.Metadata", "version": "7.0.0", "sha512": "sha512-LZPIuhp4zrkNJbejuCrnx/JFKtKfSe6OHGCyvNoZ+Pbt9oaJ1CpYau9fr58QSf5egJXsmkq0iizSqVCot+wshQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable"], "net462": ["System.Collections.Immutable"], "net47": ["System.Collections.Immutable"], "net471": ["System.Collections.Immutable"], "net472": ["System.Collections.Immutable"], "net48": ["System.Collections.Immutable"], "net5.0": ["System.Collections.Immutable"], "net6.0": ["System.Collections.Immutable"], "net7.0": ["System.Collections.Immutable"], "net8.0": ["System.Collections.Immutable"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable"], "netcoreapp2.1": ["System.Collections.Immutable"], "netcoreapp2.2": ["System.Collections.Immutable"], "netcoreapp3.0": ["System.Collections.Immutable"], "netcoreapp3.1": ["System.Collections.Immutable"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable"], "netstandard2.1": ["System.Collections.Immutable"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Reflection.MetadataLoadContext", "id": "System.Reflection.MetadataLoadContext", "version": "7.0.0", "sha512": "sha512-dqk0PmO2SGulqNpuJlALPc/5vqFVZc6As4ToHeZvd+6B/DomA1/JM1nAOpSU2hkBVytU0GlwsBr4YfKSnGSchg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net462": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net47": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net471": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net472": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net48": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net5.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net6.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net7.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "net8.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp2.1": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp2.2": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp3.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netcoreapp3.1": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": ["System.Collections.Immutable", "System.Reflection.Metadata"], "netstandard2.1": ["System.Collections.Immutable", "System.Reflection.Metadata"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Runtime", "id": "System.Runtime", "version": "4.3.1", "sha512": "sha512-Al69mPDfzdD+bKGK2HAfB+lNFOHFqnkqzNnUJmmvUe1/qEPK9M7EiTT4zuycKDPy7ev11xz8XVgJWKP0hm7NIA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Runtime.CompilerServices.Unsafe", "id": "System.Runtime.CompilerServices.Unsafe", "version": "6.0.0", "sha512": "sha512-1AVzAb5OxJNvJLnOADtexNmWgattm2XVOT3TjQTN7Dd4SqoSwai1CsN2fth42uQldJSQdz/sAec0+TzxBFgisw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Runtime.Handles", "id": "System.Runtime.Handles", "version": "4.3.0", "sha512": "sha512-CluvHdVUv54BvLTOCCyybugreDNk/rR8unMPruzXDtxSjvrQOU3M4R831/lQf4YI8VYp668FGQa/01E+Rq8PEQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Security.Cryptography.ProtectedData", "id": "System.Security.Cryptography.ProtectedData", "version": "7.0.0", "sha512": "sha512-a34SHiyaMcLRjw/1IGXokS2cH9j8XoOhs1jUYq3m+kQcnPp6fhmeuqe5U947WqojDsVMhWAsCE6rIg8grBv9BA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Security.Permissions", "id": "System.Security.Permissions", "version": "7.0.0", "sha512": "sha512-XNVTmQ9JuCRwRXRTDoOHEzEt0wmQeRudH9lThP0l3OBja4P3jmRHq/0H0N9Ns1OD6gNmKpjLdOeHCQEXv4iVrA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["System.Windows.Extensions"], "net7.0": ["System.Windows.Extensions"], "net8.0": ["System.Windows.Extensions"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Security.Principal", "id": "System.Security.Principal", "version": "4.3.0", "sha512": "sha512-24oe0NGJY32e+DFHVQzl2okM9uwYmn0Aa6nehqtVZ55/Al4Yva7S3BN934Kn5qATH7TVTUJkgxhisdfF7mKDfg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime"], "net6.0": ["System.Runtime"], "net7.0": ["System.Runtime"], "net8.0": ["System.Runtime"], "netcoreapp1.0": ["System.Runtime"], "netcoreapp1.1": ["System.Runtime"], "netcoreapp2.0": ["System.Runtime"], "netcoreapp2.1": ["System.Runtime"], "netcoreapp2.2": ["System.Runtime"], "netcoreapp3.0": ["System.Runtime"], "netcoreapp3.1": ["System.Runtime"], "netstandard": [], "netstandard1.0": ["System.Runtime"], "netstandard1.1": ["System.Runtime"], "netstandard1.2": ["System.Runtime"], "netstandard1.3": ["System.Runtime"], "netstandard1.4": ["System.Runtime"], "netstandard1.5": ["System.Runtime"], "netstandard1.6": ["System.Runtime"], "netstandard2.0": ["System.Runtime"], "netstandard2.1": ["System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Security.Principal.Windows", "id": "System.Security.Principal.Windows", "version": "5.0.0", "sha512": "sha512-RKkgqq8ishctQTGbtXqyuOGkUx1fAhkqb1OoHYdRJRlbYLoLWkSkWYHRN/17DzplsSlZtf2Xr8BXjNhO8nRnzQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netcoreapp1.1": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms"], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netstandard1.4": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netstandard1.5": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netstandard1.6": ["Microsoft.Win32.Primitives", "System.Runtime", "System.Runtime.Handles", "System.Security.Principal", "System.Text.Encoding"], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Text.Encoding", "id": "System.Text.Encoding", "version": "4.3.0", "sha512": "sha512-b/f+7HMTpxIfeV7H03bkuHKMFylCGfr9/U6gePnfFFW0aF8LOWLDgQCY6V1oWUqDksC3mdNuyChM1vy9TP4sZw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Threading.Channels", "id": "System.Threading.Channels", "version": "7.0.0", "sha512": "sha512-XXmpdJbyVCagWg3bGfUGNTxKp4EK/3C4Bt8pXhKVYZKwHPjeHPOg0u2wdqHFsojU4u4i9KByAJTyzqLCMqwpUg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Threading.Tasks", "id": "System.Threading.Tasks", "version": "4.3.0", "sha512": "sha512-fUiP+CyyCjs872OA8trl6p97qma/da1xGq3h4zAbJZk8zyaU4zyEfqW5vbkP80xG/Nimun1vlWBboMEk7XxdEw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net6.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net7.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "net8.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp2.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netcoreapp3.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard": [], "netstandard1.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.2": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.3": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.4": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.5": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard1.6": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.0": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"], "netstandard2.1": ["Microsoft.NETCore.Platforms", "Microsoft.NETCore.Targets", "System.Runtime"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Threading.Tasks.Dataflow", "id": "System.Threading.Tasks.Dataflow", "version": "7.0.0", "sha512": "sha512-nB6cUBEEimO35tPK+KmhUF8jxxisO1E+8KU3eDIA9/o156qulMs8YeozOTcVRYHZWvgn1YCDI/ZR2ga9ErXIfg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Threading.ThreadPool", "id": "System.Threading.ThreadPool", "version": "4.3.0", "sha512": "sha512-RQpA+UpI6Tlpeedk5JStYk2DM/M3i5HqabI/yDbfj1xDu9bIz9kdoquVpHbh/wQjOJaOCbcgRH8iQcAUv8dRWQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": ["System.Runtime", "System.Runtime.Handles"], "net6.0": ["System.Runtime", "System.Runtime.Handles"], "net7.0": ["System.Runtime", "System.Runtime.Handles"], "net8.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp1.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.1": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp2.2": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.0": ["System.Runtime", "System.Runtime.Handles"], "netcoreapp3.1": ["System.Runtime", "System.Runtime.Handles"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.4": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.5": ["System.Runtime", "System.Runtime.Handles"], "netstandard1.6": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.0": ["System.Runtime", "System.Runtime.Handles"], "netstandard2.1": ["System.Runtime", "System.Runtime.Handles"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "System.Windows.Extensions", "id": "System.Windows.Extensions", "version": "7.0.0", "sha512": "sha512-KNnH0GX7T/oRAzOtJjefboYngi+d/bNGd63j+ZIFFTIR8RM0dwptuImNXiKqvD78kzcWAf3kd3yjcih+UTYkbw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": ["System.Drawing.Common"], "net7.0": ["System.Drawing.Common"], "net8.0": ["System.Drawing.Common"], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit", "id": "xunit", "version": "2.8.0", "sha512": "sha512-pY+3288LqTgGilRPOuWdTdTAQ3URBTqlo4WJp1FwM10/x7GriewCV/wxL7NrTH4DRUVjoKY6HdcpFSdtQmirLQ==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net20": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net30": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net35": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net40": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net403": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net45": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net451": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net452": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net46": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net461": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net462": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net47": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net471": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net472": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net48": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net5.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net6.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net7.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "net8.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp2.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netcoreapp3.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.1": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.2": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.3": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.4": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.5": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard1.6": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.0": ["xunit.core", "xunit.assert", "xunit.analyzers"], "netstandard2.1": ["xunit.core", "xunit.assert", "xunit.analyzers"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.abstractions", "id": "xunit.abstractions", "version": "2.0.3", "sha512": "sha512-PKJri5f0qEQPFvgY6CZR9XG8JROlWSdC/ZYLkkDQuID++Egn+yWjB+Yf57AZ8U6GRlP7z33uDQ4/r5BZPer2JA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.analyzers", "id": "xunit.analyzers", "version": "1.13.0", "sha512": "sha512-GJ4gtp1hp3hpIWrK+PJ0AOG9t2WW7K2l1hlvklevMTAeZ9tKqzUGwaixZ6G/HLHWAcZo7Wy1r45Fu0v9Dwd4tA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.assert", "id": "xunit.assert", "version": "2.8.0", "sha512": "sha512-S5571ILGuO1wZAraKjnkXyWacxwJr+9NftDNopugypT2r3UhJJVz/10WD7Xx+dDsvRS3ucd1VMI92cBIfSRjjg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": [], "net47": [], "net471": [], "net472": [], "net48": [], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.core", "id": "xunit.core", "version": "2.8.0", "sha512": "sha512-/Ns+N8X8pffZm91IJhB1MbzStjLo8+aKnu3kzF+IlOHq850+MYG+NI23XEV4AH5Cc3pqHD4tp7wbB/s4bY7PGg==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net20": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net30": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net35": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net40": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net403": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net45": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net451": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net452": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net46": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net461": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net462": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net47": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net471": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net472": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net48": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net5.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net6.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net7.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "net8.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp2.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netcoreapp3.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.1": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.2": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.3": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.4": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.5": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard1.6": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.0": ["xunit.extensibility.core", "xunit.extensibility.execution"], "netstandard2.1": ["xunit.extensibility.core", "xunit.extensibility.execution"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.extensibility.core", "id": "xunit.extensibility.core", "version": "2.8.0", "sha512": "sha512-Otlt6joZ9a7QpiAB5SNRb0sd0DMndpH6ktuAVj65hz80xjoQdhdMNO51qWIdk98Ri+fiUS3EBmuSzbv0Dkws5w==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.extensibility.execution", "id": "xunit.extensibility.execution", "version": "2.8.0", "sha512": "sha512-YZn5YCt3ohLPpsz/eoG92pSmt01RJpVD509eRwtt2Bz9iYvgTNIqxu2WJUKhBiMGTZ2nU+IFl6WQG2OiJ639gA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": ["xunit.extensibility.core"], "net451": ["xunit.extensibility.core"], "net452": ["xunit.extensibility.core"], "net46": ["xunit.extensibility.core"], "net461": ["xunit.extensibility.core"], "net462": ["xunit.extensibility.core"], "net47": ["xunit.extensibility.core"], "net471": ["xunit.extensibility.core"], "net472": ["xunit.extensibility.core"], "net48": ["xunit.extensibility.core"], "net5.0": ["xunit.extensibility.core"], "net6.0": ["xunit.extensibility.core"], "net7.0": ["xunit.extensibility.core"], "net8.0": ["xunit.extensibility.core"], "netcoreapp1.0": ["xunit.extensibility.core"], "netcoreapp1.1": ["xunit.extensibility.core"], "netcoreapp2.0": ["xunit.extensibility.core"], "netcoreapp2.1": ["xunit.extensibility.core"], "netcoreapp2.2": ["xunit.extensibility.core"], "netcoreapp3.0": ["xunit.extensibility.core"], "netcoreapp3.1": ["xunit.extensibility.core"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.extensibility.core"], "netstandard1.2": ["xunit.extensibility.core"], "netstandard1.3": ["xunit.extensibility.core"], "netstandard1.4": ["xunit.extensibility.core"], "netstandard1.5": ["xunit.extensibility.core"], "netstandard1.6": ["xunit.extensibility.core"], "netstandard2.0": ["xunit.extensibility.core"], "netstandard2.1": ["xunit.extensibility.core"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.runner.utility", "id": "xunit.runner.utility", "version": "2.8.0", "sha512": "sha512-YJ9UEsY0NUxeYfB01AO4uJgSSelInfROv4oAsTn7z0GD6kly3HzPQC+B/JDbWUVCRJ1xIRoaYPisMvVYQBIyxA==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": ["xunit.abstractions"], "net40": ["xunit.abstractions"], "net403": ["xunit.abstractions"], "net45": ["xunit.abstractions"], "net451": ["xunit.abstractions"], "net452": ["xunit.abstractions"], "net46": ["xunit.abstractions"], "net461": ["xunit.abstractions"], "net462": ["xunit.abstractions"], "net47": ["xunit.abstractions"], "net471": ["xunit.abstractions"], "net472": ["xunit.abstractions"], "net48": ["xunit.abstractions"], "net5.0": ["xunit.abstractions"], "net6.0": ["xunit.abstractions"], "net7.0": ["xunit.abstractions"], "net8.0": ["xunit.abstractions"], "netcoreapp1.0": ["xunit.abstractions"], "netcoreapp1.1": ["xunit.abstractions"], "netcoreapp2.0": ["xunit.abstractions"], "netcoreapp2.1": ["xunit.abstractions"], "netcoreapp2.2": ["xunit.abstractions"], "netcoreapp3.0": ["xunit.abstractions"], "netcoreapp3.1": ["xunit.abstractions"], "netstandard": [], "netstandard1.0": [], "netstandard1.1": ["xunit.abstractions"], "netstandard1.2": ["xunit.abstractions"], "netstandard1.3": ["xunit.abstractions"], "netstandard1.4": ["xunit.abstractions"], "netstandard1.5": ["xunit.abstractions"], "netstandard1.6": ["xunit.abstractions"], "netstandard2.0": ["xunit.abstractions"], "netstandard2.1": ["xunit.abstractions"]}, "targeting_pack_overrides": [], "framework_list": []},
+ {"name": "xunit.runner.visualstudio", "id": "xunit.runner.visualstudio", "version": "2.8.0", "sha512": "sha512-hEFlhPQ0BVrJkWHtGpKOqtqAvTk1FCPAIS5Z0zs+CMjNAgugpBuuddEa5gB4CzRDjGzms2UjvgzkgbnQXozFpw==", "sources": ["https://api.nuget.org/v3/index.json"], "dependencies": {"net11": [], "net20": [], "net30": [], "net35": [], "net40": [], "net403": [], "net45": [], "net451": [], "net452": [], "net46": [], "net461": [], "net462": ["Microsoft.TestPlatform.ObjectModel"], "net47": ["Microsoft.TestPlatform.ObjectModel"], "net471": ["Microsoft.TestPlatform.ObjectModel"], "net472": ["Microsoft.TestPlatform.ObjectModel"], "net48": ["Microsoft.TestPlatform.ObjectModel"], "net5.0": [], "net6.0": [], "net7.0": [], "net8.0": [], "netcoreapp1.0": [], "netcoreapp1.1": [], "netcoreapp2.0": [], "netcoreapp2.1": [], "netcoreapp2.2": [], "netcoreapp3.0": [], "netcoreapp3.1": [], "netstandard": [], "netstandard1.0": [], "netstandard1.1": [], "netstandard1.2": [], "netstandard1.3": [], "netstandard1.4": [], "netstandard1.5": [], "netstandard1.6": [], "netstandard2.0": [], "netstandard2.1": []}, "targeting_pack_overrides": [], "framework_list": []},
+ ],
+ )
diff --git a/csharp/paket.main_extension.bzl b/csharp/paket.main_extension.bzl
new file mode 100644
index 00000000000..6d356fb47cd
--- /dev/null
+++ b/csharp/paket.main_extension.bzl
@@ -0,0 +1,10 @@
+"Generated"
+
+load(":paket.main.bzl", _main = "main")
+
+def _main_impl(_ctx):
+ _main()
+
+main_extension = module_extension(
+ implementation = _main_impl,
+)
diff --git a/csharp/ql/Directory.Build.props b/csharp/ql/Directory.Build.props
new file mode 100644
index 00000000000..a4049773c56
--- /dev/null
+++ b/csharp/ql/Directory.Build.props
@@ -0,0 +1,6 @@
+
+
+
diff --git a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
index a1fa7465047..bbb697a9b54 100644
--- a/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/lib/CHANGELOG.md
@@ -1,3 +1,15 @@
+## 1.7.18
+
+No user-facing changes.
+
+## 1.7.17
+
+No user-facing changes.
+
+## 1.7.16
+
+No user-facing changes.
+
## 1.7.15
No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.16.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.16.md
new file mode 100644
index 00000000000..7fa1f796658
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.16.md
@@ -0,0 +1,3 @@
+## 1.7.16
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.17.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.17.md
new file mode 100644
index 00000000000..cdbe25eaf78
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.17.md
@@ -0,0 +1,3 @@
+## 1.7.17
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.18.md b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.18.md
new file mode 100644
index 00000000000..010acce5ca5
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/lib/change-notes/released/1.7.18.md
@@ -0,0 +1,3 @@
+## 1.7.18
+
+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 07b34a2aaf7..e516d2acfd5 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.15
+lastReleaseVersion: 1.7.18
diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml
index 4129c2ad6fd..b841613f7de 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.16-dev
+version: 1.7.19-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
index a1fa7465047..bbb697a9b54 100644
--- a/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
+++ b/csharp/ql/campaigns/Solorigate/src/CHANGELOG.md
@@ -1,3 +1,15 @@
+## 1.7.18
+
+No user-facing changes.
+
+## 1.7.17
+
+No user-facing changes.
+
+## 1.7.16
+
+No user-facing changes.
+
## 1.7.15
No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.16.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.16.md
new file mode 100644
index 00000000000..7fa1f796658
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.16.md
@@ -0,0 +1,3 @@
+## 1.7.16
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.17.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.17.md
new file mode 100644
index 00000000000..cdbe25eaf78
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.17.md
@@ -0,0 +1,3 @@
+## 1.7.17
+
+No user-facing changes.
diff --git a/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.18.md b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.18.md
new file mode 100644
index 00000000000..010acce5ca5
--- /dev/null
+++ b/csharp/ql/campaigns/Solorigate/src/change-notes/released/1.7.18.md
@@ -0,0 +1,3 @@
+## 1.7.18
+
+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 07b34a2aaf7..e516d2acfd5 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.15
+lastReleaseVersion: 1.7.18
diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml
index 033c39775dd..27b5722a633 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.16-dev
+version: 1.7.19-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/XSS.expected b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/XSS.expected
index c5e1e6db6d6..42257faeb50 100644
--- a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/XSS.expected
+++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/XSS.expected
@@ -1 +1 @@
-| Views/Test/Test.cshtml:7:27:7:36 | access to property Name | Controllers/TestController.cs:13:40:13:47 | tainted1 : UserData | Views/Test/Test.cshtml:7:27:7:36 | access to property Name | $@ flows to here and is written to HTML or JavaScript: Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw() method. | Controllers/TestController.cs:13:40:13:47 | tainted1 : UserData | User-provided value |
+| Views/Test/Test.cshtml:7:26:7:35 | access to property Name | Controllers/TestController.cs:13:40:13:47 | tainted1 : UserData | Views/Test/Test.cshtml:7:26:7:35 | access to property Name | $@ flows to here and is written to HTML or JavaScript: Microsoft.AspNetCore.Mvc.ViewFeatures.HtmlHelper.Raw() method. | Controllers/TestController.cs:13:40:13:47 | tainted1 : UserData | User-provided value |
diff --git a/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json
new file mode 100644
index 00000000000..b11f794bfce
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/cshtml_standalone_flowsteps/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "version": "8.0.300"
+ }
+}
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected
index f5704ce12bb..19390ed2af2 100644
--- a/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected
+++ b/csharp/ql/integration-tests/all-platforms/standalone/diagnostics.expected
@@ -13,12 +13,12 @@
}
}
{
- "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ "markdownMessage": "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
"severity": "note",
"source": {
"extractorName": "csharp",
"id": "csharp/autobuilder/buildless/mode-active",
- "name": "C# with build-mode set to 'none'"
+ "name": "C# was extracted with build-mode set to 'none'"
},
"visibility": {
"cliSummaryTable": true,
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/Program.cs b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/Program.cs
new file mode 100644
index 00000000000..695ac7ef269
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/Program.cs
@@ -0,0 +1 @@
+var dummy = "dummy";
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/diagnostics.expected
new file mode 100644
index 00000000000..0b7107530f3
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/diagnostics.expected
@@ -0,0 +1,42 @@
+{
+ "markdownMessage": "C# analysis with build-mode 'none' completed.",
+ "severity": "unknown",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/complete",
+ "name": "C# analysis with build-mode 'none' completed"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": false,
+ "telemetry": true
+ }
+}
+{
+ "markdownMessage": "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ "severity": "note",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/mode-active",
+ "name": "C# was extracted with build-mode set to 'none'"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": true,
+ "telemetry": true
+ }
+}
+{
+ "markdownMessage": "C# was extracted with the deprecated 'buildless' option, use build-mode instead.",
+ "severity": "warning",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/use-build-mode",
+ "name": "C# was extracted with the deprecated 'buildless' option, use build-mode instead"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": true,
+ "telemetry": true
+ }
+}
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json
new file mode 100644
index 00000000000..5c3fd64fbd1
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "version": "8.0.101"
+ }
+}
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj
new file mode 100644
index 00000000000..a269962b552
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/standalone.csproj
@@ -0,0 +1,8 @@
+
+
+
+ Exe
+ net8.0
+
+
+
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/test.py b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/test.py
new file mode 100644
index 00000000000..6f52d5caa05
--- /dev/null
+++ b/csharp/ql/integration-tests/all-platforms/standalone_buildless_option/test.py
@@ -0,0 +1,8 @@
+import os
+from create_database_utils import *
+from diagnostics_test_utils import *
+
+os.environ['CODEQL_EXTRACTOR_CSHARP_OPTION_BUILDLESS'] = 'true'
+run_codeql_database_create([], lang="csharp")
+
+check_diagnostics()
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected
index 65b8c89ce70..87266426bda 100644
--- a/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected
+++ b/csharp/ql/integration-tests/all-platforms/standalone_failed/diagnostics.expected
@@ -13,12 +13,12 @@
}
}
{
- "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ "markdownMessage": "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
"severity": "note",
"source": {
"extractorName": "csharp",
"id": "csharp/autobuilder/buildless/mode-active",
- "name": "C# with build-mode set to 'none'"
+ "name": "C# was extracted with build-mode set to 'none'"
},
"visibility": {
"cliSummaryTable": true,
diff --git a/csharp/ql/integration-tests/all-platforms/standalone_resx/CompilationInfo.expected b/csharp/ql/integration-tests/all-platforms/standalone_resx/CompilationInfo.expected
index 1fbab458c34..48cca253453 100644
--- a/csharp/ql/integration-tests/all-platforms/standalone_resx/CompilationInfo.expected
+++ b/csharp/ql/integration-tests/all-platforms/standalone_resx/CompilationInfo.expected
@@ -3,6 +3,7 @@
| Failed solution restore with package source error | 0.0 |
| NuGet feed responsiveness checked | 1.0 |
| Project files on filesystem | 1.0 |
+| Reachable fallback Nuget feed count | 1.0 |
| Resource extraction enabled | 1.0 |
| Restored .NET framework variants | 1.0 |
| Restored projects through solution files | 0.0 |
diff --git a/csharp/ql/integration-tests/legacy b/csharp/ql/integration-tests/legacy
new file mode 100644
index 00000000000..52478f0a7ef
--- /dev/null
+++ b/csharp/ql/integration-tests/legacy
@@ -0,0 +1 @@
+These tests are still run with the legacy test runner
diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected b/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected
index c877d01a695..888a4be5409 100644
--- a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected
+++ b/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.expected
@@ -1,9 +1,14 @@
| 0 | /noconfig |
| 1 | /unsafe- |
| 2 | /checked- |
+| 3 | /nowarn:1701,1702,1701,1702 |
| 4 | /fullpaths |
| 5 | /nostdlib+ |
+| 6 | /errorreport:prompt |
+| 7 | /warn:8 |
+| 8 | /define:TRACE;DEBUG;NET;NET8_0;NETCOREAPP;NET5_0_OR_GREATER;NET6_0_OR_GREATER;NET7_0_OR_GREATER;NET8_0_OR_GREATER;NETCOREAPP1_0_OR_GREATER;NETCOREAPP1_1_OR_GREATER;NETCOREAPP2_0_OR_GREATER;NETCOREAPP2_1_OR_GREATER;NETCOREAPP2_2_OR_GREATER;NETCOREAPP3_0_OR_GREATER;NETCOREAPP3_1_OR_GREATER |
| 9 | /highentropyva+ |
+| 10 | /nullable:enable |
| 11 | /reference:[...]/8.0.1/ref/net8.0/Microsoft.CSharp.dll |
| 12 | /reference:[...]/8.0.1/ref/net8.0/Microsoft.VisualBasic.Core.dll |
| 13 | /reference:[...]/8.0.1/ref/net8.0/Microsoft.VisualBasic.dll |
@@ -168,10 +173,24 @@
| 172 | /reference:[...]/8.0.1/ref/net8.0/System.Xml.XPath.XDocument.dll |
| 173 | /reference:[...]/8.0.1/ref/net8.0/WindowsBase.dll |
| 174 | /debug+ |
+| 175 | /debug:portable |
+| 176 | /filealign:512 |
+| 177 | /generatedfilesout:obj/Debug/net8.0//generated |
| 178 | /optimize- |
+| 179 | /out:obj/Debug/net8.0/test.dll |
+| 180 | /refout:obj/Debug/net8.0/refint/test.dll |
+| 181 | /target:exe |
| 182 | /warnaserror- |
| 183 | /utf8output |
| 184 | /deterministic+ |
+| 185 | /sourcelink:obj/Debug/net8.0/test.sourcelink.json |
+| 186 | /langversion:12.0 |
+| 187 | /embed:Program.cs |
+| 188 | /embed:obj/Debug/net8.0/test.GlobalUsings.g.cs |
+| 189 | /embed:"obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs" |
+| 190 | /embed:obj/Debug/net8.0/test.AssemblyInfo.cs |
+| 191 | /analyzerconfig:/home/runner/work/semmle-code/semmle-code/.editorconfig |
+| 192 | /analyzerconfig:obj/Debug/net8.0/test.GeneratedMSBuildEditorConfig.editorconfig |
| 193 | /analyzerconfig:[...]/8.0.101/Sdks/Microsoft.NET.Sdk/analyzers/build/config/analysislevel_8_default.globalconfig |
| 194 | /analyzer:[...]/8.0.101/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.CSharp.NetAnalyzers.dll |
| 195 | /analyzer:[...]/8.0.101/Sdks/Microsoft.NET.Sdk/targets/../analyzers/Microsoft.CodeAnalysis.NetAnalyzers.dll |
@@ -185,3 +204,4 @@
| 203 | obj/Debug/net8.0/test.GlobalUsings.g.cs |
| 204 | obj/Debug/net8.0/.NETCoreApp,Version=v8.0.AssemblyAttributes.cs |
| 205 | obj/Debug/net8.0/test.AssemblyInfo.cs |
+| 206 | /warnaserror+:NU1605,SYSLIB0011 |
diff --git a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql b/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql
index 774388896e9..f2aa5c8c4a0 100644
--- a/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql
+++ b/csharp/ql/integration-tests/linux-only/compiler_args/CompilerArgs.ql
@@ -3,7 +3,8 @@ import semmle.code.csharp.commons.Compilation
bindingset[arg]
private string normalize(string arg) {
- not exists(arg.indexOf(":")) and result = arg
+ (not exists(arg.indexOf(":")) or not exists(arg.indexOf("/8.0"))) and
+ result = arg
or
exists(int i, int j |
i = arg.indexOf(":") and
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected
index 772f640789e..26e38291aa1 100644
--- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_executing_runtime/Assemblies.expected
@@ -193,9 +193,3 @@
| [...]/WindowsBase.dll |
| [...]/mscorlib.dll |
| [...]/netstandard.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.CSharp.Workspaces.resources.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.CSharp.resources.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.Workspaces.resources.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.VisualBasic.resources.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.Workspaces.resources.dll |
-| [...]/zh-Hant/Microsoft.CodeAnalysis.resources.dll |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected
new file mode 100644
index 00000000000..bf3b256b71f
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.expected
@@ -0,0 +1 @@
+| [...]/Newtonsoft.Json.6.0.4/lib/portable-net45+wp80+win8+wpa81/Newtonsoft.Json.dll |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql
new file mode 100644
index 00000000000..24308907aa3
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Assemblies.ql
@@ -0,0 +1,15 @@
+import csharp
+
+private string getPath(Assembly a) {
+ not a.getCompilation().getOutputAssembly() = a and
+ exists(string s | s = a.getFile().getAbsolutePath() |
+ result =
+ "[...]" +
+ s.substring(s.indexOf("test-db/working/") + "test-db/working/".length() + 16 +
+ "/legacypackages".length(), s.length())
+ // TODO: include all other assemblies from the test results. Initially disable because mono installations were problematic on ARM runners.
+ )
+}
+
+from Assembly a
+select getPath(a)
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Program.cs
new file mode 100644
index 00000000000..39a9e95bb6e
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/Program.cs
@@ -0,0 +1,6 @@
+class Program
+{
+ static void Main(string[] args)
+ {
+ }
+}
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/global.json b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/global.json
new file mode 100644
index 00000000000..5c3fd64fbd1
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/global.json
@@ -0,0 +1,5 @@
+{
+ "sdk": {
+ "version": "8.0.101"
+ }
+}
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/packages.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/packages.config
new file mode 100644
index 00000000000..0f63b3daf6c
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/packages.config
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/skip-on-platform-osx-arm b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/skip-on-platform-osx-arm
new file mode 100644
index 00000000000..6ebb8d63fcc
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/skip-on-platform-osx-arm
@@ -0,0 +1 @@
+Skipping the test on the ARM runners, as we're running into trouble with Mono and nuget.
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.csproj
new file mode 100644
index 00000000000..f7600103d99
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.csproj
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.py
new file mode 100644
index 00000000000..a8429653cea
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget with_space/test.py
@@ -0,0 +1,8 @@
+from create_database_utils import *
+import os
+
+# making sure we're not doing any fallback restore:
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1"
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_LIMIT"] = "1"
+
+run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"])
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected
index 81a44b5f8fd..53ebd1016fb 100644
--- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error/CompilationInfo.expected
@@ -4,6 +4,7 @@
| Fallback nuget restore | 1.0 |
| NuGet feed responsiveness checked | 1.0 |
| Project files on filesystem | 1.0 |
+| Reachable fallback Nuget feed count | 1.0 |
| Resolved assembly conflicts | 7.0 |
| Resource extraction enabled | 0.0 |
| Restored .NET framework variants | 0.0 |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected
index 026a3d386e3..777d615d99b 100644
--- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/CompilationInfo.expected
@@ -3,6 +3,7 @@
| Inherited Nuget feed count | 1.0 |
| NuGet feed responsiveness checked | 1.0 |
| Project files on filesystem | 1.0 |
+| Reachable fallback Nuget feed count | 1.0 |
| Resolved assembly conflicts | 7.0 |
| Resource extraction enabled | 0.0 |
| Restored .NET framework variants | 0.0 |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected
index 5f298cd3a11..8633aedab76 100644
--- a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_error_timeout/diagnostics.expected
@@ -13,12 +13,12 @@
}
}
{
- "markdownMessage": "C# with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ "markdownMessage": "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
"severity": "note",
"source": {
"extractorName": "csharp",
"id": "csharp/autobuilder/buildless/mode-active",
- "name": "C# with build-mode set to 'none'"
+ "name": "C# was extracted with build-mode set to 'none'"
},
"visibility": {
"cliSummaryTable": true,
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected
new file mode 100644
index 00000000000..2a530060edb
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.expected
@@ -0,0 +1 @@
+| [...]/newtonsoft.json/13.0.3/lib/net6.0/Newtonsoft.Json.dll |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql
new file mode 100644
index 00000000000..79cf92de791
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/Assemblies.ql
@@ -0,0 +1,11 @@
+import csharp
+
+private string getPath(Assembly a) {
+ not a.getCompilation().getOutputAssembly() = a and
+ exists(string s | s = a.getFile().getAbsolutePath() |
+ result = "[...]/" + s.substring(s.indexOf("newtonsoft.json"), s.length())
+ )
+}
+
+from Assembly a
+select getPath(a)
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected
new file mode 100644
index 00000000000..9e869e1a6fb
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.expected
@@ -0,0 +1,16 @@
+| All Nuget feeds reachable | 0.0 |
+| Fallback nuget restore | 1.0 |
+| NuGet feed responsiveness checked | 1.0 |
+| Project files on filesystem | 1.0 |
+| Reachable fallback Nuget feed count | 2.0 |
+| Resolved assembly conflicts | 7.0 |
+| Resource extraction enabled | 0.0 |
+| Restored .NET framework variants | 0.0 |
+| Solution files on filesystem | 1.0 |
+| Source files generated | 0.0 |
+| Source files on filesystem | 1.0 |
+| Successfully ran fallback nuget restore | 1.0 |
+| Unresolved references | 0.0 |
+| UseWPF set | 0.0 |
+| UseWindowsForms set | 0.0 |
+| WebView extraction enabled | 1.0 |
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql
new file mode 100644
index 00000000000..073ffe3b224
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/CompilationInfo.ql
@@ -0,0 +1,15 @@
+import csharp
+import semmle.code.csharp.commons.Diagnostics
+
+query predicate compilationInfo(string key, float value) {
+ key != "Resolved references" and
+ not key.matches("Compiler diagnostic count for%") and
+ exists(Compilation c, string infoKey, string infoValue | infoValue = c.getInfo(infoKey) |
+ key = infoKey and
+ value = infoValue.toFloat()
+ or
+ not exists(infoValue.toFloat()) and
+ key = infoKey + ": " + infoValue and
+ value = 1
+ )
+}
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/diagnostics.expected b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/diagnostics.expected
new file mode 100644
index 00000000000..8633aedab76
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/diagnostics.expected
@@ -0,0 +1,42 @@
+{
+ "markdownMessage": "C# analysis with build-mode 'none' completed.",
+ "severity": "unknown",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/complete",
+ "name": "C# analysis with build-mode 'none' completed"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": false,
+ "telemetry": true
+ }
+}
+{
+ "markdownMessage": "C# was extracted with build-mode set to 'none'. This means that all C# source in the working directory will be scanned, with build tools, such as Nuget and Dotnet CLIs, only contributing information about external dependencies.",
+ "severity": "note",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/mode-active",
+ "name": "C# was extracted with build-mode set to 'none'"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": true,
+ "telemetry": true
+ }
+}
+{
+ "markdownMessage": "Found unreachable Nuget feed in C# analysis with build-mode 'none'. This may cause missing dependencies in the analysis.",
+ "severity": "warning",
+ "source": {
+ "extractorName": "csharp",
+ "id": "csharp/autobuilder/buildless/unreachable-feed",
+ "name": "Found unreachable Nuget feed in C# analysis with build-mode 'none'"
+ },
+ "visibility": {
+ "cliSummaryTable": true,
+ "statusPage": true,
+ "telemetry": true
+ }
+}
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/Program.cs b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/Program.cs
new file mode 100644
index 00000000000..39a9e95bb6e
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/Program.cs
@@ -0,0 +1,6 @@
+class Program
+{
+ static void Main(string[] args)
+ {
+ }
+}
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/nuget.config b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/nuget.config
new file mode 100644
index 00000000000..6e4302658a9
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/nuget.config
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/proj.csproj b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/proj.csproj
new file mode 100644
index 00000000000..cef71796352
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/proj/proj.csproj
@@ -0,0 +1,16 @@
+
+
+
+ Exe
+ net8.0
+
+
+
+
+
+
+
+
+
+
+
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/standalone.sln b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/standalone.sln
new file mode 100644
index 00000000000..493ab54b59a
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/standalone.sln
@@ -0,0 +1,19 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.5.002.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "proj", "proj\proj.csproj", "{6ED00460-7666-4AE9-A405-4B6C8B02279A}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {4ED55A1C-066C-43DF-B32E-7EAA035985EE}
+ EndGlobalSection
+EndGlobal
diff --git a/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/test.py b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/test.py
new file mode 100644
index 00000000000..630dbfc06d4
--- /dev/null
+++ b/csharp/ql/integration-tests/posix-only/standalone_dependencies_nuget_config_fallback/test.py
@@ -0,0 +1,14 @@
+from create_database_utils import *
+from diagnostics_test_utils import *
+import os
+
+# os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK"] = "true" # Nuget feed check is enabled by default
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_TIMEOUT"] = "1" # 1ms, the GET request should fail with such short timeout
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_LIMIT"] = "1" # Limit the count of checks to 1
+
+# Making sure the reachability test succeeds when doing a fallback restore:
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_TIMEOUT"] = "1000"
+os.environ["CODEQL_EXTRACTOR_CSHARP_BUILDLESS_NUGET_FEEDS_CHECK_FALLBACK_LIMIT"] = "5"
+
+run_codeql_database_create([], lang="csharp", extra_args=["--build-mode=none"])
+check_diagnostics()
\ No newline at end of file
diff --git a/csharp/ql/lib/CHANGELOG.md b/csharp/ql/lib/CHANGELOG.md
index c136a082889..0b3326f0e26 100644
--- a/csharp/ql/lib/CHANGELOG.md
+++ b/csharp/ql/lib/CHANGELOG.md
@@ -1,3 +1,17 @@
+## 1.0.1
+
+No user-facing changes.
+
+## 1.0.0
+
+### Breaking Changes
+
+* CodeQL package management is now generally available, and all GitHub-produced CodeQL packages have had their version numbers increased to 1.0.0.
+
+## 0.10.1
+
+No user-facing changes.
+
## 0.10.0
### Breaking Changes
diff --git a/csharp/ql/lib/change-notes/released/0.10.1.md b/csharp/ql/lib/change-notes/released/0.10.1.md
new file mode 100644
index 00000000000..ca00f64cde4
--- /dev/null
+++ b/csharp/ql/lib/change-notes/released/0.10.1.md
@@ -0,0 +1,3 @@
+## 0.10.1
+
+No user-facing changes.
diff --git a/csharp/ql/lib/change-notes/released/1.0.0.md b/csharp/ql/lib/change-notes/released/1.0.0.md
new file mode 100644
index 00000000000..7c7dd01f405
--- /dev/null
+++ b/csharp/ql/lib/change-notes/released/1.0.0.md
@@ -0,0 +1,5 @@
+## 1.0.0
+
+### Breaking Changes
+
+* CodeQL package management is now generally available, and all GitHub-produced CodeQL packages have had their version numbers increased to 1.0.0.
diff --git a/csharp/ql/lib/change-notes/released/1.0.1.md b/csharp/ql/lib/change-notes/released/1.0.1.md
new file mode 100644
index 00000000000..1c81cba6001
--- /dev/null
+++ b/csharp/ql/lib/change-notes/released/1.0.1.md
@@ -0,0 +1,3 @@
+## 1.0.1
+
+No user-facing changes.
diff --git a/csharp/ql/lib/codeql-pack.release.yml b/csharp/ql/lib/codeql-pack.release.yml
index b21db623245..2f5886268c6 100644
--- a/csharp/ql/lib/codeql-pack.release.yml
+++ b/csharp/ql/lib/codeql-pack.release.yml
@@ -1,2 +1,2 @@
---
-lastReleaseVersion: 0.10.0
+lastReleaseVersion: 1.0.1
diff --git a/csharp/ql/lib/ext/System.Data.model.yml b/csharp/ql/lib/ext/System.Data.model.yml
index 7c775086317..989f2f655ef 100644
--- a/csharp/ql/lib/ext/System.Data.model.yml
+++ b/csharp/ql/lib/ext/System.Data.model.yml
@@ -54,6 +54,12 @@ extensions:
- ["System.Data", "EnumerableRowCollectionExtensions", False, "Where", "(System.Data.EnumerableRowCollection,System.Func)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"]
- ["System.Data", "IColumnMappingCollection", True, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
- ["System.Data", "IColumnMappingCollection", True, "set_Item", "(System.String,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"]
+ - ["System.Data", "IDataRecord", True, "GetString", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"]
+ - ["System.Data", "IDataRecord", True, "GetValue", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"]
+ - ["System.Data", "IDataRecord", True, "GetValues", "(System.Object[])", "", "Argument[this]", "Argument[0].Element", "taint", "manual"]
+ - ["System.Data", "IDataRecord", True, "get_Item", "(System.Int32)", "", "Argument[this]", "ReturnValue", "taint", "manual"]
+ - ["System.Data", "IDataRecord", True, "get_Item", "(System.String)", "", "Argument[this]", "ReturnValue", "taint", "manual"]
+ - ["System.Data", "IDbCommand", True, "ExecuteReader", "()", "", "Argument[this]", "ReturnValue", "taint", "manual"]
- ["System.Data", "IDataParameterCollection", True, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
- ["System.Data", "IDataParameterCollection", True, "set_Item", "(System.String,System.Object)", "", "Argument[1]", "Argument[this].Element", "value", "manual"]
- ["System.Data", "ITableMappingCollection", True, "get_Item", "(System.String)", "", "Argument[this].Element", "ReturnValue", "value", "manual"]
@@ -73,3 +79,11 @@ extensions:
- ["System.Data", "TypedTableBaseExtensions", False, "Select", "(System.Data.TypedTableBase,System.Func)", "", "Argument[1].ReturnValue", "ReturnValue.Element", "value", "manual"]
- ["System.Data", "TypedTableBaseExtensions", False, "Where", "(System.Data.TypedTableBase,System.Func)", "", "Argument[0].Element", "Argument[1].Parameter[0]", "value", "manual"]
- ["System.Data", "TypedTableBaseExtensions", False, "Where", "(System.Data.TypedTableBase,System.Func)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"]
+
+ - addsTo:
+ pack: codeql/csharp-all
+ extensible: neutralModel
+ data:
+ - ["System.Data", "IDataRecord", "GetDataTypeName", "(System.Int32)", "summary", "manual"]
+ - ["System.Data", "IDataRecord", "GetGuid", "(System.Int32)", "summary", "manual"]
+ - ["System.Data", "IDataRecord", "GetName", "(System.Int32)", "summary", "manual"]
diff --git a/csharp/ql/lib/ext/generated/ILCompiler.IBC.model.yml b/csharp/ql/lib/ext/generated/ILCompiler.IBC.model.yml
index d9c19aa2ecb..caf44ab1ac2 100644
--- a/csharp/ql/lib/ext/generated/ILCompiler.IBC.model.yml
+++ b/csharp/ql/lib/ext/generated/ILCompiler.IBC.model.yml
@@ -5,14 +5,12 @@ extensions:
extensible: summaryModel
data:
- ["ILCompiler.IBC", "IBCProfileData", False, "IBCProfileData", "(ILCompiler.IBC.MibcConfig,System.Boolean,System.Collections.Generic.IEnumerable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- - ["ILCompiler.IBC", "IBCProfileData", False, "get_Config", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.IBC", "MibcConfig", False, "FromKeyValueMap", "(System.Collections.Generic.Dictionary)", "", "Argument[0].Element", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.IBC", "MibcConfig", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel
data:
- - ["ILCompiler.IBC", "IBCProfileData", "GetAllMethodProfileData", "()", "summary", "df-generated"]
- ["ILCompiler.IBC", "IBCProfileData", "GetMethodBlockCount", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- ["ILCompiler.IBC", "IBCProfileData", "GetMethodProfileData", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- ["ILCompiler.IBC", "IBCProfileData", "get_PartialNGen", "()", "summary", "df-generated"]
diff --git a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.Amd64.model.yml b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.Amd64.model.yml
index ff72e11d04b..181043122f4 100644
--- a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.Amd64.model.yml
+++ b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.Amd64.model.yml
@@ -1,5 +1,12 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
extensions:
+ - addsTo:
+ pack: codeql/csharp-all
+ extensible: summaryModel
+ data:
+ - ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable+GcSlot", False, "GcSlot", "(System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcStackSlot,ILCompiler.Reflection.ReadyToRun.GcSlotFlags,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcTransition", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.Amd64", "UnwindInfo", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel
@@ -7,15 +14,12 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcInfo+SafePointOffset", "SafePointOffset", "(System.Int32,System.UInt32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcInfo", "GcInfo", "(System.Byte[],System.Int32,System.Reflection.PortableExecutable.Machine,System.UInt16)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcInfo", "ToString", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable+GcSlot", "GcSlot", "(System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcStackSlot,ILCompiler.Reflection.ReadyToRun.GcSlotFlags,System.Boolean)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable+GcSlot", "WriteTo", "(System.Text.StringBuilder,System.Reflection.PortableExecutable.Machine,ILCompiler.Reflection.ReadyToRun.GcSlotFlags)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable", "GcSlotTable", "(System.Byte[],System.Reflection.PortableExecutable.Machine,ILCompiler.Reflection.ReadyToRun.GcInfoTypes,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcSlotTable", "get_NumTracked", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcTransition", "GcTransition", "(System.Int32,System.Int32,System.Boolean,System.Int32,ILCompiler.Reflection.ReadyToRun.Amd64.GcSlotTable,System.Reflection.PortableExecutable.Machine)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcTransition", "GetSlotState", "(ILCompiler.Reflection.ReadyToRun.Amd64.GcSlotTable,System.Reflection.PortableExecutable.Machine)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.Amd64", "GcTransition", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "InterruptibleRange", "InterruptibleRange", "(System.UInt32,System.UInt32,System.UInt32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "UnwindCode", "UnwindCode", "(System.Byte[],System.Int32,System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.Amd64", "UnwindInfo", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.Amd64", "UnwindInfo", "UnwindInfo", "(System.Byte[],System.Int32)", "summary", "df-generated"]
diff --git a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.model.yml b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.model.yml
index d96f51d9ced..dc531fc2fa0 100644
--- a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.model.yml
+++ b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.model.yml
@@ -7,12 +7,19 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "DebugInfo", False, "DebugInfo", "(ILCompiler.Reflection.ReadyToRun.RuntimeFunction,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DebugInfo", False, "get_BoundsList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DebugInfo", False, "get_VariablesList", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingGenericContext", False, "DisassemblingGenericContext", "(System.String[],System.String[])", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingGenericContext", False, "DisassemblingGenericContext", "(System.String[],System.String[])", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", True, "GetGenericMethodParameter", "(ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", True, "GetGenericTypeParameter", "(ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Int32)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHClause", False, "WriteTo", "(System.IO.TextWriter,System.Int32,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHInfo", False, "EHInfo", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,System.Int32,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHInfo", False, "WriteTo", "(System.IO.TextWriter,System.Boolean)", "", "Argument[this]", "Argument[0]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHInfo", False, "get_EHClauses", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "FixupCell", False, "FixupCell", "(System.Int32,System.UInt32,System.UInt32,ILCompiler.Reflection.ReadyToRun.ReadyToRunSignature)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "GCRefMap", False, "GCRefMap", "(System.UInt32,ILCompiler.Reflection.ReadyToRun.GCRefMapEntry[])", "", "Argument[1].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "GCRefMapDecoder", False, "GCRefMapDecoder", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "IAssemblyMetadata", True, "get_ImageReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "IAssemblyMetadata", True, "get_MetadataReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "InliningInfoSection2", False, "InliningInfoSection2", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "InliningInfoSection", False, "InliningInfoSection", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "InstanceMethod", False, "InstanceMethod", "(System.Byte,ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
@@ -27,29 +34,51 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "NativeHashtable", False, "NativeHashtable", "(System.Byte[],ILCompiler.Reflection.ReadyToRun.NativeParser,System.UInt32)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "NativeParser", False, "GetParserFromRelativeOffset", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "NativeParser", False, "NativeParser", "(System.Byte[],System.UInt32,System.Byte)", "", "Argument[0].Element", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", False, "PgoInfo", "(ILCompiler.Reflection.ReadyToRun.PgoInfoKey,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Byte[],System.Int32)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", False, "PgoInfo", "(ILCompiler.Reflection.ReadyToRun.PgoInfoKey,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Byte[],System.Int32)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", False, "PgoInfo", "(ILCompiler.Reflection.ReadyToRun.PgoInfoKey,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Byte[],System.Int32)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", False, "get_PgoData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "FromReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "PgoInfoKey", "(ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.String,System.Reflection.Metadata.EntityHandle,System.String[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "PgoInfoKey", "(ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.String,System.Reflection.Metadata.EntityHandle,System.String[])", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "PgoInfoKey", "(ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.String,System.Reflection.Metadata.EntityHandle,System.String[])", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "PgoInfoKey", "(ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.String,System.Reflection.Metadata.EntityHandle,System.String[])", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Boolean)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "R2RSignatureDecoder", False, "R2RSignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider,TGenericContext,System.Reflection.Metadata.MetadataReader,System.Byte[],System.Int32,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Boolean)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunAssembly", False, "get_AvailableTypes", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunAssembly", False, "get_Methods", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunHeader", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection+ImportSectionEntry", False, "ImportSectionEntry", "(System.Int32,System.Int32,System.Int32,System.Int64,System.UInt32,ILCompiler.Reflection.ReadyToRun.ReadyToRunSignature)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection", False, "ReadyToRunImportSection", "(System.Int32,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,Internal.ReadyToRunConstants.ReadyToRunImportSectionFlags,Internal.ReadyToRunConstants.ReadyToRunImportSectionType,System.Byte,System.Int32,System.Collections.Generic.List,System.Int32,System.Int32,System.Reflection.PortableExecutable.Machine,System.UInt16)", "", "Argument[8].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[4]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[6].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "ReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.Metadata.EntityHandle,System.Int32,System.String,System.String,System.String[],System.Nullable)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "get_Fixups", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "get_GcInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "get_PgoInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", False, "get_RuntimeFunctions", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "GetCustomMethodToRuntimeFunctionMapping", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "GetGlobalMetadata", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.PortableExecutable.PEReader,System.String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.PortableExecutable.PEReader,System.String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.PortableExecutable.PEReader,System.String)", "", "Argument[2]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.Reflection.PortableExecutable.PEReader,System.String)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,System.String)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "ReadyToRunReader", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,System.String)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "get_AllPgoInfos", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "get_CompilerIdentifier", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "get_ImportSections", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "get_ImportSignatures", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
@@ -62,15 +91,16 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", False, "get_ReadyToRunHeader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunSignature", False, "ReadyToRunSignature", "(ILCompiler.Reflection.ReadyToRun.SignatureDecoder,Internal.ReadyToRunConstants.ReadyToRunFixupKind)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "RuntimeFunction", False, "RuntimeFunction", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod,ILCompiler.Reflection.ReadyToRun.BaseUnwindInfo)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "RuntimeFunction", False, "RuntimeFunction", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod,ILCompiler.Reflection.ReadyToRun.BaseUnwindInfo)", "", "Argument[6]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "RuntimeFunction", False, "RuntimeFunction", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,System.Int32,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod,ILCompiler.Reflection.ReadyToRun.BaseUnwindInfo)", "", "Argument[7]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "RuntimeFunction", False, "get_DebugInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "RuntimeFunction", False, "get_EHInfo", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "SignatureDecoder", False, "GetMetadataReaderFromModuleOverride", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StandaloneAssemblyMetadata", False, "StandaloneAssemblyMetadata", "(System.Reflection.PortableExecutable.PEReader)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "StandaloneAssemblyMetadata", False, "get_ImageReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "StandaloneAssemblyMetadata", False, "get_MetadataReader", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringBuilderExtensions", False, "AppendEscapedString", "(System.Text.StringBuilder,System.String,System.Boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetArrayType", "(System.String,System.Reflection.Metadata.ArrayShape)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetByReferenceType", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetFunctionPointerType", "(System.Reflection.Metadata.MethodSignature)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetGenericInstantiation", "(System.String,System.Collections.Immutable.ImmutableArray)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetGenericInstantiation", "(System.String,System.Collections.Immutable.ImmutableArray)", "", "Argument[1].Element", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetModifiedType", "(System.String,System.String,System.Boolean)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
@@ -78,6 +108,8 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetPinnedType", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetPointerType", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", True, "GetSZArrayType", "(System.String)", "", "Argument[0]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "TextSignatureDecoderContext", False, "TextSignatureDecoderContext", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.SignatureFormattingOptions)", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun", "TextSignatureDecoderContext", False, "TextSignatureDecoderContext", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.SignatureFormattingOptions)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel
@@ -87,16 +119,12 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "ComponentAssembly", "ComponentAssembly", "(System.Byte[],System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DebugInfo", "GetPlatformSpecificRegister", "(System.Reflection.PortableExecutable.Machine,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DebugInfo", "get_Machine", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingGenericContext", "DisassemblingGenericContext", "(System.String[],System.String[])", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DisassemblingGenericContext", "get_MethodParameters", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DisassemblingGenericContext", "get_TypeParameters", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", "GetGenericMethodParameter", "(ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", "GetGenericTypeParameter", "(ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", "GetTypeFromHandle", "(System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Reflection.Metadata.EntityHandle)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "DisassemblingTypeProvider", "GetTypeFromSpecification", "(System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.DisassemblingGenericContext,System.Reflection.Metadata.TypeSpecificationHandle,System.Byte)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHClause", "EHClause", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "EHInfo", "get_RelativeVirtualAddress", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "FixupCell", "FixupCell", "(System.Int32,System.UInt32,System.UInt32,ILCompiler.Reflection.ReadyToRun.ReadyToRunSignature)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "FixupCell", "get_CellOffset", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "FixupCell", "get_Index", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "FixupCell", "get_Signature", "()", "summary", "df-generated"]
@@ -113,8 +141,6 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "GCRefMapEntry", "GCRefMapEntry", "(System.Int32,ILCompiler.Reflection.ReadyToRun.CORCOMPILE_GCREFMAP_TOKENS)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "GcStackSlot", "GcStackSlot", "(System.Int32,ILCompiler.Reflection.ReadyToRun.GcStackSlotBase)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "GcStackSlot", "ToString", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "IAssemblyMetadata", "get_ImageReader", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "IAssemblyMetadata", "get_MetadataReader", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "IAssemblyResolver", "FindAssembly", "(System.Reflection.Metadata.MetadataReader,System.Reflection.Metadata.AssemblyReferenceHandle,System.String)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "IAssemblyResolver", "FindAssembly", "(System.String,System.String)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "IR2RSignatureTypeProvider", "GetCanonType", "()", "summary", "df-generated"]
@@ -169,10 +195,7 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfo", "get_Size", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "Equals", "(ILCompiler.Reflection.ReadyToRun.PgoInfoKey)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "Equals", "(System.Object)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "FromReadyToRunMethod", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunMethod)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "GetHashCode", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "PgoInfoKey", "(ILCompiler.Reflection.ReadyToRun.IAssemblyMetadata,System.String,System.Reflection.Metadata.EntityHandle,System.String[])", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "get_ComponentReader", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "get_DeclaringType", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "PgoInfoKey", "get_MethodHandle", "()", "summary", "df-generated"]
@@ -195,9 +218,6 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunCoreHeader", "ParseCoreHeader", "(System.Byte[],System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunCoreHeader", "ReadyToRunCoreHeader", "(System.Byte[],System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunHeader", "ReadyToRunHeader", "(System.Byte[],System.Int32,System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunHeader", "ToString", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection+ImportSectionEntry", "ImportSectionEntry", "(System.Int32,System.Int32,System.Int32,System.Int64,System.UInt32,ILCompiler.Reflection.ReadyToRun.ReadyToRunSignature)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection", "ReadyToRunImportSection", "(System.Int32,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Int32,Internal.ReadyToRunConstants.ReadyToRunImportSectionFlags,Internal.ReadyToRunConstants.ReadyToRunImportSectionType,System.Byte,System.Int32,System.Collections.Generic.List,System.Int32,System.Int32,System.Reflection.PortableExecutable.Machine,System.UInt16)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunImportSection", "WriteTo", "(System.IO.TextWriter)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunMethod", "get_LocalSignature", "()", "summary", "df-generated"]
@@ -206,13 +226,11 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "CheckNonEmptyDebugInfo", "(ILCompiler.Reflection.ReadyToRun.RuntimeFunction)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetAssemblyIndex", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunSection)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetAssemblyMvid", "(System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetCustomMethodToRuntimeFunctionMapping", "(ILCompiler.Reflection.ReadyToRun.IR2RSignatureTypeProvider)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetGlobalAssemblyName", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetOffset", "(System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "GetPgoInfoByKey", "(ILCompiler.Reflection.ReadyToRun.PgoInfoKey)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "IsReadyToRunImage", "(System.Reflection.PortableExecutable.PEReader)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "ValidateRuntimeFunctions", "(System.Collections.Generic.List)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "get_AllPgoInfos", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "get_ComponentAssemblyIndexOffset", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "get_ComponentAssemblyIndicesStartAtTwo", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "ReadyToRunReader", "get_Composite", "()", "summary", "df-generated"]
@@ -235,14 +253,12 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun", "SignatureDecoder", "ReadTypeSignatureNoEmit", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "SignatureDecoder", "SignatureDecoder", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.SignatureFormattingOptions,System.Reflection.Metadata.MetadataReader,ILCompiler.Reflection.ReadyToRun.ReadyToRunReader,System.Int32,System.Boolean)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringExtensions", "ToEscapedString", "(System.String,System.Boolean)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetFunctionPointerType", "(System.Reflection.Metadata.MethodSignature)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetGenericMethodParameter", "(TGenericContext,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetGenericTypeParameter", "(TGenericContext,System.Int32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetPrimitiveType", "(System.Reflection.Metadata.PrimitiveTypeCode)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetTypeFromDefinition", "(System.Reflection.Metadata.MetadataReader,System.Reflection.Metadata.TypeDefinitionHandle,System.Byte)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetTypeFromReference", "(System.Reflection.Metadata.MetadataReader,System.Reflection.Metadata.TypeReferenceHandle,System.Byte)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "StringTypeProviderBase", "GetTypeFromSpecification", "(System.Reflection.Metadata.MetadataReader,TGenericContext,System.Reflection.Metadata.TypeSpecificationHandle,System.Byte)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun", "TextSignatureDecoderContext", "TextSignatureDecoderContext", "(ILCompiler.Reflection.ReadyToRun.IAssemblyResolver,ILCompiler.Reflection.ReadyToRun.SignatureFormattingOptions)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "TextSignatureDecoderContext", "get_AssemblyResolver", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "TodoSignature", "TodoSignature", "(ILCompiler.Reflection.ReadyToRun.SignatureDecoder,Internal.ReadyToRunConstants.ReadyToRunFixupKind)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun", "TransitionBlock", "FromReader", "(ILCompiler.Reflection.ReadyToRun.ReadyToRunReader)", "summary", "df-generated"]
diff --git a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.x86.model.yml b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.x86.model.yml
index ff43607b18d..c1bd08f9841 100644
--- a/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.x86.model.yml
+++ b/csharp/ql/lib/ext/generated/ILCompiler.Reflection.ReadyToRun.x86.model.yml
@@ -1,5 +1,14 @@
# THIS FILE IS AN AUTO-GENERATED MODELS AS DATA FILE. DO NOT EDIT.
extensions:
+ - addsTo:
+ pack: codeql/csharp-all
+ extensible: summaryModel
+ data:
+ - ["ILCompiler.Reflection.ReadyToRun.x86", "GcInfo", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", False, "GcSlot", "(System.Int32,System.String,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcSlotFlags)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", False, "GcSlot", "(System.Int32,System.String,System.Int32,System.Int32,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcSlotFlags)", "", "Argument[1]", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable", False, "ToString", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel
@@ -8,12 +17,7 @@ extensions:
- ["ILCompiler.Reflection.ReadyToRun.x86", "CalleeSavedRegister", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcInfo", "GcInfo", "(System.Byte[],System.Int32,System.Reflection.PortableExecutable.Machine,System.UInt16)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcInfo", "GetRegisterName", "(System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.x86", "GcInfo", "ToString", "()", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", "GcSlot", "(System.Int32,System.String,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcSlotFlags)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", "GcSlot", "(System.Int32,System.String,System.Int32,System.Int32,System.Int32,System.Int32,ILCompiler.Reflection.ReadyToRun.GcSlotFlags)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable+GcSlot", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable", "GcSlotTable", "(System.Byte[],ILCompiler.Reflection.ReadyToRun.x86.InfoHdrSmall,System.Int32)", "summary", "df-generated"]
- - ["ILCompiler.Reflection.ReadyToRun.x86", "GcSlotTable", "ToString", "()", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcTransitionCall+CallRegister", "CallRegister", "(ILCompiler.Reflection.ReadyToRun.x86.Registers,System.Boolean)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcTransitionCall+PtrArg", "PtrArg", "(System.UInt32,System.UInt32)", "summary", "df-generated"]
- ["ILCompiler.Reflection.ReadyToRun.x86", "GcTransitionCall", "GcTransitionCall", "(System.Int32)", "summary", "df-generated"]
diff --git a/csharp/ql/lib/ext/generated/ILCompiler.model.yml b/csharp/ql/lib/ext/generated/ILCompiler.model.yml
index 8780a29a3bf..2fac421a499 100644
--- a/csharp/ql/lib/ext/generated/ILCompiler.model.yml
+++ b/csharp/ql/lib/ext/generated/ILCompiler.model.yml
@@ -7,19 +7,17 @@ extensions:
- ["ILCompiler", "MethodProfileData", False, "MethodProfileData", "(Internal.TypeSystem.MethodDesc,ILCompiler.MethodProfilingDataFlags,System.Double,System.Collections.Generic.Dictionary,System.UInt32,Internal.Pgo.PgoSchemaElem[])", "", "Argument[0]", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler", "MethodProfileData", False, "MethodProfileData", "(Internal.TypeSystem.MethodDesc,ILCompiler.MethodProfilingDataFlags,System.Double,System.Collections.Generic.Dictionary,System.UInt32,Internal.Pgo.PgoSchemaElem[])", "", "Argument[3].Element", "Argument[this]", "taint", "df-generated"]
- ["ILCompiler", "MethodProfileData", False, "MethodProfileData", "(Internal.TypeSystem.MethodDesc,ILCompiler.MethodProfilingDataFlags,System.Double,System.Collections.Generic.Dictionary,System.UInt32,Internal.Pgo.PgoSchemaElem[])", "", "Argument[5].Element", "Argument[this]", "taint", "df-generated"]
+ - ["ILCompiler", "ProfileData", False, "MergeProfileData", "(System.Collections.Generic.Dictionary,ILCompiler.ProfileData)", "", "Argument[1]", "Argument[0].Element", "taint", "df-generated"]
+ - ["ILCompiler", "ProfileData", True, "GetAllMethodProfileData", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILCompiler", "ProfileData", True, "get_Config", "()", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel
data:
- - ["ILCompiler", "EmptyProfileData", "GetAllMethodProfileData", "()", "summary", "df-generated"]
- ["ILCompiler", "EmptyProfileData", "GetMethodBlockCount", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- ["ILCompiler", "EmptyProfileData", "GetMethodProfileData", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- - ["ILCompiler", "EmptyProfileData", "get_Config", "()", "summary", "df-generated"]
- ["ILCompiler", "EmptyProfileData", "get_PartialNGen", "()", "summary", "df-generated"]
- ["ILCompiler", "EmptyProfileData", "get_Singleton", "()", "summary", "df-generated"]
- - ["ILCompiler", "ProfileData", "GetAllMethodProfileData", "()", "summary", "df-generated"]
- ["ILCompiler", "ProfileData", "GetMethodBlockCount", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- ["ILCompiler", "ProfileData", "GetMethodProfileData", "(Internal.TypeSystem.MethodDesc)", "summary", "df-generated"]
- - ["ILCompiler", "ProfileData", "MergeProfileData", "(System.Collections.Generic.Dictionary,ILCompiler.ProfileData)", "summary", "df-generated"]
- - ["ILCompiler", "ProfileData", "get_Config", "()", "summary", "df-generated"]
- ["ILCompiler", "ProfileData", "get_PartialNGen", "()", "summary", "df-generated"]
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 d7974a87d4c..8aed78bb3d0 100644
--- a/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml
+++ b/csharp/ql/lib/ext/generated/ILLink.RoslynAnalyzer.DataFlow.model.yml
@@ -38,6 +38,40 @@ extensions:
- ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", False, "LocalDataFlowVisitor", "(Microsoft.CodeAnalysis.Compilation,ILLink.RoslynAnalyzer.DataFlow.LocalStateAndContextLattice,Microsoft.CodeAnalysis.ISymbol,Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph,System.Collections.Immutable.ImmutableDictionary,ILLink.RoslynAnalyzer.DataFlow.InterproceduralState)", "", "Argument[3]", "Argument[this]", "taint", "df-generated"]
- ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", False, "LocalDataFlowVisitor", "(Microsoft.CodeAnalysis.Compilation,ILLink.RoslynAnalyzer.DataFlow.LocalStateAndContextLattice,Microsoft.CodeAnalysis.ISymbol,Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph,System.Collections.Immutable.ImmutableDictionary,ILLink.RoslynAnalyzer.DataFlow.InterproceduralState)", "", "Argument[4].Element", "Argument[this]", "taint", "df-generated"]
- ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", False, "LocalDataFlowVisitor", "(Microsoft.CodeAnalysis.Compilation,ILLink.RoslynAnalyzer.DataFlow.LocalStateAndContextLattice,Microsoft.CodeAnalysis.ISymbol,Microsoft.CodeAnalysis.FlowAnalysis.ControlFlowGraph,System.Collections.Immutable.ImmutableDictionary,ILLink.RoslynAnalyzer.DataFlow.InterproceduralState)", "", "Argument[5]", "Argument[this]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitArrayElementReference", "(Microsoft.CodeAnalysis.Operations.IArrayElementReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitCompoundAssignment", "(Microsoft.CodeAnalysis.Operations.ICompoundAssignmentOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitCompoundAssignment", "(Microsoft.CodeAnalysis.Operations.ICompoundAssignmentOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitConversion", "(Microsoft.CodeAnalysis.Operations.IConversionOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDelegateCreation", "(Microsoft.CodeAnalysis.Operations.IDelegateCreationOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicIndexerAccess", "(Microsoft.CodeAnalysis.Operations.IDynamicIndexerAccessOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicIndexerAccess", "(Microsoft.CodeAnalysis.Operations.IDynamicIndexerAccessOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicInvocation", "(Microsoft.CodeAnalysis.Operations.IDynamicInvocationOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicInvocation", "(Microsoft.CodeAnalysis.Operations.IDynamicInvocationOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicMemberReference", "(Microsoft.CodeAnalysis.Operations.IDynamicMemberReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicMemberReference", "(Microsoft.CodeAnalysis.Operations.IDynamicMemberReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicObjectCreation", "(Microsoft.CodeAnalysis.Operations.IDynamicObjectCreationOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitDynamicObjectCreation", "(Microsoft.CodeAnalysis.Operations.IDynamicObjectCreationOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitEventAssignment", "(Microsoft.CodeAnalysis.Operations.IEventAssignmentOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitEventReference", "(Microsoft.CodeAnalysis.Operations.IEventReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitExpressionStatement", "(Microsoft.CodeAnalysis.Operations.IExpressionStatementOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitFlowAnonymousFunction", "(Microsoft.CodeAnalysis.FlowAnalysis.IFlowAnonymousFunctionOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitFlowCapture", "(Microsoft.CodeAnalysis.FlowAnalysis.IFlowCaptureOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitFlowCaptureReference", "(Microsoft.CodeAnalysis.FlowAnalysis.IFlowCaptureReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "ReturnValue", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor", True, "VisitImplicitIndexerReference", "(Microsoft.CodeAnalysis.Operations.IImplicitIndexerReferenceOperation,ILLink.RoslynAnalyzer.DataFlow.LocalDataFlowState)", "", "Argument[this]", "Argument[1]", "taint", "df-generated"]
+ - ["ILLink.RoslynAnalyzer.DataFlow", "LocalDataFlowVisitor