') | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) |
| various-concat-obfuscations.js:21:17:21:46 | documen ... h.attrs | various-concat-obfuscations.js:17:24:17:28 | attrs | various-concat-obfuscations.js:18:10:18:105 | '
') [ArrayElement] | various-concat-obfuscations.js:21:4:21:47 | indirec ... .attrs) |
#select
+| aws-db.js:15:31:15:76 | results ... arValue | aws-db.js:15:31:15:37 | results | aws-db.js:15:31:15:76 | results ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:15:31:15:37 | results | user-provided value |
+| aws-db.js:20:31:20:54 | respons ... tring() | aws-db.js:20:31:20:38 | response | aws-db.js:20:31:20:54 | respons ... tring() | Cross-site scripting vulnerability due to $@. | aws-db.js:20:31:20:38 | response | user-provided value |
+| aws-db.js:24:31:24:47 | response2.records | aws-db.js:24:31:24:39 | response2 | aws-db.js:24:31:24:47 | response2.records | Cross-site scripting vulnerability due to $@. | aws-db.js:24:31:24:39 | response2 | user-provided value |
+| aws-db.js:28:31:28:44 | response3.Item | aws-db.js:28:31:28:39 | response3 | aws-db.js:28:31:28:44 | response3.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:28:31:28:39 | response3 | user-provided value |
+| aws-db.js:43:31:43:76 | results ... arValue | aws-db.js:43:31:43:37 | results | aws-db.js:43:31:43:76 | results ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:43:31:43:37 | results | user-provided value |
+| aws-db.js:46:35:46:77 | data.Re ... arValue | aws-db.js:46:35:46:38 | data | aws-db.js:46:35:46:77 | data.Re ... arValue | Cross-site scripting vulnerability due to $@. | aws-db.js:46:35:46:38 | data | user-provided value |
+| aws-db.js:51:31:51:54 | respons ... tring() | aws-db.js:51:31:51:38 | response | aws-db.js:51:31:51:54 | respons ... tring() | Cross-site scripting vulnerability due to $@. | aws-db.js:51:31:51:38 | response | user-provided value |
+| aws-db.js:54:35:54:54 | data.Body.toString() | aws-db.js:54:35:54:38 | data | aws-db.js:54:35:54:54 | data.Body.toString() | Cross-site scripting vulnerability due to $@. | aws-db.js:54:35:54:38 | data | user-provided value |
+| aws-db.js:59:31:59:47 | response1.records | aws-db.js:59:31:59:39 | response1 | aws-db.js:59:31:59:47 | response1.records | Cross-site scripting vulnerability due to $@. | aws-db.js:59:31:59:39 | response1 | user-provided value |
+| aws-db.js:62:35:62:46 | data.records | aws-db.js:62:35:62:38 | data | aws-db.js:62:35:62:46 | data.records | Cross-site scripting vulnerability due to $@. | aws-db.js:62:35:62:38 | data | user-provided value |
+| aws-db.js:66:31:66:53 | respons ... Results | aws-db.js:66:31:66:39 | response2 | aws-db.js:66:31:66:53 | respons ... Results | Cross-site scripting vulnerability due to $@. | aws-db.js:66:31:66:39 | response2 | user-provided value |
+| aws-db.js:69:35:69:52 | data.updateResults | aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | Cross-site scripting vulnerability due to $@. | aws-db.js:69:35:69:38 | data | user-provided value |
+| aws-db.js:74:35:74:43 | data.Item | aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:74:35:74:38 | data | user-provided value |
+| aws-db.js:77:35:77:43 | data.Item | aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:77:35:77:38 | data | user-provided value |
| hana.js:11:37:11:51 | rows[0].comment | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:11:37:11:40 | rows | user-provided value |
| hana.js:16:37:16:51 | rows[0].comment | hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:16:37:16:40 | rows | user-provided value |
| hana.js:19:37:19:51 | rows[0].comment | hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:19:37:19:40 | rows | user-provided value |
diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js
new file mode 100644
index 000000000000..0f345f7172e0
--- /dev/null
+++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws-db.js
@@ -0,0 +1,79 @@
+const { AthenaClient, GetQueryResultsCommand } = require('@aws-sdk/client-athena');
+const { S3Client, GetObjectCommand } = require("@aws-sdk/client-s3");
+const { RDSDataClient, ExecuteStatementCommand } = require("@aws-sdk/client-rds-data");
+const { DynamoDBClient, GetItemCommand } = require("@aws-sdk/client-dynamodb");
+
+
+const express = require('express');
+const bodyParser = require('body-parser');
+const app = express();
+app.use(bodyParser.json());
+
+app.post('/v3/all', async (req, res) => {
+ const client = new AthenaClient({ region: "us-east-1" });
+ const results = await client.send(new GetQueryResultsCommand({ QueryExecutionId }));
+ document.body.innerHTML = results.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test]
+
+ const s3 = new S3Client({ region: "us-east-1" });
+ const command = new GetObjectCommand({ Bucket: bucket, Key: key });
+ const response = await s3.send(command);
+ document.body.innerHTML = response.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test]
+
+ const clientRDS = new RDSDataClient({ region: "us-east-1" });
+ const response2 = await clientRDS.send(new ExecuteStatementCommand(command));
+ document.body.innerHTML = response2.records; // $ Alert[js/xss-additional-sources-dom-test]
+
+ const clientDyamo = new DynamoDBClient({ region: "us-east-1" });
+ const response3 = await clientDyamo.send(new GetItemCommand(command));
+ document.body.innerHTML = response3.Item; // $ Alert[js/xss-additional-sources-dom-test]
+
+});
+
+
+app.post('/v2/all', async (req, res) => {
+ const AWS = require('aws-sdk');
+ const athena = new AWS.Athena();
+ const params = {
+ QueryString: 'SELECT * FROM my_table',
+ ResultConfiguration: { OutputLocation: 's3://bucket/prefix/' }
+ };
+ const { QueryExecutionId } = await athena.startQueryExecution(params).promise();
+
+ const results = await athena.getQueryResults({ QueryExecutionId }).promise();
+ document.body.innerHTML = results.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test]
+
+ athena.getQueryResults({ QueryExecutionId }, (err, data) => {
+ document.body.innerHTML = data.ResultSet.Rows[0].Data[0].VarCharValue; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const s3 = new AWS.S3({ region: "us-east-1" });
+ const response = await s3.getObject({ Bucket: "bucket", Key: "key" }).promise();
+ document.body.innerHTML = response.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test]
+
+ s3.getObject({ Bucket: "bucket", Key: "key" }, (err, data) => {
+ document.body.innerHTML = data.Body.toString(); // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const rdsData = new AWS.RDSDataService({ region: "us-east-1" });
+ const response1 = await rdsData.executeStatement(params).promise();
+ document.body.innerHTML = response1.records; // $ Alert[js/xss-additional-sources-dom-test]
+
+ rdsData.executeStatement(params, function(err, data) {
+ document.body.innerHTML = data.records; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const response2 = await rdsData.batchExecuteStatement(params).promise();
+ document.body.innerHTML = response2.updateResults; // $ Alert[js/xss-additional-sources-dom-test]
+
+ rdsData.batchExecuteStatement(params, function(err, data) {
+ document.body.innerHTML = data.updateResults; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const dynamodb = new AWS.DynamoDB({ region: "us-east-1" });
+ dynamodb.executeStatement(params, (err, data) => {
+ document.body.innerHTML = data.Item; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+ dynamodb.executeStatement(params).promise().then(data => {
+ document.body.innerHTML = data.Item; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+});
From 9beac51586c1f8253b969d0be75905fa2fde19ef Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Tue, 29 Jul 2025 16:50:42 +0200
Subject: [PATCH 118/219] Unified aws-db modeling into singular file
---
javascript/ql/lib/ext/athena.model.yml | 29 -------------
javascript/ql/lib/ext/aws-sdk.model.yml | 49 ++++++++++++++++++++--
javascript/ql/lib/ext/client-s3.model.yml | 28 -------------
javascript/ql/lib/ext/dynamodb.model.yml | 30 -------------
javascript/ql/lib/ext/rds-client.model.yml | 31 --------------
5 files changed, 46 insertions(+), 121 deletions(-)
delete mode 100644 javascript/ql/lib/ext/athena.model.yml
delete mode 100644 javascript/ql/lib/ext/client-s3.model.yml
delete mode 100644 javascript/ql/lib/ext/dynamodb.model.yml
delete mode 100644 javascript/ql/lib/ext/rds-client.model.yml
diff --git a/javascript/ql/lib/ext/athena.model.yml b/javascript/ql/lib/ext/athena.model.yml
deleted file mode 100644
index 225d0926988a..000000000000
--- a/javascript/ql/lib/ext/athena.model.yml
+++ /dev/null
@@ -1,29 +0,0 @@
-extensions:
- - addsTo:
- pack: codeql/javascript-all
- extensible: sinkModel
- data:
- - ["AthenaClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"]
-
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: summaryModel
- data:
- - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: typeModel
- data:
- - ["AthenaClientV3", "@aws-sdk/client-athena", "Member[AthenaClient]"]
- - ["AthenaClientV2", "aws-sdk", "Member[Athena]"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: sourceModel
- data:
- - ["AthenaClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"]
diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml
index eefa87fbe613..d850fec7371c 100644
--- a/javascript/ql/lib/ext/aws-sdk.model.yml
+++ b/javascript/ql/lib/ext/aws-sdk.model.yml
@@ -3,6 +3,49 @@ extensions:
pack: codeql/javascript-all
extensible: sinkModel
data:
- - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"]
- - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"]
- - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"]
+ - ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"]
+ - ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"]
+ - ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"]
+ - ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
+ - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"]
+ - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"]
+ - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"]
+ - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"]
+ - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"]
+ - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"]
+ - addsTo:
+ pack: codeql/javascript-all
+ extensible: summaryModel
+ data:
+ - ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"]
+ - addsTo:
+ pack: codeql/javascript-all
+ extensible: typeModel
+ data:
+ - ["AthenaClientV2", "aws-sdk", "Member[Athena]"]
+ - ["S3ClientV2", "aws-sdk", "Member[S3]"]
+ - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"]
+ - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
+ - addsTo:
+ pack: codeql/javascript-all
+ extensible: sourceModel
+ data:
+ - ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
+ - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"]
+ - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"]
+ - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"]
+ - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"]
diff --git a/javascript/ql/lib/ext/client-s3.model.yml b/javascript/ql/lib/ext/client-s3.model.yml
deleted file mode 100644
index 4deb2d6b7054..000000000000
--- a/javascript/ql/lib/ext/client-s3.model.yml
+++ /dev/null
@@ -1,28 +0,0 @@
-extensions:
- - addsTo:
- pack: codeql/javascript-all
- extensible: sinkModel
- data:
- - ["S3ClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: summaryModel
- data:
- - ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: typeModel
- data:
- - ["S3ClientV3", "@aws-sdk/client-s3", "Member[S3Client]"]
- - ["S3ClientV2", "aws-sdk", "Member[S3]"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: sourceModel
- data:
- - ["S3ClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"]
diff --git a/javascript/ql/lib/ext/dynamodb.model.yml b/javascript/ql/lib/ext/dynamodb.model.yml
deleted file mode 100644
index 0efba4d4bc45..000000000000
--- a/javascript/ql/lib/ext/dynamodb.model.yml
+++ /dev/null
@@ -1,30 +0,0 @@
-extensions:
- - addsTo:
- pack: codeql/javascript-all
- extensible: sinkModel
- data:
- - ["DynamoDBClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"]
- - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: summaryModel
- data:
- - ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"]
- - ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: typeModel
- data:
- - ["DynamoDBClientV3", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
- - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: sourceModel
- data:
- - ["DynamoDBClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"]
diff --git a/javascript/ql/lib/ext/rds-client.model.yml b/javascript/ql/lib/ext/rds-client.model.yml
deleted file mode 100644
index 2535c88a02c8..000000000000
--- a/javascript/ql/lib/ext/rds-client.model.yml
+++ /dev/null
@@ -1,31 +0,0 @@
-extensions:
- - addsTo:
- pack: codeql/javascript-all
- extensible: sinkModel
- data:
- - ["RDSDataClientV3", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"]
- - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: summaryModel
- data:
- - ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"]
- - ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"]
- - ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: typeModel
- data:
- - ["RDSDataClientV3", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
- - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"]
-
- - addsTo:
- pack: codeql/javascript-all
- extensible: sourceModel
- data:
- - ["RDSDataClientV3", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"]
From 801a34f6a1d3a34cdc512502675fbd3716a6b019 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Thu, 4 Sep 2025 11:05:42 +0200
Subject: [PATCH 119/219] Moved typeModel at the start of the file
---
javascript/ql/lib/ext/aws-sdk.model.yml | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml
index d850fec7371c..17164c18298d 100644
--- a/javascript/ql/lib/ext/aws-sdk.model.yml
+++ b/javascript/ql/lib/ext/aws-sdk.model.yml
@@ -1,4 +1,16 @@
extensions:
+ - addsTo:
+ pack: codeql/javascript-all
+ extensible: typeModel
+ data:
+ - ["AthenaClientV2", "aws-sdk", "Member[Athena]"]
+ - ["S3ClientV2", "aws-sdk", "Member[S3]"]
+ - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"]
+ - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
+ - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
- addsTo:
pack: codeql/javascript-all
extensible: sinkModel
@@ -24,18 +36,6 @@ extensions:
- ["@aws-sdk/client-rds-data", "Member[ExecuteSqlCommand]", "Argument[0].Member[sqlStatements]", "ReturnValue", "taint"]
- ["@aws-sdk/client-dynamodb", "Member[ExecuteStatementCommand]", "Argument[0].Member[Statement]", "ReturnValue", "taint"]
- ["@aws-sdk/client-dynamodb", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[Statements].ArrayElement.Member[Statement]", "ReturnValue", "taint"]
- - addsTo:
- pack: codeql/javascript-all
- extensible: typeModel
- data:
- - ["AthenaClientV2", "aws-sdk", "Member[Athena]"]
- - ["S3ClientV2", "aws-sdk", "Member[S3]"]
- - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"]
- - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"]
- - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"]
- - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"]
- - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
- - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
- addsTo:
pack: codeql/javascript-all
extensible: sourceModel
From b89e70b5a0e46ab4abe7f21ad653edb37422de36 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Thu, 4 Sep 2025 12:07:28 +0200
Subject: [PATCH 120/219] Added test cases for aws sources
---
.../XssWithAdditionalSources.expected | 96 ++++++++++++++
.../Security/CWE-079/DomBasedXss/aws.js | 118 ++++++++++++++++++
2 files changed, 214 insertions(+)
create mode 100644 javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js
diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected
index 3393efc34499..f8781e6741b9 100644
--- a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/XssWithAdditionalSources.expected
@@ -60,6 +60,54 @@ nodes
| aws-db.js:74:35:74:43 | data.Item | semmle.label | data.Item |
| aws-db.js:77:35:77:38 | data | semmle.label | data |
| aws-db.js:77:35:77:43 | data.Item | semmle.label | data.Item |
+| aws.js:14:31:14:36 | result | semmle.label | result |
+| aws.js:14:31:14:44 | result.comment | semmle.label | result.comment |
+| aws.js:18:31:18:37 | result2 | semmle.label | result2 |
+| aws.js:18:31:18:45 | result2.comment | semmle.label | result2.comment |
+| aws.js:22:31:22:37 | result3 | semmle.label | result3 |
+| aws.js:22:31:22:45 | result3.comment | semmle.label | result3.comment |
+| aws.js:26:31:26:37 | result4 | semmle.label | result4 |
+| aws.js:26:31:26:45 | result4.comment | semmle.label | result4.comment |
+| aws.js:34:31:34:34 | data | semmle.label | data |
+| aws.js:34:31:34:42 | data.comment | semmle.label | data.comment |
+| aws.js:37:35:37:38 | data | semmle.label | data |
+| aws.js:37:35:37:46 | data.comment | semmle.label | data.comment |
+| aws.js:47:31:47:34 | data | semmle.label | data |
+| aws.js:47:31:47:42 | data.comment | semmle.label | data.comment |
+| aws.js:50:35:50:38 | data | semmle.label | data |
+| aws.js:50:35:50:46 | data.comment | semmle.label | data.comment |
+| aws.js:59:31:59:34 | data | semmle.label | data |
+| aws.js:59:31:59:42 | data.comment | semmle.label | data.comment |
+| aws.js:62:35:62:38 | data | semmle.label | data |
+| aws.js:62:35:62:46 | data.comment | semmle.label | data.comment |
+| aws.js:66:31:66:35 | data2 | semmle.label | data2 |
+| aws.js:66:31:66:43 | data2.comment | semmle.label | data2.comment |
+| aws.js:69:35:69:38 | data | semmle.label | data |
+| aws.js:69:35:69:46 | data.comment | semmle.label | data.comment |
+| aws.js:78:31:78:34 | data | semmle.label | data |
+| aws.js:78:31:78:42 | data.comment | semmle.label | data.comment |
+| aws.js:81:35:81:38 | data | semmle.label | data |
+| aws.js:81:35:81:46 | data.comment | semmle.label | data.comment |
+| aws.js:85:31:85:35 | data2 | semmle.label | data2 |
+| aws.js:85:31:85:43 | data2.comment | semmle.label | data2.comment |
+| aws.js:88:35:88:38 | data | semmle.label | data |
+| aws.js:88:35:88:46 | data.comment | semmle.label | data.comment |
+| aws.js:92:31:92:35 | data3 | semmle.label | data3 |
+| aws.js:92:31:92:43 | data3.comment | semmle.label | data3.comment |
+| aws.js:95:35:95:38 | data | semmle.label | data |
+| aws.js:95:35:95:46 | data.comment | semmle.label | data.comment |
+| aws.js:99:31:99:35 | data4 | semmle.label | data4 |
+| aws.js:99:31:99:43 | data4.comment | semmle.label | data4.comment |
+| aws.js:102:35:102:38 | data | semmle.label | data |
+| aws.js:102:35:102:46 | data.comment | semmle.label | data.comment |
+| aws.js:106:31:106:35 | data5 | semmle.label | data5 |
+| aws.js:106:31:106:43 | data5.comment | semmle.label | data5.comment |
+| aws.js:109:35:109:38 | data | semmle.label | data |
+| aws.js:109:35:109:46 | data.comment | semmle.label | data.comment |
+| aws.js:113:31:113:35 | data6 | semmle.label | data6 |
+| aws.js:113:31:113:43 | data6.comment | semmle.label | data6.comment |
+| aws.js:116:35:116:38 | data | semmle.label | data |
+| aws.js:116:35:116:46 | data.comment | semmle.label | data.comment |
| classnames.js:7:31:7:84 | `` | semmle.label | `` |
| classnames.js:7:47:7:69 | classNa ... w.name) | semmle.label | classNa ... w.name) |
| classnames.js:7:58:7:68 | window.name | semmle.label | window.name |
@@ -766,6 +814,30 @@ edges
| aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | provenance | |
| aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | provenance | |
| aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | provenance | |
+| aws.js:14:31:14:36 | result | aws.js:14:31:14:44 | result.comment | provenance | |
+| aws.js:18:31:18:37 | result2 | aws.js:18:31:18:45 | result2.comment | provenance | |
+| aws.js:22:31:22:37 | result3 | aws.js:22:31:22:45 | result3.comment | provenance | |
+| aws.js:26:31:26:37 | result4 | aws.js:26:31:26:45 | result4.comment | provenance | |
+| aws.js:34:31:34:34 | data | aws.js:34:31:34:42 | data.comment | provenance | |
+| aws.js:37:35:37:38 | data | aws.js:37:35:37:46 | data.comment | provenance | |
+| aws.js:47:31:47:34 | data | aws.js:47:31:47:42 | data.comment | provenance | |
+| aws.js:50:35:50:38 | data | aws.js:50:35:50:46 | data.comment | provenance | |
+| aws.js:59:31:59:34 | data | aws.js:59:31:59:42 | data.comment | provenance | |
+| aws.js:62:35:62:38 | data | aws.js:62:35:62:46 | data.comment | provenance | |
+| aws.js:66:31:66:35 | data2 | aws.js:66:31:66:43 | data2.comment | provenance | |
+| aws.js:69:35:69:38 | data | aws.js:69:35:69:46 | data.comment | provenance | |
+| aws.js:78:31:78:34 | data | aws.js:78:31:78:42 | data.comment | provenance | |
+| aws.js:81:35:81:38 | data | aws.js:81:35:81:46 | data.comment | provenance | |
+| aws.js:85:31:85:35 | data2 | aws.js:85:31:85:43 | data2.comment | provenance | |
+| aws.js:88:35:88:38 | data | aws.js:88:35:88:46 | data.comment | provenance | |
+| aws.js:92:31:92:35 | data3 | aws.js:92:31:92:43 | data3.comment | provenance | |
+| aws.js:95:35:95:38 | data | aws.js:95:35:95:46 | data.comment | provenance | |
+| aws.js:99:31:99:35 | data4 | aws.js:99:31:99:43 | data4.comment | provenance | |
+| aws.js:102:35:102:38 | data | aws.js:102:35:102:46 | data.comment | provenance | |
+| aws.js:106:31:106:35 | data5 | aws.js:106:31:106:43 | data5.comment | provenance | |
+| aws.js:109:35:109:38 | data | aws.js:109:35:109:46 | data.comment | provenance | |
+| aws.js:113:31:113:35 | data6 | aws.js:113:31:113:43 | data6.comment | provenance | |
+| aws.js:116:35:116:38 | data | aws.js:116:35:116:46 | data.comment | provenance | |
| classnames.js:7:47:7:69 | classNa ... w.name) | classnames.js:7:31:7:84 | `` | provenance | |
| classnames.js:7:58:7:68 | window.name | classnames.js:7:47:7:69 | classNa ... w.name) | provenance | |
| classnames.js:8:47:8:70 | classNa ... w.name) | classnames.js:8:31:8:85 | `` | provenance | |
@@ -1375,6 +1447,30 @@ subpaths
| aws-db.js:69:35:69:52 | data.updateResults | aws-db.js:69:35:69:38 | data | aws-db.js:69:35:69:52 | data.updateResults | Cross-site scripting vulnerability due to $@. | aws-db.js:69:35:69:38 | data | user-provided value |
| aws-db.js:74:35:74:43 | data.Item | aws-db.js:74:35:74:38 | data | aws-db.js:74:35:74:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:74:35:74:38 | data | user-provided value |
| aws-db.js:77:35:77:43 | data.Item | aws-db.js:77:35:77:38 | data | aws-db.js:77:35:77:43 | data.Item | Cross-site scripting vulnerability due to $@. | aws-db.js:77:35:77:38 | data | user-provided value |
+| aws.js:14:31:14:44 | result.comment | aws.js:14:31:14:36 | result | aws.js:14:31:14:44 | result.comment | Cross-site scripting vulnerability due to $@. | aws.js:14:31:14:36 | result | user-provided value |
+| aws.js:18:31:18:45 | result2.comment | aws.js:18:31:18:37 | result2 | aws.js:18:31:18:45 | result2.comment | Cross-site scripting vulnerability due to $@. | aws.js:18:31:18:37 | result2 | user-provided value |
+| aws.js:22:31:22:45 | result3.comment | aws.js:22:31:22:37 | result3 | aws.js:22:31:22:45 | result3.comment | Cross-site scripting vulnerability due to $@. | aws.js:22:31:22:37 | result3 | user-provided value |
+| aws.js:26:31:26:45 | result4.comment | aws.js:26:31:26:37 | result4 | aws.js:26:31:26:45 | result4.comment | Cross-site scripting vulnerability due to $@. | aws.js:26:31:26:37 | result4 | user-provided value |
+| aws.js:34:31:34:42 | data.comment | aws.js:34:31:34:34 | data | aws.js:34:31:34:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:34:31:34:34 | data | user-provided value |
+| aws.js:37:35:37:46 | data.comment | aws.js:37:35:37:38 | data | aws.js:37:35:37:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:37:35:37:38 | data | user-provided value |
+| aws.js:47:31:47:42 | data.comment | aws.js:47:31:47:34 | data | aws.js:47:31:47:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:47:31:47:34 | data | user-provided value |
+| aws.js:50:35:50:46 | data.comment | aws.js:50:35:50:38 | data | aws.js:50:35:50:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:50:35:50:38 | data | user-provided value |
+| aws.js:59:31:59:42 | data.comment | aws.js:59:31:59:34 | data | aws.js:59:31:59:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:59:31:59:34 | data | user-provided value |
+| aws.js:62:35:62:46 | data.comment | aws.js:62:35:62:38 | data | aws.js:62:35:62:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:62:35:62:38 | data | user-provided value |
+| aws.js:66:31:66:43 | data2.comment | aws.js:66:31:66:35 | data2 | aws.js:66:31:66:43 | data2.comment | Cross-site scripting vulnerability due to $@. | aws.js:66:31:66:35 | data2 | user-provided value |
+| aws.js:69:35:69:46 | data.comment | aws.js:69:35:69:38 | data | aws.js:69:35:69:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:69:35:69:38 | data | user-provided value |
+| aws.js:78:31:78:42 | data.comment | aws.js:78:31:78:34 | data | aws.js:78:31:78:42 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:78:31:78:34 | data | user-provided value |
+| aws.js:81:35:81:46 | data.comment | aws.js:81:35:81:38 | data | aws.js:81:35:81:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:81:35:81:38 | data | user-provided value |
+| aws.js:85:31:85:43 | data2.comment | aws.js:85:31:85:35 | data2 | aws.js:85:31:85:43 | data2.comment | Cross-site scripting vulnerability due to $@. | aws.js:85:31:85:35 | data2 | user-provided value |
+| aws.js:88:35:88:46 | data.comment | aws.js:88:35:88:38 | data | aws.js:88:35:88:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:88:35:88:38 | data | user-provided value |
+| aws.js:92:31:92:43 | data3.comment | aws.js:92:31:92:35 | data3 | aws.js:92:31:92:43 | data3.comment | Cross-site scripting vulnerability due to $@. | aws.js:92:31:92:35 | data3 | user-provided value |
+| aws.js:95:35:95:46 | data.comment | aws.js:95:35:95:38 | data | aws.js:95:35:95:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:95:35:95:38 | data | user-provided value |
+| aws.js:99:31:99:43 | data4.comment | aws.js:99:31:99:35 | data4 | aws.js:99:31:99:43 | data4.comment | Cross-site scripting vulnerability due to $@. | aws.js:99:31:99:35 | data4 | user-provided value |
+| aws.js:102:35:102:46 | data.comment | aws.js:102:35:102:38 | data | aws.js:102:35:102:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:102:35:102:38 | data | user-provided value |
+| aws.js:106:31:106:43 | data5.comment | aws.js:106:31:106:35 | data5 | aws.js:106:31:106:43 | data5.comment | Cross-site scripting vulnerability due to $@. | aws.js:106:31:106:35 | data5 | user-provided value |
+| aws.js:109:35:109:46 | data.comment | aws.js:109:35:109:38 | data | aws.js:109:35:109:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:109:35:109:38 | data | user-provided value |
+| aws.js:113:31:113:43 | data6.comment | aws.js:113:31:113:35 | data6 | aws.js:113:31:113:43 | data6.comment | Cross-site scripting vulnerability due to $@. | aws.js:113:31:113:35 | data6 | user-provided value |
+| aws.js:116:35:116:46 | data.comment | aws.js:116:35:116:38 | data | aws.js:116:35:116:46 | data.comment | Cross-site scripting vulnerability due to $@. | aws.js:116:35:116:38 | data | user-provided value |
| hana.js:11:37:11:51 | rows[0].comment | hana.js:11:37:11:40 | rows | hana.js:11:37:11:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:11:37:11:40 | rows | user-provided value |
| hana.js:16:37:16:51 | rows[0].comment | hana.js:16:37:16:40 | rows | hana.js:16:37:16:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:16:37:16:40 | rows | user-provided value |
| hana.js:19:37:19:51 | rows[0].comment | hana.js:19:37:19:40 | rows | hana.js:19:37:19:51 | rows[0].comment | Cross-site scripting vulnerability due to $@. | hana.js:19:37:19:40 | rows | user-provided value |
diff --git a/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js
new file mode 100644
index 000000000000..103689c078f2
--- /dev/null
+++ b/javascript/ql/test/query-tests/Security/CWE-079/DomBasedXss/aws.js
@@ -0,0 +1,118 @@
+const AWS = require('aws-sdk');
+const { AthenaClient } = require('@aws-sdk/client-athena');
+const { S3Client } = require('@aws-sdk/client-s3');
+const { RDSDataClient } = require('@aws-sdk/client-rds-data');
+const { DynamoDBClient } = require('@aws-sdk/client-dynamodb');
+const express = require('express');
+
+const app = express();
+
+// AWS V3 Common tests
+app.post('/aws-v3-common', async (req, res) => {
+ const athenaClient = new AthenaClient({});
+ const result = await athenaClient.send({});
+ document.body.innerHTML = result.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ const s3Client = new S3Client({});
+ const result2 = await s3Client.send({});
+ document.body.innerHTML = result2.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ const rdsDataClient = new RDSDataClient({});
+ const result3 = await rdsDataClient.send({});
+ document.body.innerHTML = result3.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ const dynamoClient = new DynamoDBClient({});
+ const result4 = await dynamoClient.send({});
+ document.body.innerHTML = result4.comment; // $ Alert[js/xss-additional-sources-dom-test]
+});
+
+// Athena Client V2 tests
+app.post('/athena-v2', async (req, res) => {
+ const athena = new AWS.Athena();
+
+ const data = await athena.getQueryResults({}).promise();
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ athena.getQueryResults({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+});
+
+// S3 Client V2 tests
+app.post('/s3-v2', async (req, res) => {
+ const s3 = new AWS.S3();
+
+
+ const data = await s3.getObject({}).promise();
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ s3.getObject({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+});
+
+// RDS Data Client V2 tests
+app.post('/rds-data-v2', async (req, res) => {
+ const rdsData = new AWS.RDSDataService();
+
+ const data = await rdsData.executeStatement({}).promise();
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ rdsData.executeStatement({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data2 = await rdsData.batchExecuteStatement({}).promise();
+ document.body.innerHTML = data2.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ rdsData.batchExecuteStatement({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+});
+
+// DynamoDB Client V2 tests
+app.post('/dynamodb-v2', async (req, res) => {
+ const dynamodb = new AWS.DynamoDB();
+
+ const data = await dynamodb.executeStatement({}).promise();
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.executeStatement({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data2 = await dynamodb.batchExecuteStatement({}).promise();
+ document.body.innerHTML = data2.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.batchExecuteStatement({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data3 = await dynamodb.query({}).promise();
+ document.body.innerHTML = data3.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.query({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data4 = await dynamodb.scan({}).promise();
+ document.body.innerHTML = data4.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.scan({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data5 = await dynamodb.getItem({}).promise();
+ document.body.innerHTML = data5.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.getItem({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+
+ const data6 = await dynamodb.batchGetItem({}).promise();
+ document.body.innerHTML = data6.comment; // $ Alert[js/xss-additional-sources-dom-test]
+
+ dynamodb.batchGetItem({}, function(err, data) {
+ document.body.innerHTML = data.comment; // $ Alert[js/xss-additional-sources-dom-test]
+ });
+});
From 872b6d8bee6cd3b456539f48fb889a96e08fe5cc Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Thu, 4 Sep 2025 12:28:55 +0200
Subject: [PATCH 121/219] Added test case for `CreatePreparedStatementCommand`
---
.../Security/CWE-089/untyped/athena.js | 17 +++++++++++++++--
1 file changed, 15 insertions(+), 2 deletions(-)
diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
index 2b661d5d4aea..0c6e5e1d8a74 100644
--- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
+++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
@@ -1,4 +1,4 @@
-const { AthenaClient, StartQueryExecutionCommand, CreateNamedQueryCommand, UpdateNamedQueryCommand } = require("@aws-sdk/client-athena");
+const { AthenaClient, StartQueryExecutionCommand, CreateNamedQueryCommand, UpdateNamedQueryCommand, CreatePreparedStatementCommand } = require("@aws-sdk/client-athena");
const AWS = require('aws-sdk');
const express = require('express');
const bodyParser = require('body-parser');
@@ -10,7 +10,7 @@ app.post('/v3/athena/all', async (req, res) => {
const client = new AthenaClient({ region: "us-east-1" });
- const params1 = {
+ const params1 = {
QueryString: "SQL" + userQuery,
QueryExecutionContext: { Database: "default" },
ResultConfiguration: { OutputLocation: "s3://my-results/" }
@@ -70,3 +70,16 @@ app.post('/v2/athena/all', async (req, res) => {
res.end();
});
+
+app.post('/dynamodb-v3', async (req, res) => {
+ const userQueryStatement = req.body.query; // $ MISSING: Source
+ const client = new AthenaClient({ region: "us-east-1" });
+ const input = {
+ StatementName: "STRING_VALUE",
+ WorkGroup: "STRING_VALUE",
+ QueryStatement: userQueryStatement,
+ Description: "STRING_VALUE",
+ };
+ const command = new CreatePreparedStatementCommand(input);
+ await client.send(command); // $ MISSING: Alert
+});
From 9ca4773227a2ade0f2148b47574869a87f6d6e65 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Thu, 4 Sep 2025 12:31:08 +0200
Subject: [PATCH 122/219] Added modeling for `CreatePreparedStatementCommand`
---
javascript/ql/lib/ext/aws-sdk.model.yml | 1 +
.../CWE-089/untyped/SqlInjection.expected | 24 ++++++++++++++++---
.../Security/CWE-089/untyped/athena.js | 4 ++--
3 files changed, 24 insertions(+), 5 deletions(-)
diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml
index 17164c18298d..dfda93d2d3f8 100644
--- a/javascript/ql/lib/ext/aws-sdk.model.yml
+++ b/javascript/ql/lib/ext/aws-sdk.model.yml
@@ -30,6 +30,7 @@ extensions:
extensible: summaryModel
data:
- ["@aws-sdk/client-athena", "Member[StartQueryExecutionCommand,CreateNamedQueryCommand,UpdateNamedQueryCommand]", "Argument[0].Member[QueryString]", "ReturnValue", "taint"]
+ - ["@aws-sdk/client-athena", "Member[CreatePreparedStatementCommand]", "Argument[0].Member[QueryStatement]", "ReturnValue", "taint"]
- ["@aws-sdk/client-s3", "Member[SelectObjectContentCommand]", "Argument[0].Member[Expression]", "ReturnValue", "taint"]
- ["@aws-sdk/client-rds-data", "Member[ExecuteStatementCommand,BatchExecuteStatementCommand]", "Argument[0].Member[sql]", "ReturnValue", "taint"]
- ["@aws-sdk/client-rds-data", "Member[BatchExecuteStatementCommand]", "Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "ReturnValue", "taint"]
diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
index 623ea18de74c..d6b000b03c25 100644
--- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
@@ -5,6 +5,7 @@
| athena.js:48:22:48:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:48:22:48:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value |
| athena.js:57:22:57:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:57:22:57:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value |
| athena.js:66:22:66:30 | userQuery | athena.js:43:23:43:30 | req.body | athena.js:66:22:66:30 | userQuery | This query string depends on a $@. | athena.js:43:23:43:30 | req.body | user-provided value |
+| athena.js:84:23:84:29 | command | athena.js:75:32:75:39 | req.body | athena.js:84:23:84:29 | command | This query string depends on a $@. | athena.js:75:32:75:39 | req.body | user-provided value |
| clients3.js:18:23:18:60 | new Sel ... params) | clients3.js:10:26:10:33 | req.body | clients3.js:18:23:18:60 | new Sel ... params) | This query string depends on a $@. | clients3.js:10:26:10:33 | req.body | user-provided value |
| clients3.js:29:21:29:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:29:21:29:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value |
| clients3.js:38:21:38:68 | "SELECT ... usInput | clients3.js:23:26:23:33 | req.body | clients3.js:38:21:38:68 | "SELECT ... usInput | This query string depends on a $@. | clients3.js:23:26:23:33 | req.body | user-provided value |
@@ -161,8 +162,8 @@ edges
| athena.js:9:11:9:19 | userQuery | athena.js:33:22:33:30 | userQuery | provenance | |
| athena.js:9:23:9:30 | req.body | athena.js:9:11:9:19 | userQuery | provenance | |
| athena.js:13:11:13:17 | params1 [QueryString] | athena.js:18:46:18:52 | params1 [QueryString] | provenance | |
-| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | athena.js:13:11:13:17 | params1 [QueryString] | provenance | |
-| athena.js:14:22:14:38 | "SQL" + userQuery | athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | provenance | |
+| athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | athena.js:13:11:13:17 | params1 [QueryString] | provenance | |
+| athena.js:14:22:14:38 | "SQL" + userQuery | athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | provenance | |
| athena.js:14:30:14:38 | userQuery | athena.js:14:22:14:38 | "SQL" + userQuery | provenance | |
| athena.js:18:11:18:11 | p | athena.js:19:23:19:23 | p | provenance | |
| athena.js:18:15:18:53 | new Sta ... arams1) | athena.js:18:11:18:11 | p | provenance | |
@@ -179,6 +180,14 @@ edges
| athena.js:43:11:43:19 | userQuery | athena.js:57:22:57:30 | userQuery | provenance | |
| athena.js:43:11:43:19 | userQuery | athena.js:66:22:66:30 | userQuery | provenance | |
| athena.js:43:23:43:30 | req.body | athena.js:43:11:43:19 | userQuery | provenance | |
+| athena.js:75:11:75:28 | userQueryStatement | athena.js:80:25:80:42 | userQueryStatement | provenance | |
+| athena.js:75:32:75:39 | req.body | athena.js:75:11:75:28 | userQueryStatement | provenance | |
+| athena.js:77:11:77:15 | input [QueryStatement] | athena.js:83:56:83:60 | input [QueryStatement] | provenance | |
+| athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | athena.js:77:11:77:15 | input [QueryStatement] | provenance | |
+| athena.js:80:25:80:42 | userQueryStatement | athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | provenance | |
+| athena.js:83:11:83:17 | command | athena.js:84:23:84:29 | command | provenance | |
+| athena.js:83:21:83:61 | new Cre ... (input) | athena.js:83:11:83:17 | command | provenance | |
+| athena.js:83:56:83:60 | input [QueryStatement] | athena.js:83:21:83:61 | new Cre ... (input) | provenance | |
| clients3.js:10:9:10:22 | maliciousInput | clients3.js:16:55:16:68 | maliciousInput | provenance | |
| clients3.js:10:26:10:33 | req.body | clients3.js:10:9:10:22 | maliciousInput | provenance | |
| clients3.js:12:11:12:16 | params [Expression] | clients3.js:18:54:18:59 | params [Expression] | provenance | |
@@ -615,7 +624,7 @@ nodes
| athena.js:9:11:9:19 | userQuery | semmle.label | userQuery |
| athena.js:9:23:9:30 | req.body | semmle.label | req.body |
| athena.js:13:11:13:17 | params1 [QueryString] | semmle.label | params1 [QueryString] |
-| athena.js:13:21:17:5 | {\\n ... }\\n } [QueryString] | semmle.label | {\\n ... }\\n } [QueryString] |
+| athena.js:13:21:17:5 | { \\n ... }\\n } [QueryString] | semmle.label | { \\n ... }\\n } [QueryString] |
| athena.js:14:22:14:38 | "SQL" + userQuery | semmle.label | "SQL" + userQuery |
| athena.js:14:30:14:38 | userQuery | semmle.label | userQuery |
| athena.js:18:11:18:11 | p | semmle.label | p |
@@ -637,6 +646,15 @@ nodes
| athena.js:48:22:48:30 | userQuery | semmle.label | userQuery |
| athena.js:57:22:57:30 | userQuery | semmle.label | userQuery |
| athena.js:66:22:66:30 | userQuery | semmle.label | userQuery |
+| athena.js:75:11:75:28 | userQueryStatement | semmle.label | userQueryStatement |
+| athena.js:75:32:75:39 | req.body | semmle.label | req.body |
+| athena.js:77:11:77:15 | input [QueryStatement] | semmle.label | input [QueryStatement] |
+| athena.js:77:19:82:5 | {\\n ... ,\\n } [QueryStatement] | semmle.label | {\\n ... ,\\n } [QueryStatement] |
+| athena.js:80:25:80:42 | userQueryStatement | semmle.label | userQueryStatement |
+| athena.js:83:11:83:17 | command | semmle.label | command |
+| athena.js:83:21:83:61 | new Cre ... (input) | semmle.label | new Cre ... (input) |
+| athena.js:83:56:83:60 | input [QueryStatement] | semmle.label | input [QueryStatement] |
+| athena.js:84:23:84:29 | command | semmle.label | command |
| clients3.js:10:9:10:22 | maliciousInput | semmle.label | maliciousInput |
| clients3.js:10:26:10:33 | req.body | semmle.label | req.body |
| clients3.js:12:11:12:16 | params [Expression] | semmle.label | params [Expression] |
diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
index 0c6e5e1d8a74..a671fdc53567 100644
--- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
+++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/athena.js
@@ -72,7 +72,7 @@ app.post('/v2/athena/all', async (req, res) => {
});
app.post('/dynamodb-v3', async (req, res) => {
- const userQueryStatement = req.body.query; // $ MISSING: Source
+ const userQueryStatement = req.body.query; // $ Source
const client = new AthenaClient({ region: "us-east-1" });
const input = {
StatementName: "STRING_VALUE",
@@ -81,5 +81,5 @@ app.post('/dynamodb-v3', async (req, res) => {
Description: "STRING_VALUE",
};
const command = new CreatePreparedStatementCommand(input);
- await client.send(command); // $ MISSING: Alert
+ await client.send(command); // $ Alert
});
From 10f3a83fcb1df4652355b1d0f06db3e06694e6f9 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Tue, 16 Sep 2025 14:50:49 +0200
Subject: [PATCH 123/219] Fixed model type names
Co-authored-by: asgerf
---
javascript/ql/lib/ext/aws-sdk.model.yml | 36 ++++++++++++-------------
1 file changed, 18 insertions(+), 18 deletions(-)
diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml
index dfda93d2d3f8..0598669006cf 100644
--- a/javascript/ql/lib/ext/aws-sdk.model.yml
+++ b/javascript/ql/lib/ext/aws-sdk.model.yml
@@ -3,10 +3,10 @@ extensions:
pack: codeql/javascript-all
extensible: typeModel
data:
- - ["AthenaClientV2", "aws-sdk", "Member[Athena]"]
- - ["S3ClientV2", "aws-sdk", "Member[S3]"]
- - ["RDSDataClientV2", "aws-sdk", "Member[RDSDataService]"]
- - ["DynamoDBClientV2", "aws-sdk", "Member[DynamoDB]"]
+ - ["aws-sdk.Athena", "aws-sdk", "Member[Athena]"]
+ - ["aws-sdk.S3", "aws-sdk", "Member[S3]"]
+ - ["aws-sdk.RDSDataService", "aws-sdk", "Member[RDSDataService]"]
+ - ["aws-sdk.DynamoDB", "aws-sdk", "Member[DynamoDB]"]
- ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"]
- ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"]
- ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
@@ -19,12 +19,12 @@ extensions:
- ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"]
- ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"]
- ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- - ["AthenaClientV2", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"]
- - ["S3ClientV2", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"]
- - ["RDSDataClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"]
- - ["DynamoDBClientV2", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"]
+ - ["aws-sdk.Athena", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"]
+ - ["aws-sdk.S3", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"]
+ - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"]
+ - ["aws-sdk.RDSDataService", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[parameterSets].ArrayElement.Member[sql]", "sql-injection"]
+ - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement].Argument[0].Member[Statement]", "sql-injection"]
+ - ["aws-sdk.DynamoDB", "ReturnValue.Member[batchExecuteStatement].Argument[0].Member[Statements].ArrayElement.Member[Statement]", "sql-injection"]
- addsTo:
pack: codeql/javascript-all
extensible: summaryModel
@@ -42,11 +42,11 @@ extensions:
extensible: sourceModel
data:
- ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["AthenaClientV2", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"]
- - ["S3ClientV2", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["S3ClientV2", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["RDSDataClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- - ["DynamoDBClientV2", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"]
+ - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"]
+ - ["aws-sdk.S3", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["aws-sdk.S3", "ReturnValue.Member[getObject].Argument[1].Parameter[1]", "database-access-result"]
+ - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[1].Parameter[1]", "database-access-result"]
+ - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
+ - ["aws-sdk.DynamoDB", "ReturnValue.Member[executeStatement,batchExecuteStatement,query,scan,getItem,batchGetItem].Argument[1].Parameter[1]", "database-access-result"]
From 4df8db0d7e2df76d50d9a97b6fe0dc800a87e1eb Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Tue, 16 Sep 2025 14:51:53 +0200
Subject: [PATCH 124/219] Renamed `AWS-V3-Common` to `@aws-sdk/client.Client`
---
javascript/ql/lib/ext/aws-sdk.model.yml | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/javascript/ql/lib/ext/aws-sdk.model.yml b/javascript/ql/lib/ext/aws-sdk.model.yml
index 0598669006cf..40fa4b8b703a 100644
--- a/javascript/ql/lib/ext/aws-sdk.model.yml
+++ b/javascript/ql/lib/ext/aws-sdk.model.yml
@@ -7,10 +7,10 @@ extensions:
- ["aws-sdk.S3", "aws-sdk", "Member[S3]"]
- ["aws-sdk.RDSDataService", "aws-sdk", "Member[RDSDataService]"]
- ["aws-sdk.DynamoDB", "aws-sdk", "Member[DynamoDB]"]
- - ["AWS-V3-Common", "@aws-sdk/client-athena", "Member[AthenaClient]"]
- - ["AWS-V3-Common", "@aws-sdk/client-s3", "Member[S3Client]"]
- - ["AWS-V3-Common", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
- - ["AWS-V3-Common", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
+ - ["@aws-sdk/client.Client", "@aws-sdk/client-athena", "Member[AthenaClient]"]
+ - ["@aws-sdk/client.Client", "@aws-sdk/client-s3", "Member[S3Client]"]
+ - ["@aws-sdk/client.Client", "@aws-sdk/client-dynamodb", "Member[DynamoDBClient,DynamoDB]"]
+ - ["@aws-sdk/client.Client", "@aws-sdk/client-rds-data", "Member[RDSDataClient]"]
- addsTo:
pack: codeql/javascript-all
extensible: sinkModel
@@ -18,7 +18,7 @@ extensions:
- ["aws-sdk", "AnyMember.Argument[0].Member[secretAccessKey,accessKeyId]", "credentials-key"]
- ["aws-sdk", "AnyMember.Member[secretAccessKey,accessKeyId]", "credentials-key"]
- ["aws-sdk", "Member[Credentials].Argument[0,1]", "credentials-key"]
- - ["AWS-V3-Common", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
+ - ["@aws-sdk/client.Client", "ReturnValue.Member[send].Argument[0]", "sql-injection"]
- ["aws-sdk.Athena", "ReturnValue.Member[startQueryExecution,createNamedQuery,updateNamedQuery].Argument[0].Member[QueryString]", "sql-injection"]
- ["aws-sdk.S3", "ReturnValue.Member[selectObjectContent].Argument[0].Member[Expression]", "sql-injection"]
- ["aws-sdk.RDSDataService", "ReturnValue.Member[executeStatement,batchExecuteStatement].Argument[0].Member[sql]", "sql-injection"]
@@ -41,7 +41,7 @@ extensions:
pack: codeql/javascript-all
extensible: sourceModel
data:
- - ["AWS-V3-Common", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
+ - ["@aws-sdk/client.Client", "ReturnValue.Member[send].ReturnValue.Awaited", "database-access-result"]
- ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
- ["aws-sdk.Athena", "ReturnValue.Member[getQueryResults].Argument[1].Parameter[1]", "database-access-result"]
- ["aws-sdk.S3", "ReturnValue.Member[getObject].ReturnValue.Member[promise].ReturnValue.Awaited", "database-access-result"]
From ca667b51319a86d7e83477cb4d5caf9c1309e592 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 10:24:45 +0200
Subject: [PATCH 125/219] JS: fix test expectations from rebasing
---
.../CWE-089/untyped/SqlInjection.expected | 32 +++++++++----------
1 file changed, 16 insertions(+), 16 deletions(-)
diff --git a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
index d6b000b03c25..f28fb93238d9 100644
--- a/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-089/untyped/SqlInjection.expected
@@ -576,21 +576,21 @@ edges
| pg-promise.js:22:11:22:15 | query | pg-promise.js:60:20:60:24 | query | provenance | |
| pg-promise.js:22:11:22:15 | query | pg-promise.js:63:23:63:27 | query | provenance | |
| pg-promise.js:22:11:22:15 | query | pg-promise.js:64:16:64:20 | query | provenance | |
-| rds-client.js:8:11:8:36 | userQuery | rds-client.js:17:14:17:22 | userQuery | provenance | |
-| rds-client.js:8:11:8:36 | userQuery | rds-client.js:33:24:33:32 | userQuery | provenance | |
-| rds-client.js:8:23:8:30 | req.body | rds-client.js:8:11:8:36 | userQuery | provenance | |
-| rds-client.js:13:11:18:5 | params1 [sql] | rds-client.js:19:51:19:57 | params1 [sql] | provenance | |
-| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | rds-client.js:13:11:18:5 | params1 [sql] | provenance | |
+| rds-client.js:8:11:8:19 | userQuery | rds-client.js:17:14:17:22 | userQuery | provenance | |
+| rds-client.js:8:11:8:19 | userQuery | rds-client.js:33:24:33:32 | userQuery | provenance | |
+| rds-client.js:8:23:8:30 | req.body | rds-client.js:8:11:8:19 | userQuery | provenance | |
+| rds-client.js:13:11:13:17 | params1 [sql] | rds-client.js:19:51:19:57 | params1 [sql] | provenance | |
+| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | rds-client.js:13:11:13:17 | params1 [sql] | provenance | |
| rds-client.js:17:14:17:22 | userQuery | rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | provenance | |
| rds-client.js:19:51:19:57 | params1 [sql] | rds-client.js:19:23:19:58 | new Exe ... arams1) | provenance | |
-| rds-client.js:29:11:34:5 | params [sqlStatements] | rds-client.js:36:45:36:50 | params [sqlStatements] | provenance | |
-| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | rds-client.js:29:11:34:5 | params [sqlStatements] | provenance | |
+| rds-client.js:29:11:29:16 | params [sqlStatements] | rds-client.js:36:45:36:50 | params [sqlStatements] | provenance | |
+| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | rds-client.js:29:11:29:16 | params [sqlStatements] | provenance | |
| rds-client.js:33:24:33:32 | userQuery | rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | provenance | |
| rds-client.js:36:45:36:50 | params [sqlStatements] | rds-client.js:36:23:36:51 | new Exe ... params) | provenance | |
-| rds-client.js:44:11:44:36 | userQuery | rds-client.js:53:14:53:22 | userQuery | provenance | |
-| rds-client.js:44:23:44:30 | req.body | rds-client.js:44:11:44:36 | userQuery | provenance | |
-| rds-client.js:45:11:45:40 | userQueries | rds-client.js:61:24:61:34 | userQueries | provenance | |
-| rds-client.js:45:25:45:32 | req.body | rds-client.js:45:11:45:40 | userQueries | provenance | |
+| rds-client.js:44:11:44:19 | userQuery | rds-client.js:53:14:53:22 | userQuery | provenance | |
+| rds-client.js:44:23:44:30 | req.body | rds-client.js:44:11:44:19 | userQuery | provenance | |
+| rds-client.js:45:11:45:21 | userQueries | rds-client.js:61:24:61:34 | userQueries | provenance | |
+| rds-client.js:45:25:45:32 | req.body | rds-client.js:45:11:45:21 | userQueries | provenance | |
| rds-client.js:61:24:61:34 | userQueries | rds-client.js:61:40:61:42 | sql | provenance | |
| rds-client.js:61:40:61:42 | sql | rds-client.js:61:50:61:52 | sql | provenance | |
| redis.js:10:16:10:23 | req.body | redis.js:10:16:10:27 | req.body.key | provenance | Config |
@@ -979,21 +979,21 @@ nodes
| pg-promise.js:60:20:60:24 | query | semmle.label | query |
| pg-promise.js:63:23:63:27 | query | semmle.label | query |
| pg-promise.js:64:16:64:20 | query | semmle.label | query |
-| rds-client.js:8:11:8:36 | userQuery | semmle.label | userQuery |
+| rds-client.js:8:11:8:19 | userQuery | semmle.label | userQuery |
| rds-client.js:8:23:8:30 | req.body | semmle.label | req.body |
-| rds-client.js:13:11:18:5 | params1 [sql] | semmle.label | params1 [sql] |
+| rds-client.js:13:11:13:17 | params1 [sql] | semmle.label | params1 [sql] |
| rds-client.js:13:21:18:5 | {\\n ... y\\n } [sql] | semmle.label | {\\n ... y\\n } [sql] |
| rds-client.js:17:14:17:22 | userQuery | semmle.label | userQuery |
| rds-client.js:19:23:19:58 | new Exe ... arams1) | semmle.label | new Exe ... arams1) |
| rds-client.js:19:51:19:57 | params1 [sql] | semmle.label | params1 [sql] |
-| rds-client.js:29:11:34:5 | params [sqlStatements] | semmle.label | params [sqlStatements] |
+| rds-client.js:29:11:29:16 | params [sqlStatements] | semmle.label | params [sqlStatements] |
| rds-client.js:29:20:34:5 | {\\n ... y\\n } [sqlStatements] | semmle.label | {\\n ... y\\n } [sqlStatements] |
| rds-client.js:33:24:33:32 | userQuery | semmle.label | userQuery |
| rds-client.js:36:23:36:51 | new Exe ... params) | semmle.label | new Exe ... params) |
| rds-client.js:36:45:36:50 | params [sqlStatements] | semmle.label | params [sqlStatements] |
-| rds-client.js:44:11:44:36 | userQuery | semmle.label | userQuery |
+| rds-client.js:44:11:44:19 | userQuery | semmle.label | userQuery |
| rds-client.js:44:23:44:30 | req.body | semmle.label | req.body |
-| rds-client.js:45:11:45:40 | userQueries | semmle.label | userQueries |
+| rds-client.js:45:11:45:21 | userQueries | semmle.label | userQueries |
| rds-client.js:45:25:45:32 | req.body | semmle.label | req.body |
| rds-client.js:53:14:53:22 | userQuery | semmle.label | userQuery |
| rds-client.js:61:24:61:34 | userQueries | semmle.label | userQueries |
From c1ebe920a1dd140df56696a70a7643ea5478a07f Mon Sep 17 00:00:00 2001
From: Simon Friis Vindum
Date: Wed, 17 Sep 2025 10:07:44 +0200
Subject: [PATCH 126/219] Rust: Update expected file
---
.../dataflow/sources/TaintSources.expected | 34 +++++++++++++++++++
.../dataflow/sources/web_frameworks.rs | 2 +-
2 files changed, 35 insertions(+), 1 deletion(-)
diff --git a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
index 7182c231ba1b..96b6426baf41 100644
--- a/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
+++ b/rust/ql/test/library-tests/dataflow/sources/TaintSources.expected
@@ -110,6 +110,15 @@
| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:242:33:242:35 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
@@ -120,6 +129,15 @@
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:250:46:250:49 | then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
@@ -130,3 +148,19 @@
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
| web_frameworks.rs:259:50:259:57 | and_then | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
+| web_frameworks.rs:272:75:272:77 | map | Flow source 'RemoteSource' of type remote (DEFAULT). |
diff --git a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
index 2489ac2ee238..857fc3b479e8 100644
--- a/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
+++ b/rust/ql/test/library-tests/dataflow/sources/web_frameworks.rs
@@ -269,7 +269,7 @@ mod warp_test {
);
// A route with path, parameter, and `and_then`
- let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ MISSING: Alert[rust/summary/taint-sources]
+ let path_and_map_route = warp::path("1").and(warp::path::param()).map( // $ Alert[rust/summary/taint-sources]
| a: String |
{
sink(a); // $ MISSING: hasTaintFlow
From a6d728a66d54c61b66edf1376d7eb09cb690e64a Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 11:19:33 +0200
Subject: [PATCH 127/219] JS: Add test case with missing alert using `graphql`
---
.../CWE-094/CodeInjection/graph-ql.js | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
create mode 100644 javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
new file mode 100644
index 000000000000..e0cd0dd56096
--- /dev/null
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
@@ -0,0 +1,36 @@
+const express = require('express');
+const { graphql, buildSchema } = require('graphql');
+
+const app = express();
+app.use(express.json());
+
+const schema = buildSchema(`
+ type Query {
+ greet(name: String!): String
+ calc(expr: String!): String
+ }
+`);
+
+const root = {
+ greet: ({ name }) => {
+ return `Hello, ${name}!`;
+ },
+ calc: ({ expr }) => {
+ try {
+ return eval(expr).toString(); // $ MISSING: Alert[js/code-injection]
+ } catch (e) {
+ return `Error: ${e.message}`;
+ }
+ }
+};
+
+app.post('/graphql', async (req, res) => {
+ const { query, variables } = req.body; // $ MISSING: Source[js/code-injection]
+ const result = await graphql({
+ schema,
+ source: query,
+ rootValue: root,
+ variableValues: variables
+ });
+ res.json(result);
+});
From 4282005e3289bac344f2cc0f3dd431e63351c403 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 11:25:31 +0200
Subject: [PATCH 128/219] JS: Add summary model for `graphql`'s `rootValue`
---
javascript/ql/lib/ext/graph-ql.model.yml | 6 ++++++
.../CWE-094/CodeInjection/CodeInjection.expected | 14 ++++++++++++++
.../HeuristicSourceCodeInjection.expected | 13 +++++++++++++
.../Security/CWE-094/CodeInjection/graph-ql.js | 4 ++--
4 files changed, 35 insertions(+), 2 deletions(-)
create mode 100644 javascript/ql/lib/ext/graph-ql.model.yml
diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml
new file mode 100644
index 000000000000..4b441579e56d
--- /dev/null
+++ b/javascript/ql/lib/ext/graph-ql.model.yml
@@ -0,0 +1,6 @@
+extensions:
+ - addsTo:
+ pack: codeql/javascript-all
+ extensible: summaryModel
+ data:
+ - ["graphql", "Member[graphql]", "Argument[0].Member[source]", "Argument[0].Member[rootValue].AnyMember.Parameter[0].AnyMember", "taint"]
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
index 8ddaba30fc8c..140e0295d43f 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
@@ -61,6 +61,7 @@
| fastify.js:107:23:107:31 | userInput | fastify.js:106:21:106:38 | request.query.code | fastify.js:107:23:107:31 | userInput | This code execution depends on a $@. | fastify.js:106:21:106:38 | request.query.code | user-provided value |
| fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:41 | request.query | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:41 | request.query | user-provided value |
| fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:51 | request ... plyCode | user-provided value |
+| graph-ql.js:20:19:20:22 | expr | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:20:19:20:22 | expr | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value |
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value |
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value |
| react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value |
@@ -154,6 +155,12 @@ edges
| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | |
| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | |
| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | |
+| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | |
+| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | |
+| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | |
+| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | |
+| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | |
| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | |
@@ -288,6 +295,13 @@ nodes
| fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code |
| fastify.js:107:23:107:31 | userInput | semmle.label | userInput |
| fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode |
+| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:20:19:20:22 | expr | semmle.label | expr |
+| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } |
+| graph-ql.js:28:11:28:15 | query | semmle.label | query |
+| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body |
+| graph-ql.js:31:13:31:17 | query | semmle.label | query |
| module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code |
| module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code |
| react-native.js:7:7:7:13 | tainted | semmle.label | tainted |
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
index db39855c5e5c..5acafe121672 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
@@ -55,6 +55,12 @@ edges
| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | |
| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | |
| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | |
+| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | |
+| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | |
+| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | |
+| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | |
+| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | |
| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | |
@@ -191,6 +197,13 @@ nodes
| fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code |
| fastify.js:107:23:107:31 | userInput | semmle.label | userInput |
| fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode |
+| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:20:19:20:22 | expr | semmle.label | expr |
+| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } |
+| graph-ql.js:28:11:28:15 | query | semmle.label | query |
+| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body |
+| graph-ql.js:31:13:31:17 | query | semmle.label | query |
| module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code |
| module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code |
| react-native.js:7:7:7:13 | tainted | semmle.label | tainted |
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
index e0cd0dd56096..46e4ea20e95c 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
@@ -17,7 +17,7 @@ const root = {
},
calc: ({ expr }) => {
try {
- return eval(expr).toString(); // $ MISSING: Alert[js/code-injection]
+ return eval(expr).toString(); // $ Alert[js/code-injection]
} catch (e) {
return `Error: ${e.message}`;
}
@@ -25,7 +25,7 @@ const root = {
};
app.post('/graphql', async (req, res) => {
- const { query, variables } = req.body; // $ MISSING: Source[js/code-injection]
+ const { query, variables } = req.body; // $ Source[js/code-injection]
const result = await graphql({
schema,
source: query,
From 6d461d6b506ea09ca458126f2b54d6cefd8fd77a Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 11:29:26 +0200
Subject: [PATCH 129/219] JS: Add change note
---
javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md
diff --git a/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md b/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md
new file mode 100644
index 000000000000..cb0b886a6f75
--- /dev/null
+++ b/javascript/ql/lib/change-notes/2025-09-17-graphql-enhance.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* Support for the [graphql](https://www.npmjs.com/package/graphql) library has been improved. Data flow from GraphQL query sources and variables to resolver function parameters is now tracked.
From 5e76d5ff3fff2183700ab6e1805166f090de664f Mon Sep 17 00:00:00 2001
From: Anders Schack-Mulligen
Date: Wed, 17 Sep 2025 11:58:39 +0200
Subject: [PATCH 130/219] C#: Rename predicate as per review, and fixup qltest.
---
.../semmle/code/csharp/controlflow/Guards.qll | 12 +++----
csharp/ql/test/query-tests/Nullness/E.cs | 13 +++++--
.../Nullness/Implications.expected | 3 +-
.../query-tests/Nullness/NullCheck.expected | 3 +-
.../query-tests/Nullness/NullMaybe.expected | 34 +++++++++++++++++++
5 files changed, 54 insertions(+), 11 deletions(-)
diff --git a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll
index 077e95613e68..7185e39a45b2 100644
--- a/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll
+++ b/csharp/ql/lib/semmle/code/csharp/controlflow/Guards.qll
@@ -274,7 +274,7 @@ module AbstractValues {
private import AbstractValues
/** Gets the value resulting from matching `null` against `pat`. */
-private boolean patternContainsNull(PatternExpr pat) {
+private boolean patternMatchesNull(PatternExpr pat) {
pat instanceof NullLiteral and result = true
or
not pat instanceof NullLiteral and
@@ -283,18 +283,16 @@ private boolean patternContainsNull(PatternExpr pat) {
not pat instanceof AndPatternExpr and
result = false
or
- result = patternContainsNull(pat.(NotPatternExpr).getPattern()).booleanNot()
+ result = patternMatchesNull(pat.(NotPatternExpr).getPattern()).booleanNot()
or
exists(OrPatternExpr ope | pat = ope |
result =
- patternContainsNull(ope.getLeftOperand())
- .booleanOr(patternContainsNull(ope.getRightOperand()))
+ patternMatchesNull(ope.getLeftOperand()).booleanOr(patternMatchesNull(ope.getRightOperand()))
)
or
exists(AndPatternExpr ape | pat = ape |
result =
- patternContainsNull(ape.getLeftOperand())
- .booleanAnd(patternContainsNull(ape.getRightOperand()))
+ patternMatchesNull(ape.getLeftOperand()).booleanAnd(patternMatchesNull(ape.getRightOperand()))
)
}
@@ -387,7 +385,7 @@ class DereferenceableExpr extends Expr {
isNull = branch
or
// E.g. `x is string` or `x is ""`
- branch.booleanNot() = patternContainsNull(pm.getPattern()) and
+ branch.booleanNot() = patternMatchesNull(pm.getPattern()) and
isNull = false
or
exists(TypePatternExpr tpe |
diff --git a/csharp/ql/test/query-tests/Nullness/E.cs b/csharp/ql/test/query-tests/Nullness/E.cs
index f8264523b687..ef5886997801 100644
--- a/csharp/ql/test/query-tests/Nullness/E.cs
+++ b/csharp/ql/test/query-tests/Nullness/E.cs
@@ -432,7 +432,7 @@ static bool Ex44(int? i, IEnumerable @is)
return @is.Any();
}
- static void Ex45(string s)
+ static void Ex45(string s) // $ Source[cs/dereferenced-value-may-be-null]
{
if (s is null)
{
@@ -441,7 +441,7 @@ static void Ex45(string s)
if (s is not not null)
{
- s.ToString(); // $ MISSING: Alert[cs/dereferenced-value-is-always-null]
+ s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null] MISSING: Alert[cs/dereferenced-value-is-always-null]
}
if (s is not null)
@@ -453,6 +453,15 @@ static void Ex45(string s)
{
s.ToString(); // GOOD
}
+
+ if (s is not object)
+ {
+ s.ToString(); // $ Alert[cs/dereferenced-value-may-be-null]
+ }
+ else
+ {
+ s.ToString(); // GOOD
+ }
}
}
diff --git a/csharp/ql/test/query-tests/Nullness/Implications.expected b/csharp/ql/test/query-tests/Nullness/Implications.expected
index ec660dd44a42..584b4e3ad1a6 100644
--- a/csharp/ql/test/query-tests/Nullness/Implications.expected
+++ b/csharp/ql/test/query-tests/Nullness/Implications.expected
@@ -1302,9 +1302,10 @@
| E.cs:432:16:432:24 | call to method Any | true | E.cs:432:16:432:18 | access to parameter is | non-empty |
| E.cs:437:13:437:21 | ... is ... | false | E.cs:437:13:437:13 | access to parameter s | non-null |
| E.cs:437:13:437:21 | ... is ... | true | E.cs:437:13:437:13 | access to parameter s | null |
-| E.cs:442:13:442:29 | ... is ... | true | E.cs:442:13:442:13 | access to parameter s | non-null |
+| E.cs:442:13:442:29 | ... is ... | false | E.cs:442:13:442:13 | access to parameter s | non-null |
| E.cs:447:13:447:25 | ... is ... | true | E.cs:447:13:447:13 | access to parameter s | non-null |
| E.cs:452:13:452:23 | ... is ... | true | E.cs:452:13:452:13 | access to parameter s | non-null |
+| E.cs:457:13:457:27 | ... is ... | false | E.cs:457:13:457:13 | access to parameter s | non-null |
| F.cs:8:9:8:9 | access to local variable o | non-null | F.cs:7:20:7:23 | null | non-null |
| F.cs:8:9:8:9 | access to local variable o | null | F.cs:7:20:7:23 | null | null |
| F.cs:14:9:14:9 | access to local variable o | non-null | F.cs:13:21:13:24 | null | non-null |
diff --git a/csharp/ql/test/query-tests/Nullness/NullCheck.expected b/csharp/ql/test/query-tests/Nullness/NullCheck.expected
index 600699b6156c..7b4c89a0b219 100644
--- a/csharp/ql/test/query-tests/Nullness/NullCheck.expected
+++ b/csharp/ql/test/query-tests/Nullness/NullCheck.expected
@@ -300,9 +300,10 @@
| E.cs:429:13:429:22 | access to property HasValue | E.cs:429:13:429:13 | access to parameter i | true | false |
| E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | false | false |
| E.cs:437:13:437:21 | ... is ... | E.cs:437:13:437:13 | access to parameter s | true | true |
-| E.cs:442:13:442:29 | ... is ... | E.cs:442:13:442:13 | access to parameter s | true | false |
+| E.cs:442:13:442:29 | ... is ... | E.cs:442:13:442:13 | access to parameter s | false | false |
| E.cs:447:13:447:25 | ... is ... | E.cs:447:13:447:13 | access to parameter s | true | false |
| E.cs:452:13:452:23 | ... is ... | E.cs:452:13:452:13 | access to parameter s | true | false |
+| E.cs:457:13:457:27 | ... is ... | E.cs:457:13:457:13 | access to parameter s | false | false |
| Forwarding.cs:9:14:9:30 | call to method IsNullOrEmpty | Forwarding.cs:9:14:9:14 | access to local variable s | false | false |
| Forwarding.cs:14:13:14:32 | call to method IsNotNullOrEmpty | Forwarding.cs:14:13:14:13 | access to local variable s | true | false |
| Forwarding.cs:19:14:19:23 | call to method IsNull | Forwarding.cs:19:14:19:14 | access to local variable s | false | false |
diff --git a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected
index 876cde548b6a..816a8b3b4404 100644
--- a/csharp/ql/test/query-tests/Nullness/NullMaybe.expected
+++ b/csharp/ql/test/query-tests/Nullness/NullMaybe.expected
@@ -83,6 +83,8 @@
| E.cs:417:34:417:34 | access to parameter i | E.cs:417:24:417:40 | SSA capture def(i) | E.cs:417:34:417:34 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:415:27:415:27 | i | i | E.cs:415:27:415:27 | i | this |
| E.cs:423:38:423:38 | access to parameter i | E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:420:27:420:27 | i | i | E.cs:420:27:420:27 | i | this |
| E.cs:430:39:430:39 | access to parameter i | E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i | Variable $@ may be null at this access because it has a nullable type. | E.cs:427:27:427:27 | i | i | E.cs:427:27:427:27 | i | this |
+| E.cs:444:13:444:13 | access to parameter s | E.cs:435:29:435:29 | SSA param(s) | E.cs:444:13:444:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:13:437:21 | ... is ... | this |
+| E.cs:459:13:459:13 | access to parameter s | E.cs:435:29:435:29 | SSA param(s) | E.cs:459:13:459:13 | access to parameter s | Variable $@ may be null at this access as suggested by $@ null check. | E.cs:435:29:435:29 | s | s | E.cs:437:13:437:21 | ... is ... | this |
| GuardedString.cs:35:31:35:31 | access to local variable s | GuardedString.cs:7:16:7:32 | SSA def(s) | GuardedString.cs:35:31:35:31 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | GuardedString.cs:7:16:7:16 | s | s | GuardedString.cs:7:16:7:32 | String s = ... | this |
| NullMaybeBad.cs:7:27:7:27 | access to parameter o | NullMaybeBad.cs:13:17:13:20 | null | NullMaybeBad.cs:7:27:7:27 | access to parameter o | Variable $@ may be null at this access because of $@ null argument. | NullMaybeBad.cs:5:25:5:25 | o | o | NullMaybeBad.cs:13:17:13:20 | null | this |
| Params.cs:14:17:14:20 | access to parameter args | Params.cs:20:12:20:15 | null | Params.cs:14:17:14:20 | access to parameter args | Variable $@ may be null at this access because of $@ null argument. | Params.cs:12:36:12:39 | args | args | Params.cs:20:12:20:15 | null | this |
@@ -445,7 +447,23 @@ edges
| E.cs:423:28:423:44 | SSA capture def(i) | E.cs:423:38:423:38 | access to parameter i |
| E.cs:430:29:430:45 | SSA capture def(i) | E.cs:430:39:430:39 | access to parameter i |
| E.cs:435:29:435:29 | SSA param(s) | E.cs:437:13:437:21 | [true] ... is ... |
+| E.cs:437:13:437:21 | [true] ... is ... | E.cs:438:9:440:9 | {...} |
| E.cs:437:13:437:21 | [true] ... is ... | E.cs:439:13:439:13 | access to parameter s |
+| E.cs:438:9:440:9 | {...} | E.cs:442:9:445:9 | if (...) ... |
+| E.cs:442:9:445:9 | if (...) ... | E.cs:442:22:442:29 | [no-match] not ... |
+| E.cs:442:13:442:29 | [true] ... is ... | E.cs:443:9:445:9 | {...} |
+| E.cs:442:13:442:29 | [true] ... is ... | E.cs:444:13:444:13 | access to parameter s |
+| E.cs:442:18:442:29 | [match] not ... | E.cs:442:13:442:29 | [true] ... is ... |
+| E.cs:442:22:442:29 | [no-match] not ... | E.cs:442:18:442:29 | [match] not ... |
+| E.cs:443:9:445:9 | {...} | E.cs:447:9:450:9 | if (...) ... |
+| E.cs:447:9:450:9 | if (...) ... | E.cs:447:18:447:25 | [no-match] not ... |
+| E.cs:447:13:447:25 | [false] ... is ... | E.cs:452:9:455:9 | if (...) ... |
+| E.cs:447:18:447:25 | [no-match] not ... | E.cs:447:13:447:25 | [false] ... is ... |
+| E.cs:452:9:455:9 | if (...) ... | E.cs:452:13:452:23 | [false] ... is ... |
+| E.cs:452:13:452:23 | [false] ... is ... | E.cs:457:9:464:9 | if (...) ... |
+| E.cs:457:9:464:9 | if (...) ... | E.cs:457:18:457:27 | [match] not ... |
+| E.cs:457:13:457:27 | [true] ... is ... | E.cs:459:13:459:13 | access to parameter s |
+| E.cs:457:18:457:27 | [match] not ... | E.cs:457:13:457:27 | [true] ... is ... |
| F.cs:7:16:7:23 | SSA def(o) | F.cs:8:9:8:9 | access to local variable o |
| Forwarding.cs:7:16:7:23 | SSA def(s) | Forwarding.cs:9:13:9:30 | [false] !... |
| Forwarding.cs:9:13:9:30 | [false] !... | Forwarding.cs:14:9:17:9 | if (...) ... |
@@ -894,7 +912,23 @@ nodes
| E.cs:430:39:430:39 | access to parameter i |
| E.cs:435:29:435:29 | SSA param(s) |
| E.cs:437:13:437:21 | [true] ... is ... |
+| E.cs:438:9:440:9 | {...} |
| E.cs:439:13:439:13 | access to parameter s |
+| E.cs:442:9:445:9 | if (...) ... |
+| E.cs:442:13:442:29 | [true] ... is ... |
+| E.cs:442:18:442:29 | [match] not ... |
+| E.cs:442:22:442:29 | [no-match] not ... |
+| E.cs:443:9:445:9 | {...} |
+| E.cs:444:13:444:13 | access to parameter s |
+| E.cs:447:9:450:9 | if (...) ... |
+| E.cs:447:13:447:25 | [false] ... is ... |
+| E.cs:447:18:447:25 | [no-match] not ... |
+| E.cs:452:9:455:9 | if (...) ... |
+| E.cs:452:13:452:23 | [false] ... is ... |
+| E.cs:457:9:464:9 | if (...) ... |
+| E.cs:457:13:457:27 | [true] ... is ... |
+| E.cs:457:18:457:27 | [match] not ... |
+| E.cs:459:13:459:13 | access to parameter s |
| F.cs:7:16:7:23 | SSA def(o) |
| F.cs:8:9:8:9 | access to local variable o |
| Forwarding.cs:7:16:7:23 | SSA def(s) |
From 4e8343664fd083f6777d7930f13cb530e1ddc297 Mon Sep 17 00:00:00 2001
From: "github-actions[bot]"
Date: Wed, 17 Sep 2025 10:13:40 +0000
Subject: [PATCH 131/219] Post-release preparation for codeql-cli-2.23.1
---
actions/ql/lib/qlpack.yml | 2 +-
actions/ql/src/qlpack.yml | 2 +-
cpp/ql/lib/qlpack.yml | 2 +-
cpp/ql/src/qlpack.yml | 2 +-
csharp/ql/campaigns/Solorigate/lib/qlpack.yml | 2 +-
csharp/ql/campaigns/Solorigate/src/qlpack.yml | 2 +-
csharp/ql/lib/qlpack.yml | 2 +-
csharp/ql/src/qlpack.yml | 2 +-
go/ql/consistency-queries/qlpack.yml | 2 +-
go/ql/lib/qlpack.yml | 2 +-
go/ql/src/qlpack.yml | 2 +-
java/ql/lib/qlpack.yml | 2 +-
java/ql/src/qlpack.yml | 2 +-
javascript/ql/lib/qlpack.yml | 2 +-
javascript/ql/src/qlpack.yml | 2 +-
misc/suite-helpers/qlpack.yml | 2 +-
python/ql/lib/qlpack.yml | 2 +-
python/ql/src/qlpack.yml | 2 +-
ruby/ql/lib/qlpack.yml | 2 +-
ruby/ql/src/qlpack.yml | 2 +-
rust/ql/lib/qlpack.yml | 2 +-
rust/ql/src/qlpack.yml | 2 +-
shared/concepts/qlpack.yml | 2 +-
shared/controlflow/qlpack.yml | 2 +-
shared/dataflow/qlpack.yml | 2 +-
shared/mad/qlpack.yml | 2 +-
shared/quantum/qlpack.yml | 2 +-
shared/rangeanalysis/qlpack.yml | 2 +-
shared/regex/qlpack.yml | 2 +-
shared/ssa/qlpack.yml | 2 +-
shared/threat-models/qlpack.yml | 2 +-
shared/tutorial/qlpack.yml | 2 +-
shared/typeflow/qlpack.yml | 2 +-
shared/typeinference/qlpack.yml | 2 +-
shared/typetracking/qlpack.yml | 2 +-
shared/typos/qlpack.yml | 2 +-
shared/util/qlpack.yml | 2 +-
shared/xml/qlpack.yml | 2 +-
shared/yaml/qlpack.yml | 2 +-
swift/ql/lib/qlpack.yml | 2 +-
swift/ql/src/qlpack.yml | 2 +-
41 files changed, 41 insertions(+), 41 deletions(-)
diff --git a/actions/ql/lib/qlpack.yml b/actions/ql/lib/qlpack.yml
index 55e8a97e16bb..266007af096c 100644
--- a/actions/ql/lib/qlpack.yml
+++ b/actions/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/actions-all
-version: 0.4.17
+version: 0.4.18-dev
library: true
warnOnImplicitThis: true
dependencies:
diff --git a/actions/ql/src/qlpack.yml b/actions/ql/src/qlpack.yml
index ea42e41ebb88..e4a69c7cd61c 100644
--- a/actions/ql/src/qlpack.yml
+++ b/actions/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/actions-queries
-version: 0.6.9
+version: 0.6.10-dev
library: false
warnOnImplicitThis: true
groups: [actions, queries]
diff --git a/cpp/ql/lib/qlpack.yml b/cpp/ql/lib/qlpack.yml
index 6e1a13317a02..63500a12a2f9 100644
--- a/cpp/ql/lib/qlpack.yml
+++ b/cpp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-all
-version: 5.6.0
+version: 5.6.1-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp
diff --git a/cpp/ql/src/qlpack.yml b/cpp/ql/src/qlpack.yml
index 5a74eac8d615..8b6b27302cc9 100644
--- a/cpp/ql/src/qlpack.yml
+++ b/cpp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/cpp-queries
-version: 1.5.0
+version: 1.5.1-dev
groups:
- cpp
- queries
diff --git a/csharp/ql/campaigns/Solorigate/lib/qlpack.yml b/csharp/ql/campaigns/Solorigate/lib/qlpack.yml
index 8b069392a0b3..bc2dd9a229ce 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.48
+version: 1.7.49-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/campaigns/Solorigate/src/qlpack.yml b/csharp/ql/campaigns/Solorigate/src/qlpack.yml
index 197f3182a634..82cad1a64729 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.48
+version: 1.7.49-dev
groups:
- csharp
- solorigate
diff --git a/csharp/ql/lib/qlpack.yml b/csharp/ql/lib/qlpack.yml
index 13982fd50da9..f5795e125581 100644
--- a/csharp/ql/lib/qlpack.yml
+++ b/csharp/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/csharp-all
-version: 5.2.4
+version: 5.2.5-dev
groups: csharp
dbscheme: semmlecode.csharp.dbscheme
extractor: csharp
diff --git a/csharp/ql/src/qlpack.yml b/csharp/ql/src/qlpack.yml
index 88dd741a89d0..724ec4c0097a 100644
--- a/csharp/ql/src/qlpack.yml
+++ b/csharp/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/csharp-queries
-version: 1.4.0
+version: 1.4.1-dev
groups:
- csharp
- queries
diff --git a/go/ql/consistency-queries/qlpack.yml b/go/ql/consistency-queries/qlpack.yml
index 365c82cf84c4..3a3f60920be8 100644
--- a/go/ql/consistency-queries/qlpack.yml
+++ b/go/ql/consistency-queries/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql-go-consistency-queries
-version: 1.0.31
+version: 1.0.32-dev
groups:
- go
- queries
diff --git a/go/ql/lib/qlpack.yml b/go/ql/lib/qlpack.yml
index 77b35bffac24..1e8bdd280f7b 100644
--- a/go/ql/lib/qlpack.yml
+++ b/go/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/go-all
-version: 4.3.4
+version: 4.3.5-dev
groups: go
dbscheme: go.dbscheme
extractor: go
diff --git a/go/ql/src/qlpack.yml b/go/ql/src/qlpack.yml
index 8060d5f6b3db..9320b29d8e88 100644
--- a/go/ql/src/qlpack.yml
+++ b/go/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/go-queries
-version: 1.4.5
+version: 1.4.6-dev
groups:
- go
- queries
diff --git a/java/ql/lib/qlpack.yml b/java/ql/lib/qlpack.yml
index 77416e899dcb..3009b1b327f1 100644
--- a/java/ql/lib/qlpack.yml
+++ b/java/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/java-all
-version: 7.7.0
+version: 7.7.1-dev
groups: java
dbscheme: config/semmlecode.dbscheme
extractor: java
diff --git a/java/ql/src/qlpack.yml b/java/ql/src/qlpack.yml
index 947cfcb6d134..01bf070bb074 100644
--- a/java/ql/src/qlpack.yml
+++ b/java/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/java-queries
-version: 1.8.0
+version: 1.8.1-dev
groups:
- java
- queries
diff --git a/javascript/ql/lib/qlpack.yml b/javascript/ql/lib/qlpack.yml
index 3656daac7b72..1d05d1003f35 100644
--- a/javascript/ql/lib/qlpack.yml
+++ b/javascript/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/javascript-all
-version: 2.6.11
+version: 2.6.12-dev
groups: javascript
dbscheme: semmlecode.javascript.dbscheme
extractor: javascript
diff --git a/javascript/ql/src/qlpack.yml b/javascript/ql/src/qlpack.yml
index 0b379a03d5bb..916ad1339b2e 100644
--- a/javascript/ql/src/qlpack.yml
+++ b/javascript/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/javascript-queries
-version: 2.1.0
+version: 2.1.1-dev
groups:
- javascript
- queries
diff --git a/misc/suite-helpers/qlpack.yml b/misc/suite-helpers/qlpack.yml
index a0249432210d..72c2f165759a 100644
--- a/misc/suite-helpers/qlpack.yml
+++ b/misc/suite-helpers/qlpack.yml
@@ -1,4 +1,4 @@
name: codeql/suite-helpers
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
warnOnImplicitThis: true
diff --git a/python/ql/lib/qlpack.yml b/python/ql/lib/qlpack.yml
index a3e40c6586e4..61875fc7f4e7 100644
--- a/python/ql/lib/qlpack.yml
+++ b/python/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/python-all
-version: 4.0.15
+version: 4.0.16-dev
groups: python
dbscheme: semmlecode.python.dbscheme
extractor: python
diff --git a/python/ql/src/qlpack.yml b/python/ql/src/qlpack.yml
index ec238b337987..edf6366c64ba 100644
--- a/python/ql/src/qlpack.yml
+++ b/python/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/python-queries
-version: 1.6.5
+version: 1.6.6-dev
groups:
- python
- queries
diff --git a/ruby/ql/lib/qlpack.yml b/ruby/ql/lib/qlpack.yml
index a76c7d0b90af..a2288bd3799f 100644
--- a/ruby/ql/lib/qlpack.yml
+++ b/ruby/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ruby-all
-version: 5.0.4
+version: 5.0.5-dev
groups: ruby
extractor: ruby
dbscheme: ruby.dbscheme
diff --git a/ruby/ql/src/qlpack.yml b/ruby/ql/src/qlpack.yml
index cea6e01dce68..084d64e8b029 100644
--- a/ruby/ql/src/qlpack.yml
+++ b/ruby/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ruby-queries
-version: 1.4.5
+version: 1.4.6-dev
groups:
- ruby
- queries
diff --git a/rust/ql/lib/qlpack.yml b/rust/ql/lib/qlpack.yml
index d0e9a11ec16f..421a604aa3df 100644
--- a/rust/ql/lib/qlpack.yml
+++ b/rust/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rust-all
-version: 0.1.16
+version: 0.1.17-dev
groups: rust
extractor: rust
dbscheme: rust.dbscheme
diff --git a/rust/ql/src/qlpack.yml b/rust/ql/src/qlpack.yml
index 8debbae1f51a..3c122e1853b9 100644
--- a/rust/ql/src/qlpack.yml
+++ b/rust/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rust-queries
-version: 0.1.16
+version: 0.1.17-dev
groups:
- rust
- queries
diff --git a/shared/concepts/qlpack.yml b/shared/concepts/qlpack.yml
index 5bd473ce43bc..8b0fc6c6f7ae 100644
--- a/shared/concepts/qlpack.yml
+++ b/shared/concepts/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/concepts
-version: 0.0.5
+version: 0.0.6-dev
groups: shared
library: true
dependencies:
diff --git a/shared/controlflow/qlpack.yml b/shared/controlflow/qlpack.yml
index ab574bfdbac6..56945c0709d4 100644
--- a/shared/controlflow/qlpack.yml
+++ b/shared/controlflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/controlflow
-version: 2.0.15
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/dataflow/qlpack.yml b/shared/dataflow/qlpack.yml
index 9799550c8361..4c0a9bdfe8c2 100644
--- a/shared/dataflow/qlpack.yml
+++ b/shared/dataflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/dataflow
-version: 2.0.15
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/mad/qlpack.yml b/shared/mad/qlpack.yml
index e974c131a88b..b6f4e8c2bc11 100644
--- a/shared/mad/qlpack.yml
+++ b/shared/mad/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/mad
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/quantum/qlpack.yml b/shared/quantum/qlpack.yml
index 8f5a9260f27a..3741ff55855d 100644
--- a/shared/quantum/qlpack.yml
+++ b/shared/quantum/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/quantum
-version: 0.0.9
+version: 0.0.10-dev
groups: shared
library: true
dependencies:
diff --git a/shared/rangeanalysis/qlpack.yml b/shared/rangeanalysis/qlpack.yml
index bea42fd1b619..e67c274bf518 100644
--- a/shared/rangeanalysis/qlpack.yml
+++ b/shared/rangeanalysis/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/rangeanalysis
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/regex/qlpack.yml b/shared/regex/qlpack.yml
index 28cdc4285882..5aebaf9bffb1 100644
--- a/shared/regex/qlpack.yml
+++ b/shared/regex/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/regex
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/ssa/qlpack.yml b/shared/ssa/qlpack.yml
index a944c9d7ab4c..8337226f574d 100644
--- a/shared/ssa/qlpack.yml
+++ b/shared/ssa/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/ssa
-version: 2.0.7
+version: 2.0.8-dev
groups: shared
library: true
dependencies:
diff --git a/shared/threat-models/qlpack.yml b/shared/threat-models/qlpack.yml
index 005cbadd38b1..8f72fd8ad3fc 100644
--- a/shared/threat-models/qlpack.yml
+++ b/shared/threat-models/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/threat-models
-version: 1.0.31
+version: 1.0.32-dev
library: true
groups: shared
dataExtensions:
diff --git a/shared/tutorial/qlpack.yml b/shared/tutorial/qlpack.yml
index 09f9013ac103..aabb0356b861 100644
--- a/shared/tutorial/qlpack.yml
+++ b/shared/tutorial/qlpack.yml
@@ -1,7 +1,7 @@
name: codeql/tutorial
description: Library for the CodeQL detective tutorials, helping new users learn to
write CodeQL queries.
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/shared/typeflow/qlpack.yml b/shared/typeflow/qlpack.yml
index b777138b0008..98566858903b 100644
--- a/shared/typeflow/qlpack.yml
+++ b/shared/typeflow/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typeflow
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typeinference/qlpack.yml b/shared/typeinference/qlpack.yml
index 5fd940634b31..954a850cf0f5 100644
--- a/shared/typeinference/qlpack.yml
+++ b/shared/typeinference/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typeinference
-version: 0.0.12
+version: 0.0.13-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typetracking/qlpack.yml b/shared/typetracking/qlpack.yml
index f982bade08da..2bf6f01d218c 100644
--- a/shared/typetracking/qlpack.yml
+++ b/shared/typetracking/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typetracking
-version: 2.0.15
+version: 2.0.16-dev
groups: shared
library: true
dependencies:
diff --git a/shared/typos/qlpack.yml b/shared/typos/qlpack.yml
index 8885de0dbd06..b01883668b7d 100644
--- a/shared/typos/qlpack.yml
+++ b/shared/typos/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/typos
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/shared/util/qlpack.yml b/shared/util/qlpack.yml
index 703dee01cba4..1c1f5670d3e0 100644
--- a/shared/util/qlpack.yml
+++ b/shared/util/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/util
-version: 2.0.18
+version: 2.0.19-dev
groups: shared
library: true
dependencies: null
diff --git a/shared/xml/qlpack.yml b/shared/xml/qlpack.yml
index 6b8d051c622a..0908201b1822 100644
--- a/shared/xml/qlpack.yml
+++ b/shared/xml/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/xml
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
dependencies:
diff --git a/shared/yaml/qlpack.yml b/shared/yaml/qlpack.yml
index b443b23dac2d..cbbdd8963410 100644
--- a/shared/yaml/qlpack.yml
+++ b/shared/yaml/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/yaml
-version: 1.0.31
+version: 1.0.32-dev
groups: shared
library: true
warnOnImplicitThis: true
diff --git a/swift/ql/lib/qlpack.yml b/swift/ql/lib/qlpack.yml
index 6069c9b7ab1a..88950de258f4 100644
--- a/swift/ql/lib/qlpack.yml
+++ b/swift/ql/lib/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/swift-all
-version: 5.0.7
+version: 5.0.8-dev
groups: swift
extractor: swift
dbscheme: swift.dbscheme
diff --git a/swift/ql/src/qlpack.yml b/swift/ql/src/qlpack.yml
index 61d22677b832..f49b81cec754 100644
--- a/swift/ql/src/qlpack.yml
+++ b/swift/ql/src/qlpack.yml
@@ -1,5 +1,5 @@
name: codeql/swift-queries
-version: 1.2.5
+version: 1.2.6-dev
groups:
- swift
- queries
From 6c18b4de40a5caad9cc80395604f96e9522106e6 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 12:21:21 +0200
Subject: [PATCH 132/219] JS: Add test case for graph ql variableValues
injection
---
.../CWE-094/CodeInjection/graph-ql.js | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
index 46e4ea20e95c..f33d6c7f4d00 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
@@ -33,4 +33,24 @@ app.post('/graphql', async (req, res) => {
variableValues: variables
});
res.json(result);
+
+ const root1 = {
+ greet: ({ name, title }) => {
+ return eval(name + title).toString(); // $ MISSING: Alert[js/code-injection]
+ }
+ };
+ graphql({
+ schema: buildSchema(`
+ type Query {
+ greet(name: String!, title: String): String
+ }
+ `),
+ source: `
+ query GreetUser($name: String!, $title: String) {
+ greet(name: $name, title: $title)
+ }
+ `,
+ rootValue: root1,
+ variableValues: variables
+ });
});
From 7affcf40c29fc98f75301c0b6313af505eff1a54 Mon Sep 17 00:00:00 2001
From: Napalys Klicius
Date: Wed, 17 Sep 2025 12:24:14 +0200
Subject: [PATCH 133/219] JS: Add `variableValues` to the previous summaryModel
to enchance the flow.
---
javascript/ql/lib/ext/graph-ql.model.yml | 2 +-
.../CodeInjection/CodeInjection.expected | 27 ++++++++++++++++---
.../HeuristicSourceCodeInjection.expected | 26 +++++++++++++++---
.../CWE-094/CodeInjection/graph-ql.js | 2 +-
4 files changed, 49 insertions(+), 8 deletions(-)
diff --git a/javascript/ql/lib/ext/graph-ql.model.yml b/javascript/ql/lib/ext/graph-ql.model.yml
index 4b441579e56d..08233d1135da 100644
--- a/javascript/ql/lib/ext/graph-ql.model.yml
+++ b/javascript/ql/lib/ext/graph-ql.model.yml
@@ -3,4 +3,4 @@ extensions:
pack: codeql/javascript-all
extensible: summaryModel
data:
- - ["graphql", "Member[graphql]", "Argument[0].Member[source]", "Argument[0].Member[rootValue].AnyMember.Parameter[0].AnyMember", "taint"]
+ - ["graphql", "Member[graphql]", "Argument[0].Member[source,variableValues]", "Argument[0].Member[rootValue].AnyMember.Parameter[0]", "taint"]
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
index 140e0295d43f..3f5d8abed8a4 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/CodeInjection.expected
@@ -62,6 +62,7 @@
| fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:41 | request.query | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:41 | request.query | user-provided value |
| fastify.js:108:28:108:50 | reply.l ... tedCode | fastify.js:94:29:94:51 | request ... plyCode | fastify.js:108:28:108:50 | reply.l ... tedCode | This code execution depends on a $@. | fastify.js:94:29:94:51 | request ... plyCode | user-provided value |
| graph-ql.js:20:19:20:22 | expr | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:20:19:20:22 | expr | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value |
+| graph-ql.js:39:19:39:30 | name + title | graph-ql.js:28:32:28:39 | req.body | graph-ql.js:39:19:39:30 | name + title | This code execution depends on a $@. | graph-ql.js:28:32:28:39 | req.body | user-provided value |
| module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | module.js:9:16:9:29 | req.query.code | This code execution depends on a $@. | module.js:9:16:9:29 | req.query.code | user-provided value |
| module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | module.js:11:17:11:30 | req.query.code | This code execution depends on a $@. | module.js:11:17:11:30 | req.query.code | user-provided value |
| react-native.js:8:32:8:38 | tainted | react-native.js:7:17:7:33 | req.param("code") | react-native.js:8:32:8:38 | tainted | This code execution depends on a $@. | react-native.js:7:17:7:33 | req.param("code") | user-provided value |
@@ -155,12 +156,23 @@ edges
| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | |
| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | |
| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | |
-| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:18:10:18:17 | { expr } | graph-ql.js:18:12:18:15 | expr | provenance | |
| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | |
| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | |
+| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:18:28:26 | variables | provenance | |
| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | |
+| graph-ql.js:28:18:28:26 | variables | graph-ql.js:33:21:33:29 | variables | provenance | |
+| graph-ql.js:28:18:28:26 | variables | graph-ql.js:54:21:54:29 | variables | provenance | |
| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | |
-| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:10:18:17 | { expr } | provenance | |
+| graph-ql.js:33:21:33:29 | variables | graph-ql.js:18:10:18:17 | { expr } | provenance | |
+| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:15:38:18 | name | provenance | |
+| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:21:38:25 | title | provenance | |
+| graph-ql.js:38:15:38:18 | name | graph-ql.js:39:19:39:22 | name | provenance | |
+| graph-ql.js:38:21:38:25 | title | graph-ql.js:39:26:39:30 | title | provenance | |
+| graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | |
+| graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | |
+| graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | |
| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | |
@@ -295,13 +307,22 @@ nodes
| fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code |
| fastify.js:107:23:107:31 | userInput | semmle.label | userInput |
| fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode |
-| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:18:10:18:17 | { expr } | semmle.label | { expr } |
| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
| graph-ql.js:20:19:20:22 | expr | semmle.label | expr |
| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } |
| graph-ql.js:28:11:28:15 | query | semmle.label | query |
+| graph-ql.js:28:18:28:26 | variables | semmle.label | variables |
| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body |
| graph-ql.js:31:13:31:17 | query | semmle.label | query |
+| graph-ql.js:33:21:33:29 | variables | semmle.label | variables |
+| graph-ql.js:38:13:38:27 | { name, title } | semmle.label | { name, title } |
+| graph-ql.js:38:15:38:18 | name | semmle.label | name |
+| graph-ql.js:38:21:38:25 | title | semmle.label | title |
+| graph-ql.js:39:19:39:22 | name | semmle.label | name |
+| graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title |
+| graph-ql.js:39:26:39:30 | title | semmle.label | title |
+| graph-ql.js:54:21:54:29 | variables | semmle.label | variables |
| module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code |
| module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code |
| react-native.js:7:7:7:13 | tainted | semmle.label | tainted |
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
index 5acafe121672..3d4022d8fb6a 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/HeuristicSourceCodeInjection.expected
@@ -55,12 +55,23 @@ edges
| fastify.js:106:9:106:17 | userInput | fastify.js:107:23:107:31 | userInput | provenance | |
| fastify.js:106:21:106:33 | request.query | fastify.js:106:9:106:17 | userInput | provenance | |
| fastify.js:106:21:106:38 | request.query.code | fastify.js:106:9:106:17 | userInput | provenance | |
-| graph-ql.js:18:12:18:15 | expr | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:18:10:18:17 | { expr } | graph-ql.js:18:12:18:15 | expr | provenance | |
| graph-ql.js:18:12:18:15 | expr | graph-ql.js:20:19:20:22 | expr | provenance | |
| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:11:28:15 | query | provenance | |
+| graph-ql.js:28:9:28:28 | { query, variables } | graph-ql.js:28:18:28:26 | variables | provenance | |
| graph-ql.js:28:11:28:15 | query | graph-ql.js:31:13:31:17 | query | provenance | |
+| graph-ql.js:28:18:28:26 | variables | graph-ql.js:33:21:33:29 | variables | provenance | |
+| graph-ql.js:28:18:28:26 | variables | graph-ql.js:54:21:54:29 | variables | provenance | |
| graph-ql.js:28:32:28:39 | req.body | graph-ql.js:28:9:28:28 | { query, variables } | provenance | |
-| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:12:18:15 | expr | provenance | |
+| graph-ql.js:31:13:31:17 | query | graph-ql.js:18:10:18:17 | { expr } | provenance | |
+| graph-ql.js:33:21:33:29 | variables | graph-ql.js:18:10:18:17 | { expr } | provenance | |
+| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:15:38:18 | name | provenance | |
+| graph-ql.js:38:13:38:27 | { name, title } | graph-ql.js:38:21:38:25 | title | provenance | |
+| graph-ql.js:38:15:38:18 | name | graph-ql.js:39:19:39:22 | name | provenance | |
+| graph-ql.js:38:21:38:25 | title | graph-ql.js:39:26:39:30 | title | provenance | |
+| graph-ql.js:39:19:39:22 | name | graph-ql.js:39:19:39:30 | name + title | provenance | |
+| graph-ql.js:39:26:39:30 | title | graph-ql.js:39:19:39:30 | name + title | provenance | |
+| graph-ql.js:54:21:54:29 | variables | graph-ql.js:38:13:38:27 | { name, title } | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:8:32:8:38 | tainted | provenance | |
| react-native.js:7:7:7:13 | tainted | react-native.js:10:23:10:29 | tainted | provenance | |
| react-native.js:7:17:7:33 | req.param("code") | react-native.js:7:7:7:13 | tainted | provenance | |
@@ -197,13 +208,22 @@ nodes
| fastify.js:106:21:106:38 | request.query.code | semmle.label | request.query.code |
| fastify.js:107:23:107:31 | userInput | semmle.label | userInput |
| fastify.js:108:28:108:50 | reply.l ... tedCode | semmle.label | reply.l ... tedCode |
-| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
+| graph-ql.js:18:10:18:17 | { expr } | semmle.label | { expr } |
| graph-ql.js:18:12:18:15 | expr | semmle.label | expr |
| graph-ql.js:20:19:20:22 | expr | semmle.label | expr |
| graph-ql.js:28:9:28:28 | { query, variables } | semmle.label | { query, variables } |
| graph-ql.js:28:11:28:15 | query | semmle.label | query |
+| graph-ql.js:28:18:28:26 | variables | semmle.label | variables |
| graph-ql.js:28:32:28:39 | req.body | semmle.label | req.body |
| graph-ql.js:31:13:31:17 | query | semmle.label | query |
+| graph-ql.js:33:21:33:29 | variables | semmle.label | variables |
+| graph-ql.js:38:13:38:27 | { name, title } | semmle.label | { name, title } |
+| graph-ql.js:38:15:38:18 | name | semmle.label | name |
+| graph-ql.js:38:21:38:25 | title | semmle.label | title |
+| graph-ql.js:39:19:39:22 | name | semmle.label | name |
+| graph-ql.js:39:19:39:30 | name + title | semmle.label | name + title |
+| graph-ql.js:39:26:39:30 | title | semmle.label | title |
+| graph-ql.js:54:21:54:29 | variables | semmle.label | variables |
| module.js:9:16:9:29 | req.query.code | semmle.label | req.query.code |
| module.js:11:17:11:30 | req.query.code | semmle.label | req.query.code |
| react-native.js:7:7:7:13 | tainted | semmle.label | tainted |
diff --git a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
index f33d6c7f4d00..f68f47cf3acd 100644
--- a/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
+++ b/javascript/ql/test/query-tests/Security/CWE-094/CodeInjection/graph-ql.js
@@ -36,7 +36,7 @@ app.post('/graphql', async (req, res) => {
const root1 = {
greet: ({ name, title }) => {
- return eval(name + title).toString(); // $ MISSING: Alert[js/code-injection]
+ return eval(name + title).toString(); // $ Alert[js/code-injection]
}
};
graphql({
From afc98cacbedf7952f6e3c61683e1a10121ba5fc5 Mon Sep 17 00:00:00 2001
From: Anders Schack-Mulligen
Date: Wed, 17 Sep 2025 12:49:25 +0200
Subject: [PATCH 134/219] C#: Add change note.
---
csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md
diff --git a/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md b/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md
new file mode 100644
index 000000000000..49b76c25b0bc
--- /dev/null
+++ b/csharp/ql/src/change-notes/2025-09-17-nullguard-pattern.md
@@ -0,0 +1,4 @@
+---
+category: minorAnalysis
+---
+* The modeling of null guards based on complex pattern expressions has been improved, which in turn improves the query `cs/dereferenced-value-may-be-null` by removing false positives.
From 1bccf42556fa214a6e7d44e3f0322cc09d008b09 Mon Sep 17 00:00:00 2001
From: Geoffrey White <40627776+geoffw0@users.noreply.github.com>
Date: Wed, 17 Sep 2025 13:59:54 +0100
Subject: [PATCH 135/219] Rust: Update test results following fix on main.
---
.../library-tests/dataflow/local/DataFlowStep.expected | 5 +++--
.../library-tests/dataflow/local/inline-flow.expected | 8 ++++++++
rust/ql/test/library-tests/dataflow/local/main.rs | 2 +-
3 files changed, 12 insertions(+), 3 deletions(-)
diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected
index 0af30149e749..b2fc845081cd 100644
--- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected
+++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected
@@ -111,11 +111,12 @@ localStep
| main.rs:77:9:77:9 | k | main.rs:77:5:77:5 | j |
| main.rs:77:9:77:9 | k | main.rs:79:10:79:10 | k |
| main.rs:81:9:81:13 | mut l | main.rs:81:13:81:13 | l |
+| main.rs:81:13:81:13 | [SSA] l | main.rs:82:9:82:9 | l |
+| main.rs:81:13:81:13 | l | main.rs:81:13:81:13 | [SSA] l |
| main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l |
-| main.rs:82:5:82:5 | [SSA] l | main.rs:82:9:82:9 | l |
+| main.rs:82:5:82:5 | [SSA] l | main.rs:83:10:83:10 | l |
| main.rs:82:5:82:5 | l | main.rs:82:5:82:5 | [SSA] l |
| main.rs:82:9:82:9 | l | main.rs:82:5:82:5 | l |
-| main.rs:82:9:82:9 | l | main.rs:83:10:83:10 | l |
| main.rs:87:9:87:9 | [SSA] a | main.rs:88:5:88:5 | a |
| main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | [SSA] a |
| main.rs:87:9:87:9 | a | main.rs:87:9:87:9 | a |
diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected
index eafe3a7452eb..00640ed9aa47 100644
--- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected
+++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected
@@ -31,6 +31,9 @@ edges
| main.rs:76:9:76:9 | k | main.rs:79:10:79:10 | k | provenance | |
| main.rs:76:13:76:21 | source(...) | main.rs:76:9:76:9 | k | provenance | |
| main.rs:77:5:77:5 | j | main.rs:78:10:78:10 | j | provenance | |
+| main.rs:81:9:81:13 | mut l | main.rs:82:5:82:5 | l | provenance | |
+| main.rs:81:17:81:25 | source(...) | main.rs:81:9:81:13 | mut l | provenance | |
+| main.rs:82:5:82:5 | l | main.rs:83:10:83:10 | l | provenance | |
| main.rs:115:9:115:9 | i [&ref] | main.rs:116:11:116:11 | i [&ref] | provenance | |
| main.rs:115:13:115:31 | ...::new(...) [&ref] | main.rs:115:9:115:9 | i [&ref] | provenance | |
| main.rs:115:22:115:30 | source(...) | main.rs:115:13:115:31 | ...::new(...) [&ref] | provenance | MaD:1 |
@@ -279,6 +282,10 @@ nodes
| main.rs:77:5:77:5 | j | semmle.label | j |
| main.rs:78:10:78:10 | j | semmle.label | j |
| main.rs:79:10:79:10 | k | semmle.label | k |
+| main.rs:81:9:81:13 | mut l | semmle.label | mut l |
+| main.rs:81:17:81:25 | source(...) | semmle.label | source(...) |
+| main.rs:82:5:82:5 | l | semmle.label | l |
+| main.rs:83:10:83:10 | l | semmle.label | l |
| main.rs:115:9:115:9 | i [&ref] | semmle.label | i [&ref] |
| main.rs:115:13:115:31 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
| main.rs:115:22:115:30 | source(...) | semmle.label | source(...) |
@@ -553,6 +560,7 @@ testFailures
| main.rs:71:10:71:10 | i | main.rs:70:9:70:17 | source(...) | main.rs:71:10:71:10 | i | $@ | main.rs:70:9:70:17 | source(...) | source(...) |
| main.rs:78:10:78:10 | j | main.rs:76:13:76:21 | source(...) | main.rs:78:10:78:10 | j | $@ | main.rs:76:13:76:21 | source(...) | source(...) |
| main.rs:79:10:79:10 | k | main.rs:76:13:76:21 | source(...) | main.rs:79:10:79:10 | k | $@ | main.rs:76:13:76:21 | source(...) | source(...) |
+| main.rs:83:10:83:10 | l | main.rs:81:17:81:25 | source(...) | main.rs:83:10:83:10 | l | $@ | main.rs:81:17:81:25 | source(...) | source(...) |
| main.rs:116:10:116:11 | * ... | main.rs:115:22:115:30 | source(...) | main.rs:116:10:116:11 | * ... | $@ | main.rs:115:22:115:30 | source(...) | source(...) |
| main.rs:124:10:124:12 | a.0 | main.rs:123:14:123:22 | source(...) | main.rs:124:10:124:12 | a.0 | $@ | main.rs:123:14:123:22 | source(...) | source(...) |
| main.rs:132:10:132:11 | a1 | main.rs:129:17:129:26 | source(...) | main.rs:132:10:132:11 | a1 | $@ | main.rs:129:17:129:26 | source(...) | source(...) |
diff --git a/rust/ql/test/library-tests/dataflow/local/main.rs b/rust/ql/test/library-tests/dataflow/local/main.rs
index d352eb0cbf19..7cab42da52b4 100644
--- a/rust/ql/test/library-tests/dataflow/local/main.rs
+++ b/rust/ql/test/library-tests/dataflow/local/main.rs
@@ -80,7 +80,7 @@ fn assignment() {
let mut l = source(8);
l = l;
- sink(l); // $ MISSING: hasValueFlow=8
+ sink(l); // $ hasValueFlow=8
}
fn block_expression1() -> i64 {
From d5a238768c6c232620dbc8912fd2e60f62029668 Mon Sep 17 00:00:00 2001
From: Anders Schack-Mulligen
Date: Wed, 17 Sep 2025 16:37:23 +0200
Subject: [PATCH 136/219] Shared/Cfg: Fix missing JoinBlockPredecessor.
---
shared/controlflow/codeql/controlflow/Cfg.qll | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/shared/controlflow/codeql/controlflow/Cfg.qll b/shared/controlflow/codeql/controlflow/Cfg.qll
index 4945c8da9cfa..9e0943854057 100644
--- a/shared/controlflow/codeql/controlflow/Cfg.qll
+++ b/shared/controlflow/codeql/controlflow/Cfg.qll
@@ -1020,6 +1020,12 @@ module MakeWithSplitting<
not jbp instanceof BasicBlocks::EntryBasicBlock and
id = idOfAstNode(jbp.getFirstNode().(AstCfgNode).getAstNode()) and
kind = 1
+ or
+ exists(AnnotatedExitNode aen |
+ jbp.getFirstNode() = aen and
+ id = idOfCfgScope(aen.getScope()) and
+ if aen.isNormal() then kind = 2 else kind = 3
+ )
}
string getSplitString(BasicBlocks::JoinPredecessorBasicBlock jbp) {
From 34b40a14e876481909726ce811663a9683d1d62a Mon Sep 17 00:00:00 2001
From: Alex Eyers-Taylor
Date: Wed, 17 Sep 2025 16:22:22 +0100
Subject: [PATCH 137/219] Java: Make a TC overlay caller.
---
java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll | 1 +
1 file changed, 1 insertion(+)
diff --git a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll
index 4b436edc6aa6..23e9f680c974 100644
--- a/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll
+++ b/java/ql/lib/semmle/code/java/dataflow/internal/DataFlowUtil.qll
@@ -83,6 +83,7 @@ overlay[caller?]
pragma[inline]
predicate localFlow(Node node1, Node node2) { node1 = node2 or localFlowStepPlus(node1, node2) }
+overlay[caller?]
private predicate localFlowStepPlus(Node node1, Node node2) = fastTC(localFlowStep/2)(node1, node2)
/**
From aba2cb487e7ef76dee681c2af85f789091e09670 Mon Sep 17 00:00:00 2001
From: Tom Hvitved
Date: Wed, 17 Sep 2025 20:27:10 +0200
Subject: [PATCH 138/219] Rust: Convert data flow test to `@kind path-problem`
---
.../dataflow/sources/InlineFlow.expected | 1779 +++++++++++++++++
.../dataflow/sources/InlineFlow.ql | 9 +
2 files changed, 1788 insertions(+)
diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
index e69de29bb2d1..88a728253d80 100644
--- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
+++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
@@ -0,0 +1,1779 @@
+models
+| 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 3 | Source: ::file_name; ReturnValue; file |
+| 4 | Source: ::path; ReturnValue; file |
+| 5 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 6 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 7 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 8 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 9 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 10 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 11 | Source: ::file_name; ReturnValue; file |
+| 12 | Source: ::path; ReturnValue; file |
+| 13 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 14 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 15 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 16 | Source: std::env::args; ReturnValue.Element; commandargs |
+| 17 | Source: std::env::args_os; ReturnValue.Element; commandargs |
+| 18 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
+| 19 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
+| 20 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs |
+| 21 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment |
+| 22 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment |
+| 23 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 24 | Source: std::fs::read; ReturnValue; file |
+| 25 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 26 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 27 | Source: std::fs::read_to_string; ReturnValue; file |
+| 28 | Source: std::io::stdio::stdin; ReturnValue; stdin |
+| 29 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 30 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 31 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 32 | Source: tokio::io::stdin::stdin; ReturnValue; stdin |
+| 33 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
+| 34 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value |
+| 35 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
+| 36 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint |
+| 37 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 38 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint |
+| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint |
+| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 42 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint |
+| 43 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
+| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint |
+| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 46 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint |
+| 47 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 48 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 49 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint |
+| 50 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint |
+| 51 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint |
+| 52 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint |
+| 53 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint |
+| 54 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint |
+| 55 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 56 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 57 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint |
+| 58 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 59 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint |
+| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint |
+| 63 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
+| 64 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint |
+| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint |
+| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 72 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
+| 73 | Summary: ::as_str; Argument[self]; ReturnValue; value |
+| 74 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
+| 75 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
+| 76 | Summary: ::new; Argument[0].Reference; ReturnValue; value |
+| 77 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value |
+| 78 | Summary: ::new; Argument[0]; ReturnValue; value |
+| 79 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
+| 80 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
+| 81 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
+| 82 | Summary: ::as_str; Argument[self]; ReturnValue; value |
+| 83 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 84 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 85 | Summary: ::new; Argument[0]; ReturnValue; taint |
+| 86 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 87 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
+| 88 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 89 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 90 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 91 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 92 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
+| 93 | Summary: ::read; Argument[self]; Argument[0]; taint |
+| 94 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 95 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint |
+| 96 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 97 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint |
+| 98 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint |
+| 99 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 100 | Summary: ::buffer; Argument[self]; ReturnValue; taint |
+| 101 | Summary: ::new; Argument[0]; ReturnValue; taint |
+| 102 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
+| 103 | Summary: ::read; Argument[self]; Argument[0]; taint |
+| 104 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint |
+| 105 | Summary: ::read_exact; Argument[self]; Argument[0]; taint |
+| 106 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 107 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 108 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint |
+| 109 | Summary: ::lock; Argument[self]; ReturnValue; taint |
+| 110 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 111 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
+| 112 | Summary: ::as_path; Argument[self]; ReturnValue; value |
+| 113 | Summary: ::buffer; Argument[self]; ReturnValue; taint |
+| 114 | Summary: ::new; Argument[0]; ReturnValue; taint |
+| 115 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
+| 116 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
+| 117 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint |
+| 118 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint |
+| 119 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint |
+edges
+| test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | provenance | Src:MaD:21 |
+| test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | provenance | Src:MaD:22 |
+| test.rs:11:9:11:12 | var1 | test.rs:14:10:14:13 | var1 | provenance | |
+| test.rs:11:16:11:28 | ...::var | test.rs:11:16:11:36 | ...::var(...) [Ok] | provenance | Src:MaD:21 |
+| test.rs:11:16:11:36 | ...::var(...) [Ok] | test.rs:11:16:11:59 | ... .expect(...) | provenance | MaD:79 |
+| test.rs:11:16:11:59 | ... .expect(...) | test.rs:11:9:11:12 | var1 | provenance | |
+| test.rs:12:9:12:12 | var2 | test.rs:15:10:15:13 | var2 | provenance | |
+| test.rs:12:16:12:31 | ...::var_os | test.rs:12:16:12:39 | ...::var_os(...) [Some] | provenance | Src:MaD:22 |
+| test.rs:12:16:12:39 | ...::var_os(...) [Some] | test.rs:12:16:12:48 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:12:16:12:48 | ... .unwrap() | test.rs:12:9:12:12 | var2 | provenance | |
+| test.rs:29:9:29:12 | args [element] | test.rs:30:20:30:23 | args [element] | provenance | |
+| test.rs:29:9:29:12 | args [element] | test.rs:31:17:31:20 | args [element] | provenance | |
+| test.rs:29:29:29:42 | ...::args | test.rs:29:29:29:44 | ...::args(...) [element] | provenance | Src:MaD:16 |
+| test.rs:29:29:29:44 | ...::args(...) [element] | test.rs:29:29:29:54 | ... .collect() [element] | provenance | MaD:34 |
+| test.rs:29:29:29:54 | ... .collect() [element] | test.rs:29:9:29:12 | args [element] | provenance | |
+| test.rs:30:9:30:15 | my_path [&ref] | test.rs:36:10:36:16 | my_path | provenance | |
+| test.rs:30:19:30:26 | &... [&ref] | test.rs:30:9:30:15 | my_path [&ref] | provenance | |
+| test.rs:30:20:30:23 | args [element] | test.rs:30:20:30:26 | args[0] | provenance | |
+| test.rs:30:20:30:26 | args[0] | test.rs:30:19:30:26 | &... [&ref] | provenance | |
+| test.rs:31:9:31:12 | arg1 [&ref] | test.rs:37:10:37:13 | arg1 | provenance | |
+| test.rs:31:16:31:23 | &... [&ref] | test.rs:31:9:31:12 | arg1 [&ref] | provenance | |
+| test.rs:31:17:31:20 | args [element] | test.rs:31:17:31:23 | args[1] | provenance | |
+| test.rs:31:17:31:23 | args[1] | test.rs:31:16:31:23 | &... [&ref] | provenance | |
+| test.rs:32:9:32:12 | arg2 | test.rs:38:10:38:13 | arg2 | provenance | |
+| test.rs:32:16:32:29 | ...::args | test.rs:32:16:32:31 | ...::args(...) [element] | provenance | Src:MaD:16 |
+| test.rs:32:16:32:31 | ...::args(...) [element] | test.rs:32:16:32:38 | ... .nth(...) [Some] | provenance | MaD:35 |
+| test.rs:32:16:32:38 | ... .nth(...) [Some] | test.rs:32:16:32:47 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:32:16:32:47 | ... .unwrap() | test.rs:32:9:32:12 | arg2 | provenance | |
+| test.rs:33:9:33:12 | arg3 | test.rs:39:10:39:13 | arg3 | provenance | |
+| test.rs:33:16:33:32 | ...::args_os | test.rs:33:16:33:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 |
+| test.rs:33:16:33:34 | ...::args_os(...) [element] | test.rs:33:16:33:41 | ... .nth(...) [Some] | provenance | MaD:35 |
+| test.rs:33:16:33:41 | ... .nth(...) [Some] | test.rs:33:16:33:50 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:33:16:33:50 | ... .unwrap() | test.rs:33:9:33:12 | arg3 | provenance | |
+| test.rs:34:9:34:12 | arg4 | test.rs:40:10:40:13 | arg4 | provenance | |
+| test.rs:34:16:34:29 | ...::args | test.rs:34:16:34:31 | ...::args(...) [element] | provenance | Src:MaD:16 |
+| test.rs:34:16:34:31 | ...::args(...) [element] | test.rs:34:16:34:38 | ... .nth(...) [Some] | provenance | MaD:35 |
+| test.rs:34:16:34:38 | ... .nth(...) [Some] | test.rs:34:16:34:47 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:34:16:34:47 | ... .unwrap() | test.rs:34:16:34:64 | ... .parse() [Ok] | provenance | MaD:83 |
+| test.rs:34:16:34:64 | ... .parse() [Ok] | test.rs:34:16:34:73 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:34:16:34:73 | ... .unwrap() | test.rs:34:9:34:12 | arg4 | provenance | |
+| test.rs:42:9:42:11 | arg | test.rs:43:14:43:16 | arg | provenance | |
+| test.rs:42:16:42:29 | ...::args | test.rs:42:16:42:31 | ...::args(...) [element] | provenance | Src:MaD:16 |
+| test.rs:42:16:42:31 | ...::args(...) [element] | test.rs:42:9:42:11 | arg | provenance | |
+| test.rs:46:9:46:11 | arg | test.rs:47:14:47:16 | arg | provenance | |
+| test.rs:46:16:46:32 | ...::args_os | test.rs:46:16:46:34 | ...::args_os(...) [element] | provenance | Src:MaD:17 |
+| test.rs:46:16:46:34 | ...::args_os(...) [element] | test.rs:46:9:46:11 | arg | provenance | |
+| test.rs:52:9:52:11 | dir | test.rs:56:10:56:12 | dir | provenance | |
+| test.rs:52:15:52:35 | ...::current_dir | test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | provenance | Src:MaD:18 |
+| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | test.rs:52:15:52:54 | ... .expect(...) | provenance | MaD:79 |
+| test.rs:52:15:52:54 | ... .expect(...) | test.rs:52:9:52:11 | dir | provenance | |
+| test.rs:53:9:53:11 | exe | test.rs:57:10:57:12 | exe | provenance | |
+| test.rs:53:15:53:35 | ...::current_exe | test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | provenance | Src:MaD:19 |
+| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | test.rs:53:15:53:54 | ... .expect(...) | provenance | MaD:79 |
+| test.rs:53:15:53:54 | ... .expect(...) | test.rs:53:9:53:11 | exe | provenance | |
+| test.rs:54:9:54:12 | home | test.rs:58:10:58:13 | home | provenance | |
+| test.rs:54:16:54:33 | ...::home_dir | test.rs:54:16:54:35 | ...::home_dir(...) [Some] | provenance | Src:MaD:20 |
+| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | test.rs:54:16:54:52 | ... .expect(...) | provenance | MaD:74 |
+| test.rs:54:16:54:52 | ... .expect(...) | test.rs:54:9:54:12 | home | provenance | |
+| test.rs:62:9:62:22 | remote_string1 | test.rs:63:10:63:23 | remote_string1 | provenance | |
+| test.rs:62:26:62:47 | ...::get | test.rs:62:26:62:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 |
+| test.rs:62:26:62:62 | ...::get(...) [Ok] | test.rs:62:26:62:63 | TryExpr | provenance | |
+| test.rs:62:26:62:63 | TryExpr | test.rs:62:26:62:70 | ... .text() [Ok] | provenance | MaD:90 |
+| test.rs:62:26:62:70 | ... .text() [Ok] | test.rs:62:26:62:71 | TryExpr | provenance | |
+| test.rs:62:26:62:71 | TryExpr | test.rs:62:9:62:22 | remote_string1 | provenance | |
+| test.rs:65:9:65:22 | remote_string2 | test.rs:66:10:66:23 | remote_string2 | provenance | |
+| test.rs:65:26:65:47 | ...::get | test.rs:65:26:65:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 |
+| test.rs:65:26:65:62 | ...::get(...) [Ok] | test.rs:65:26:65:71 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:65:26:65:71 | ... .unwrap() | test.rs:65:26:65:78 | ... .text() [Ok] | provenance | MaD:90 |
+| test.rs:65:26:65:78 | ... .text() [Ok] | test.rs:65:26:65:87 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:65:26:65:87 | ... .unwrap() | test.rs:65:9:65:22 | remote_string2 | provenance | |
+| test.rs:68:9:68:22 | remote_string3 | test.rs:69:10:69:23 | remote_string3 | provenance | |
+| test.rs:68:26:68:47 | ...::get | test.rs:68:26:68:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 |
+| test.rs:68:26:68:62 | ...::get(...) [Ok] | test.rs:68:26:68:71 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:68:26:68:71 | ... .unwrap() | test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | provenance | MaD:91 |
+| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | test.rs:68:26:68:107 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:68:26:68:107 | ... .unwrap() | test.rs:68:9:68:22 | remote_string3 | provenance | |
+| test.rs:71:9:71:22 | remote_string4 | test.rs:72:10:72:23 | remote_string4 | provenance | |
+| test.rs:71:26:71:47 | ...::get | test.rs:71:26:71:62 | ...::get(...) [Ok] | provenance | Src:MaD:14 |
+| test.rs:71:26:71:62 | ...::get(...) [Ok] | test.rs:71:26:71:71 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:71:26:71:71 | ... .unwrap() | test.rs:71:26:71:79 | ... .bytes() [Ok] | provenance | MaD:89 |
+| test.rs:71:26:71:79 | ... .bytes() [Ok] | test.rs:71:26:71:88 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:71:26:71:88 | ... .unwrap() | test.rs:71:9:71:22 | remote_string4 | provenance | |
+| test.rs:74:9:74:22 | remote_string5 | test.rs:75:10:75:23 | remote_string5 | provenance | |
+| test.rs:74:26:74:37 | ...::get | test.rs:74:26:74:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 |
+| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | test.rs:74:26:74:58 | await ... [Ok] | provenance | |
+| test.rs:74:26:74:58 | await ... [Ok] | test.rs:74:26:74:59 | TryExpr | provenance | |
+| test.rs:74:26:74:59 | TryExpr | test.rs:74:26:74:66 | ... .text() [future, Ok] | provenance | MaD:88 |
+| test.rs:74:26:74:66 | ... .text() [future, Ok] | test.rs:74:26:74:72 | await ... [Ok] | provenance | |
+| test.rs:74:26:74:72 | await ... [Ok] | test.rs:74:26:74:73 | TryExpr | provenance | |
+| test.rs:74:26:74:73 | TryExpr | test.rs:74:9:74:22 | remote_string5 | provenance | |
+| test.rs:77:9:77:22 | remote_string6 | test.rs:78:10:78:23 | remote_string6 | provenance | |
+| test.rs:77:26:77:37 | ...::get | test.rs:77:26:77:52 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 |
+| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | test.rs:77:26:77:58 | await ... [Ok] | provenance | |
+| test.rs:77:26:77:58 | await ... [Ok] | test.rs:77:26:77:59 | TryExpr | provenance | |
+| test.rs:77:26:77:59 | TryExpr | test.rs:77:26:77:67 | ... .bytes() [future, Ok] | provenance | MaD:86 |
+| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | test.rs:77:26:77:73 | await ... [Ok] | provenance | |
+| test.rs:77:26:77:73 | await ... [Ok] | test.rs:77:26:77:74 | TryExpr | provenance | |
+| test.rs:77:26:77:74 | TryExpr | test.rs:77:9:77:22 | remote_string6 | provenance | |
+| test.rs:80:9:80:20 | mut request1 | test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 |
+| test.rs:80:9:80:20 | mut request1 | test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | provenance | MaD:87 |
+| test.rs:80:24:80:35 | ...::get | test.rs:80:24:80:50 | ...::get(...) [future, Ok] | provenance | Src:MaD:15 |
+| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | test.rs:80:24:80:56 | await ... [Ok] | provenance | |
+| test.rs:80:24:80:56 | await ... [Ok] | test.rs:80:24:80:57 | TryExpr | provenance | |
+| test.rs:80:24:80:57 | TryExpr | test.rs:80:9:80:20 | mut request1 | provenance | |
+| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | test.rs:81:10:81:31 | await ... [Ok, Some] | provenance | |
+| test.rs:81:10:81:31 | await ... [Ok, Some] | test.rs:81:10:81:32 | TryExpr [Some] | provenance | |
+| test.rs:81:10:81:32 | TryExpr [Some] | test.rs:81:10:81:41 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:82:15:82:25 | Some(...) [Some] | test.rs:82:20:82:24 | chunk | provenance | |
+| test.rs:82:20:82:24 | chunk | test.rs:83:14:83:18 | chunk | provenance | |
+| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | test.rs:82:29:82:50 | await ... [Ok, Some] | provenance | |
+| test.rs:82:29:82:50 | await ... [Ok, Some] | test.rs:82:29:82:51 | TryExpr [Some] | provenance | |
+| test.rs:82:29:82:51 | TryExpr [Some] | test.rs:82:15:82:25 | Some(...) [Some] | provenance | |
+| test.rs:114:13:114:20 | response | test.rs:115:15:115:22 | response | provenance | |
+| test.rs:114:13:114:20 | response | test.rs:116:14:116:21 | response | provenance | |
+| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | test.rs:114:24:114:57 | await ... [Ok] | provenance | |
+| test.rs:114:24:114:57 | await ... [Ok] | test.rs:114:24:114:58 | TryExpr | provenance | |
+| test.rs:114:24:114:58 | TryExpr | test.rs:114:13:114:20 | response | provenance | |
+| test.rs:114:31:114:42 | send_request | test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 |
+| test.rs:115:15:115:22 | response | test.rs:115:14:115:22 | &response | provenance | |
+| test.rs:121:9:121:20 | mut response | test.rs:122:11:122:18 | response | provenance | |
+| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | test.rs:121:24:121:57 | await ... [Ok] | provenance | |
+| test.rs:121:24:121:57 | await ... [Ok] | test.rs:121:24:121:58 | TryExpr | provenance | |
+| test.rs:121:24:121:58 | TryExpr | test.rs:121:9:121:20 | mut response | provenance | |
+| test.rs:121:31:121:42 | send_request | test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | provenance | Src:MaD:2 |
+| test.rs:122:11:122:18 | response | test.rs:122:10:122:18 | &response | provenance | |
+| test.rs:211:22:211:35 | ...::stdin | test.rs:211:22:211:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer | provenance | MaD:103 |
+| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:211:22:211:37 | ...::stdin(...) | test.rs:211:44:211:54 | [post] &mut buffer [&ref] | provenance | MaD:102 |
+| test.rs:211:44:211:54 | [post] &mut buffer | test.rs:212:15:212:20 | buffer | provenance | |
+| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | test.rs:211:49:211:54 | [post] buffer | provenance | |
+| test.rs:211:49:211:54 | [post] buffer | test.rs:212:15:212:20 | buffer | provenance | |
+| test.rs:212:15:212:20 | buffer | test.rs:212:14:212:20 | &buffer | provenance | |
+| test.rs:217:22:217:35 | ...::stdin | test.rs:217:22:217:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:55 |
+| test.rs:217:22:217:37 | ...::stdin(...) | test.rs:217:51:217:61 | [post] &mut buffer [&ref] | provenance | MaD:106 |
+| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | test.rs:217:56:217:61 | [post] buffer | provenance | |
+| test.rs:217:56:217:61 | [post] buffer | test.rs:218:15:218:20 | buffer | provenance | |
+| test.rs:218:15:218:20 | buffer | test.rs:218:14:218:20 | &buffer | provenance | |
+| test.rs:223:22:223:35 | ...::stdin | test.rs:223:22:223:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer | provenance | MaD:108 |
+| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:56 |
+| test.rs:223:22:223:37 | ...::stdin(...) | test.rs:223:54:223:64 | [post] &mut buffer [&ref] | provenance | MaD:107 |
+| test.rs:223:54:223:64 | [post] &mut buffer | test.rs:224:15:224:20 | buffer | provenance | |
+| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | test.rs:223:59:223:64 | [post] buffer | provenance | |
+| test.rs:223:59:223:64 | [post] buffer | test.rs:224:15:224:20 | buffer | provenance | |
+| test.rs:224:15:224:20 | buffer | test.rs:224:14:224:20 | &buffer | provenance | |
+| test.rs:229:22:229:35 | ...::stdin | test.rs:229:22:229:37 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:229:22:229:37 | ...::stdin(...) | test.rs:229:22:229:44 | ... .lock() | provenance | MaD:109 |
+| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:56 |
+| test.rs:229:22:229:44 | ... .lock() | test.rs:229:61:229:71 | [post] &mut buffer [&ref] | provenance | MaD:110 |
+| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | test.rs:229:66:229:71 | [post] buffer | provenance | |
+| test.rs:229:66:229:71 | [post] buffer | test.rs:230:15:230:20 | buffer | provenance | |
+| test.rs:230:15:230:20 | buffer | test.rs:230:14:230:20 | &buffer | provenance | |
+| test.rs:235:9:235:22 | ...::stdin | test.rs:235:9:235:24 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer | provenance | MaD:105 |
+| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:54 |
+| test.rs:235:9:235:24 | ...::stdin(...) | test.rs:235:37:235:47 | [post] &mut buffer [&ref] | provenance | MaD:104 |
+| test.rs:235:37:235:47 | [post] &mut buffer | test.rs:236:15:236:20 | buffer | provenance | |
+| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | test.rs:235:42:235:47 | [post] buffer | provenance | |
+| test.rs:235:42:235:47 | [post] buffer | test.rs:236:15:236:20 | buffer | provenance | |
+| test.rs:236:15:236:20 | buffer | test.rs:236:14:236:20 | &buffer | provenance | |
+| test.rs:239:17:239:30 | ...::stdin | test.rs:239:17:239:32 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:239:17:239:32 | ...::stdin(...) | test.rs:239:17:239:40 | ... .bytes() | provenance | MaD:50 |
+| test.rs:239:17:239:40 | ... .bytes() | test.rs:240:14:240:17 | byte | provenance | |
+| test.rs:246:13:246:22 | mut reader | test.rs:247:20:247:36 | reader.fill_buf() [Ok] | provenance | MaD:99 |
+| test.rs:246:26:246:66 | ...::new(...) | test.rs:246:13:246:22 | mut reader | provenance | |
+| test.rs:246:50:246:63 | ...::stdin | test.rs:246:50:246:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:246:50:246:65 | ...::stdin(...) | test.rs:246:26:246:66 | ...::new(...) | provenance | MaD:101 |
+| test.rs:247:13:247:16 | data | test.rs:248:15:248:18 | data | provenance | |
+| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | test.rs:247:20:247:37 | TryExpr | provenance | |
+| test.rs:247:20:247:37 | TryExpr | test.rs:247:13:247:16 | data | provenance | |
+| test.rs:248:15:248:18 | data | test.rs:248:14:248:18 | &data | provenance | |
+| test.rs:252:13:252:18 | reader | test.rs:253:20:253:34 | reader.buffer() | provenance | MaD:100 |
+| test.rs:252:22:252:62 | ...::new(...) | test.rs:252:13:252:18 | reader | provenance | |
+| test.rs:252:46:252:59 | ...::stdin | test.rs:252:46:252:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:252:46:252:61 | ...::stdin(...) | test.rs:252:22:252:62 | ...::new(...) | provenance | MaD:101 |
+| test.rs:253:13:253:16 | data | test.rs:254:15:254:18 | data | provenance | |
+| test.rs:253:20:253:34 | reader.buffer() | test.rs:253:13:253:16 | data | provenance | |
+| test.rs:254:15:254:18 | data | test.rs:254:14:254:18 | &data | provenance | |
+| test.rs:259:13:259:22 | mut reader | test.rs:260:26:260:36 | [post] &mut buffer [&ref] | provenance | MaD:47 |
+| test.rs:259:26:259:66 | ...::new(...) | test.rs:259:13:259:22 | mut reader | provenance | |
+| test.rs:259:50:259:63 | ...::stdin | test.rs:259:50:259:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:259:50:259:65 | ...::stdin(...) | test.rs:259:26:259:66 | ...::new(...) | provenance | MaD:101 |
+| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | test.rs:260:31:260:36 | [post] buffer | provenance | |
+| test.rs:260:31:260:36 | [post] buffer | test.rs:261:15:261:20 | buffer | provenance | |
+| test.rs:261:15:261:20 | buffer | test.rs:261:14:261:20 | &buffer | provenance | |
+| test.rs:266:13:266:22 | mut reader | test.rs:267:33:267:43 | [post] &mut buffer [&ref] | provenance | MaD:48 |
+| test.rs:266:26:266:66 | ...::new(...) | test.rs:266:13:266:22 | mut reader | provenance | |
+| test.rs:266:50:266:63 | ...::stdin | test.rs:266:50:266:65 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:266:50:266:65 | ...::stdin(...) | test.rs:266:26:266:66 | ...::new(...) | provenance | MaD:101 |
+| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | test.rs:267:38:267:43 | [post] buffer | provenance | |
+| test.rs:267:38:267:43 | [post] buffer | test.rs:268:15:268:20 | buffer | provenance | |
+| test.rs:267:38:267:43 | [post] buffer | test.rs:269:14:269:22 | buffer[0] | provenance | |
+| test.rs:268:15:268:20 | buffer | test.rs:268:14:268:20 | &buffer | provenance | |
+| test.rs:273:13:273:28 | mut reader_split | test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | provenance | MaD:98 |
+| test.rs:273:13:273:28 | mut reader_split | test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | provenance | MaD:98 |
+| test.rs:273:32:273:72 | ...::new(...) | test.rs:273:32:273:84 | ... .split(...) | provenance | MaD:49 |
+| test.rs:273:32:273:84 | ... .split(...) | test.rs:273:13:273:28 | mut reader_split | provenance | |
+| test.rs:273:56:273:69 | ...::stdin | test.rs:273:56:273:71 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:273:56:273:71 | ...::stdin(...) | test.rs:273:32:273:72 | ...::new(...) | provenance | MaD:101 |
+| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | test.rs:274:14:274:41 | ... .unwrap() [Ok] | provenance | MaD:75 |
+| test.rs:274:14:274:41 | ... .unwrap() [Ok] | test.rs:274:14:274:50 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:275:19:275:29 | Some(...) [Some, Ok] | test.rs:275:24:275:28 | chunk [Ok] | provenance | |
+| test.rs:275:24:275:28 | chunk [Ok] | test.rs:276:18:276:31 | chunk.unwrap() | provenance | MaD:80 |
+| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | test.rs:275:19:275:29 | Some(...) [Some, Ok] | provenance | |
+| test.rs:281:13:281:18 | reader | test.rs:282:21:282:34 | reader.lines() | provenance | MaD:46 |
+| test.rs:281:22:281:62 | ...::new(...) | test.rs:281:13:281:18 | reader | provenance | |
+| test.rs:281:46:281:59 | ...::stdin | test.rs:281:46:281:61 | ...::stdin(...) | provenance | Src:MaD:28 MaD:28 |
+| test.rs:281:46:281:61 | ...::stdin(...) | test.rs:281:22:281:62 | ...::new(...) | provenance | MaD:101 |
+| test.rs:282:21:282:34 | reader.lines() | test.rs:283:18:283:21 | line | provenance | |
+| test.rs:309:13:309:21 | mut stdin | test.rs:311:33:311:43 | [post] &mut buffer [&ref] | provenance | MaD:63 |
+| test.rs:309:25:309:40 | ...::stdin | test.rs:309:25:309:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:309:25:309:42 | ...::stdin(...) | test.rs:309:13:309:21 | mut stdin | provenance | |
+| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | test.rs:311:38:311:43 | [post] buffer | provenance | |
+| test.rs:311:38:311:43 | [post] buffer | test.rs:312:15:312:20 | buffer | provenance | |
+| test.rs:312:15:312:20 | buffer | test.rs:312:14:312:20 | &buffer | provenance | |
+| test.rs:316:13:316:21 | mut stdin | test.rs:318:40:318:50 | [post] &mut buffer [&ref] | provenance | MaD:69 |
+| test.rs:316:25:316:40 | ...::stdin | test.rs:316:25:316:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:316:25:316:42 | ...::stdin(...) | test.rs:316:13:316:21 | mut stdin | provenance | |
+| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | test.rs:318:45:318:50 | [post] buffer | provenance | |
+| test.rs:318:45:318:50 | [post] buffer | test.rs:319:15:319:20 | buffer | provenance | |
+| test.rs:319:15:319:20 | buffer | test.rs:319:14:319:20 | &buffer | provenance | |
+| test.rs:323:13:323:21 | mut stdin | test.rs:325:43:325:53 | [post] &mut buffer [&ref] | provenance | MaD:70 |
+| test.rs:323:25:323:40 | ...::stdin | test.rs:323:25:323:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:323:25:323:42 | ...::stdin(...) | test.rs:323:13:323:21 | mut stdin | provenance | |
+| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | test.rs:325:48:325:53 | [post] buffer | provenance | |
+| test.rs:325:48:325:53 | [post] buffer | test.rs:326:15:326:20 | buffer | provenance | |
+| test.rs:326:15:326:20 | buffer | test.rs:326:14:326:20 | &buffer | provenance | |
+| test.rs:330:13:330:21 | mut stdin | test.rs:332:26:332:36 | [post] &mut buffer [&ref] | provenance | MaD:65 |
+| test.rs:330:25:330:40 | ...::stdin | test.rs:330:25:330:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:330:25:330:42 | ...::stdin(...) | test.rs:330:13:330:21 | mut stdin | provenance | |
+| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | test.rs:332:31:332:36 | [post] buffer | provenance | |
+| test.rs:332:31:332:36 | [post] buffer | test.rs:333:15:333:20 | buffer | provenance | |
+| test.rs:333:15:333:20 | buffer | test.rs:333:14:333:20 | &buffer | provenance | |
+| test.rs:337:13:337:21 | mut stdin | test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | provenance | MaD:71 |
+| test.rs:337:13:337:21 | mut stdin | test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | provenance | MaD:67 |
+| test.rs:337:13:337:21 | mut stdin | test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | provenance | MaD:66 |
+| test.rs:337:13:337:21 | mut stdin | test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | provenance | MaD:68 |
+| test.rs:337:25:337:40 | ...::stdin | test.rs:337:25:337:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:337:25:337:42 | ...::stdin(...) | test.rs:337:13:337:21 | mut stdin | provenance | |
+| test.rs:338:13:338:14 | v1 | test.rs:342:14:342:15 | v1 | provenance | |
+| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | test.rs:338:18:338:38 | await ... [Ok] | provenance | |
+| test.rs:338:18:338:38 | await ... [Ok] | test.rs:338:18:338:39 | TryExpr | provenance | |
+| test.rs:338:18:338:39 | TryExpr | test.rs:338:13:338:14 | v1 | provenance | |
+| test.rs:339:13:339:14 | v2 | test.rs:343:14:343:15 | v2 | provenance | |
+| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | test.rs:339:18:339:39 | await ... [Ok] | provenance | |
+| test.rs:339:18:339:39 | await ... [Ok] | test.rs:339:18:339:40 | TryExpr | provenance | |
+| test.rs:339:18:339:40 | TryExpr | test.rs:339:13:339:14 | v2 | provenance | |
+| test.rs:340:13:340:14 | v3 | test.rs:344:14:344:15 | v3 | provenance | |
+| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | test.rs:340:18:340:39 | await ... [Ok] | provenance | |
+| test.rs:340:18:340:39 | await ... [Ok] | test.rs:340:18:340:40 | TryExpr | provenance | |
+| test.rs:340:18:340:40 | TryExpr | test.rs:340:13:340:14 | v3 | provenance | |
+| test.rs:341:13:341:14 | v4 | test.rs:345:14:345:15 | v4 | provenance | |
+| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | test.rs:341:18:341:42 | await ... [Ok] | provenance | |
+| test.rs:341:18:341:42 | await ... [Ok] | test.rs:341:18:341:43 | TryExpr | provenance | |
+| test.rs:341:18:341:43 | TryExpr | test.rs:341:13:341:14 | v4 | provenance | |
+| test.rs:349:13:349:21 | mut stdin | test.rs:351:24:351:34 | [post] &mut buffer [&ref] | provenance | MaD:64 |
+| test.rs:349:25:349:40 | ...::stdin | test.rs:349:25:349:42 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:349:25:349:42 | ...::stdin(...) | test.rs:349:13:349:21 | mut stdin | provenance | |
+| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | test.rs:351:29:351:34 | [post] buffer | provenance | |
+| test.rs:351:29:351:34 | [post] buffer | test.rs:352:15:352:20 | buffer | provenance | |
+| test.rs:352:15:352:20 | buffer | test.rs:352:14:352:20 | &buffer | provenance | |
+| test.rs:358:13:358:22 | mut reader | test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | provenance | MaD:58 |
+| test.rs:358:26:358:70 | ...::new(...) | test.rs:358:13:358:22 | mut reader | provenance | |
+| test.rs:358:52:358:67 | ...::stdin | test.rs:358:52:358:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:358:52:358:69 | ...::stdin(...) | test.rs:358:26:358:70 | ...::new(...) | provenance | MaD:114 |
+| test.rs:359:13:359:16 | data | test.rs:360:15:360:18 | data | provenance | |
+| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | test.rs:359:20:359:42 | await ... [Ok] | provenance | |
+| test.rs:359:20:359:42 | await ... [Ok] | test.rs:359:20:359:43 | TryExpr | provenance | |
+| test.rs:359:20:359:43 | TryExpr | test.rs:359:13:359:16 | data | provenance | |
+| test.rs:360:15:360:18 | data | test.rs:360:14:360:18 | &data | provenance | |
+| test.rs:364:13:364:18 | reader | test.rs:365:20:365:34 | reader.buffer() | provenance | MaD:113 |
+| test.rs:364:22:364:66 | ...::new(...) | test.rs:364:13:364:18 | reader | provenance | |
+| test.rs:364:48:364:63 | ...::stdin | test.rs:364:48:364:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:364:48:364:65 | ...::stdin(...) | test.rs:364:22:364:66 | ...::new(...) | provenance | MaD:114 |
+| test.rs:365:13:365:16 | data | test.rs:366:15:366:18 | data | provenance | |
+| test.rs:365:20:365:34 | reader.buffer() | test.rs:365:13:365:16 | data | provenance | |
+| test.rs:366:15:366:18 | data | test.rs:366:14:366:18 | &data | provenance | |
+| test.rs:371:13:371:22 | mut reader | test.rs:372:26:372:36 | [post] &mut buffer [&ref] | provenance | MaD:60 |
+| test.rs:371:26:371:70 | ...::new(...) | test.rs:371:13:371:22 | mut reader | provenance | |
+| test.rs:371:52:371:67 | ...::stdin | test.rs:371:52:371:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:371:52:371:69 | ...::stdin(...) | test.rs:371:26:371:70 | ...::new(...) | provenance | MaD:114 |
+| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | test.rs:372:31:372:36 | [post] buffer | provenance | |
+| test.rs:372:31:372:36 | [post] buffer | test.rs:373:15:373:20 | buffer | provenance | |
+| test.rs:373:15:373:20 | buffer | test.rs:373:14:373:20 | &buffer | provenance | |
+| test.rs:378:13:378:22 | mut reader | test.rs:379:33:379:43 | [post] &mut buffer [&ref] | provenance | MaD:61 |
+| test.rs:378:26:378:70 | ...::new(...) | test.rs:378:13:378:22 | mut reader | provenance | |
+| test.rs:378:52:378:67 | ...::stdin | test.rs:378:52:378:69 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:378:52:378:69 | ...::stdin(...) | test.rs:378:26:378:70 | ...::new(...) | provenance | MaD:114 |
+| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | test.rs:379:38:379:43 | [post] buffer | provenance | |
+| test.rs:379:38:379:43 | [post] buffer | test.rs:380:15:380:20 | buffer | provenance | |
+| test.rs:379:38:379:43 | [post] buffer | test.rs:381:14:381:22 | buffer[0] | provenance | |
+| test.rs:380:15:380:20 | buffer | test.rs:380:14:380:20 | &buffer | provenance | |
+| test.rs:385:13:385:28 | mut reader_split | test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 |
+| test.rs:385:13:385:28 | mut reader_split | test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | provenance | MaD:116 |
+| test.rs:385:32:385:76 | ...::new(...) | test.rs:385:32:385:88 | ... .split(...) | provenance | MaD:62 |
+| test.rs:385:32:385:88 | ... .split(...) | test.rs:385:13:385:28 | mut reader_split | provenance | |
+| test.rs:385:58:385:73 | ...::stdin | test.rs:385:58:385:75 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:385:58:385:75 | ...::stdin(...) | test.rs:385:32:385:76 | ...::new(...) | provenance | MaD:114 |
+| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | test.rs:386:14:386:46 | await ... [Ok, Some] | provenance | |
+| test.rs:386:14:386:46 | await ... [Ok, Some] | test.rs:386:14:386:47 | TryExpr [Some] | provenance | |
+| test.rs:386:14:386:47 | TryExpr [Some] | test.rs:386:14:386:56 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:387:19:387:29 | Some(...) [Some] | test.rs:387:24:387:28 | chunk | provenance | |
+| test.rs:387:24:387:28 | chunk | test.rs:388:18:388:22 | chunk | provenance | |
+| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | test.rs:387:33:387:65 | await ... [Ok, Some] | provenance | |
+| test.rs:387:33:387:65 | await ... [Ok, Some] | test.rs:387:33:387:66 | TryExpr [Some] | provenance | |
+| test.rs:387:33:387:66 | TryExpr [Some] | test.rs:387:19:387:29 | Some(...) [Some] | provenance | |
+| test.rs:393:13:393:18 | reader | test.rs:394:25:394:38 | reader.lines() | provenance | MaD:59 |
+| test.rs:393:22:393:66 | ...::new(...) | test.rs:393:13:393:18 | reader | provenance | |
+| test.rs:393:48:393:63 | ...::stdin | test.rs:393:48:393:65 | ...::stdin(...) | provenance | Src:MaD:32 MaD:32 |
+| test.rs:393:48:393:65 | ...::stdin(...) | test.rs:393:22:393:66 | ...::new(...) | provenance | MaD:114 |
+| test.rs:394:13:394:21 | mut lines | test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 |
+| test.rs:394:13:394:21 | mut lines | test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | provenance | MaD:115 |
+| test.rs:394:25:394:38 | reader.lines() | test.rs:394:13:394:21 | mut lines | provenance | |
+| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | test.rs:395:14:395:36 | await ... [Ok, Some] | provenance | |
+| test.rs:395:14:395:36 | await ... [Ok, Some] | test.rs:395:14:395:37 | TryExpr [Some] | provenance | |
+| test.rs:395:14:395:37 | TryExpr [Some] | test.rs:395:14:395:46 | ... .unwrap() | provenance | MaD:75 |
+| test.rs:396:19:396:28 | Some(...) [Some] | test.rs:396:24:396:27 | line | provenance | |
+| test.rs:396:24:396:27 | line | test.rs:397:18:397:21 | line | provenance | |
+| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | test.rs:396:32:396:54 | await ... [Ok, Some] | provenance | |
+| test.rs:396:32:396:54 | await ... [Ok, Some] | test.rs:396:32:396:55 | TryExpr [Some] | provenance | |
+| test.rs:396:32:396:55 | TryExpr [Some] | test.rs:396:19:396:28 | Some(...) [Some] | provenance | |
+| test.rs:408:13:408:18 | buffer | test.rs:409:14:409:19 | buffer | provenance | |
+| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:43 | ...::read [Ok] | provenance | Src:MaD:23 |
+| test.rs:408:31:408:43 | ...::read | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | Src:MaD:23 |
+| test.rs:408:31:408:43 | ...::read [Ok] | test.rs:408:31:408:55 | ...::read(...) [Ok] | provenance | MaD:24 |
+| test.rs:408:31:408:55 | ...::read(...) [Ok] | test.rs:408:31:408:56 | TryExpr | provenance | |
+| test.rs:408:31:408:56 | TryExpr | test.rs:408:13:408:18 | buffer | provenance | |
+| test.rs:413:13:413:18 | buffer | test.rs:414:14:414:19 | buffer | provenance | |
+| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:38 | ...::read [Ok] | provenance | Src:MaD:23 |
+| test.rs:413:31:413:38 | ...::read | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | Src:MaD:23 |
+| test.rs:413:31:413:38 | ...::read [Ok] | test.rs:413:31:413:50 | ...::read(...) [Ok] | provenance | MaD:24 |
+| test.rs:413:31:413:50 | ...::read(...) [Ok] | test.rs:413:31:413:51 | TryExpr | provenance | |
+| test.rs:413:31:413:51 | TryExpr | test.rs:413:13:413:18 | buffer | provenance | |
+| test.rs:418:13:418:18 | buffer | test.rs:419:14:419:19 | buffer | provenance | |
+| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:39 | ...::read_to_string [Ok] | provenance | Src:MaD:26 |
+| test.rs:418:22:418:39 | ...::read_to_string | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | Src:MaD:26 |
+| test.rs:418:22:418:39 | ...::read_to_string [Ok] | test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | provenance | MaD:27 |
+| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | test.rs:418:22:418:52 | TryExpr | provenance | |
+| test.rs:418:22:418:52 | TryExpr | test.rs:418:13:418:18 | buffer | provenance | |
+| test.rs:425:13:425:16 | path | test.rs:426:14:426:17 | path | provenance | |
+| test.rs:425:13:425:16 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 |
+| test.rs:425:13:425:16 | path | test.rs:427:14:427:17 | path | provenance | |
+| test.rs:425:13:425:16 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 |
+| test.rs:425:13:425:16 | path | test.rs:437:14:437:17 | path | provenance | |
+| test.rs:425:20:425:27 | e.path() | test.rs:425:13:425:16 | path | provenance | |
+| test.rs:425:22:425:25 | path | test.rs:425:20:425:27 | e.path() | provenance | Src:MaD:4 MaD:4 |
+| test.rs:426:14:426:17 | path | test.rs:426:14:426:25 | path.clone() | provenance | MaD:33 |
+| test.rs:427:14:427:17 | path | test.rs:427:14:427:25 | path.clone() | provenance | MaD:33 |
+| test.rs:427:14:427:25 | path.clone() | test.rs:427:14:427:35 | ... .as_path() | provenance | MaD:112 |
+| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:22 | file_name | provenance | |
+| test.rs:439:13:439:21 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 |
+| test.rs:439:13:439:21 | file_name | test.rs:445:14:445:22 | file_name | provenance | |
+| test.rs:439:25:439:37 | e.file_name() | test.rs:439:13:439:21 | file_name | provenance | |
+| test.rs:439:27:439:35 | file_name | test.rs:439:25:439:37 | e.file_name() | provenance | Src:MaD:3 MaD:3 |
+| test.rs:440:14:440:22 | file_name | test.rs:440:14:440:30 | file_name.clone() | provenance | MaD:33 |
+| test.rs:461:13:461:18 | target | test.rs:462:14:462:19 | target | provenance | |
+| test.rs:461:22:461:34 | ...::read_link | test.rs:461:22:461:49 | ...::read_link(...) [Ok] | provenance | Src:MaD:25 |
+| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | test.rs:461:22:461:50 | TryExpr | provenance | |
+| test.rs:461:22:461:50 | TryExpr | test.rs:461:13:461:18 | target | provenance | |
+| test.rs:470:13:470:18 | buffer | test.rs:471:14:471:19 | buffer | provenance | |
+| test.rs:470:31:470:45 | ...::read | test.rs:470:31:470:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 |
+| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | test.rs:470:31:470:63 | await ... [Ok] | provenance | |
+| test.rs:470:31:470:63 | await ... [Ok] | test.rs:470:31:470:64 | TryExpr | provenance | |
+| test.rs:470:31:470:64 | TryExpr | test.rs:470:13:470:18 | buffer | provenance | |
+| test.rs:475:13:475:18 | buffer | test.rs:476:14:476:19 | buffer | provenance | |
+| test.rs:475:31:475:45 | ...::read | test.rs:475:31:475:57 | ...::read(...) [future, Ok] | provenance | Src:MaD:29 |
+| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | test.rs:475:31:475:63 | await ... [Ok] | provenance | |
+| test.rs:475:31:475:63 | await ... [Ok] | test.rs:475:31:475:64 | TryExpr | provenance | |
+| test.rs:475:31:475:64 | TryExpr | test.rs:475:13:475:18 | buffer | provenance | |
+| test.rs:480:13:480:18 | buffer | test.rs:481:14:481:19 | buffer | provenance | |
+| test.rs:480:22:480:46 | ...::read_to_string | test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | provenance | Src:MaD:31 |
+| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | test.rs:480:22:480:64 | await ... [Ok] | provenance | |
+| test.rs:480:22:480:64 | await ... [Ok] | test.rs:480:22:480:65 | TryExpr | provenance | |
+| test.rs:480:22:480:65 | TryExpr | test.rs:480:13:480:18 | buffer | provenance | |
+| test.rs:486:13:486:16 | path | test.rs:488:14:488:17 | path | provenance | |
+| test.rs:486:20:486:31 | entry.path() | test.rs:486:13:486:16 | path | provenance | |
+| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 |
+| test.rs:486:26:486:29 | path | test.rs:486:20:486:31 | entry.path() | provenance | Src:MaD:12 MaD:12 |
+| test.rs:487:13:487:21 | file_name | test.rs:489:14:489:22 | file_name | provenance | |
+| test.rs:487:25:487:41 | entry.file_name() | test.rs:487:13:487:21 | file_name | provenance | |
+| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 |
+| test.rs:487:31:487:39 | file_name | test.rs:487:25:487:41 | entry.file_name() | provenance | Src:MaD:11 MaD:11 |
+| test.rs:493:13:493:18 | target | test.rs:494:14:494:19 | target | provenance | |
+| test.rs:493:22:493:41 | ...::read_link | test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | provenance | Src:MaD:30 |
+| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | test.rs:493:22:493:62 | await ... [Ok] | provenance | |
+| test.rs:493:22:493:62 | await ... [Ok] | test.rs:493:22:493:63 | TryExpr | provenance | |
+| test.rs:493:22:493:63 | TryExpr | test.rs:493:13:493:18 | target | provenance | |
+| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer | provenance | MaD:93 |
+| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:503:9:503:16 | mut file | test.rs:507:32:507:42 | [post] &mut buffer [&ref] | provenance | MaD:92 |
+| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer | provenance | MaD:95 |
+| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:55 |
+| test.rs:503:9:503:16 | mut file | test.rs:513:39:513:49 | [post] &mut buffer [&ref] | provenance | MaD:94 |
+| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer | provenance | MaD:97 |
+| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:56 |
+| test.rs:503:9:503:16 | mut file | test.rs:519:42:519:52 | [post] &mut buffer [&ref] | provenance | MaD:96 |
+| test.rs:503:9:503:16 | mut file | test.rs:525:25:525:35 | [post] &mut buffer [&ref] | provenance | MaD:54 |
+| test.rs:503:9:503:16 | mut file | test.rs:529:17:529:28 | file.bytes() | provenance | MaD:50 |
+| test.rs:503:20:503:38 | ...::open | test.rs:503:20:503:50 | ...::open(...) [Ok] | provenance | Src:MaD:5 |
+| test.rs:503:20:503:50 | ...::open(...) [Ok] | test.rs:503:20:503:51 | TryExpr | provenance | |
+| test.rs:503:20:503:51 | TryExpr | test.rs:503:9:503:16 | mut file | provenance | |
+| test.rs:507:32:507:42 | [post] &mut buffer | test.rs:508:15:508:20 | buffer | provenance | |
+| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | test.rs:507:37:507:42 | [post] buffer | provenance | |
+| test.rs:507:37:507:42 | [post] buffer | test.rs:508:15:508:20 | buffer | provenance | |
+| test.rs:508:15:508:20 | buffer | test.rs:508:14:508:20 | &buffer | provenance | |
+| test.rs:513:39:513:49 | [post] &mut buffer | test.rs:514:15:514:20 | buffer | provenance | |
+| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | test.rs:513:44:513:49 | [post] buffer | provenance | |
+| test.rs:513:44:513:49 | [post] buffer | test.rs:514:15:514:20 | buffer | provenance | |
+| test.rs:514:15:514:20 | buffer | test.rs:514:14:514:20 | &buffer | provenance | |
+| test.rs:519:42:519:52 | [post] &mut buffer | test.rs:520:15:520:20 | buffer | provenance | |
+| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | test.rs:519:47:519:52 | [post] buffer | provenance | |
+| test.rs:519:47:519:52 | [post] buffer | test.rs:520:15:520:20 | buffer | provenance | |
+| test.rs:520:15:520:20 | buffer | test.rs:520:14:520:20 | &buffer | provenance | |
+| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | test.rs:525:30:525:35 | [post] buffer | provenance | |
+| test.rs:525:30:525:35 | [post] buffer | test.rs:526:15:526:20 | buffer | provenance | |
+| test.rs:526:15:526:20 | buffer | test.rs:526:14:526:20 | &buffer | provenance | |
+| test.rs:529:17:529:28 | file.bytes() | test.rs:530:14:530:17 | byte | provenance | |
+| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer | provenance | MaD:93 |
+| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:536:13:536:18 | mut f1 | test.rs:538:30:538:40 | [post] &mut buffer [&ref] | provenance | MaD:92 |
+| test.rs:536:22:536:63 | ... .open(...) [Ok] | test.rs:536:22:536:72 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:536:22:536:72 | ... .unwrap() | test.rs:536:13:536:18 | mut f1 | provenance | |
+| test.rs:536:50:536:53 | open | test.rs:536:22:536:63 | ... .open(...) [Ok] | provenance | Src:MaD:6 |
+| test.rs:538:30:538:40 | [post] &mut buffer | test.rs:539:15:539:20 | buffer | provenance | |
+| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | test.rs:538:35:538:40 | [post] buffer | provenance | |
+| test.rs:538:35:538:40 | [post] buffer | test.rs:539:15:539:20 | buffer | provenance | |
+| test.rs:539:15:539:20 | buffer | test.rs:539:14:539:20 | &buffer | provenance | |
+| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer | provenance | MaD:93 |
+| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:543:13:543:18 | mut f2 | test.rs:545:30:545:40 | [post] &mut buffer [&ref] | provenance | MaD:92 |
+| test.rs:543:22:543:80 | ... .open(...) [Ok] | test.rs:543:22:543:89 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:543:22:543:89 | ... .unwrap() | test.rs:543:13:543:18 | mut f2 | provenance | |
+| test.rs:543:67:543:70 | open | test.rs:543:22:543:80 | ... .open(...) [Ok] | provenance | Src:MaD:6 |
+| test.rs:545:30:545:40 | [post] &mut buffer | test.rs:546:15:546:20 | buffer | provenance | |
+| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | test.rs:545:35:545:40 | [post] buffer | provenance | |
+| test.rs:545:35:545:40 | [post] buffer | test.rs:546:15:546:20 | buffer | provenance | |
+| test.rs:546:15:546:20 | buffer | test.rs:546:14:546:20 | &buffer | provenance | |
+| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer | provenance | MaD:93 |
+| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:550:13:550:18 | mut f3 | test.rs:552:30:552:40 | [post] &mut buffer [&ref] | provenance | MaD:92 |
+| test.rs:550:22:550:114 | ... .open(...) [Ok] | test.rs:550:22:550:123 | ... .unwrap() | provenance | MaD:80 |
+| test.rs:550:22:550:123 | ... .unwrap() | test.rs:550:13:550:18 | mut f3 | provenance | |
+| test.rs:550:101:550:104 | open | test.rs:550:22:550:114 | ... .open(...) [Ok] | provenance | Src:MaD:6 |
+| test.rs:552:30:552:40 | [post] &mut buffer | test.rs:553:15:553:20 | buffer | provenance | |
+| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | test.rs:552:35:552:40 | [post] buffer | provenance | |
+| test.rs:552:35:552:40 | [post] buffer | test.rs:553:15:553:20 | buffer | provenance | |
+| test.rs:553:15:553:20 | buffer | test.rs:553:14:553:20 | &buffer | provenance | |
+| test.rs:560:13:560:17 | file1 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:52 |
+| test.rs:560:21:560:39 | ...::open | test.rs:560:21:560:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 |
+| test.rs:560:21:560:51 | ...::open(...) [Ok] | test.rs:560:21:560:52 | TryExpr | provenance | |
+| test.rs:560:21:560:52 | TryExpr | test.rs:560:13:560:17 | file1 | provenance | |
+| test.rs:561:13:561:17 | file2 | test.rs:562:38:562:42 | file2 | provenance | |
+| test.rs:561:21:561:39 | ...::open | test.rs:561:21:561:59 | ...::open(...) [Ok] | provenance | Src:MaD:5 |
+| test.rs:561:21:561:59 | ...::open(...) [Ok] | test.rs:561:21:561:60 | TryExpr | provenance | |
+| test.rs:561:21:561:60 | TryExpr | test.rs:561:13:561:17 | file2 | provenance | |
+| test.rs:562:13:562:22 | mut reader | test.rs:563:31:563:41 | [post] &mut buffer [&ref] | provenance | MaD:56 |
+| test.rs:562:26:562:43 | file1.chain(...) | test.rs:562:13:562:22 | mut reader | provenance | |
+| test.rs:562:38:562:42 | file2 | test.rs:562:26:562:43 | file1.chain(...) | provenance | MaD:51 |
+| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | test.rs:563:36:563:41 | [post] buffer | provenance | |
+| test.rs:563:36:563:41 | [post] buffer | test.rs:564:15:564:20 | buffer | provenance | |
+| test.rs:564:15:564:20 | buffer | test.rs:564:14:564:20 | &buffer | provenance | |
+| test.rs:569:13:569:17 | file1 | test.rs:570:26:570:40 | file1.take(...) | provenance | MaD:57 |
+| test.rs:569:21:569:39 | ...::open | test.rs:569:21:569:51 | ...::open(...) [Ok] | provenance | Src:MaD:5 |
+| test.rs:569:21:569:51 | ...::open(...) [Ok] | test.rs:569:21:569:52 | TryExpr | provenance | |
+| test.rs:569:21:569:52 | TryExpr | test.rs:569:13:569:17 | file1 | provenance | |
+| test.rs:570:13:570:22 | mut reader | test.rs:571:31:571:41 | [post] &mut buffer [&ref] | provenance | MaD:56 |
+| test.rs:570:26:570:40 | file1.take(...) | test.rs:570:13:570:22 | mut reader | provenance | |
+| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | test.rs:571:36:571:41 | [post] buffer | provenance | |
+| test.rs:571:36:571:41 | [post] buffer | test.rs:572:15:572:20 | buffer | provenance | |
+| test.rs:572:15:572:20 | buffer | test.rs:572:14:572:20 | &buffer | provenance | |
+| test.rs:581:9:581:16 | mut file | test.rs:585:32:585:42 | [post] &mut buffer [&ref] | provenance | MaD:63 |
+| test.rs:581:9:581:16 | mut file | test.rs:591:39:591:49 | [post] &mut buffer [&ref] | provenance | MaD:69 |
+| test.rs:581:9:581:16 | mut file | test.rs:597:42:597:52 | [post] &mut buffer [&ref] | provenance | MaD:70 |
+| test.rs:581:9:581:16 | mut file | test.rs:603:25:603:35 | [post] &mut buffer [&ref] | provenance | MaD:65 |
+| test.rs:581:9:581:16 | mut file | test.rs:608:18:608:31 | file.read_u8() [future, Ok] | provenance | MaD:71 |
+| test.rs:581:9:581:16 | mut file | test.rs:609:18:609:32 | file.read_i16() [future, Ok] | provenance | MaD:67 |
+| test.rs:581:9:581:16 | mut file | test.rs:610:18:610:32 | file.read_f32() [future, Ok] | provenance | MaD:66 |
+| test.rs:581:9:581:16 | mut file | test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | provenance | MaD:68 |
+| test.rs:581:9:581:16 | mut file | test.rs:620:23:620:33 | [post] &mut buffer [&ref] | provenance | MaD:64 |
+| test.rs:581:20:581:40 | ...::open | test.rs:581:20:581:52 | ...::open(...) [future, Ok] | provenance | Src:MaD:9 |
+| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | test.rs:581:20:581:58 | await ... [Ok] | provenance | |
+| test.rs:581:20:581:58 | await ... [Ok] | test.rs:581:20:581:59 | TryExpr | provenance | |
+| test.rs:581:20:581:59 | TryExpr | test.rs:581:9:581:16 | mut file | provenance | |
+| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | test.rs:585:37:585:42 | [post] buffer | provenance | |
+| test.rs:585:37:585:42 | [post] buffer | test.rs:586:15:586:20 | buffer | provenance | |
+| test.rs:586:15:586:20 | buffer | test.rs:586:14:586:20 | &buffer | provenance | |
+| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | test.rs:591:44:591:49 | [post] buffer | provenance | |
+| test.rs:591:44:591:49 | [post] buffer | test.rs:592:15:592:20 | buffer | provenance | |
+| test.rs:592:15:592:20 | buffer | test.rs:592:14:592:20 | &buffer | provenance | |
+| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | test.rs:597:47:597:52 | [post] buffer | provenance | |
+| test.rs:597:47:597:52 | [post] buffer | test.rs:598:15:598:20 | buffer | provenance | |
+| test.rs:598:15:598:20 | buffer | test.rs:598:14:598:20 | &buffer | provenance | |
+| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | test.rs:603:30:603:35 | [post] buffer | provenance | |
+| test.rs:603:30:603:35 | [post] buffer | test.rs:604:15:604:20 | buffer | provenance | |
+| test.rs:604:15:604:20 | buffer | test.rs:604:14:604:20 | &buffer | provenance | |
+| test.rs:608:13:608:14 | v1 | test.rs:612:14:612:15 | v1 | provenance | |
+| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | test.rs:608:18:608:37 | await ... [Ok] | provenance | |
+| test.rs:608:18:608:37 | await ... [Ok] | test.rs:608:18:608:38 | TryExpr | provenance | |
+| test.rs:608:18:608:38 | TryExpr | test.rs:608:13:608:14 | v1 | provenance | |
+| test.rs:609:13:609:14 | v2 | test.rs:613:14:613:15 | v2 | provenance | |
+| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | test.rs:609:18:609:38 | await ... [Ok] | provenance | |
+| test.rs:609:18:609:38 | await ... [Ok] | test.rs:609:18:609:39 | TryExpr | provenance | |
+| test.rs:609:18:609:39 | TryExpr | test.rs:609:13:609:14 | v2 | provenance | |
+| test.rs:610:13:610:14 | v3 | test.rs:614:14:614:15 | v3 | provenance | |
+| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | test.rs:610:18:610:38 | await ... [Ok] | provenance | |
+| test.rs:610:18:610:38 | await ... [Ok] | test.rs:610:18:610:39 | TryExpr | provenance | |
+| test.rs:610:18:610:39 | TryExpr | test.rs:610:13:610:14 | v3 | provenance | |
+| test.rs:611:13:611:14 | v4 | test.rs:615:14:615:15 | v4 | provenance | |
+| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | test.rs:611:18:611:41 | await ... [Ok] | provenance | |
+| test.rs:611:18:611:41 | await ... [Ok] | test.rs:611:18:611:42 | TryExpr | provenance | |
+| test.rs:611:18:611:42 | TryExpr | test.rs:611:13:611:14 | v4 | provenance | |
+| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | test.rs:620:28:620:33 | [post] buffer | provenance | |
+| test.rs:620:28:620:33 | [post] buffer | test.rs:621:15:621:20 | buffer | provenance | |
+| test.rs:621:15:621:20 | buffer | test.rs:621:14:621:20 | &buffer | provenance | |
+| test.rs:627:13:627:18 | mut f1 | test.rs:629:30:629:40 | [post] &mut buffer [&ref] | provenance | MaD:63 |
+| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | test.rs:627:22:627:71 | await ... [Ok] | provenance | |
+| test.rs:627:22:627:71 | await ... [Ok] | test.rs:627:22:627:72 | TryExpr | provenance | |
+| test.rs:627:22:627:72 | TryExpr | test.rs:627:13:627:18 | mut f1 | provenance | |
+| test.rs:627:52:627:55 | open | test.rs:627:22:627:65 | ... .open(...) [future, Ok] | provenance | Src:MaD:10 |
+| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | test.rs:629:35:629:40 | [post] buffer | provenance | |
+| test.rs:629:35:629:40 | [post] buffer | test.rs:630:15:630:20 | buffer | provenance | |
+| test.rs:630:15:630:20 | buffer | test.rs:630:14:630:20 | &buffer | provenance | |
+| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:53 |
+| test.rs:688:13:688:22 | mut stream | test.rs:695:29:695:39 | [post] &mut buffer [&ref] | provenance | MaD:111 |
+| test.rs:688:26:688:53 | ...::connect | test.rs:688:26:688:62 | ...::connect(...) [Ok] | provenance | Src:MaD:7 |
+| test.rs:688:26:688:62 | ...::connect(...) [Ok] | test.rs:688:26:688:63 | TryExpr | provenance | |
+| test.rs:688:26:688:63 | TryExpr | test.rs:688:13:688:22 | mut stream | provenance | |
+| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | test.rs:695:34:695:39 | [post] buffer | provenance | |
+| test.rs:695:34:695:39 | [post] buffer | test.rs:698:15:698:20 | buffer | provenance | |
+| test.rs:695:34:695:39 | [post] buffer | test.rs:699:14:699:22 | buffer[0] | provenance | |
+| test.rs:698:15:698:20 | buffer | test.rs:698:14:698:20 | &buffer | provenance | |
+| test.rs:707:13:707:22 | mut stream | test.rs:715:58:715:63 | stream | provenance | |
+| test.rs:707:26:707:61 | ...::connect_timeout | test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | provenance | Src:MaD:8 |
+| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | test.rs:707:26:707:106 | TryExpr | provenance | |
+| test.rs:707:26:707:106 | TryExpr | test.rs:707:13:707:22 | mut stream | provenance | |
+| test.rs:715:21:715:30 | mut reader | test.rs:718:44:718:52 | [post] &mut line [&ref] | provenance | MaD:47 |
+| test.rs:715:34:715:64 | ...::new(...) | test.rs:715:34:715:74 | ... .take(...) | provenance | MaD:57 |
+| test.rs:715:34:715:74 | ... .take(...) | test.rs:715:21:715:30 | mut reader | provenance | |
+| test.rs:715:58:715:63 | stream | test.rs:715:34:715:64 | ...::new(...) | provenance | MaD:101 |
+| test.rs:718:44:718:52 | [post] &mut line [&ref] | test.rs:718:49:718:52 | [post] line | provenance | |
+| test.rs:718:49:718:52 | [post] line | test.rs:725:35:725:38 | line | provenance | |
+| test.rs:725:35:725:38 | line | test.rs:725:34:725:38 | &line | provenance | |
+| test.rs:759:9:759:24 | mut tokio_stream | test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | provenance | MaD:117 |
+| test.rs:759:9:759:24 | mut tokio_stream | test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | provenance | MaD:63 |
+| test.rs:759:9:759:24 | mut tokio_stream | test.rs:787:41:787:51 | [post] &mut buffer [&ref] | provenance | MaD:118 |
+| test.rs:759:9:759:24 | mut tokio_stream | test.rs:810:45:810:55 | [post] &mut buffer [&ref] | provenance | MaD:119 |
+| test.rs:759:28:759:57 | ...::connect | test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | provenance | Src:MaD:13 |
+| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | test.rs:759:28:759:72 | await ... [Ok] | provenance | |
+| test.rs:759:28:759:72 | await ... [Ok] | test.rs:759:28:759:73 | TryExpr | provenance | |
+| test.rs:759:28:759:73 | TryExpr | test.rs:759:9:759:24 | mut tokio_stream | provenance | |
+| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | test.rs:767:40:767:46 | [post] buffer1 | provenance | |
+| test.rs:767:40:767:46 | [post] buffer1 | test.rs:774:15:774:21 | buffer1 | provenance | |
+| test.rs:767:40:767:46 | [post] buffer1 | test.rs:775:14:775:23 | buffer1[0] | provenance | |
+| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | test.rs:771:41:771:47 | [post] buffer2 | provenance | |
+| test.rs:771:41:771:47 | [post] buffer2 | test.rs:778:15:778:21 | buffer2 | provenance | |
+| test.rs:771:41:771:47 | [post] buffer2 | test.rs:779:14:779:23 | buffer2[0] | provenance | |
+| test.rs:774:15:774:21 | buffer1 | test.rs:774:14:774:21 | &buffer1 | provenance | |
+| test.rs:778:15:778:21 | buffer2 | test.rs:778:14:778:21 | &buffer2 | provenance | |
+| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | test.rs:787:46:787:51 | [post] buffer | provenance | |
+| test.rs:787:46:787:51 | [post] buffer | test.rs:794:27:794:32 | buffer | provenance | |
+| test.rs:794:27:794:32 | buffer | test.rs:794:26:794:32 | &buffer | provenance | |
+| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | test.rs:810:50:810:55 | [post] buffer | provenance | |
+| test.rs:810:50:810:55 | [post] buffer | test.rs:817:27:817:32 | buffer | provenance | |
+| test.rs:817:27:817:32 | buffer | test.rs:817:26:817:32 | &buffer | provenance | |
+| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:20:11:20:13 | tcp | provenance | |
+| test_futures_io.rs:19:9:19:11 | tcp | test_futures_io.rs:26:53:26:55 | tcp | provenance | |
+| test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | provenance | Src:MaD:1 |
+| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | test_futures_io.rs:19:15:19:43 | await ... [Ok] | provenance | |
+| test_futures_io.rs:19:15:19:43 | await ... [Ok] | test_futures_io.rs:19:15:19:44 | TryExpr | provenance | |
+| test_futures_io.rs:19:15:19:44 | TryExpr | test_futures_io.rs:19:9:19:11 | tcp | provenance | |
+| test_futures_io.rs:20:11:20:13 | tcp | test_futures_io.rs:20:10:20:13 | &tcp | provenance | |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:27:11:27:16 | reader | provenance | |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:32:40:32:45 | reader | provenance | |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:45:64:45:69 | reader | provenance | |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:27:49:32 | reader | provenance | |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:43 |
+| test_futures_io.rs:26:9:26:18 | mut reader | test_futures_io.rs:54:51:54:56 | reader | provenance | |
+| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | test_futures_io.rs:26:22:26:62 | await ... [Ok] | provenance | |
+| test_futures_io.rs:26:22:26:62 | await ... [Ok] | test_futures_io.rs:26:22:26:63 | TryExpr | provenance | |
+| test_futures_io.rs:26:22:26:63 | TryExpr | test_futures_io.rs:26:9:26:18 | mut reader | provenance | |
+| test_futures_io.rs:26:53:26:55 | tcp | test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | provenance | MaD:84 |
+| test_futures_io.rs:27:11:27:16 | reader | test_futures_io.rs:27:10:27:16 | &reader | provenance | |
+| test_futures_io.rs:32:13:32:22 | mut pinned | test_futures_io.rs:33:15:33:20 | pinned | provenance | |
+| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | test_futures_io.rs:33:15:33:20 | pinned [&ref] | provenance | |
+| test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) | test_futures_io.rs:32:13:32:22 | mut pinned | provenance | |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | provenance | |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) | provenance | MaD:76 |
+| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | provenance | MaD:78 |
+| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | provenance | MaD:77 |
+| test_futures_io.rs:32:40:32:45 | reader | test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | provenance | |
+| test_futures_io.rs:33:15:33:20 | pinned | test_futures_io.rs:33:14:33:20 | &pinned | provenance | |
+| test_futures_io.rs:33:15:33:20 | pinned [&ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | |
+| test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | test_futures_io.rs:33:14:33:20 | &pinned | provenance | |
+| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:45:64:45:69 | reader | test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | provenance | |
+| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | test_futures_io.rs:45:77:45:83 | [post] buffer1 | provenance | |
+| test_futures_io.rs:45:77:45:83 | [post] buffer1 | test_futures_io.rs:46:15:46:36 | buffer1[...] | provenance | |
+| test_futures_io.rs:46:15:46:36 | buffer1[...] | test_futures_io.rs:46:14:46:36 | &... | provenance | |
+| test_futures_io.rs:49:27:49:32 | reader | test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | test_futures_io.rs:49:44:49:50 | [post] buffer2 | provenance | |
+| test_futures_io.rs:49:44:49:50 | [post] buffer2 | test_futures_io.rs:51:15:51:36 | buffer2[...] | provenance | |
+| test_futures_io.rs:51:15:51:36 | buffer2[...] | test_futures_io.rs:51:14:51:36 | &... | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:55:11:55:17 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:59:40:59:46 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:69:37:69:43 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:90:40:90:46 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:103:64:103:70 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:27:107:33 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:43 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:113:40:113:46 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | provenance | MaD:37 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:27:132:33 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:41 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:27:139:33 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:39 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:27:146:33 | reader2 | provenance | |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:45 |
+| test_futures_io.rs:54:23:54:57 | ...::new(...) | test_futures_io.rs:54:9:54:19 | mut reader2 | provenance | |
+| test_futures_io.rs:54:51:54:56 | reader | test_futures_io.rs:54:23:54:57 | ...::new(...) | provenance | MaD:85 |
+| test_futures_io.rs:55:11:55:17 | reader2 | test_futures_io.rs:55:10:55:17 | &reader2 | provenance | |
+| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:60:15:60:20 | pinned | provenance | |
+| test_futures_io.rs:59:13:59:22 | mut pinned | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:60:15:60:20 | pinned [&ref] | provenance | |
+| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) | test_futures_io.rs:59:13:59:22 | mut pinned | provenance | |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | provenance | |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) | provenance | MaD:76 |
+| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | provenance | MaD:78 |
+| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 |
+| test_futures_io.rs:59:40:59:46 | reader2 | test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | provenance | |
+| test_futures_io.rs:60:15:60:20 | pinned | test_futures_io.rs:60:14:60:20 | &pinned | provenance | |
+| test_futures_io.rs:60:15:60:20 | pinned [&ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | |
+| test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | test_futures_io.rs:60:14:60:20 | &pinned | provenance | |
+| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | provenance | |
+| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | provenance | |
+| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | provenance | |
+| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | provenance | |
+| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | test_futures_io.rs:63:31:63:33 | buf | provenance | |
+| test_futures_io.rs:63:31:63:33 | buf | test_futures_io.rs:65:18:65:20 | buf | provenance | |
+| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | test_futures_io.rs:64:18:64:24 | &buffer | provenance | |
+| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | provenance | |
+| test_futures_io.rs:69:23:69:44 | ...::new(...) | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | provenance | |
+| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) | provenance | MaD:76 |
+| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | provenance | MaD:78 |
+| test_futures_io.rs:69:37:69:43 | reader2 | test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | provenance | |
+| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | provenance | |
+| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | provenance | |
+| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | provenance | |
+| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | test_futures_io.rs:71:28:71:30 | buf | provenance | |
+| test_futures_io.rs:71:28:71:30 | buf | test_futures_io.rs:73:22:73:24 | buf | provenance | |
+| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | test_futures_io.rs:72:22:72:29 | &buffer2 | provenance | |
+| test_futures_io.rs:83:13:83:18 | buffer | test_futures_io.rs:84:14:84:19 | buffer | provenance | |
+| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:83:22:83:45 | await ... [Ok] | provenance | |
+| test_futures_io.rs:83:22:83:45 | await ... [Ok] | test_futures_io.rs:83:22:83:46 | TryExpr | provenance | |
+| test_futures_io.rs:83:22:83:46 | TryExpr | test_futures_io.rs:83:13:83:18 | buffer | provenance | |
+| test_futures_io.rs:90:13:90:22 | mut pinned | test_futures_io.rs:91:15:91:20 | pinned | provenance | |
+| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | test_futures_io.rs:91:15:91:20 | pinned [&ref] | provenance | |
+| test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) | test_futures_io.rs:90:13:90:22 | mut pinned | provenance | |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | provenance | |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) | provenance | MaD:76 |
+| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | provenance | MaD:78 |
+| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 |
+| test_futures_io.rs:90:40:90:46 | reader2 | test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | provenance | |
+| test_futures_io.rs:91:15:91:20 | pinned | test_futures_io.rs:91:14:91:20 | &pinned | provenance | |
+| test_futures_io.rs:91:15:91:20 | pinned [&ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | |
+| test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | test_futures_io.rs:91:14:91:20 | &pinned | provenance | |
+| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:103:64:103:70 | reader2 | test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | provenance | |
+| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | test_futures_io.rs:103:78:103:84 | [post] buffer1 | provenance | |
+| test_futures_io.rs:103:78:103:84 | [post] buffer1 | test_futures_io.rs:104:15:104:36 | buffer1[...] | provenance | |
+| test_futures_io.rs:104:15:104:36 | buffer1[...] | test_futures_io.rs:104:14:104:36 | &... | provenance | |
+| test_futures_io.rs:107:27:107:33 | reader2 | test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | provenance | MaD:42 |
+| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | test_futures_io.rs:107:45:107:51 | [post] buffer2 | provenance | |
+| test_futures_io.rs:107:45:107:51 | [post] buffer2 | test_futures_io.rs:108:15:108:36 | buffer2[...] | provenance | |
+| test_futures_io.rs:108:15:108:36 | buffer2[...] | test_futures_io.rs:108:14:108:36 | &... | provenance | |
+| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:114:15:114:20 | pinned | provenance | |
+| test_futures_io.rs:113:13:113:22 | mut pinned | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:114:15:114:20 | pinned [&ref] | provenance | |
+| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | provenance | MaD:36 |
+| test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) | test_futures_io.rs:113:13:113:22 | mut pinned | provenance | |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | provenance | |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | provenance | |
+| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) | provenance | MaD:76 |
+| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | provenance | MaD:78 |
+| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | provenance | MaD:77 |
+| test_futures_io.rs:113:40:113:46 | reader2 | test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | provenance | |
+| test_futures_io.rs:114:15:114:20 | pinned | test_futures_io.rs:114:14:114:20 | &pinned | provenance | |
+| test_futures_io.rs:114:15:114:20 | pinned [&ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | |
+| test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | test_futures_io.rs:114:14:114:20 | &pinned | provenance | |
+| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | provenance | |
+| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | provenance | |
+| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | provenance | |
+| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | test_futures_io.rs:117:14:117:20 | &buffer | provenance | |
+| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | provenance | |
+| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | test_futures_io.rs:118:31:118:33 | buf | provenance | |
+| test_futures_io.rs:118:31:118:33 | buf | test_futures_io.rs:119:18:119:20 | buf | provenance | |
+| test_futures_io.rs:125:13:125:18 | buffer | test_futures_io.rs:126:14:126:19 | buffer | provenance | |
+| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | test_futures_io.rs:125:22:125:45 | await ... [Ok] | provenance | |
+| test_futures_io.rs:125:22:125:45 | await ... [Ok] | test_futures_io.rs:125:22:125:46 | TryExpr | provenance | |
+| test_futures_io.rs:125:22:125:46 | TryExpr | test_futures_io.rs:125:13:125:18 | buffer | provenance | |
+| test_futures_io.rs:132:27:132:33 | reader2 | test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | provenance | MaD:40 |
+| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | test_futures_io.rs:132:58:132:61 | [post] line | provenance | |
+| test_futures_io.rs:132:58:132:61 | [post] line | test_futures_io.rs:133:15:133:18 | line | provenance | |
+| test_futures_io.rs:133:15:133:18 | line | test_futures_io.rs:133:14:133:18 | &line | provenance | |
+| test_futures_io.rs:139:27:139:33 | reader2 | test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | provenance | MaD:38 |
+| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | test_futures_io.rs:139:50:139:53 | [post] line | provenance | |
+| test_futures_io.rs:139:50:139:53 | [post] line | test_futures_io.rs:140:15:140:18 | line | provenance | |
+| test_futures_io.rs:140:15:140:18 | line | test_futures_io.rs:140:14:140:18 | &line | provenance | |
+| test_futures_io.rs:146:27:146:33 | reader2 | test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | provenance | MaD:44 |
+| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | test_futures_io.rs:146:52:146:57 | [post] buffer | provenance | |
+| test_futures_io.rs:146:52:146:57 | [post] buffer | test_futures_io.rs:147:15:147:20 | buffer | provenance | |
+| test_futures_io.rs:147:15:147:20 | buffer | test_futures_io.rs:147:14:147:20 | &buffer | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:14 | a | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:14 | a | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | |
+| web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | provenance | |
+| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:73 |
+| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | provenance | MaD:82 |
+| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:73 |
+| web_frameworks.rs:13:14:13:14 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | provenance | MaD:82 |
+| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:72 |
+| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | provenance | MaD:81 |
+| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:72 |
+| web_frameworks.rs:14:14:14:14 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | provenance | MaD:81 |
+| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | |
+| web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | provenance | |
+nodes
+| test.rs:8:10:8:22 | ...::var | semmle.label | ...::var |
+| test.rs:8:10:8:30 | ...::var(...) | semmle.label | ...::var(...) |
+| test.rs:9:10:9:25 | ...::var_os | semmle.label | ...::var_os |
+| test.rs:9:10:9:33 | ...::var_os(...) | semmle.label | ...::var_os(...) |
+| test.rs:11:9:11:12 | var1 | semmle.label | var1 |
+| test.rs:11:16:11:28 | ...::var | semmle.label | ...::var |
+| test.rs:11:16:11:36 | ...::var(...) [Ok] | semmle.label | ...::var(...) [Ok] |
+| test.rs:11:16:11:59 | ... .expect(...) | semmle.label | ... .expect(...) |
+| test.rs:12:9:12:12 | var2 | semmle.label | var2 |
+| test.rs:12:16:12:31 | ...::var_os | semmle.label | ...::var_os |
+| test.rs:12:16:12:39 | ...::var_os(...) [Some] | semmle.label | ...::var_os(...) [Some] |
+| test.rs:12:16:12:48 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:14:10:14:13 | var1 | semmle.label | var1 |
+| test.rs:15:10:15:13 | var2 | semmle.label | var2 |
+| test.rs:29:9:29:12 | args [element] | semmle.label | args [element] |
+| test.rs:29:29:29:42 | ...::args | semmle.label | ...::args |
+| test.rs:29:29:29:44 | ...::args(...) [element] | semmle.label | ...::args(...) [element] |
+| test.rs:29:29:29:54 | ... .collect() [element] | semmle.label | ... .collect() [element] |
+| test.rs:30:9:30:15 | my_path [&ref] | semmle.label | my_path [&ref] |
+| test.rs:30:19:30:26 | &... [&ref] | semmle.label | &... [&ref] |
+| test.rs:30:20:30:23 | args [element] | semmle.label | args [element] |
+| test.rs:30:20:30:26 | args[0] | semmle.label | args[0] |
+| test.rs:31:9:31:12 | arg1 [&ref] | semmle.label | arg1 [&ref] |
+| test.rs:31:16:31:23 | &... [&ref] | semmle.label | &... [&ref] |
+| test.rs:31:17:31:20 | args [element] | semmle.label | args [element] |
+| test.rs:31:17:31:23 | args[1] | semmle.label | args[1] |
+| test.rs:32:9:32:12 | arg2 | semmle.label | arg2 |
+| test.rs:32:16:32:29 | ...::args | semmle.label | ...::args |
+| test.rs:32:16:32:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] |
+| test.rs:32:16:32:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] |
+| test.rs:32:16:32:47 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:33:9:33:12 | arg3 | semmle.label | arg3 |
+| test.rs:33:16:33:32 | ...::args_os | semmle.label | ...::args_os |
+| test.rs:33:16:33:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] |
+| test.rs:33:16:33:41 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] |
+| test.rs:33:16:33:50 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:34:9:34:12 | arg4 | semmle.label | arg4 |
+| test.rs:34:16:34:29 | ...::args | semmle.label | ...::args |
+| test.rs:34:16:34:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] |
+| test.rs:34:16:34:38 | ... .nth(...) [Some] | semmle.label | ... .nth(...) [Some] |
+| test.rs:34:16:34:47 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:34:16:34:64 | ... .parse() [Ok] | semmle.label | ... .parse() [Ok] |
+| test.rs:34:16:34:73 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:36:10:36:16 | my_path | semmle.label | my_path |
+| test.rs:37:10:37:13 | arg1 | semmle.label | arg1 |
+| test.rs:38:10:38:13 | arg2 | semmle.label | arg2 |
+| test.rs:39:10:39:13 | arg3 | semmle.label | arg3 |
+| test.rs:40:10:40:13 | arg4 | semmle.label | arg4 |
+| test.rs:42:9:42:11 | arg | semmle.label | arg |
+| test.rs:42:16:42:29 | ...::args | semmle.label | ...::args |
+| test.rs:42:16:42:31 | ...::args(...) [element] | semmle.label | ...::args(...) [element] |
+| test.rs:43:14:43:16 | arg | semmle.label | arg |
+| test.rs:46:9:46:11 | arg | semmle.label | arg |
+| test.rs:46:16:46:32 | ...::args_os | semmle.label | ...::args_os |
+| test.rs:46:16:46:34 | ...::args_os(...) [element] | semmle.label | ...::args_os(...) [element] |
+| test.rs:47:14:47:16 | arg | semmle.label | arg |
+| test.rs:52:9:52:11 | dir | semmle.label | dir |
+| test.rs:52:15:52:35 | ...::current_dir | semmle.label | ...::current_dir |
+| test.rs:52:15:52:37 | ...::current_dir(...) [Ok] | semmle.label | ...::current_dir(...) [Ok] |
+| test.rs:52:15:52:54 | ... .expect(...) | semmle.label | ... .expect(...) |
+| test.rs:53:9:53:11 | exe | semmle.label | exe |
+| test.rs:53:15:53:35 | ...::current_exe | semmle.label | ...::current_exe |
+| test.rs:53:15:53:37 | ...::current_exe(...) [Ok] | semmle.label | ...::current_exe(...) [Ok] |
+| test.rs:53:15:53:54 | ... .expect(...) | semmle.label | ... .expect(...) |
+| test.rs:54:9:54:12 | home | semmle.label | home |
+| test.rs:54:16:54:33 | ...::home_dir | semmle.label | ...::home_dir |
+| test.rs:54:16:54:35 | ...::home_dir(...) [Some] | semmle.label | ...::home_dir(...) [Some] |
+| test.rs:54:16:54:52 | ... .expect(...) | semmle.label | ... .expect(...) |
+| test.rs:56:10:56:12 | dir | semmle.label | dir |
+| test.rs:57:10:57:12 | exe | semmle.label | exe |
+| test.rs:58:10:58:13 | home | semmle.label | home |
+| test.rs:62:9:62:22 | remote_string1 | semmle.label | remote_string1 |
+| test.rs:62:26:62:47 | ...::get | semmle.label | ...::get |
+| test.rs:62:26:62:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] |
+| test.rs:62:26:62:63 | TryExpr | semmle.label | TryExpr |
+| test.rs:62:26:62:70 | ... .text() [Ok] | semmle.label | ... .text() [Ok] |
+| test.rs:62:26:62:71 | TryExpr | semmle.label | TryExpr |
+| test.rs:63:10:63:23 | remote_string1 | semmle.label | remote_string1 |
+| test.rs:65:9:65:22 | remote_string2 | semmle.label | remote_string2 |
+| test.rs:65:26:65:47 | ...::get | semmle.label | ...::get |
+| test.rs:65:26:65:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] |
+| test.rs:65:26:65:71 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:65:26:65:78 | ... .text() [Ok] | semmle.label | ... .text() [Ok] |
+| test.rs:65:26:65:87 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:66:10:66:23 | remote_string2 | semmle.label | remote_string2 |
+| test.rs:68:9:68:22 | remote_string3 | semmle.label | remote_string3 |
+| test.rs:68:26:68:47 | ...::get | semmle.label | ...::get |
+| test.rs:68:26:68:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] |
+| test.rs:68:26:68:71 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:68:26:68:98 | ... .text_with_charset(...) [Ok] | semmle.label | ... .text_with_charset(...) [Ok] |
+| test.rs:68:26:68:107 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:69:10:69:23 | remote_string3 | semmle.label | remote_string3 |
+| test.rs:71:9:71:22 | remote_string4 | semmle.label | remote_string4 |
+| test.rs:71:26:71:47 | ...::get | semmle.label | ...::get |
+| test.rs:71:26:71:62 | ...::get(...) [Ok] | semmle.label | ...::get(...) [Ok] |
+| test.rs:71:26:71:71 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:71:26:71:79 | ... .bytes() [Ok] | semmle.label | ... .bytes() [Ok] |
+| test.rs:71:26:71:88 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:72:10:72:23 | remote_string4 | semmle.label | remote_string4 |
+| test.rs:74:9:74:22 | remote_string5 | semmle.label | remote_string5 |
+| test.rs:74:26:74:37 | ...::get | semmle.label | ...::get |
+| test.rs:74:26:74:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] |
+| test.rs:74:26:74:58 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:74:26:74:59 | TryExpr | semmle.label | TryExpr |
+| test.rs:74:26:74:66 | ... .text() [future, Ok] | semmle.label | ... .text() [future, Ok] |
+| test.rs:74:26:74:72 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:74:26:74:73 | TryExpr | semmle.label | TryExpr |
+| test.rs:75:10:75:23 | remote_string5 | semmle.label | remote_string5 |
+| test.rs:77:9:77:22 | remote_string6 | semmle.label | remote_string6 |
+| test.rs:77:26:77:37 | ...::get | semmle.label | ...::get |
+| test.rs:77:26:77:52 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] |
+| test.rs:77:26:77:58 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:77:26:77:59 | TryExpr | semmle.label | TryExpr |
+| test.rs:77:26:77:67 | ... .bytes() [future, Ok] | semmle.label | ... .bytes() [future, Ok] |
+| test.rs:77:26:77:73 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:77:26:77:74 | TryExpr | semmle.label | TryExpr |
+| test.rs:78:10:78:23 | remote_string6 | semmle.label | remote_string6 |
+| test.rs:80:9:80:20 | mut request1 | semmle.label | mut request1 |
+| test.rs:80:24:80:35 | ...::get | semmle.label | ...::get |
+| test.rs:80:24:80:50 | ...::get(...) [future, Ok] | semmle.label | ...::get(...) [future, Ok] |
+| test.rs:80:24:80:56 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:80:24:80:57 | TryExpr | semmle.label | TryExpr |
+| test.rs:81:10:81:25 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] |
+| test.rs:81:10:81:31 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:81:10:81:32 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:81:10:81:41 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:82:15:82:25 | Some(...) [Some] | semmle.label | Some(...) [Some] |
+| test.rs:82:20:82:24 | chunk | semmle.label | chunk |
+| test.rs:82:29:82:44 | request1.chunk() [future, Ok, Some] | semmle.label | request1.chunk() [future, Ok, Some] |
+| test.rs:82:29:82:50 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:82:29:82:51 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:83:14:83:18 | chunk | semmle.label | chunk |
+| test.rs:114:13:114:20 | response | semmle.label | response |
+| test.rs:114:24:114:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] |
+| test.rs:114:24:114:57 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:114:24:114:58 | TryExpr | semmle.label | TryExpr |
+| test.rs:114:31:114:42 | send_request | semmle.label | send_request |
+| test.rs:115:14:115:22 | &response | semmle.label | &response |
+| test.rs:115:15:115:22 | response | semmle.label | response |
+| test.rs:116:14:116:21 | response | semmle.label | response |
+| test.rs:121:9:121:20 | mut response | semmle.label | mut response |
+| test.rs:121:24:121:51 | sender.send_request(...) [future, Ok] | semmle.label | sender.send_request(...) [future, Ok] |
+| test.rs:121:24:121:57 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:121:24:121:58 | TryExpr | semmle.label | TryExpr |
+| test.rs:121:31:121:42 | send_request | semmle.label | send_request |
+| test.rs:122:10:122:18 | &response | semmle.label | &response |
+| test.rs:122:11:122:18 | response | semmle.label | response |
+| test.rs:211:22:211:35 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:211:22:211:37 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:211:44:211:54 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:211:44:211:54 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:211:49:211:54 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:212:14:212:20 | &buffer | semmle.label | &buffer |
+| test.rs:212:15:212:20 | buffer | semmle.label | buffer |
+| test.rs:217:22:217:35 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:217:22:217:37 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:217:51:217:61 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:217:56:217:61 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:218:14:218:20 | &buffer | semmle.label | &buffer |
+| test.rs:218:15:218:20 | buffer | semmle.label | buffer |
+| test.rs:223:22:223:35 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:223:22:223:37 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:223:54:223:64 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:223:54:223:64 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:223:59:223:64 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:224:14:224:20 | &buffer | semmle.label | &buffer |
+| test.rs:224:15:224:20 | buffer | semmle.label | buffer |
+| test.rs:229:22:229:35 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:229:22:229:37 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:229:22:229:44 | ... .lock() | semmle.label | ... .lock() |
+| test.rs:229:61:229:71 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:229:66:229:71 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:230:14:230:20 | &buffer | semmle.label | &buffer |
+| test.rs:230:15:230:20 | buffer | semmle.label | buffer |
+| test.rs:235:9:235:22 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:235:9:235:24 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:235:37:235:47 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:235:37:235:47 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:235:42:235:47 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:236:14:236:20 | &buffer | semmle.label | &buffer |
+| test.rs:236:15:236:20 | buffer | semmle.label | buffer |
+| test.rs:239:17:239:30 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:239:17:239:32 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:239:17:239:40 | ... .bytes() | semmle.label | ... .bytes() |
+| test.rs:240:14:240:17 | byte | semmle.label | byte |
+| test.rs:246:13:246:22 | mut reader | semmle.label | mut reader |
+| test.rs:246:26:246:66 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:246:50:246:63 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:246:50:246:65 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:247:13:247:16 | data | semmle.label | data |
+| test.rs:247:20:247:36 | reader.fill_buf() [Ok] | semmle.label | reader.fill_buf() [Ok] |
+| test.rs:247:20:247:37 | TryExpr | semmle.label | TryExpr |
+| test.rs:248:14:248:18 | &data | semmle.label | &data |
+| test.rs:248:15:248:18 | data | semmle.label | data |
+| test.rs:252:13:252:18 | reader | semmle.label | reader |
+| test.rs:252:22:252:62 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:252:46:252:59 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:252:46:252:61 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:253:13:253:16 | data | semmle.label | data |
+| test.rs:253:20:253:34 | reader.buffer() | semmle.label | reader.buffer() |
+| test.rs:254:14:254:18 | &data | semmle.label | &data |
+| test.rs:254:15:254:18 | data | semmle.label | data |
+| test.rs:259:13:259:22 | mut reader | semmle.label | mut reader |
+| test.rs:259:26:259:66 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:259:50:259:63 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:259:50:259:65 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:260:26:260:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:260:31:260:36 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:261:14:261:20 | &buffer | semmle.label | &buffer |
+| test.rs:261:15:261:20 | buffer | semmle.label | buffer |
+| test.rs:266:13:266:22 | mut reader | semmle.label | mut reader |
+| test.rs:266:26:266:66 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:266:50:266:63 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:266:50:266:65 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:267:33:267:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:267:38:267:43 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:268:14:268:20 | &buffer | semmle.label | &buffer |
+| test.rs:268:15:268:20 | buffer | semmle.label | buffer |
+| test.rs:269:14:269:22 | buffer[0] | semmle.label | buffer[0] |
+| test.rs:273:13:273:28 | mut reader_split | semmle.label | mut reader_split |
+| test.rs:273:32:273:72 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:273:32:273:84 | ... .split(...) | semmle.label | ... .split(...) |
+| test.rs:273:56:273:69 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:273:56:273:71 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:274:14:274:32 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] |
+| test.rs:274:14:274:41 | ... .unwrap() [Ok] | semmle.label | ... .unwrap() [Ok] |
+| test.rs:274:14:274:50 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:275:19:275:29 | Some(...) [Some, Ok] | semmle.label | Some(...) [Some, Ok] |
+| test.rs:275:24:275:28 | chunk [Ok] | semmle.label | chunk [Ok] |
+| test.rs:275:33:275:51 | reader_split.next() [Some, Ok] | semmle.label | reader_split.next() [Some, Ok] |
+| test.rs:276:18:276:31 | chunk.unwrap() | semmle.label | chunk.unwrap() |
+| test.rs:281:13:281:18 | reader | semmle.label | reader |
+| test.rs:281:22:281:62 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:281:46:281:59 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:281:46:281:61 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:282:21:282:34 | reader.lines() | semmle.label | reader.lines() |
+| test.rs:283:18:283:21 | line | semmle.label | line |
+| test.rs:309:13:309:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:309:25:309:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:309:25:309:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:311:33:311:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:311:38:311:43 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:312:14:312:20 | &buffer | semmle.label | &buffer |
+| test.rs:312:15:312:20 | buffer | semmle.label | buffer |
+| test.rs:316:13:316:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:316:25:316:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:316:25:316:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:318:40:318:50 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:318:45:318:50 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:319:14:319:20 | &buffer | semmle.label | &buffer |
+| test.rs:319:15:319:20 | buffer | semmle.label | buffer |
+| test.rs:323:13:323:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:323:25:323:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:323:25:323:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:325:43:325:53 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:325:48:325:53 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:326:14:326:20 | &buffer | semmle.label | &buffer |
+| test.rs:326:15:326:20 | buffer | semmle.label | buffer |
+| test.rs:330:13:330:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:330:25:330:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:330:25:330:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:332:26:332:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:332:31:332:36 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:333:14:333:20 | &buffer | semmle.label | &buffer |
+| test.rs:333:15:333:20 | buffer | semmle.label | buffer |
+| test.rs:337:13:337:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:337:25:337:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:337:25:337:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:338:13:338:14 | v1 | semmle.label | v1 |
+| test.rs:338:18:338:32 | stdin.read_u8() [future, Ok] | semmle.label | stdin.read_u8() [future, Ok] |
+| test.rs:338:18:338:38 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:338:18:338:39 | TryExpr | semmle.label | TryExpr |
+| test.rs:339:13:339:14 | v2 | semmle.label | v2 |
+| test.rs:339:18:339:33 | stdin.read_i16() [future, Ok] | semmle.label | stdin.read_i16() [future, Ok] |
+| test.rs:339:18:339:39 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:339:18:339:40 | TryExpr | semmle.label | TryExpr |
+| test.rs:340:13:340:14 | v3 | semmle.label | v3 |
+| test.rs:340:18:340:33 | stdin.read_f32() [future, Ok] | semmle.label | stdin.read_f32() [future, Ok] |
+| test.rs:340:18:340:39 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:340:18:340:40 | TryExpr | semmle.label | TryExpr |
+| test.rs:341:13:341:14 | v4 | semmle.label | v4 |
+| test.rs:341:18:341:36 | stdin.read_i64_le() [future, Ok] | semmle.label | stdin.read_i64_le() [future, Ok] |
+| test.rs:341:18:341:42 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:341:18:341:43 | TryExpr | semmle.label | TryExpr |
+| test.rs:342:14:342:15 | v1 | semmle.label | v1 |
+| test.rs:343:14:343:15 | v2 | semmle.label | v2 |
+| test.rs:344:14:344:15 | v3 | semmle.label | v3 |
+| test.rs:345:14:345:15 | v4 | semmle.label | v4 |
+| test.rs:349:13:349:21 | mut stdin | semmle.label | mut stdin |
+| test.rs:349:25:349:40 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:349:25:349:42 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:351:24:351:34 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:351:29:351:34 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:352:14:352:20 | &buffer | semmle.label | &buffer |
+| test.rs:352:15:352:20 | buffer | semmle.label | buffer |
+| test.rs:358:13:358:22 | mut reader | semmle.label | mut reader |
+| test.rs:358:26:358:70 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:358:52:358:67 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:358:52:358:69 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:359:13:359:16 | data | semmle.label | data |
+| test.rs:359:20:359:36 | reader.fill_buf() [future, Ok] | semmle.label | reader.fill_buf() [future, Ok] |
+| test.rs:359:20:359:42 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:359:20:359:43 | TryExpr | semmle.label | TryExpr |
+| test.rs:360:14:360:18 | &data | semmle.label | &data |
+| test.rs:360:15:360:18 | data | semmle.label | data |
+| test.rs:364:13:364:18 | reader | semmle.label | reader |
+| test.rs:364:22:364:66 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:364:48:364:63 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:364:48:364:65 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:365:13:365:16 | data | semmle.label | data |
+| test.rs:365:20:365:34 | reader.buffer() | semmle.label | reader.buffer() |
+| test.rs:366:14:366:18 | &data | semmle.label | &data |
+| test.rs:366:15:366:18 | data | semmle.label | data |
+| test.rs:371:13:371:22 | mut reader | semmle.label | mut reader |
+| test.rs:371:26:371:70 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:371:52:371:67 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:371:52:371:69 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:372:26:372:36 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:372:31:372:36 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:373:14:373:20 | &buffer | semmle.label | &buffer |
+| test.rs:373:15:373:20 | buffer | semmle.label | buffer |
+| test.rs:378:13:378:22 | mut reader | semmle.label | mut reader |
+| test.rs:378:26:378:70 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:378:52:378:67 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:378:52:378:69 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:379:33:379:43 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:379:38:379:43 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:380:14:380:20 | &buffer | semmle.label | &buffer |
+| test.rs:380:15:380:20 | buffer | semmle.label | buffer |
+| test.rs:381:14:381:22 | buffer[0] | semmle.label | buffer[0] |
+| test.rs:385:13:385:28 | mut reader_split | semmle.label | mut reader_split |
+| test.rs:385:32:385:76 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:385:32:385:88 | ... .split(...) | semmle.label | ... .split(...) |
+| test.rs:385:58:385:73 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:385:58:385:75 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:386:14:386:40 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] |
+| test.rs:386:14:386:46 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:386:14:386:47 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:386:14:386:56 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:387:19:387:29 | Some(...) [Some] | semmle.label | Some(...) [Some] |
+| test.rs:387:24:387:28 | chunk | semmle.label | chunk |
+| test.rs:387:33:387:59 | reader_split.next_segment() [future, Ok, Some] | semmle.label | reader_split.next_segment() [future, Ok, Some] |
+| test.rs:387:33:387:65 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:387:33:387:66 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:388:18:388:22 | chunk | semmle.label | chunk |
+| test.rs:393:13:393:18 | reader | semmle.label | reader |
+| test.rs:393:22:393:66 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:393:48:393:63 | ...::stdin | semmle.label | ...::stdin |
+| test.rs:393:48:393:65 | ...::stdin(...) | semmle.label | ...::stdin(...) |
+| test.rs:394:13:394:21 | mut lines | semmle.label | mut lines |
+| test.rs:394:25:394:38 | reader.lines() | semmle.label | reader.lines() |
+| test.rs:395:14:395:30 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] |
+| test.rs:395:14:395:36 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:395:14:395:37 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:395:14:395:46 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:396:19:396:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
+| test.rs:396:24:396:27 | line | semmle.label | line |
+| test.rs:396:32:396:48 | lines.next_line() [future, Ok, Some] | semmle.label | lines.next_line() [future, Ok, Some] |
+| test.rs:396:32:396:54 | await ... [Ok, Some] | semmle.label | await ... [Ok, Some] |
+| test.rs:396:32:396:55 | TryExpr [Some] | semmle.label | TryExpr [Some] |
+| test.rs:397:18:397:21 | line | semmle.label | line |
+| test.rs:408:13:408:18 | buffer | semmle.label | buffer |
+| test.rs:408:31:408:43 | ...::read | semmle.label | ...::read |
+| test.rs:408:31:408:43 | ...::read [Ok] | semmle.label | ...::read [Ok] |
+| test.rs:408:31:408:55 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] |
+| test.rs:408:31:408:56 | TryExpr | semmle.label | TryExpr |
+| test.rs:409:14:409:19 | buffer | semmle.label | buffer |
+| test.rs:413:13:413:18 | buffer | semmle.label | buffer |
+| test.rs:413:31:413:38 | ...::read | semmle.label | ...::read |
+| test.rs:413:31:413:38 | ...::read [Ok] | semmle.label | ...::read [Ok] |
+| test.rs:413:31:413:50 | ...::read(...) [Ok] | semmle.label | ...::read(...) [Ok] |
+| test.rs:413:31:413:51 | TryExpr | semmle.label | TryExpr |
+| test.rs:414:14:414:19 | buffer | semmle.label | buffer |
+| test.rs:418:13:418:18 | buffer | semmle.label | buffer |
+| test.rs:418:22:418:39 | ...::read_to_string | semmle.label | ...::read_to_string |
+| test.rs:418:22:418:39 | ...::read_to_string [Ok] | semmle.label | ...::read_to_string [Ok] |
+| test.rs:418:22:418:51 | ...::read_to_string(...) [Ok] | semmle.label | ...::read_to_string(...) [Ok] |
+| test.rs:418:22:418:52 | TryExpr | semmle.label | TryExpr |
+| test.rs:419:14:419:19 | buffer | semmle.label | buffer |
+| test.rs:425:13:425:16 | path | semmle.label | path |
+| test.rs:425:20:425:27 | e.path() | semmle.label | e.path() |
+| test.rs:425:22:425:25 | path | semmle.label | path |
+| test.rs:426:14:426:17 | path | semmle.label | path |
+| test.rs:426:14:426:25 | path.clone() | semmle.label | path.clone() |
+| test.rs:427:14:427:17 | path | semmle.label | path |
+| test.rs:427:14:427:25 | path.clone() | semmle.label | path.clone() |
+| test.rs:427:14:427:35 | ... .as_path() | semmle.label | ... .as_path() |
+| test.rs:437:14:437:17 | path | semmle.label | path |
+| test.rs:439:13:439:21 | file_name | semmle.label | file_name |
+| test.rs:439:25:439:37 | e.file_name() | semmle.label | e.file_name() |
+| test.rs:439:27:439:35 | file_name | semmle.label | file_name |
+| test.rs:440:14:440:22 | file_name | semmle.label | file_name |
+| test.rs:440:14:440:30 | file_name.clone() | semmle.label | file_name.clone() |
+| test.rs:445:14:445:22 | file_name | semmle.label | file_name |
+| test.rs:461:13:461:18 | target | semmle.label | target |
+| test.rs:461:22:461:34 | ...::read_link | semmle.label | ...::read_link |
+| test.rs:461:22:461:49 | ...::read_link(...) [Ok] | semmle.label | ...::read_link(...) [Ok] |
+| test.rs:461:22:461:50 | TryExpr | semmle.label | TryExpr |
+| test.rs:462:14:462:19 | target | semmle.label | target |
+| test.rs:470:13:470:18 | buffer | semmle.label | buffer |
+| test.rs:470:31:470:45 | ...::read | semmle.label | ...::read |
+| test.rs:470:31:470:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] |
+| test.rs:470:31:470:63 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:470:31:470:64 | TryExpr | semmle.label | TryExpr |
+| test.rs:471:14:471:19 | buffer | semmle.label | buffer |
+| test.rs:475:13:475:18 | buffer | semmle.label | buffer |
+| test.rs:475:31:475:45 | ...::read | semmle.label | ...::read |
+| test.rs:475:31:475:57 | ...::read(...) [future, Ok] | semmle.label | ...::read(...) [future, Ok] |
+| test.rs:475:31:475:63 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:475:31:475:64 | TryExpr | semmle.label | TryExpr |
+| test.rs:476:14:476:19 | buffer | semmle.label | buffer |
+| test.rs:480:13:480:18 | buffer | semmle.label | buffer |
+| test.rs:480:22:480:46 | ...::read_to_string | semmle.label | ...::read_to_string |
+| test.rs:480:22:480:58 | ...::read_to_string(...) [future, Ok] | semmle.label | ...::read_to_string(...) [future, Ok] |
+| test.rs:480:22:480:64 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:480:22:480:65 | TryExpr | semmle.label | TryExpr |
+| test.rs:481:14:481:19 | buffer | semmle.label | buffer |
+| test.rs:486:13:486:16 | path | semmle.label | path |
+| test.rs:486:20:486:31 | entry.path() | semmle.label | entry.path() |
+| test.rs:486:26:486:29 | path | semmle.label | path |
+| test.rs:486:26:486:29 | path | semmle.label | path |
+| test.rs:487:13:487:21 | file_name | semmle.label | file_name |
+| test.rs:487:25:487:41 | entry.file_name() | semmle.label | entry.file_name() |
+| test.rs:487:31:487:39 | file_name | semmle.label | file_name |
+| test.rs:487:31:487:39 | file_name | semmle.label | file_name |
+| test.rs:488:14:488:17 | path | semmle.label | path |
+| test.rs:489:14:489:22 | file_name | semmle.label | file_name |
+| test.rs:493:13:493:18 | target | semmle.label | target |
+| test.rs:493:22:493:41 | ...::read_link | semmle.label | ...::read_link |
+| test.rs:493:22:493:56 | ...::read_link(...) [future, Ok] | semmle.label | ...::read_link(...) [future, Ok] |
+| test.rs:493:22:493:62 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:493:22:493:63 | TryExpr | semmle.label | TryExpr |
+| test.rs:494:14:494:19 | target | semmle.label | target |
+| test.rs:503:9:503:16 | mut file | semmle.label | mut file |
+| test.rs:503:20:503:38 | ...::open | semmle.label | ...::open |
+| test.rs:503:20:503:50 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] |
+| test.rs:503:20:503:51 | TryExpr | semmle.label | TryExpr |
+| test.rs:507:32:507:42 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:507:32:507:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:507:37:507:42 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:508:14:508:20 | &buffer | semmle.label | &buffer |
+| test.rs:508:15:508:20 | buffer | semmle.label | buffer |
+| test.rs:513:39:513:49 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:513:39:513:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:513:44:513:49 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:514:14:514:20 | &buffer | semmle.label | &buffer |
+| test.rs:514:15:514:20 | buffer | semmle.label | buffer |
+| test.rs:519:42:519:52 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:519:42:519:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:519:47:519:52 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:520:14:520:20 | &buffer | semmle.label | &buffer |
+| test.rs:520:15:520:20 | buffer | semmle.label | buffer |
+| test.rs:525:25:525:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:525:30:525:35 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:526:14:526:20 | &buffer | semmle.label | &buffer |
+| test.rs:526:15:526:20 | buffer | semmle.label | buffer |
+| test.rs:529:17:529:28 | file.bytes() | semmle.label | file.bytes() |
+| test.rs:530:14:530:17 | byte | semmle.label | byte |
+| test.rs:536:13:536:18 | mut f1 | semmle.label | mut f1 |
+| test.rs:536:22:536:63 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] |
+| test.rs:536:22:536:72 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:536:50:536:53 | open | semmle.label | open |
+| test.rs:538:30:538:40 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:538:30:538:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:538:35:538:40 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:539:14:539:20 | &buffer | semmle.label | &buffer |
+| test.rs:539:15:539:20 | buffer | semmle.label | buffer |
+| test.rs:543:13:543:18 | mut f2 | semmle.label | mut f2 |
+| test.rs:543:22:543:80 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] |
+| test.rs:543:22:543:89 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:543:67:543:70 | open | semmle.label | open |
+| test.rs:545:30:545:40 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:545:30:545:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:545:35:545:40 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:546:14:546:20 | &buffer | semmle.label | &buffer |
+| test.rs:546:15:546:20 | buffer | semmle.label | buffer |
+| test.rs:550:13:550:18 | mut f3 | semmle.label | mut f3 |
+| test.rs:550:22:550:114 | ... .open(...) [Ok] | semmle.label | ... .open(...) [Ok] |
+| test.rs:550:22:550:123 | ... .unwrap() | semmle.label | ... .unwrap() |
+| test.rs:550:101:550:104 | open | semmle.label | open |
+| test.rs:552:30:552:40 | [post] &mut buffer | semmle.label | [post] &mut buffer |
+| test.rs:552:30:552:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:552:35:552:40 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:553:14:553:20 | &buffer | semmle.label | &buffer |
+| test.rs:553:15:553:20 | buffer | semmle.label | buffer |
+| test.rs:560:13:560:17 | file1 | semmle.label | file1 |
+| test.rs:560:21:560:39 | ...::open | semmle.label | ...::open |
+| test.rs:560:21:560:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] |
+| test.rs:560:21:560:52 | TryExpr | semmle.label | TryExpr |
+| test.rs:561:13:561:17 | file2 | semmle.label | file2 |
+| test.rs:561:21:561:39 | ...::open | semmle.label | ...::open |
+| test.rs:561:21:561:59 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] |
+| test.rs:561:21:561:60 | TryExpr | semmle.label | TryExpr |
+| test.rs:562:13:562:22 | mut reader | semmle.label | mut reader |
+| test.rs:562:26:562:43 | file1.chain(...) | semmle.label | file1.chain(...) |
+| test.rs:562:38:562:42 | file2 | semmle.label | file2 |
+| test.rs:563:31:563:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:563:36:563:41 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:564:14:564:20 | &buffer | semmle.label | &buffer |
+| test.rs:564:15:564:20 | buffer | semmle.label | buffer |
+| test.rs:569:13:569:17 | file1 | semmle.label | file1 |
+| test.rs:569:21:569:39 | ...::open | semmle.label | ...::open |
+| test.rs:569:21:569:51 | ...::open(...) [Ok] | semmle.label | ...::open(...) [Ok] |
+| test.rs:569:21:569:52 | TryExpr | semmle.label | TryExpr |
+| test.rs:570:13:570:22 | mut reader | semmle.label | mut reader |
+| test.rs:570:26:570:40 | file1.take(...) | semmle.label | file1.take(...) |
+| test.rs:571:31:571:41 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:571:36:571:41 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:572:14:572:20 | &buffer | semmle.label | &buffer |
+| test.rs:572:15:572:20 | buffer | semmle.label | buffer |
+| test.rs:581:9:581:16 | mut file | semmle.label | mut file |
+| test.rs:581:20:581:40 | ...::open | semmle.label | ...::open |
+| test.rs:581:20:581:52 | ...::open(...) [future, Ok] | semmle.label | ...::open(...) [future, Ok] |
+| test.rs:581:20:581:58 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:581:20:581:59 | TryExpr | semmle.label | TryExpr |
+| test.rs:585:32:585:42 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:585:37:585:42 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:586:14:586:20 | &buffer | semmle.label | &buffer |
+| test.rs:586:15:586:20 | buffer | semmle.label | buffer |
+| test.rs:591:39:591:49 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:591:44:591:49 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:592:14:592:20 | &buffer | semmle.label | &buffer |
+| test.rs:592:15:592:20 | buffer | semmle.label | buffer |
+| test.rs:597:42:597:52 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:597:47:597:52 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:598:14:598:20 | &buffer | semmle.label | &buffer |
+| test.rs:598:15:598:20 | buffer | semmle.label | buffer |
+| test.rs:603:25:603:35 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:603:30:603:35 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:604:14:604:20 | &buffer | semmle.label | &buffer |
+| test.rs:604:15:604:20 | buffer | semmle.label | buffer |
+| test.rs:608:13:608:14 | v1 | semmle.label | v1 |
+| test.rs:608:18:608:31 | file.read_u8() [future, Ok] | semmle.label | file.read_u8() [future, Ok] |
+| test.rs:608:18:608:37 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:608:18:608:38 | TryExpr | semmle.label | TryExpr |
+| test.rs:609:13:609:14 | v2 | semmle.label | v2 |
+| test.rs:609:18:609:32 | file.read_i16() [future, Ok] | semmle.label | file.read_i16() [future, Ok] |
+| test.rs:609:18:609:38 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:609:18:609:39 | TryExpr | semmle.label | TryExpr |
+| test.rs:610:13:610:14 | v3 | semmle.label | v3 |
+| test.rs:610:18:610:32 | file.read_f32() [future, Ok] | semmle.label | file.read_f32() [future, Ok] |
+| test.rs:610:18:610:38 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:610:18:610:39 | TryExpr | semmle.label | TryExpr |
+| test.rs:611:13:611:14 | v4 | semmle.label | v4 |
+| test.rs:611:18:611:35 | file.read_i64_le() [future, Ok] | semmle.label | file.read_i64_le() [future, Ok] |
+| test.rs:611:18:611:41 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:611:18:611:42 | TryExpr | semmle.label | TryExpr |
+| test.rs:612:14:612:15 | v1 | semmle.label | v1 |
+| test.rs:613:14:613:15 | v2 | semmle.label | v2 |
+| test.rs:614:14:614:15 | v3 | semmle.label | v3 |
+| test.rs:615:14:615:15 | v4 | semmle.label | v4 |
+| test.rs:620:23:620:33 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:620:28:620:33 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:621:14:621:20 | &buffer | semmle.label | &buffer |
+| test.rs:621:15:621:20 | buffer | semmle.label | buffer |
+| test.rs:627:13:627:18 | mut f1 | semmle.label | mut f1 |
+| test.rs:627:22:627:65 | ... .open(...) [future, Ok] | semmle.label | ... .open(...) [future, Ok] |
+| test.rs:627:22:627:71 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:627:22:627:72 | TryExpr | semmle.label | TryExpr |
+| test.rs:627:52:627:55 | open | semmle.label | open |
+| test.rs:629:30:629:40 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:629:35:629:40 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:630:14:630:20 | &buffer | semmle.label | &buffer |
+| test.rs:630:15:630:20 | buffer | semmle.label | buffer |
+| test.rs:688:13:688:22 | mut stream | semmle.label | mut stream |
+| test.rs:688:26:688:53 | ...::connect | semmle.label | ...::connect |
+| test.rs:688:26:688:62 | ...::connect(...) [Ok] | semmle.label | ...::connect(...) [Ok] |
+| test.rs:688:26:688:63 | TryExpr | semmle.label | TryExpr |
+| test.rs:695:29:695:39 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:695:34:695:39 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:698:14:698:20 | &buffer | semmle.label | &buffer |
+| test.rs:698:15:698:20 | buffer | semmle.label | buffer |
+| test.rs:699:14:699:22 | buffer[0] | semmle.label | buffer[0] |
+| test.rs:707:13:707:22 | mut stream | semmle.label | mut stream |
+| test.rs:707:26:707:61 | ...::connect_timeout | semmle.label | ...::connect_timeout |
+| test.rs:707:26:707:105 | ...::connect_timeout(...) [Ok] | semmle.label | ...::connect_timeout(...) [Ok] |
+| test.rs:707:26:707:106 | TryExpr | semmle.label | TryExpr |
+| test.rs:715:21:715:30 | mut reader | semmle.label | mut reader |
+| test.rs:715:34:715:64 | ...::new(...) | semmle.label | ...::new(...) |
+| test.rs:715:34:715:74 | ... .take(...) | semmle.label | ... .take(...) |
+| test.rs:715:58:715:63 | stream | semmle.label | stream |
+| test.rs:718:44:718:52 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] |
+| test.rs:718:49:718:52 | [post] line | semmle.label | [post] line |
+| test.rs:725:34:725:38 | &line | semmle.label | &line |
+| test.rs:725:35:725:38 | line | semmle.label | line |
+| test.rs:759:9:759:24 | mut tokio_stream | semmle.label | mut tokio_stream |
+| test.rs:759:28:759:57 | ...::connect | semmle.label | ...::connect |
+| test.rs:759:28:759:66 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] |
+| test.rs:759:28:759:72 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test.rs:759:28:759:73 | TryExpr | semmle.label | TryExpr |
+| test.rs:767:35:767:46 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] |
+| test.rs:767:40:767:46 | [post] buffer1 | semmle.label | [post] buffer1 |
+| test.rs:771:36:771:47 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] |
+| test.rs:771:41:771:47 | [post] buffer2 | semmle.label | [post] buffer2 |
+| test.rs:774:14:774:21 | &buffer1 | semmle.label | &buffer1 |
+| test.rs:774:15:774:21 | buffer1 | semmle.label | buffer1 |
+| test.rs:775:14:775:23 | buffer1[0] | semmle.label | buffer1[0] |
+| test.rs:778:14:778:21 | &buffer2 | semmle.label | &buffer2 |
+| test.rs:778:15:778:21 | buffer2 | semmle.label | buffer2 |
+| test.rs:779:14:779:23 | buffer2[0] | semmle.label | buffer2[0] |
+| test.rs:787:41:787:51 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:787:46:787:51 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:794:26:794:32 | &buffer | semmle.label | &buffer |
+| test.rs:794:27:794:32 | buffer | semmle.label | buffer |
+| test.rs:810:45:810:55 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test.rs:810:50:810:55 | [post] buffer | semmle.label | [post] buffer |
+| test.rs:817:26:817:32 | &buffer | semmle.label | &buffer |
+| test.rs:817:27:817:32 | buffer | semmle.label | buffer |
+| test_futures_io.rs:19:9:19:11 | tcp | semmle.label | tcp |
+| test_futures_io.rs:19:15:19:32 | ...::connect | semmle.label | ...::connect |
+| test_futures_io.rs:19:15:19:37 | ...::connect(...) [future, Ok] | semmle.label | ...::connect(...) [future, Ok] |
+| test_futures_io.rs:19:15:19:43 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test_futures_io.rs:19:15:19:44 | TryExpr | semmle.label | TryExpr |
+| test_futures_io.rs:20:10:20:13 | &tcp | semmle.label | &tcp |
+| test_futures_io.rs:20:11:20:13 | tcp | semmle.label | tcp |
+| test_futures_io.rs:26:9:26:18 | mut reader | semmle.label | mut reader |
+| test_futures_io.rs:26:22:26:56 | connector.connect(...) [future, Ok] | semmle.label | connector.connect(...) [future, Ok] |
+| test_futures_io.rs:26:22:26:62 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test_futures_io.rs:26:22:26:63 | TryExpr | semmle.label | TryExpr |
+| test_futures_io.rs:26:53:26:55 | tcp | semmle.label | tcp |
+| test_futures_io.rs:27:10:27:16 | &reader | semmle.label | &reader |
+| test_futures_io.rs:27:11:27:16 | reader | semmle.label | reader |
+| test_futures_io.rs:32:13:32:22 | mut pinned | semmle.label | mut pinned |
+| test_futures_io.rs:32:13:32:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
+| test_futures_io.rs:32:13:32:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
+| test_futures_io.rs:32:26:32:46 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
+| test_futures_io.rs:32:35:32:45 | &mut reader [&ref] | semmle.label | &mut reader [&ref] |
+| test_futures_io.rs:32:40:32:45 | reader | semmle.label | reader |
+| test_futures_io.rs:33:14:33:20 | &pinned | semmle.label | &pinned |
+| test_futures_io.rs:33:15:33:20 | pinned | semmle.label | pinned |
+| test_futures_io.rs:33:15:33:20 | pinned [&ref] | semmle.label | pinned [&ref] |
+| test_futures_io.rs:33:15:33:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
+| test_futures_io.rs:45:59:45:69 | &mut reader [&ref] | semmle.label | &mut reader [&ref] |
+| test_futures_io.rs:45:64:45:69 | reader | semmle.label | reader |
+| test_futures_io.rs:45:72:45:83 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] |
+| test_futures_io.rs:45:77:45:83 | [post] buffer1 | semmle.label | [post] buffer1 |
+| test_futures_io.rs:46:14:46:36 | &... | semmle.label | &... |
+| test_futures_io.rs:46:15:46:36 | buffer1[...] | semmle.label | buffer1[...] |
+| test_futures_io.rs:49:27:49:32 | reader | semmle.label | reader |
+| test_futures_io.rs:49:39:49:50 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] |
+| test_futures_io.rs:49:44:49:50 | [post] buffer2 | semmle.label | [post] buffer2 |
+| test_futures_io.rs:51:14:51:36 | &... | semmle.label | &... |
+| test_futures_io.rs:51:15:51:36 | buffer2[...] | semmle.label | buffer2[...] |
+| test_futures_io.rs:54:9:54:19 | mut reader2 | semmle.label | mut reader2 |
+| test_futures_io.rs:54:23:54:57 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:54:51:54:56 | reader | semmle.label | reader |
+| test_futures_io.rs:55:10:55:17 | &reader2 | semmle.label | &reader2 |
+| test_futures_io.rs:55:11:55:17 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:59:13:59:22 | mut pinned | semmle.label | mut pinned |
+| test_futures_io.rs:59:13:59:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
+| test_futures_io.rs:59:13:59:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
+| test_futures_io.rs:59:26:59:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
+| test_futures_io.rs:59:35:59:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
+| test_futures_io.rs:59:40:59:46 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:60:14:60:20 | &pinned | semmle.label | &pinned |
+| test_futures_io.rs:60:15:60:20 | pinned | semmle.label | pinned |
+| test_futures_io.rs:60:15:60:20 | pinned [&ref] | semmle.label | pinned [&ref] |
+| test_futures_io.rs:60:15:60:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
+| test_futures_io.rs:62:13:62:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
+| test_futures_io.rs:62:22:62:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] |
+| test_futures_io.rs:63:16:63:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] |
+| test_futures_io.rs:63:28:63:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
+| test_futures_io.rs:63:31:63:33 | buf | semmle.label | buf |
+| test_futures_io.rs:64:18:64:24 | &buffer | semmle.label | &buffer |
+| test_futures_io.rs:64:19:64:24 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
+| test_futures_io.rs:65:18:65:20 | buf | semmle.label | buf |
+| test_futures_io.rs:69:13:69:19 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] |
+| test_futures_io.rs:69:23:69:44 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:69:23:69:44 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
+| test_futures_io.rs:69:23:69:67 | ... .poll_fill_buf(...) [Ready, Ok] | semmle.label | ... .poll_fill_buf(...) [Ready, Ok] |
+| test_futures_io.rs:69:32:69:43 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
+| test_futures_io.rs:69:37:69:43 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:70:16:70:22 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] |
+| test_futures_io.rs:71:13:71:32 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] |
+| test_futures_io.rs:71:25:71:31 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
+| test_futures_io.rs:71:28:71:30 | buf | semmle.label | buf |
+| test_futures_io.rs:72:22:72:29 | &buffer2 | semmle.label | &buffer2 |
+| test_futures_io.rs:72:23:72:29 | buffer2 [Ready, Ok] | semmle.label | buffer2 [Ready, Ok] |
+| test_futures_io.rs:73:22:73:24 | buf | semmle.label | buf |
+| test_futures_io.rs:83:13:83:18 | buffer | semmle.label | buffer |
+| test_futures_io.rs:83:22:83:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] |
+| test_futures_io.rs:83:22:83:45 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test_futures_io.rs:83:22:83:46 | TryExpr | semmle.label | TryExpr |
+| test_futures_io.rs:84:14:84:19 | buffer | semmle.label | buffer |
+| test_futures_io.rs:90:13:90:22 | mut pinned | semmle.label | mut pinned |
+| test_futures_io.rs:90:13:90:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
+| test_futures_io.rs:90:13:90:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
+| test_futures_io.rs:90:26:90:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
+| test_futures_io.rs:90:35:90:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
+| test_futures_io.rs:90:40:90:46 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:91:14:91:20 | &pinned | semmle.label | &pinned |
+| test_futures_io.rs:91:15:91:20 | pinned | semmle.label | pinned |
+| test_futures_io.rs:91:15:91:20 | pinned [&ref] | semmle.label | pinned [&ref] |
+| test_futures_io.rs:91:15:91:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
+| test_futures_io.rs:103:59:103:70 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
+| test_futures_io.rs:103:64:103:70 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:103:73:103:84 | [post] &mut buffer1 [&ref] | semmle.label | [post] &mut buffer1 [&ref] |
+| test_futures_io.rs:103:78:103:84 | [post] buffer1 | semmle.label | [post] buffer1 |
+| test_futures_io.rs:104:14:104:36 | &... | semmle.label | &... |
+| test_futures_io.rs:104:15:104:36 | buffer1[...] | semmle.label | buffer1[...] |
+| test_futures_io.rs:107:27:107:33 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:107:40:107:51 | [post] &mut buffer2 [&ref] | semmle.label | [post] &mut buffer2 [&ref] |
+| test_futures_io.rs:107:45:107:51 | [post] buffer2 | semmle.label | [post] buffer2 |
+| test_futures_io.rs:108:14:108:36 | &... | semmle.label | &... |
+| test_futures_io.rs:108:15:108:36 | buffer2[...] | semmle.label | buffer2[...] |
+| test_futures_io.rs:113:13:113:22 | mut pinned | semmle.label | mut pinned |
+| test_futures_io.rs:113:13:113:22 | mut pinned [&ref] | semmle.label | mut pinned [&ref] |
+| test_futures_io.rs:113:13:113:22 | mut pinned [Pin, &ref] | semmle.label | mut pinned [Pin, &ref] |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) | semmle.label | ...::new(...) |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) [&ref] | semmle.label | ...::new(...) [&ref] |
+| test_futures_io.rs:113:26:113:47 | ...::new(...) [Pin, &ref] | semmle.label | ...::new(...) [Pin, &ref] |
+| test_futures_io.rs:113:35:113:46 | &mut reader2 [&ref] | semmle.label | &mut reader2 [&ref] |
+| test_futures_io.rs:113:40:113:46 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:114:14:114:20 | &pinned | semmle.label | &pinned |
+| test_futures_io.rs:114:15:114:20 | pinned | semmle.label | pinned |
+| test_futures_io.rs:114:15:114:20 | pinned [&ref] | semmle.label | pinned [&ref] |
+| test_futures_io.rs:114:15:114:20 | pinned [Pin, &ref] | semmle.label | pinned [Pin, &ref] |
+| test_futures_io.rs:116:13:116:18 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
+| test_futures_io.rs:116:22:116:50 | pinned.poll_fill_buf(...) [Ready, Ok] | semmle.label | pinned.poll_fill_buf(...) [Ready, Ok] |
+| test_futures_io.rs:117:14:117:20 | &buffer | semmle.label | &buffer |
+| test_futures_io.rs:117:15:117:20 | buffer [Ready, Ok] | semmle.label | buffer [Ready, Ok] |
+| test_futures_io.rs:118:16:118:35 | ...::Ready(...) [Ready, Ok] | semmle.label | ...::Ready(...) [Ready, Ok] |
+| test_futures_io.rs:118:28:118:34 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
+| test_futures_io.rs:118:31:118:33 | buf | semmle.label | buf |
+| test_futures_io.rs:119:18:119:20 | buf | semmle.label | buf |
+| test_futures_io.rs:125:13:125:18 | buffer | semmle.label | buffer |
+| test_futures_io.rs:125:22:125:39 | reader2.fill_buf() [future, Ok] | semmle.label | reader2.fill_buf() [future, Ok] |
+| test_futures_io.rs:125:22:125:45 | await ... [Ok] | semmle.label | await ... [Ok] |
+| test_futures_io.rs:125:22:125:46 | TryExpr | semmle.label | TryExpr |
+| test_futures_io.rs:126:14:126:19 | buffer | semmle.label | buffer |
+| test_futures_io.rs:132:27:132:33 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:132:53:132:61 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] |
+| test_futures_io.rs:132:58:132:61 | [post] line | semmle.label | [post] line |
+| test_futures_io.rs:133:14:133:18 | &line | semmle.label | &line |
+| test_futures_io.rs:133:15:133:18 | line | semmle.label | line |
+| test_futures_io.rs:139:27:139:33 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:139:45:139:53 | [post] &mut line [&ref] | semmle.label | [post] &mut line [&ref] |
+| test_futures_io.rs:139:50:139:53 | [post] line | semmle.label | [post] line |
+| test_futures_io.rs:140:14:140:18 | &line | semmle.label | &line |
+| test_futures_io.rs:140:15:140:18 | line | semmle.label | line |
+| test_futures_io.rs:146:27:146:33 | reader2 | semmle.label | reader2 |
+| test_futures_io.rs:146:47:146:57 | [post] &mut buffer [&ref] | semmle.label | [post] &mut buffer [&ref] |
+| test_futures_io.rs:146:52:146:57 | [post] buffer | semmle.label | [post] buffer |
+| test_futures_io.rs:147:14:147:20 | &buffer | semmle.label | &buffer |
+| test_futures_io.rs:147:15:147:20 | buffer | semmle.label | buffer |
+| web_frameworks.rs:11:31:11:31 | a | semmle.label | a |
+| web_frameworks.rs:11:31:11:31 | a | semmle.label | a |
+| web_frameworks.rs:13:14:13:14 | a | semmle.label | a |
+| web_frameworks.rs:13:14:13:14 | a | semmle.label | a |
+| web_frameworks.rs:13:14:13:22 | a.as_str() | semmle.label | a.as_str() |
+| web_frameworks.rs:13:14:13:23 | a.as_str() | semmle.label | a.as_str() |
+| web_frameworks.rs:14:14:14:14 | a | semmle.label | a |
+| web_frameworks.rs:14:14:14:14 | a | semmle.label | a |
+| web_frameworks.rs:14:14:14:24 | a.as_bytes() | semmle.label | a.as_bytes() |
+| web_frameworks.rs:14:14:14:25 | a.as_bytes() | semmle.label | a.as_bytes() |
+| web_frameworks.rs:15:14:15:14 | a | semmle.label | a |
+| web_frameworks.rs:15:14:15:14 | a | semmle.label | a |
+| web_frameworks.rs:68:15:68:15 | a | semmle.label | a |
+| web_frameworks.rs:68:15:68:15 | a | semmle.label | a |
+| web_frameworks.rs:70:14:70:14 | a | semmle.label | a |
+| web_frameworks.rs:70:14:70:14 | a | semmle.label | a |
+subpaths
+testFailures
+#select
+| test.rs:8:10:8:30 | ...::var(...) | test.rs:8:10:8:22 | ...::var | test.rs:8:10:8:30 | ...::var(...) | $@ | test.rs:8:10:8:22 | ...::var | ...::var |
+| test.rs:9:10:9:33 | ...::var_os(...) | test.rs:9:10:9:25 | ...::var_os | test.rs:9:10:9:33 | ...::var_os(...) | $@ | test.rs:9:10:9:25 | ...::var_os | ...::var_os |
+| test.rs:14:10:14:13 | var1 | test.rs:11:16:11:28 | ...::var | test.rs:14:10:14:13 | var1 | $@ | test.rs:11:16:11:28 | ...::var | ...::var |
+| test.rs:15:10:15:13 | var2 | test.rs:12:16:12:31 | ...::var_os | test.rs:15:10:15:13 | var2 | $@ | test.rs:12:16:12:31 | ...::var_os | ...::var_os |
+| test.rs:36:10:36:16 | my_path | test.rs:29:29:29:42 | ...::args | test.rs:36:10:36:16 | my_path | $@ | test.rs:29:29:29:42 | ...::args | ...::args |
+| test.rs:37:10:37:13 | arg1 | test.rs:29:29:29:42 | ...::args | test.rs:37:10:37:13 | arg1 | $@ | test.rs:29:29:29:42 | ...::args | ...::args |
+| test.rs:38:10:38:13 | arg2 | test.rs:32:16:32:29 | ...::args | test.rs:38:10:38:13 | arg2 | $@ | test.rs:32:16:32:29 | ...::args | ...::args |
+| test.rs:39:10:39:13 | arg3 | test.rs:33:16:33:32 | ...::args_os | test.rs:39:10:39:13 | arg3 | $@ | test.rs:33:16:33:32 | ...::args_os | ...::args_os |
+| test.rs:40:10:40:13 | arg4 | test.rs:34:16:34:29 | ...::args | test.rs:40:10:40:13 | arg4 | $@ | test.rs:34:16:34:29 | ...::args | ...::args |
+| test.rs:43:14:43:16 | arg | test.rs:42:16:42:29 | ...::args | test.rs:43:14:43:16 | arg | $@ | test.rs:42:16:42:29 | ...::args | ...::args |
+| test.rs:47:14:47:16 | arg | test.rs:46:16:46:32 | ...::args_os | test.rs:47:14:47:16 | arg | $@ | test.rs:46:16:46:32 | ...::args_os | ...::args_os |
+| test.rs:56:10:56:12 | dir | test.rs:52:15:52:35 | ...::current_dir | test.rs:56:10:56:12 | dir | $@ | test.rs:52:15:52:35 | ...::current_dir | ...::current_dir |
+| test.rs:57:10:57:12 | exe | test.rs:53:15:53:35 | ...::current_exe | test.rs:57:10:57:12 | exe | $@ | test.rs:53:15:53:35 | ...::current_exe | ...::current_exe |
+| test.rs:58:10:58:13 | home | test.rs:54:16:54:33 | ...::home_dir | test.rs:58:10:58:13 | home | $@ | test.rs:54:16:54:33 | ...::home_dir | ...::home_dir |
+| test.rs:63:10:63:23 | remote_string1 | test.rs:62:26:62:47 | ...::get | test.rs:63:10:63:23 | remote_string1 | $@ | test.rs:62:26:62:47 | ...::get | ...::get |
+| test.rs:66:10:66:23 | remote_string2 | test.rs:65:26:65:47 | ...::get | test.rs:66:10:66:23 | remote_string2 | $@ | test.rs:65:26:65:47 | ...::get | ...::get |
+| test.rs:69:10:69:23 | remote_string3 | test.rs:68:26:68:47 | ...::get | test.rs:69:10:69:23 | remote_string3 | $@ | test.rs:68:26:68:47 | ...::get | ...::get |
+| test.rs:72:10:72:23 | remote_string4 | test.rs:71:26:71:47 | ...::get | test.rs:72:10:72:23 | remote_string4 | $@ | test.rs:71:26:71:47 | ...::get | ...::get |
+| test.rs:75:10:75:23 | remote_string5 | test.rs:74:26:74:37 | ...::get | test.rs:75:10:75:23 | remote_string5 | $@ | test.rs:74:26:74:37 | ...::get | ...::get |
+| test.rs:78:10:78:23 | remote_string6 | test.rs:77:26:77:37 | ...::get | test.rs:78:10:78:23 | remote_string6 | $@ | test.rs:77:26:77:37 | ...::get | ...::get |
+| test.rs:81:10:81:41 | ... .unwrap() | test.rs:80:24:80:35 | ...::get | test.rs:81:10:81:41 | ... .unwrap() | $@ | test.rs:80:24:80:35 | ...::get | ...::get |
+| test.rs:83:14:83:18 | chunk | test.rs:80:24:80:35 | ...::get | test.rs:83:14:83:18 | chunk | $@ | test.rs:80:24:80:35 | ...::get | ...::get |
+| test.rs:115:14:115:22 | &response | test.rs:114:31:114:42 | send_request | test.rs:115:14:115:22 | &response | $@ | test.rs:114:31:114:42 | send_request | send_request |
+| test.rs:116:14:116:21 | response | test.rs:114:31:114:42 | send_request | test.rs:116:14:116:21 | response | $@ | test.rs:114:31:114:42 | send_request | send_request |
+| test.rs:122:10:122:18 | &response | test.rs:121:31:121:42 | send_request | test.rs:122:10:122:18 | &response | $@ | test.rs:121:31:121:42 | send_request | send_request |
+| test.rs:212:14:212:20 | &buffer | test.rs:211:22:211:35 | ...::stdin | test.rs:212:14:212:20 | &buffer | $@ | test.rs:211:22:211:35 | ...::stdin | ...::stdin |
+| test.rs:218:14:218:20 | &buffer | test.rs:217:22:217:35 | ...::stdin | test.rs:218:14:218:20 | &buffer | $@ | test.rs:217:22:217:35 | ...::stdin | ...::stdin |
+| test.rs:224:14:224:20 | &buffer | test.rs:223:22:223:35 | ...::stdin | test.rs:224:14:224:20 | &buffer | $@ | test.rs:223:22:223:35 | ...::stdin | ...::stdin |
+| test.rs:230:14:230:20 | &buffer | test.rs:229:22:229:35 | ...::stdin | test.rs:230:14:230:20 | &buffer | $@ | test.rs:229:22:229:35 | ...::stdin | ...::stdin |
+| test.rs:236:14:236:20 | &buffer | test.rs:235:9:235:22 | ...::stdin | test.rs:236:14:236:20 | &buffer | $@ | test.rs:235:9:235:22 | ...::stdin | ...::stdin |
+| test.rs:240:14:240:17 | byte | test.rs:239:17:239:30 | ...::stdin | test.rs:240:14:240:17 | byte | $@ | test.rs:239:17:239:30 | ...::stdin | ...::stdin |
+| test.rs:248:14:248:18 | &data | test.rs:246:50:246:63 | ...::stdin | test.rs:248:14:248:18 | &data | $@ | test.rs:246:50:246:63 | ...::stdin | ...::stdin |
+| test.rs:254:14:254:18 | &data | test.rs:252:46:252:59 | ...::stdin | test.rs:254:14:254:18 | &data | $@ | test.rs:252:46:252:59 | ...::stdin | ...::stdin |
+| test.rs:261:14:261:20 | &buffer | test.rs:259:50:259:63 | ...::stdin | test.rs:261:14:261:20 | &buffer | $@ | test.rs:259:50:259:63 | ...::stdin | ...::stdin |
+| test.rs:268:14:268:20 | &buffer | test.rs:266:50:266:63 | ...::stdin | test.rs:268:14:268:20 | &buffer | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin |
+| test.rs:269:14:269:22 | buffer[0] | test.rs:266:50:266:63 | ...::stdin | test.rs:269:14:269:22 | buffer[0] | $@ | test.rs:266:50:266:63 | ...::stdin | ...::stdin |
+| test.rs:274:14:274:50 | ... .unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:274:14:274:50 | ... .unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin |
+| test.rs:276:18:276:31 | chunk.unwrap() | test.rs:273:56:273:69 | ...::stdin | test.rs:276:18:276:31 | chunk.unwrap() | $@ | test.rs:273:56:273:69 | ...::stdin | ...::stdin |
+| test.rs:283:18:283:21 | line | test.rs:281:46:281:59 | ...::stdin | test.rs:283:18:283:21 | line | $@ | test.rs:281:46:281:59 | ...::stdin | ...::stdin |
+| test.rs:312:14:312:20 | &buffer | test.rs:309:25:309:40 | ...::stdin | test.rs:312:14:312:20 | &buffer | $@ | test.rs:309:25:309:40 | ...::stdin | ...::stdin |
+| test.rs:319:14:319:20 | &buffer | test.rs:316:25:316:40 | ...::stdin | test.rs:319:14:319:20 | &buffer | $@ | test.rs:316:25:316:40 | ...::stdin | ...::stdin |
+| test.rs:326:14:326:20 | &buffer | test.rs:323:25:323:40 | ...::stdin | test.rs:326:14:326:20 | &buffer | $@ | test.rs:323:25:323:40 | ...::stdin | ...::stdin |
+| test.rs:333:14:333:20 | &buffer | test.rs:330:25:330:40 | ...::stdin | test.rs:333:14:333:20 | &buffer | $@ | test.rs:330:25:330:40 | ...::stdin | ...::stdin |
+| test.rs:342:14:342:15 | v1 | test.rs:337:25:337:40 | ...::stdin | test.rs:342:14:342:15 | v1 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin |
+| test.rs:343:14:343:15 | v2 | test.rs:337:25:337:40 | ...::stdin | test.rs:343:14:343:15 | v2 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin |
+| test.rs:344:14:344:15 | v3 | test.rs:337:25:337:40 | ...::stdin | test.rs:344:14:344:15 | v3 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin |
+| test.rs:345:14:345:15 | v4 | test.rs:337:25:337:40 | ...::stdin | test.rs:345:14:345:15 | v4 | $@ | test.rs:337:25:337:40 | ...::stdin | ...::stdin |
+| test.rs:352:14:352:20 | &buffer | test.rs:349:25:349:40 | ...::stdin | test.rs:352:14:352:20 | &buffer | $@ | test.rs:349:25:349:40 | ...::stdin | ...::stdin |
+| test.rs:360:14:360:18 | &data | test.rs:358:52:358:67 | ...::stdin | test.rs:360:14:360:18 | &data | $@ | test.rs:358:52:358:67 | ...::stdin | ...::stdin |
+| test.rs:366:14:366:18 | &data | test.rs:364:48:364:63 | ...::stdin | test.rs:366:14:366:18 | &data | $@ | test.rs:364:48:364:63 | ...::stdin | ...::stdin |
+| test.rs:373:14:373:20 | &buffer | test.rs:371:52:371:67 | ...::stdin | test.rs:373:14:373:20 | &buffer | $@ | test.rs:371:52:371:67 | ...::stdin | ...::stdin |
+| test.rs:380:14:380:20 | &buffer | test.rs:378:52:378:67 | ...::stdin | test.rs:380:14:380:20 | &buffer | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin |
+| test.rs:381:14:381:22 | buffer[0] | test.rs:378:52:378:67 | ...::stdin | test.rs:381:14:381:22 | buffer[0] | $@ | test.rs:378:52:378:67 | ...::stdin | ...::stdin |
+| test.rs:386:14:386:56 | ... .unwrap() | test.rs:385:58:385:73 | ...::stdin | test.rs:386:14:386:56 | ... .unwrap() | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin |
+| test.rs:388:18:388:22 | chunk | test.rs:385:58:385:73 | ...::stdin | test.rs:388:18:388:22 | chunk | $@ | test.rs:385:58:385:73 | ...::stdin | ...::stdin |
+| test.rs:395:14:395:46 | ... .unwrap() | test.rs:393:48:393:63 | ...::stdin | test.rs:395:14:395:46 | ... .unwrap() | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin |
+| test.rs:397:18:397:21 | line | test.rs:393:48:393:63 | ...::stdin | test.rs:397:18:397:21 | line | $@ | test.rs:393:48:393:63 | ...::stdin | ...::stdin |
+| test.rs:409:14:409:19 | buffer | test.rs:408:31:408:43 | ...::read | test.rs:409:14:409:19 | buffer | $@ | test.rs:408:31:408:43 | ...::read | ...::read |
+| test.rs:414:14:414:19 | buffer | test.rs:413:31:413:38 | ...::read | test.rs:414:14:414:19 | buffer | $@ | test.rs:413:31:413:38 | ...::read | ...::read |
+| test.rs:419:14:419:19 | buffer | test.rs:418:22:418:39 | ...::read_to_string | test.rs:419:14:419:19 | buffer | $@ | test.rs:418:22:418:39 | ...::read_to_string | ...::read_to_string |
+| test.rs:426:14:426:25 | path.clone() | test.rs:425:22:425:25 | path | test.rs:426:14:426:25 | path.clone() | $@ | test.rs:425:22:425:25 | path | path |
+| test.rs:427:14:427:35 | ... .as_path() | test.rs:425:22:425:25 | path | test.rs:427:14:427:35 | ... .as_path() | $@ | test.rs:425:22:425:25 | path | path |
+| test.rs:437:14:437:17 | path | test.rs:425:22:425:25 | path | test.rs:437:14:437:17 | path | $@ | test.rs:425:22:425:25 | path | path |
+| test.rs:440:14:440:30 | file_name.clone() | test.rs:439:27:439:35 | file_name | test.rs:440:14:440:30 | file_name.clone() | $@ | test.rs:439:27:439:35 | file_name | file_name |
+| test.rs:445:14:445:22 | file_name | test.rs:439:27:439:35 | file_name | test.rs:445:14:445:22 | file_name | $@ | test.rs:439:27:439:35 | file_name | file_name |
+| test.rs:462:14:462:19 | target | test.rs:461:22:461:34 | ...::read_link | test.rs:462:14:462:19 | target | $@ | test.rs:461:22:461:34 | ...::read_link | ...::read_link |
+| test.rs:471:14:471:19 | buffer | test.rs:470:31:470:45 | ...::read | test.rs:471:14:471:19 | buffer | $@ | test.rs:470:31:470:45 | ...::read | ...::read |
+| test.rs:476:14:476:19 | buffer | test.rs:475:31:475:45 | ...::read | test.rs:476:14:476:19 | buffer | $@ | test.rs:475:31:475:45 | ...::read | ...::read |
+| test.rs:481:14:481:19 | buffer | test.rs:480:22:480:46 | ...::read_to_string | test.rs:481:14:481:19 | buffer | $@ | test.rs:480:22:480:46 | ...::read_to_string | ...::read_to_string |
+| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path |
+| test.rs:488:14:488:17 | path | test.rs:486:26:486:29 | path | test.rs:488:14:488:17 | path | $@ | test.rs:486:26:486:29 | path | path |
+| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name |
+| test.rs:489:14:489:22 | file_name | test.rs:487:31:487:39 | file_name | test.rs:489:14:489:22 | file_name | $@ | test.rs:487:31:487:39 | file_name | file_name |
+| test.rs:494:14:494:19 | target | test.rs:493:22:493:41 | ...::read_link | test.rs:494:14:494:19 | target | $@ | test.rs:493:22:493:41 | ...::read_link | ...::read_link |
+| test.rs:508:14:508:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:508:14:508:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open |
+| test.rs:514:14:514:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:514:14:514:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open |
+| test.rs:520:14:520:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:520:14:520:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open |
+| test.rs:526:14:526:20 | &buffer | test.rs:503:20:503:38 | ...::open | test.rs:526:14:526:20 | &buffer | $@ | test.rs:503:20:503:38 | ...::open | ...::open |
+| test.rs:530:14:530:17 | byte | test.rs:503:20:503:38 | ...::open | test.rs:530:14:530:17 | byte | $@ | test.rs:503:20:503:38 | ...::open | ...::open |
+| test.rs:539:14:539:20 | &buffer | test.rs:536:50:536:53 | open | test.rs:539:14:539:20 | &buffer | $@ | test.rs:536:50:536:53 | open | open |
+| test.rs:546:14:546:20 | &buffer | test.rs:543:67:543:70 | open | test.rs:546:14:546:20 | &buffer | $@ | test.rs:543:67:543:70 | open | open |
+| test.rs:553:14:553:20 | &buffer | test.rs:550:101:550:104 | open | test.rs:553:14:553:20 | &buffer | $@ | test.rs:550:101:550:104 | open | open |
+| test.rs:564:14:564:20 | &buffer | test.rs:560:21:560:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:560:21:560:39 | ...::open | ...::open |
+| test.rs:564:14:564:20 | &buffer | test.rs:561:21:561:39 | ...::open | test.rs:564:14:564:20 | &buffer | $@ | test.rs:561:21:561:39 | ...::open | ...::open |
+| test.rs:572:14:572:20 | &buffer | test.rs:569:21:569:39 | ...::open | test.rs:572:14:572:20 | &buffer | $@ | test.rs:569:21:569:39 | ...::open | ...::open |
+| test.rs:586:14:586:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:586:14:586:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:592:14:592:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:592:14:592:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:598:14:598:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:598:14:598:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:604:14:604:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:604:14:604:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:612:14:612:15 | v1 | test.rs:581:20:581:40 | ...::open | test.rs:612:14:612:15 | v1 | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:613:14:613:15 | v2 | test.rs:581:20:581:40 | ...::open | test.rs:613:14:613:15 | v2 | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:614:14:614:15 | v3 | test.rs:581:20:581:40 | ...::open | test.rs:614:14:614:15 | v3 | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:615:14:615:15 | v4 | test.rs:581:20:581:40 | ...::open | test.rs:615:14:615:15 | v4 | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:621:14:621:20 | &buffer | test.rs:581:20:581:40 | ...::open | test.rs:621:14:621:20 | &buffer | $@ | test.rs:581:20:581:40 | ...::open | ...::open |
+| test.rs:630:14:630:20 | &buffer | test.rs:627:52:627:55 | open | test.rs:630:14:630:20 | &buffer | $@ | test.rs:627:52:627:55 | open | open |
+| test.rs:698:14:698:20 | &buffer | test.rs:688:26:688:53 | ...::connect | test.rs:698:14:698:20 | &buffer | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect |
+| test.rs:699:14:699:22 | buffer[0] | test.rs:688:26:688:53 | ...::connect | test.rs:699:14:699:22 | buffer[0] | $@ | test.rs:688:26:688:53 | ...::connect | ...::connect |
+| test.rs:725:34:725:38 | &line | test.rs:707:26:707:61 | ...::connect_timeout | test.rs:725:34:725:38 | &line | $@ | test.rs:707:26:707:61 | ...::connect_timeout | ...::connect_timeout |
+| test.rs:774:14:774:21 | &buffer1 | test.rs:759:28:759:57 | ...::connect | test.rs:774:14:774:21 | &buffer1 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test.rs:775:14:775:23 | buffer1[0] | test.rs:759:28:759:57 | ...::connect | test.rs:775:14:775:23 | buffer1[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test.rs:778:14:778:21 | &buffer2 | test.rs:759:28:759:57 | ...::connect | test.rs:778:14:778:21 | &buffer2 | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test.rs:779:14:779:23 | buffer2[0] | test.rs:759:28:759:57 | ...::connect | test.rs:779:14:779:23 | buffer2[0] | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test.rs:794:26:794:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:794:26:794:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test.rs:817:26:817:32 | &buffer | test.rs:759:28:759:57 | ...::connect | test.rs:817:26:817:32 | &buffer | $@ | test.rs:759:28:759:57 | ...::connect | ...::connect |
+| test_futures_io.rs:20:10:20:13 | &tcp | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:20:10:20:13 | &tcp | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:27:10:27:16 | &reader | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:27:10:27:16 | &reader | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:33:14:33:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:33:14:33:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:46:14:46:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:46:14:46:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:51:14:51:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:51:14:51:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:55:10:55:17 | &reader2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:55:10:55:17 | &reader2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:60:14:60:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:60:14:60:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:64:18:64:24 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:64:18:64:24 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:65:18:65:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:65:18:65:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:72:22:72:29 | &buffer2 | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:72:22:72:29 | &buffer2 | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:73:22:73:24 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:73:22:73:24 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:84:14:84:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:84:14:84:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:91:14:91:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:91:14:91:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:104:14:104:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:104:14:104:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:108:14:108:36 | &... | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:108:14:108:36 | &... | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:114:14:114:20 | &pinned | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:114:14:114:20 | &pinned | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:117:14:117:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:117:14:117:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:119:18:119:20 | buf | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:119:18:119:20 | buf | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:126:14:126:19 | buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:126:14:126:19 | buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:133:14:133:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:133:14:133:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:140:14:140:18 | &line | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:140:14:140:18 | &line | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| test_futures_io.rs:147:14:147:20 | &buffer | test_futures_io.rs:19:15:19:32 | ...::connect | test_futures_io.rs:147:14:147:20 | &buffer | $@ | test_futures_io.rs:19:15:19:32 | ...::connect | ...::connect |
+| web_frameworks.rs:13:14:13:22 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:22 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:13:14:13:23 | a.as_str() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:13:14:13:23 | a.as_str() | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:14:14:14:24 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:24 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:14:14:14:25 | a.as_bytes() | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:14:14:14:25 | a.as_bytes() | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:15:14:15:14 | a | web_frameworks.rs:11:31:11:31 | a | web_frameworks.rs:15:14:15:14 | a | $@ | web_frameworks.rs:11:31:11:31 | a | a |
+| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a |
+| web_frameworks.rs:70:14:70:14 | a | web_frameworks.rs:68:15:68:15 | a | web_frameworks.rs:70:14:70:14 | a | $@ | web_frameworks.rs:68:15:68:15 | a | a |
diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql
index d13ca71f16e0..09b4ab5bf908 100644
--- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql
+++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.ql
@@ -1,3 +1,7 @@
+/**
+ * @kind path-problem
+ */
+
import rust
import codeql.rust.dataflow.DataFlow
import codeql.rust.Concepts
@@ -25,3 +29,8 @@ module MyFlowConfig implements DataFlow::ConfigSig {
module MyFlowTest = TaintFlowTest;
import MyFlowTest
+import PathGraph
+
+from PathNode source, PathNode sink
+where flowPath(source, sink)
+select sink, source, sink, "$@", source, source.toString()
From d93b2edc0daf081a5da8aa9a5daa470d8f70f944 Mon Sep 17 00:00:00 2001
From: Anders Schack-Mulligen
Date: Thu, 18 Sep 2025 08:13:43 +0200
Subject: [PATCH 139/219] Ruby: Accept test changes.
---
.../controlflow/graph/BasicBlocks.expected | 40 +++++++++++++------
1 file changed, 28 insertions(+), 12 deletions(-)
diff --git a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected
index 35b18b7132b0..720ee26e679e 100644
--- a/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected
+++ b/ruby/ql/test/library-tests/controlflow/graph/BasicBlocks.expected
@@ -6252,7 +6252,8 @@ joinBlockPredecessor
| break_ensure.rb:20:7:22:9 | [ensure: exception] if ... | break_ensure.rb:21:9:21:20 | [ensure: exception] self | 1 |
| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:16:7:18:9 | if ... | 0 |
| break_ensure.rb:20:7:22:9 | if ... | break_ensure.rb:21:9:21:20 | self | 1 |
-| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 0 |
+| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:27:1:42:3 | exit m3 (normal) | 0 |
+| break_ensure.rb:27:1:42:3 | exit m3 | break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | 1 |
| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | [ensure: return] while ... | 1 |
| break_ensure.rb:27:1:42:3 | exit m3 (normal) | break_ensure.rb:33:5:39:7 | while ... | 0 |
| break_ensure.rb:33:5:39:7 | [ensure: exception] while ... | break_ensure.rb:33:11:33:11 | [ensure: exception] y | 0 |
@@ -6286,20 +6287,25 @@ joinBlockPredecessor
| case.rb:9:3:17:5 | case ... | case.rb:14:25:14:25 | 6 | 3 |
| case.rb:9:3:17:5 | case ... | case.rb:15:28:15:28 | 7 | 4 |
| case.rb:9:3:17:5 | case ... | case.rb:16:10:16:10 | 8 | 5 |
-| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 0 |
-| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 0 |
-| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 0 |
+| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:20:1:24:3 | exit case_match_no_match (abnormal) | 0 |
+| case.rb:20:1:24:3 | exit case_match_no_match | case.rb:21:3:23:5 | case ... | 1 |
+| case.rb:26:1:30:3 | exit case_match_raise | case.rb:26:1:30:3 | exit case_match_raise (abnormal) | 0 |
+| case.rb:26:1:30:3 | exit case_match_raise | case.rb:27:3:29:5 | case ... | 1 |
+| case.rb:32:1:39:3 | exit case_match_array | case.rb:32:1:39:3 | exit case_match_array (abnormal) | 0 |
+| case.rb:32:1:39:3 | exit case_match_array | case.rb:33:3:38:5 | case ... | 1 |
| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:5:37:27 | in ... then ... | 0 |
| case.rb:32:1:39:3 | exit case_match_array (abnormal) | case.rb:37:8:37:26 | [ ..., * ] | 1 |
| case.rb:33:3:38:5 | case ... | case.rb:32:1:39:3 | enter case_match_array | 0 |
| case.rb:33:3:38:5 | case ... | case.rb:35:9:35:9 | x | 1 |
| case.rb:33:3:38:5 | case ... | case.rb:36:9:36:9 | x | 2 |
| case.rb:33:3:38:5 | case ... | case.rb:37:25:37:25 | e | 3 |
-| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 0 |
+| case.rb:41:1:45:3 | exit case_match_find | case.rb:41:1:45:3 | exit case_match_find (abnormal) | 0 |
+| case.rb:41:1:45:3 | exit case_match_find | case.rb:43:20:43:20 | y | 1 |
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:41:1:45:3 | enter case_match_find | 0 |
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:10:43:10 | x | 1 |
| case.rb:41:1:45:3 | exit case_match_find (abnormal) | case.rb:43:16:43:16 | 2 | 2 |
-| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 0 |
+| case.rb:47:1:53:3 | exit case_match_hash | case.rb:47:1:53:3 | exit case_match_hash (abnormal) | 0 |
+| case.rb:47:1:53:3 | exit case_match_hash | case.rb:48:3:52:5 | case ... | 1 |
| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:5:51:17 | in ... then ... | 0 |
| case.rb:47:1:53:3 | exit case_match_hash (abnormal) | case.rb:51:8:51:16 | { ..., ** } | 1 |
| case.rb:48:3:52:5 | case ... | case.rb:49:29:49:32 | rest | 0 |
@@ -6315,7 +6321,8 @@ joinBlockPredecessor
| case.rb:56:3:60:5 | case ... | case.rb:58:5:58:10 | in ... then ... | 1 |
| case.rb:64:3:66:5 | case ... | case.rb:63:1:67:3 | enter case_match_underscore | 0 |
| case.rb:64:3:66:5 | case ... | case.rb:65:12:65:12 | _ | 1 |
-| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 0 |
+| case.rb:69:1:93:3 | exit case_match_various | case.rb:69:1:93:3 | exit case_match_various (abnormal) | 0 |
+| case.rb:69:1:93:3 | exit case_match_various | case.rb:72:3:92:5 | case ... | 1 |
| case.rb:72:3:92:5 | case ... | case.rb:69:1:93:3 | enter case_match_various | 0 |
| case.rb:72:3:92:5 | case ... | case.rb:74:5:74:11 | in ... then ... | 1 |
| case.rb:72:3:92:5 | case ... | case.rb:75:5:75:15 | in ... then ... | 2 |
@@ -6347,7 +6354,8 @@ joinBlockPredecessor
| case.rb:72:3:92:5 | case ... | case.rb:91:13:91:14 | "" | 28 |
| case.rb:72:3:92:5 | case ... | case.rb:91:18:91:19 | [ ..., * ] | 29 |
| case.rb:72:3:92:5 | case ... | case.rb:91:23:91:24 | { ..., ** } | 30 |
-| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 0 |
+| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:95:1:99:3 | exit case_match_guard_no_else (abnormal) | 0 |
+| case.rb:95:1:99:3 | exit case_match_guard_no_else | case.rb:97:25:97:25 | 6 | 1 |
| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:19:19:19:32 | self | 0 |
| cfg.html.erb:18:14:22:16 | if ... | cfg.html.erb:21:19:21:32 | self | 1 |
| cfg.rb:41:1:45:3 | case ... | cfg.rb:42:15:42:24 | self | 0 |
@@ -6454,7 +6462,8 @@ joinBlockPredecessor
| loops.rb:31:9:31:9 | x | loops.rb:31:15:32:5 | do ... | 1 |
| raise.rb:7:1:12:3 | exit m1 | raise.rb:8:3:10:5 | if ... | 0 |
| raise.rb:7:1:12:3 | exit m1 | raise.rb:9:5:9:17 | self | 1 |
-| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 0 |
+| raise.rb:14:1:23:3 | exit m2 | raise.rb:14:1:23:3 | exit m2 (abnormal) | 0 |
+| raise.rb:14:1:23:3 | exit m2 | raise.rb:22:3:22:15 | self | 1 |
| raise.rb:22:3:22:15 | self | raise.rb:16:5:18:7 | if ... | 0 |
| raise.rb:22:3:22:15 | self | raise.rb:20:5:20:18 | self | 1 |
| raise.rb:33:3:33:15 | self | raise.rb:27:5:29:7 | if ... | 0 |
@@ -6463,25 +6472,30 @@ joinBlockPredecessor
| raise.rb:44:3:44:15 | self | raise.rb:39:7:39:22 | self | 1 |
| raise.rb:54:3:54:15 | self | raise.rb:49:5:51:7 | if ... | 0 |
| raise.rb:54:3:54:15 | self | raise.rb:50:7:50:22 | self | 1 |
-| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 0 |
+| raise.rb:57:1:66:3 | exit m6 | raise.rb:57:1:66:3 | exit m6 (abnormal) | 0 |
+| raise.rb:57:1:66:3 | exit m6 | raise.rb:65:3:65:15 | self | 1 |
| raise.rb:62:36:62:36 | e | raise.rb:60:7:60:22 | self | 0 |
| raise.rb:62:36:62:36 | e | raise.rb:62:22:62:31 | ExceptionB | 1 |
| raise.rb:65:3:65:15 | self | raise.rb:59:5:61:7 | if ... | 0 |
| raise.rb:65:3:65:15 | self | raise.rb:62:36:62:36 | e | 1 |
-| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 0 |
+| raise.rb:68:1:77:3 | exit m7 | raise.rb:68:1:77:3 | exit m7 (normal) | 0 |
+| raise.rb:68:1:77:3 | exit m7 | raise.rb:76:3:76:15 | [ensure: exception] self | 1 |
| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:72:13:72:17 | x < 0 | 0 |
| raise.rb:68:1:77:3 | exit m7 (normal) | raise.rb:76:3:76:15 | self | 1 |
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:68:1:77:3 | enter m7 | 0 |
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:70:5:70:17 | self | 1 |
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:3:72:18 | elsif ... | 2 |
| raise.rb:76:3:76:15 | [ensure: exception] self | raise.rb:71:9:71:9 | x | 3 |
-| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 0 |
+| raise.rb:79:1:92:3 | exit m8 | raise.rb:79:1:92:3 | exit m8 (normal) | 0 |
+| raise.rb:79:1:92:3 | exit m8 | raise.rb:89:5:89:17 | [ensure: exception] self | 1 |
| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:85:15:85:19 | x < 0 | 0 |
| raise.rb:79:1:92:3 | exit m8 (normal) | raise.rb:89:5:89:17 | self | 1 |
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:79:1:92:3 | enter m8 | 0 |
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:83:7:83:19 | self | 1 |
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:5:85:20 | elsif ... | 2 |
| raise.rb:89:5:89:17 | [ensure: exception] self | raise.rb:84:11:84:11 | x | 3 |
+| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (abnormal) | 1 |
+| raise.rb:94:1:119:3 | exit m9 | raise.rb:94:1:119:3 | exit m9 (normal) | 0 |
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:116:3:118:5 | [ensure: exception] if ... | 0 |
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: exception] self | 2 |
| raise.rb:94:1:119:3 | exit m9 (abnormal) | raise.rb:117:5:117:22 | [ensure: return] self | 3 |
@@ -6520,6 +6534,8 @@ joinBlockPredecessor
| raise.rb:155:16:155:50 | exit { ... } | raise.rb:155:25:155:48 | ... if ... | 0 |
| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:14 | self | 1 |
| raise.rb:160:9:162:7 | exit -> { ... } | raise.rb:161:7:161:23 | ... unless ... | 0 |
+| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (abnormal) | 1 |
+| raise.rb:172:1:182:3 | exit m16 | raise.rb:172:1:182:3 | exit m16 (normal) | 0 |
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:175:14:175:14 | 1 | 0 |
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:177:14:177:14 | 2 | 1 |
| raise.rb:172:1:182:3 | exit m16 (normal) | raise.rb:180:12:180:12 | 3 | 2 |
From 3cd737e40d43fe5108a2f5710bb733e2c37ce454 Mon Sep 17 00:00:00 2001
From: Kasper Svendsen
Date: Thu, 18 Sep 2025 10:32:20 +0200
Subject: [PATCH 140/219] Overlay: Future-proof Java config discarding
---
java/ql/lib/semmle/code/java/Overlay.qll | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll
index 1d1a3896ba71..27e8badc2336 100644
--- a/java/ql/lib/semmle/code/java/Overlay.qll
+++ b/java/ql/lib/semmle/code/java/Overlay.qll
@@ -73,22 +73,24 @@ private predicate discardReferableLocatable(@locatable el) {
)
}
+/** Gets the raw file for a configLocatable. */
overlay[local]
-private predicate baseConfigLocatable(@configLocatable l) { not isOverlay() and exists(l) }
+private string getRawFileForConfig(@configLocatable el) {
+ exists(@location loc, @file file |
+ configLocations(el, loc) and
+ locations_default(loc, file, _, _, _, _) and
+ files(file, result)
+ )
+}
overlay[local]
-private predicate overlayHasConfigLocatables() {
- isOverlay() and
- exists(@configLocatable el)
+private string baseConfigLocatable(@configLocatable el) {
+ not isOverlay() and result = getRawFileForConfig(el)
}
overlay[discard_entity]
private predicate discardBaseConfigLocatable(@configLocatable el) {
- // The properties extractor is currently not incremental, so if
- // the overlay contains any config locatables, the overlay should
- // contain a full extraction and all config locatables from base
- // should be discarded.
- baseConfigLocatable(el) and overlayHasConfigLocatables()
+ overlayChangedFiles(baseConfigLocatable(el))
}
overlay[local]
From dbb9a26f78938a5ddd4763d56e9c7cdb54f204c5 Mon Sep 17 00:00:00 2001
From: Kasper Svendsen
Date: Thu, 18 Sep 2025 10:35:11 +0200
Subject: [PATCH 141/219] Overlay: Future-proof Java XML discarding
---
java/ql/lib/semmle/code/java/Overlay.qll | 22 +---------------------
java/ql/lib/semmle/code/xml/XML.qll | 11 +++++++++++
2 files changed, 12 insertions(+), 21 deletions(-)
diff --git a/java/ql/lib/semmle/code/java/Overlay.qll b/java/ql/lib/semmle/code/java/Overlay.qll
index 27e8badc2336..0f6033d87b3d 100644
--- a/java/ql/lib/semmle/code/java/Overlay.qll
+++ b/java/ql/lib/semmle/code/java/Overlay.qll
@@ -18,7 +18,7 @@ predicate isOverlay() { databaseMetadata("isOverlay", "true") }
overlay[local]
string getRawFile(@locatable el) {
exists(@location loc, @file file |
- hasLocation(el, loc) and
+ (hasLocation(el, loc) or xmllocations(el, loc)) and
locations_default(loc, file, _, _, _, _) and
files(file, result)
)
@@ -92,23 +92,3 @@ overlay[discard_entity]
private predicate discardBaseConfigLocatable(@configLocatable el) {
overlayChangedFiles(baseConfigLocatable(el))
}
-
-overlay[local]
-private predicate baseXmlLocatable(@xmllocatable l) {
- not isOverlay() and not files(l, _) and not xmlNs(l, _, _, _)
-}
-
-overlay[local]
-private predicate overlayHasXmlLocatable() {
- isOverlay() and
- exists(@xmllocatable l | not files(l, _) and not xmlNs(l, _, _, _))
-}
-
-overlay[discard_entity]
-private predicate discardBaseXmlLocatable(@xmllocatable el) {
- // The XML extractor is currently not incremental, so if
- // the overlay contains any XML locatables, the overlay should
- // contain a full extraction and all XML locatables from base
- // should be discarded.
- baseXmlLocatable(el) and overlayHasXmlLocatable()
-}
diff --git a/java/ql/lib/semmle/code/xml/XML.qll b/java/ql/lib/semmle/code/xml/XML.qll
index e4073362fc6f..cd00991eb65c 100644
--- a/java/ql/lib/semmle/code/xml/XML.qll
+++ b/java/ql/lib/semmle/code/xml/XML.qll
@@ -6,6 +6,7 @@ module;
import semmle.files.FileSystem
private import codeql.xml.Xml
+private import semmle.code.java.Overlay
private module Input implements InputSig {
class XmlLocatableBase = @xmllocatable or @xmlnamespaceable;
@@ -69,3 +70,13 @@ private module Input implements InputSig {
}
import Make
+
+private class DiscardableXmlAttribute extends DiscardableLocatable, @xmlattribute { }
+
+private class DiscardableXmlElement extends DiscardableLocatable, @xmlelement { }
+
+private class DiscardableXmlComment extends DiscardableLocatable, @xmlcomment { }
+
+private class DiscardableXmlCharacters extends DiscardableLocatable, @xmlcharacters { }
+
+private class DiscardableXmlDtd extends DiscardableLocatable, @xmldtd { }
From c831a8c2d92d7dd7be628f16b3df9eb528184868 Mon Sep 17 00:00:00 2001
From: Tom Hvitved
Date: Wed, 17 Sep 2025 13:43:24 +0200
Subject: [PATCH 142/219] Rust: Add more path resolution tests
---
.../PathResolutionConsistency.expected | 3 +-
.../library-tests/path-resolution/main.rs | 10 +-
.../library-tests/path-resolution/my2/mod.rs | 10 +-
.../path-resolution/my2/my3/mod.rs | 2 +
.../path-resolution/path-resolution.expected | 813 +++++++++---------
5 files changed, 431 insertions(+), 407 deletions(-)
diff --git a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected
index 9d1761069feb..d945cb4c6c24 100644
--- a/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected
+++ b/rust/ql/test/library-tests/path-resolution/CONSISTENCY/PathResolutionConsistency.expected
@@ -1,3 +1,4 @@
multipleCallTargets
-| main.rs:118:9:118:11 | f(...) |
+| main.rs:124:9:124:11 | f(...) |
+| main.rs:774:5:774:7 | f(...) |
| proc_macro.rs:9:5:9:10 | ...::new(...) |
diff --git a/rust/ql/test/library-tests/path-resolution/main.rs b/rust/ql/test/library-tests/path-resolution/main.rs
index 1de91a60fe44..db8e4c0f39da 100644
--- a/rust/ql/test/library-tests/path-resolution/main.rs
+++ b/rust/ql/test/library-tests/path-resolution/main.rs
@@ -8,7 +8,13 @@ mod my2; // I14
use my2::*; // $ item=I14
-use my2::nested2::nested3::nested4::{f, g}; // $ item=I11 item=I12 item=I13
+#[rustfmt::skip]
+use my2::nested2::nested3::nested4::{ // $ item=I11
+ f, // $ item=I12
+ g, // $ item=I13
+};
+
+use my2::nested8_f; // $ item=I119
mod m1 {
fn f() {
@@ -765,7 +771,7 @@ fn main() {
my::nested::nested1::nested2::f(); // $ item=I4
my::f(); // $ item=I38
nested2::nested3::nested4::f(); // $ item=I12
- f(); // $ item=I12
+ f(); // $ item=I12 $ SPURIOUS: item=I119
g(); // $ item=I13
crate::h(); // $ item=I25
m1::m2::g(); // $ item=I19
diff --git a/rust/ql/test/library-tests/path-resolution/my2/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/mod.rs
index 43c1a05e91fe..85edb6832027 100644
--- a/rust/ql/test/library-tests/path-resolution/my2/mod.rs
+++ b/rust/ql/test/library-tests/path-resolution/my2/mod.rs
@@ -7,11 +7,17 @@ fn g() {
pub use nested2::nested5::*; // $ item=I114
-pub use nested2::nested7::nested8::{self}; // $ item=I118
+#[rustfmt::skip]
+pub use nested2::nested7::nested8::{ // $ item=I118
+ self, // $ item=I118
+ f as nested8_f // $ item=I119
+};
+
+use nested2::nested5::nested6::f as nested6_f; // $ item=I116
pub mod my3;
#[path = "renamed.rs"]
mod mymod;
-use mymod::f; // $ item=I1001
+pub use mymod::f; // $ item=I1001
diff --git a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs
index 6b54377728bb..e2d413841c35 100644
--- a/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs
+++ b/rust/ql/test/library-tests/path-resolution/my2/my3/mod.rs
@@ -6,3 +6,5 @@ pub fn f() {
use super::super::h; // $ item=I25
use super::g; // $ item=I9
+
+use super::nested6_f; // $ MISSING: item=I116
diff --git a/rust/ql/test/library-tests/path-resolution/path-resolution.expected b/rust/ql/test/library-tests/path-resolution/path-resolution.expected
index a51816a52282..8f12af96c020 100644
--- a/rust/ql/test/library-tests/path-resolution/path-resolution.expected
+++ b/rust/ql/test/library-tests/path-resolution/path-resolution.expected
@@ -2,38 +2,38 @@ mod
| lib.rs:1:1:1:11 | mod my |
| main.rs:1:1:1:7 | mod my |
| main.rs:7:1:7:8 | mod my2 |
-| main.rs:13:1:37:1 | mod m1 |
-| main.rs:18:5:36:5 | mod m2 |
-| main.rs:29:9:35:9 | mod m3 |
-| main.rs:39:1:46:1 | mod m4 |
-| main.rs:103:1:107:1 | mod m5 |
-| main.rs:109:1:120:1 | mod m6 |
-| main.rs:122:1:141:1 | mod m7 |
-| main.rs:143:1:197:1 | mod m8 |
-| main.rs:199:1:207:1 | mod m9 |
-| main.rs:209:1:228:1 | mod m10 |
-| main.rs:230:1:267:1 | mod m11 |
-| main.rs:240:5:240:12 | mod f |
-| main.rs:269:1:281:1 | mod m12 |
-| main.rs:283:1:296:1 | mod m13 |
-| main.rs:287:5:295:5 | mod m14 |
-| main.rs:298:1:367:1 | mod m15 |
-| main.rs:369:1:461:1 | mod m16 |
-| main.rs:463:1:513:1 | mod trait_visibility |
-| main.rs:464:5:486:5 | mod m |
-| main.rs:515:1:545:1 | mod m17 |
-| main.rs:547:1:565:1 | mod m18 |
-| main.rs:552:5:564:5 | mod m19 |
-| main.rs:557:9:563:9 | mod m20 |
-| main.rs:567:1:592:1 | mod m21 |
-| main.rs:568:5:574:5 | mod m22 |
-| main.rs:576:5:591:5 | mod m33 |
-| main.rs:594:1:619:1 | mod m23 |
-| main.rs:621:1:689:1 | mod m24 |
-| main.rs:706:1:758:1 | mod associated_types |
+| main.rs:19:1:43:1 | mod m1 |
+| main.rs:24:5:42:5 | mod m2 |
+| main.rs:35:9:41:9 | mod m3 |
+| main.rs:45:1:52:1 | mod m4 |
+| main.rs:109:1:113:1 | mod m5 |
+| main.rs:115:1:126:1 | mod m6 |
+| main.rs:128:1:147:1 | mod m7 |
+| main.rs:149:1:203:1 | mod m8 |
+| main.rs:205:1:213:1 | mod m9 |
+| main.rs:215:1:234:1 | mod m10 |
+| main.rs:236:1:273:1 | mod m11 |
+| main.rs:246:5:246:12 | mod f |
+| main.rs:275:1:287:1 | mod m12 |
+| main.rs:289:1:302:1 | mod m13 |
+| main.rs:293:5:301:5 | mod m14 |
+| main.rs:304:1:373:1 | mod m15 |
+| main.rs:375:1:467:1 | mod m16 |
+| main.rs:469:1:519:1 | mod trait_visibility |
+| main.rs:470:5:492:5 | mod m |
+| main.rs:521:1:551:1 | mod m17 |
+| main.rs:553:1:571:1 | mod m18 |
+| main.rs:558:5:570:5 | mod m19 |
+| main.rs:563:9:569:9 | mod m20 |
+| main.rs:573:1:598:1 | mod m21 |
+| main.rs:574:5:580:5 | mod m22 |
+| main.rs:582:5:597:5 | mod m33 |
+| main.rs:600:1:625:1 | mod m23 |
+| main.rs:627:1:695:1 | mod m24 |
+| main.rs:712:1:764:1 | mod associated_types |
| my2/mod.rs:1:1:1:16 | mod nested2 |
-| my2/mod.rs:12:1:12:12 | mod my3 |
-| my2/mod.rs:14:1:15:10 | mod mymod |
+| my2/mod.rs:18:1:18:12 | mod my3 |
+| my2/mod.rs:20:1:21:10 | mod mymod |
| my2/nested2.rs:1:1:11:1 | mod nested3 |
| my2/nested2.rs:2:5:10:5 | mod nested4 |
| my2/nested2.rs:13:1:19:1 | mod nested5 |
@@ -52,385 +52,394 @@ resolvePath
| main.rs:5:5:5:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
| main.rs:5:5:5:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
| main.rs:9:5:9:7 | my2 | main.rs:7:1:7:8 | mod my2 |
-| main.rs:11:5:11:7 | my2 | main.rs:7:1:7:8 | mod my2 |
-| main.rs:11:5:11:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
-| main.rs:11:5:11:25 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
-| main.rs:11:5:11:34 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
-| main.rs:11:38:11:38 | f | my2/nested2.rs:3:9:5:9 | fn f |
-| main.rs:11:41:11:41 | g | my2/nested2.rs:7:9:9:9 | fn g |
-| main.rs:25:13:25:13 | f | main.rs:19:9:21:9 | fn f |
-| main.rs:26:13:26:17 | super | main.rs:13:1:37:1 | mod m1 |
-| main.rs:26:13:26:20 | ...::f | main.rs:14:5:16:5 | fn f |
-| main.rs:30:17:30:21 | super | main.rs:18:5:36:5 | mod m2 |
-| main.rs:30:17:30:24 | ...::f | main.rs:19:9:21:9 | fn f |
-| main.rs:33:17:33:17 | f | main.rs:19:9:21:9 | fn f |
-| main.rs:40:9:40:13 | super | main.rs:1:1:799:2 | SourceFile |
-| main.rs:40:9:40:17 | ...::m1 | main.rs:13:1:37:1 | mod m1 |
-| main.rs:40:9:40:21 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
-| main.rs:40:9:40:24 | ...::g | main.rs:23:9:27:9 | fn g |
-| main.rs:44:9:44:9 | g | main.rs:23:9:27:9 | fn g |
-| main.rs:56:13:56:14 | m1 | main.rs:13:1:37:1 | mod m1 |
-| main.rs:56:13:56:18 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
-| main.rs:56:13:56:21 | ...::g | main.rs:23:9:27:9 | fn g |
-| main.rs:57:9:57:9 | g | main.rs:23:9:27:9 | fn g |
-| main.rs:61:17:61:19 | Foo | main.rs:59:9:59:21 | struct Foo |
-| main.rs:64:13:64:15 | Foo | main.rs:53:5:53:17 | struct Foo |
-| main.rs:66:5:66:5 | f | main.rs:55:5:62:5 | fn f |
-| main.rs:68:5:68:8 | self | main.rs:1:1:799:2 | SourceFile |
-| main.rs:68:5:68:11 | ...::i | main.rs:71:1:83:1 | fn i |
-| main.rs:74:13:74:15 | Foo | main.rs:48:1:48:13 | struct Foo |
-| main.rs:78:16:78:18 | i32 | {EXTERNAL LOCATION} | struct i32 |
-| main.rs:81:17:81:19 | Foo | main.rs:77:9:79:9 | struct Foo |
-| main.rs:85:5:85:7 | my2 | main.rs:7:1:7:8 | mod my2 |
-| main.rs:85:5:85:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
-| main.rs:87:5:87:21 | my2_nested2_alias | my2/mod.rs:1:1:1:16 | mod nested2 |
-| main.rs:87:5:87:30 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
-| main.rs:87:34:87:40 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
-| main.rs:87:34:87:43 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
-| main.rs:87:57:87:63 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
-| main.rs:87:57:87:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
-| main.rs:87:80:87:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
-| main.rs:100:5:100:22 | f_defined_in_macro | main.rs:99:18:99:42 | fn f_defined_in_macro |
-| main.rs:117:13:117:17 | super | main.rs:1:1:799:2 | SourceFile |
-| main.rs:117:13:117:21 | ...::m5 | main.rs:103:1:107:1 | mod m5 |
-| main.rs:118:9:118:9 | f | main.rs:104:5:106:5 | fn f |
-| main.rs:118:9:118:9 | f | main.rs:110:5:112:5 | fn f |
-| main.rs:125:13:125:15 | i32 | {EXTERNAL LOCATION} | struct i32 |
-| main.rs:128:16:128:18 | i32 | {EXTERNAL LOCATION} | struct i32 |
-| main.rs:134:19:134:24 | MyEnum | main.rs:123:5:131:5 | enum MyEnum |
-| main.rs:137:17:137:22 | MyEnum | main.rs:123:5:131:5 | enum MyEnum |
-| main.rs:137:17:137:25 | ...::A | main.rs:124:9:126:9 | A |
-| main.rs:138:17:138:22 | MyEnum | main.rs:123:5:131:5 | enum MyEnum |
-| main.rs:138:17:138:25 | ...::B | main.rs:126:12:129:9 | B |
-| main.rs:139:9:139:14 | MyEnum | main.rs:123:5:131:5 | enum MyEnum |
-| main.rs:139:9:139:17 | ...::C | main.rs:129:12:130:9 | C |
-| main.rs:149:13:149:13 | f | main.rs:156:5:158:5 | fn f |
-| main.rs:150:13:150:16 | Self | main.rs:144:5:152:5 | trait MyTrait |
-| main.rs:150:13:150:19 | ...::f | main.rs:145:9:145:20 | fn f |
-| main.rs:161:10:161:16 | MyTrait | main.rs:144:5:152:5 | trait MyTrait |
-| main.rs:161:22:161:29 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:164:13:164:13 | f | main.rs:156:5:158:5 | fn f |
-| main.rs:165:13:165:16 | Self | main.rs:160:5:171:5 | impl MyTrait for MyStruct { ... } |
-| main.rs:165:13:165:19 | ...::g | main.rs:168:9:170:9 | fn g |
-| main.rs:174:10:174:17 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:177:13:177:13 | f | main.rs:156:5:158:5 | fn f |
-| main.rs:183:17:183:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:184:9:184:15 | MyTrait | main.rs:144:5:152:5 | trait MyTrait |
-| main.rs:184:9:184:18 | ...::f | main.rs:145:9:145:20 | fn f |
-| main.rs:185:9:185:16 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:185:9:185:19 | ...::f | main.rs:161:33:166:9 | fn f |
-| main.rs:186:10:186:17 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:187:10:187:16 | MyTrait | main.rs:144:5:152:5 | trait MyTrait |
-| main.rs:190:17:190:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:192:17:192:24 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:194:9:194:16 | MyStruct | main.rs:154:5:154:22 | struct MyStruct |
-| main.rs:194:9:194:19 | ...::h | main.rs:174:21:178:9 | fn h |
-| main.rs:203:19:203:22 | self | main.rs:199:1:207:1 | mod m9 |
-| main.rs:203:19:203:32 | ...::MyStruct | main.rs:200:5:200:26 | struct MyStruct |
-| main.rs:205:9:205:12 | self | main.rs:199:1:207:1 | mod m9 |
-| main.rs:205:9:205:22 | ...::MyStruct | main.rs:200:5:200:26 | struct MyStruct |
-| main.rs:215:12:215:12 | T | main.rs:212:7:212:7 | T |
-| main.rs:220:12:220:12 | T | main.rs:219:14:219:14 | T |
-| main.rs:222:7:224:7 | MyStruct::<...> | main.rs:210:5:216:5 | struct MyStruct |
-| main.rs:223:9:223:9 | T | main.rs:219:14:219:14 | T |
-| main.rs:226:9:226:16 | MyStruct | main.rs:210:5:216:5 | struct MyStruct |
-| main.rs:236:17:236:19 | Foo | main.rs:231:5:231:21 | struct Foo |
-| main.rs:237:9:237:11 | Foo | main.rs:233:5:233:15 | fn Foo |
-| main.rs:246:9:246:11 | Bar | main.rs:242:5:244:5 | enum Bar |
-| main.rs:246:9:246:19 | ...::FooBar | main.rs:243:9:243:17 | FooBar |
-| main.rs:251:13:251:15 | Foo | main.rs:231:5:231:21 | struct Foo |
-| main.rs:252:17:252:22 | FooBar | main.rs:243:9:243:17 | FooBar |
-| main.rs:253:17:253:22 | FooBar | main.rs:248:5:248:18 | fn FooBar |
-| main.rs:261:9:261:9 | E | main.rs:256:15:259:5 | enum E |
-| main.rs:261:9:261:12 | ...::C | main.rs:258:9:258:9 | C |
-| main.rs:264:17:264:17 | S | main.rs:256:5:256:13 | struct S |
-| main.rs:265:17:265:17 | C | main.rs:258:9:258:9 | C |
-| main.rs:278:16:278:16 | T | main.rs:272:7:272:7 | T |
-| main.rs:279:14:279:17 | Self | main.rs:270:5:280:5 | trait MyParamTrait |
-| main.rs:279:14:279:33 | ...::AssociatedType | main.rs:274:9:274:28 | type AssociatedType |
-| main.rs:288:13:288:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
-| main.rs:288:13:288:21 | ...::m13 | main.rs:283:1:296:1 | mod m13 |
-| main.rs:288:13:288:24 | ...::f | main.rs:284:5:284:17 | fn f |
-| main.rs:288:13:288:24 | ...::f | main.rs:284:19:285:19 | struct f |
-| main.rs:291:17:291:17 | f | main.rs:284:19:285:19 | struct f |
-| main.rs:292:21:292:21 | f | main.rs:284:19:285:19 | struct f |
-| main.rs:293:13:293:13 | f | main.rs:284:5:284:17 | fn f |
-| main.rs:307:9:307:14 | Trait1 | main.rs:299:5:303:5 | trait Trait1 |
-| main.rs:310:13:310:16 | Self | main.rs:305:5:313:5 | trait Trait2 |
-| main.rs:310:13:310:19 | ...::g | main.rs:302:9:302:20 | fn g |
-| main.rs:320:9:320:12 | Self | main.rs:315:5:328:5 | trait Trait3 |
-| main.rs:320:15:320:20 | Trait1 | main.rs:299:5:303:5 | trait Trait1 |
-| main.rs:321:9:321:10 | TT | main.rs:317:9:317:10 | TT |
-| main.rs:321:13:321:18 | Trait1 | main.rs:299:5:303:5 | trait Trait1 |
-| main.rs:323:25:323:26 | TT | main.rs:317:9:317:10 | TT |
-| main.rs:324:13:324:16 | Self | main.rs:315:5:328:5 | trait Trait3 |
-| main.rs:324:13:324:19 | ...::g | main.rs:302:9:302:20 | fn g |
-| main.rs:325:13:325:14 | TT | main.rs:317:9:317:10 | TT |
-| main.rs:325:13:325:17 | ...::g | main.rs:302:9:302:20 | fn g |
-| main.rs:333:10:333:15 | Trait1 | main.rs:299:5:303:5 | trait Trait1 |
-| main.rs:334:11:334:11 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:337:13:337:16 | Self | main.rs:332:5:344:5 | impl Trait1 for S { ... } |
-| main.rs:337:13:337:19 | ...::g | main.rs:341:9:343:9 | fn g |
-| main.rs:347:10:347:15 | Trait2 | main.rs:305:5:313:5 | trait Trait2 |
-| main.rs:348:11:348:11 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:357:17:357:17 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:358:10:358:10 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:359:14:359:19 | Trait1 | main.rs:299:5:303:5 | trait Trait1 |
-| main.rs:361:10:361:10 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:362:14:362:19 | Trait2 | main.rs:305:5:313:5 | trait Trait2 |
-| main.rs:364:9:364:9 | S | main.rs:330:5:330:13 | struct S |
-| main.rs:364:9:364:12 | ...::g | main.rs:341:9:343:9 | fn g |
-| main.rs:374:24:374:24 | T | main.rs:372:7:372:7 | T |
-| main.rs:376:24:376:24 | T | main.rs:372:7:372:7 | T |
-| main.rs:379:24:379:24 | T | main.rs:372:7:372:7 | T |
-| main.rs:380:13:380:16 | Self | main.rs:370:5:386:5 | trait Trait1 |
-| main.rs:380:13:380:19 | ...::g | main.rs:376:9:377:9 | fn g |
-| main.rs:384:18:384:18 | T | main.rs:372:7:372:7 | T |
-| main.rs:392:9:394:9 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 |
-| main.rs:393:11:393:11 | T | main.rs:390:7:390:7 | T |
-| main.rs:395:24:395:24 | T | main.rs:390:7:390:7 | T |
-| main.rs:397:13:397:16 | Self | main.rs:388:5:401:5 | trait Trait2 |
-| main.rs:397:13:397:19 | ...::g | main.rs:376:9:377:9 | fn g |
-| main.rs:399:13:399:16 | Self | main.rs:388:5:401:5 | trait Trait2 |
-| main.rs:399:13:399:19 | ...::c | main.rs:384:9:385:9 | Const |
-| main.rs:406:10:408:5 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 |
-| main.rs:407:7:407:7 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:409:11:409:11 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:410:24:410:24 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:412:13:412:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } |
-| main.rs:412:13:412:19 | ...::g | main.rs:416:9:419:9 | fn g |
-| main.rs:416:24:416:24 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:418:13:418:16 | Self | main.rs:405:5:423:5 | impl Trait1::<...> for S { ... } |
-| main.rs:418:13:418:19 | ...::c | main.rs:421:9:422:9 | Const |
-| main.rs:421:18:421:18 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:421:22:421:22 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:426:10:428:5 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 |
-| main.rs:427:7:427:7 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:429:11:429:11 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:430:24:430:24 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:432:13:432:16 | Self | main.rs:425:5:434:5 | impl Trait2::<...> for S { ... } |
-| main.rs:439:17:439:17 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:440:10:440:10 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:441:14:443:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 |
-| main.rs:442:13:442:13 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:445:10:445:10 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:446:14:448:11 | Trait2::<...> | main.rs:388:5:401:5 | trait Trait2 |
-| main.rs:447:13:447:13 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:450:9:450:9 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:450:9:450:12 | ...::g | main.rs:416:9:419:9 | fn g |
-| main.rs:452:9:452:9 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:452:9:452:12 | ...::h | main.rs:379:9:382:9 | fn h |
-| main.rs:454:9:454:9 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:454:9:454:12 | ...::c | main.rs:421:9:422:9 | Const |
-| main.rs:455:10:455:10 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:456:14:458:11 | Trait1::<...> | main.rs:370:5:386:5 | trait Trait1 |
-| main.rs:457:13:457:13 | S | main.rs:403:5:403:13 | struct S |
-| main.rs:475:14:475:16 | Foo | main.rs:465:9:467:9 | trait Foo |
-| main.rs:475:22:475:22 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:481:14:481:16 | Bar | main.rs:469:9:471:9 | trait Bar |
-| main.rs:481:22:481:22 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:488:9:488:9 | m | main.rs:464:5:486:5 | mod m |
-| main.rs:488:9:488:12 | ...::X | main.rs:473:9:473:21 | struct X |
-| main.rs:491:17:491:17 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:494:17:494:17 | m | main.rs:464:5:486:5 | mod m |
-| main.rs:494:17:494:22 | ...::Foo | main.rs:465:9:467:9 | trait Foo |
-| main.rs:495:13:495:13 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:495:13:495:23 | ...::a_method | main.rs:475:26:478:13 | fn a_method |
-| main.rs:499:17:499:17 | m | main.rs:464:5:486:5 | mod m |
-| main.rs:499:17:499:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar |
-| main.rs:500:13:500:13 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:500:13:500:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method |
-| main.rs:504:17:504:17 | m | main.rs:464:5:486:5 | mod m |
-| main.rs:504:17:504:22 | ...::Bar | main.rs:469:9:471:9 | trait Bar |
-| main.rs:505:13:505:13 | X | main.rs:473:9:473:21 | struct X |
-| main.rs:505:13:505:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method |
-| main.rs:510:13:510:13 | m | main.rs:464:5:486:5 | mod m |
-| main.rs:510:13:510:18 | ...::Bar | main.rs:469:9:471:9 | trait Bar |
-| main.rs:510:13:510:28 | ...::a_method | main.rs:470:13:470:31 | fn a_method |
-| main.rs:523:10:523:16 | MyTrait | main.rs:516:5:518:5 | trait MyTrait |
-| main.rs:524:9:524:9 | S | main.rs:520:5:520:13 | struct S |
-| main.rs:532:7:532:13 | MyTrait | main.rs:516:5:518:5 | trait MyTrait |
-| main.rs:533:10:533:10 | T | main.rs:531:10:531:10 | T |
-| main.rs:535:9:535:9 | T | main.rs:531:10:531:10 | T |
-| main.rs:535:9:535:12 | ...::f | main.rs:517:9:517:20 | fn f |
-| main.rs:536:9:536:15 | MyTrait | main.rs:516:5:518:5 | trait MyTrait |
-| main.rs:536:9:536:18 | ...::f | main.rs:517:9:517:20 | fn f |
-| main.rs:541:9:541:9 | g | main.rs:530:5:537:5 | fn g |
-| main.rs:542:11:542:11 | S | main.rs:520:5:520:13 | struct S |
-| main.rs:560:17:560:21 | super | main.rs:552:5:564:5 | mod m19 |
-| main.rs:560:17:560:24 | ...::f | main.rs:553:9:555:9 | fn f |
-| main.rs:561:17:561:21 | super | main.rs:552:5:564:5 | mod m19 |
-| main.rs:561:17:561:28 | ...::super | main.rs:547:1:565:1 | mod m18 |
-| main.rs:561:17:561:31 | ...::f | main.rs:548:5:550:5 | fn f |
-| main.rs:578:13:578:17 | super | main.rs:567:1:592:1 | mod m21 |
-| main.rs:578:13:578:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 |
-| main.rs:578:13:578:30 | ...::MyEnum | main.rs:569:9:571:9 | enum MyEnum |
-| main.rs:579:13:579:16 | self | main.rs:569:9:571:9 | enum MyEnum |
-| main.rs:583:13:583:17 | super | main.rs:567:1:592:1 | mod m21 |
-| main.rs:583:13:583:22 | ...::m22 | main.rs:568:5:574:5 | mod m22 |
-| main.rs:583:13:583:32 | ...::MyStruct | main.rs:573:9:573:28 | struct MyStruct |
-| main.rs:584:13:584:16 | self | main.rs:573:9:573:28 | struct MyStruct |
-| main.rs:588:21:588:26 | MyEnum | main.rs:569:9:571:9 | enum MyEnum |
-| main.rs:588:21:588:29 | ...::A | main.rs:570:13:570:13 | A |
-| main.rs:589:21:589:28 | MyStruct | main.rs:573:9:573:28 | struct MyStruct |
-| main.rs:605:10:607:5 | Trait1::<...> | main.rs:595:5:600:5 | trait Trait1 |
-| main.rs:606:7:606:10 | Self | main.rs:602:5:602:13 | struct S |
-| main.rs:608:11:608:11 | S | main.rs:602:5:602:13 | struct S |
-| main.rs:616:17:616:17 | S | main.rs:602:5:602:13 | struct S |
-| main.rs:632:15:632:15 | T | main.rs:631:26:631:26 | T |
-| main.rs:637:9:637:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct |
-| main.rs:637:23:637:23 | T | main.rs:636:10:636:10 | T |
-| main.rs:639:9:639:9 | T | main.rs:636:10:636:10 | T |
-| main.rs:639:12:639:17 | TraitA | main.rs:622:5:624:5 | trait TraitA |
-| main.rs:648:9:648:24 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct |
-| main.rs:648:23:648:23 | T | main.rs:647:10:647:10 | T |
-| main.rs:650:9:650:9 | T | main.rs:647:10:647:10 | T |
-| main.rs:650:12:650:17 | TraitB | main.rs:626:5:628:5 | trait TraitB |
-| main.rs:651:9:651:9 | T | main.rs:647:10:647:10 | T |
-| main.rs:651:12:651:17 | TraitA | main.rs:622:5:624:5 | trait TraitA |
-| main.rs:662:10:662:15 | TraitA | main.rs:622:5:624:5 | trait TraitA |
-| main.rs:662:21:662:31 | Implementor | main.rs:659:5:659:23 | struct Implementor |
-| main.rs:669:10:669:15 | TraitB | main.rs:626:5:628:5 | trait TraitB |
-| main.rs:669:21:669:31 | Implementor | main.rs:659:5:659:23 | struct Implementor |
-| main.rs:677:24:677:34 | Implementor | main.rs:659:5:659:23 | struct Implementor |
-| main.rs:678:23:678:35 | GenericStruct | main.rs:630:5:633:5 | struct GenericStruct |
-| main.rs:684:9:684:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct |
-| main.rs:684:9:684:50 | ...::call_trait_a | main.rs:641:9:643:9 | fn call_trait_a |
-| main.rs:684:25:684:35 | Implementor | main.rs:659:5:659:23 | struct Implementor |
-| main.rs:687:9:687:36 | GenericStruct::<...> | main.rs:630:5:633:5 | struct GenericStruct |
-| main.rs:687:9:687:47 | ...::call_both | main.rs:653:9:656:9 | fn call_both |
-| main.rs:687:25:687:35 | Implementor | main.rs:659:5:659:23 | struct Implementor |
-| main.rs:693:3:693:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
-| main.rs:693:3:693:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
-| main.rs:697:6:697:12 | AStruct | main.rs:696:1:696:17 | struct AStruct |
-| main.rs:699:7:699:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
-| main.rs:699:7:699:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
-| main.rs:702:7:702:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
-| main.rs:702:7:702:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
-| main.rs:707:9:707:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
-| main.rs:707:9:707:19 | ...::marker | {EXTERNAL LOCATION} | mod marker |
-| main.rs:707:9:707:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData |
-| main.rs:708:9:708:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
-| main.rs:708:9:708:19 | ...::result | {EXTERNAL LOCATION} | mod result |
-| main.rs:708:9:708:27 | ...::Result | {EXTERNAL LOCATION} | enum Result |
-| main.rs:716:19:716:22 | Self | main.rs:710:5:718:5 | trait Reduce |
-| main.rs:716:19:716:29 | ...::Input | main.rs:711:9:711:19 | type Input |
-| main.rs:717:14:717:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
-| main.rs:717:21:717:24 | Self | main.rs:710:5:718:5 | trait Reduce |
-| main.rs:717:21:717:32 | ...::Output | main.rs:712:21:713:20 | type Output |
-| main.rs:717:35:717:38 | Self | main.rs:710:5:718:5 | trait Reduce |
-| main.rs:717:35:717:45 | ...::Error | main.rs:711:21:712:19 | type Error |
-| main.rs:721:17:721:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData |
-| main.rs:721:29:721:33 | Input | main.rs:720:19:720:23 | Input |
-| main.rs:722:17:722:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData |
-| main.rs:722:29:722:33 | Error | main.rs:720:26:720:30 | Error |
-| main.rs:729:11:729:16 | Reduce | main.rs:710:5:718:5 | trait Reduce |
-| main.rs:730:13:733:9 | MyImpl::<...> | main.rs:720:5:723:5 | struct MyImpl |
-| main.rs:731:13:731:17 | Input | main.rs:727:13:727:17 | Input |
-| main.rs:732:13:732:17 | Error | main.rs:728:13:728:17 | Error |
-| main.rs:735:22:738:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
-| main.rs:736:13:736:17 | Input | main.rs:727:13:727:17 | Input |
-| main.rs:737:13:737:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } |
-| main.rs:737:13:737:23 | ...::Error | main.rs:739:11:743:9 | type Error |
-| main.rs:740:22:742:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
-| main.rs:741:11:741:15 | Error | main.rs:728:13:728:17 | Error |
-| main.rs:745:13:745:17 | Input | main.rs:727:13:727:17 | Input |
-| main.rs:750:19:750:22 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } |
-| main.rs:750:19:750:29 | ...::Input | main.rs:735:9:739:9 | type Input |
-| main.rs:751:14:754:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
-| main.rs:752:13:752:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } |
-| main.rs:752:13:752:24 | ...::Output | main.rs:743:11:746:9 | type Output |
-| main.rs:753:13:753:16 | Self | main.rs:725:5:757:5 | impl Reduce for MyImpl::<...> { ... } |
-| main.rs:753:13:753:23 | ...::Error | main.rs:739:11:743:9 | type Error |
-| main.rs:760:5:760:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
-| main.rs:760:11:760:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
-| main.rs:762:15:762:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
-| main.rs:762:15:762:25 | ...::string | {EXTERNAL LOCATION} | mod string |
-| main.rs:762:15:762:33 | ...::String | {EXTERNAL LOCATION} | struct String |
-| main.rs:765:5:765:6 | my | main.rs:1:1:1:7 | mod my |
-| main.rs:765:5:765:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
-| main.rs:765:5:765:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
-| main.rs:765:5:765:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
-| main.rs:765:5:765:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
-| main.rs:766:5:766:6 | my | main.rs:1:1:1:7 | mod my |
-| main.rs:766:5:766:9 | ...::f | my.rs:5:1:7:1 | fn f |
-| main.rs:767:5:767:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
-| main.rs:767:5:767:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
-| main.rs:767:5:767:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
-| main.rs:767:5:767:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
-| main.rs:768:5:768:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
-| main.rs:769:5:769:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
-| main.rs:770:5:770:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
-| main.rs:770:5:770:12 | ...::h | main.rs:50:1:69:1 | fn h |
-| main.rs:771:5:771:6 | m1 | main.rs:13:1:37:1 | mod m1 |
-| main.rs:771:5:771:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
-| main.rs:771:5:771:13 | ...::g | main.rs:23:9:27:9 | fn g |
-| main.rs:772:5:772:6 | m1 | main.rs:13:1:37:1 | mod m1 |
-| main.rs:772:5:772:10 | ...::m2 | main.rs:18:5:36:5 | mod m2 |
-| main.rs:772:5:772:14 | ...::m3 | main.rs:29:9:35:9 | mod m3 |
-| main.rs:772:5:772:17 | ...::h | main.rs:30:27:34:13 | fn h |
-| main.rs:773:5:773:6 | m4 | main.rs:39:1:46:1 | mod m4 |
-| main.rs:773:5:773:9 | ...::i | main.rs:42:5:45:5 | fn i |
-| main.rs:774:5:774:5 | h | main.rs:50:1:69:1 | fn h |
-| main.rs:775:5:775:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
-| main.rs:776:5:776:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
-| main.rs:777:5:777:5 | j | main.rs:97:1:101:1 | fn j |
-| main.rs:778:5:778:6 | m6 | main.rs:109:1:120:1 | mod m6 |
-| main.rs:778:5:778:9 | ...::g | main.rs:114:5:119:5 | fn g |
-| main.rs:779:5:779:6 | m7 | main.rs:122:1:141:1 | mod m7 |
-| main.rs:779:5:779:9 | ...::f | main.rs:133:5:140:5 | fn f |
-| main.rs:780:5:780:6 | m8 | main.rs:143:1:197:1 | mod m8 |
-| main.rs:780:5:780:9 | ...::g | main.rs:181:5:196:5 | fn g |
-| main.rs:781:5:781:6 | m9 | main.rs:199:1:207:1 | mod m9 |
-| main.rs:781:5:781:9 | ...::f | main.rs:202:5:206:5 | fn f |
-| main.rs:782:5:782:7 | m11 | main.rs:230:1:267:1 | mod m11 |
-| main.rs:782:5:782:10 | ...::f | main.rs:235:5:238:5 | fn f |
-| main.rs:783:5:783:7 | m15 | main.rs:298:1:367:1 | mod m15 |
-| main.rs:783:5:783:10 | ...::f | main.rs:354:5:366:5 | fn f |
-| main.rs:784:5:784:7 | m16 | main.rs:369:1:461:1 | mod m16 |
-| main.rs:784:5:784:10 | ...::f | main.rs:436:5:460:5 | fn f |
-| main.rs:785:5:785:20 | trait_visibility | main.rs:463:1:513:1 | mod trait_visibility |
-| main.rs:785:5:785:23 | ...::f | main.rs:490:5:512:5 | fn f |
-| main.rs:786:5:786:7 | m17 | main.rs:515:1:545:1 | mod m17 |
-| main.rs:786:5:786:10 | ...::f | main.rs:539:5:544:5 | fn f |
-| main.rs:787:5:787:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
-| main.rs:787:5:787:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
-| main.rs:788:5:788:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
-| main.rs:788:5:788:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
-| main.rs:789:5:789:7 | my3 | my2/mod.rs:12:1:12:12 | mod my3 |
-| main.rs:789:5:789:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
-| main.rs:790:5:790:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
-| main.rs:791:5:791:7 | m18 | main.rs:547:1:565:1 | mod m18 |
-| main.rs:791:5:791:12 | ...::m19 | main.rs:552:5:564:5 | mod m19 |
-| main.rs:791:5:791:17 | ...::m20 | main.rs:557:9:563:9 | mod m20 |
-| main.rs:791:5:791:20 | ...::g | main.rs:558:13:562:13 | fn g |
-| main.rs:792:5:792:7 | m23 | main.rs:594:1:619:1 | mod m23 |
-| main.rs:792:5:792:10 | ...::f | main.rs:614:5:618:5 | fn f |
-| main.rs:793:5:793:7 | m24 | main.rs:621:1:689:1 | mod m24 |
-| main.rs:793:5:793:10 | ...::f | main.rs:675:5:688:5 | fn f |
-| main.rs:794:5:794:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
-| main.rs:794:5:794:11 | ...::h | main.rs:50:1:69:1 | fn h |
-| main.rs:796:5:796:11 | AStruct | main.rs:696:1:696:17 | struct AStruct |
-| main.rs:797:5:797:11 | AStruct | main.rs:696:1:696:17 | struct AStruct |
+| main.rs:12:5:12:7 | my2 | main.rs:7:1:7:8 | mod my2 |
+| main.rs:12:5:12:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
+| main.rs:12:5:12:25 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
+| main.rs:12:5:12:34 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
+| main.rs:13:5:13:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
+| main.rs:14:5:14:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
+| main.rs:17:5:17:7 | my2 | main.rs:7:1:7:8 | mod my2 |
+| main.rs:17:5:17:18 | ...::nested8_f | my2/nested2.rs:23:9:25:9 | fn f |
+| main.rs:31:13:31:13 | f | main.rs:25:9:27:9 | fn f |
+| main.rs:32:13:32:17 | super | main.rs:19:1:43:1 | mod m1 |
+| main.rs:32:13:32:20 | ...::f | main.rs:20:5:22:5 | fn f |
+| main.rs:36:17:36:21 | super | main.rs:24:5:42:5 | mod m2 |
+| main.rs:36:17:36:24 | ...::f | main.rs:25:9:27:9 | fn f |
+| main.rs:39:17:39:17 | f | main.rs:25:9:27:9 | fn f |
+| main.rs:46:9:46:13 | super | main.rs:1:1:805:2 | SourceFile |
+| main.rs:46:9:46:17 | ...::m1 | main.rs:19:1:43:1 | mod m1 |
+| main.rs:46:9:46:21 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
+| main.rs:46:9:46:24 | ...::g | main.rs:29:9:33:9 | fn g |
+| main.rs:50:9:50:9 | g | main.rs:29:9:33:9 | fn g |
+| main.rs:62:13:62:14 | m1 | main.rs:19:1:43:1 | mod m1 |
+| main.rs:62:13:62:18 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
+| main.rs:62:13:62:21 | ...::g | main.rs:29:9:33:9 | fn g |
+| main.rs:63:9:63:9 | g | main.rs:29:9:33:9 | fn g |
+| main.rs:67:17:67:19 | Foo | main.rs:65:9:65:21 | struct Foo |
+| main.rs:70:13:70:15 | Foo | main.rs:59:5:59:17 | struct Foo |
+| main.rs:72:5:72:5 | f | main.rs:61:5:68:5 | fn f |
+| main.rs:74:5:74:8 | self | main.rs:1:1:805:2 | SourceFile |
+| main.rs:74:5:74:11 | ...::i | main.rs:77:1:89:1 | fn i |
+| main.rs:80:13:80:15 | Foo | main.rs:54:1:54:13 | struct Foo |
+| main.rs:84:16:84:18 | i32 | {EXTERNAL LOCATION} | struct i32 |
+| main.rs:87:17:87:19 | Foo | main.rs:83:9:85:9 | struct Foo |
+| main.rs:91:5:91:7 | my2 | main.rs:7:1:7:8 | mod my2 |
+| main.rs:91:5:91:16 | ...::nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
+| main.rs:93:5:93:21 | my2_nested2_alias | my2/mod.rs:1:1:1:16 | mod nested2 |
+| main.rs:93:5:93:30 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
+| main.rs:93:34:93:40 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
+| main.rs:93:34:93:43 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
+| main.rs:93:57:93:63 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
+| main.rs:93:57:93:66 | ...::g | my2/nested2.rs:7:9:9:9 | fn g |
+| main.rs:93:80:93:86 | nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
+| main.rs:106:5:106:22 | f_defined_in_macro | main.rs:105:18:105:42 | fn f_defined_in_macro |
+| main.rs:123:13:123:17 | super | main.rs:1:1:805:2 | SourceFile |
+| main.rs:123:13:123:21 | ...::m5 | main.rs:109:1:113:1 | mod m5 |
+| main.rs:124:9:124:9 | f | main.rs:110:5:112:5 | fn f |
+| main.rs:124:9:124:9 | f | main.rs:116:5:118:5 | fn f |
+| main.rs:131:13:131:15 | i32 | {EXTERNAL LOCATION} | struct i32 |
+| main.rs:134:16:134:18 | i32 | {EXTERNAL LOCATION} | struct i32 |
+| main.rs:140:19:140:24 | MyEnum | main.rs:129:5:137:5 | enum MyEnum |
+| main.rs:143:17:143:22 | MyEnum | main.rs:129:5:137:5 | enum MyEnum |
+| main.rs:143:17:143:25 | ...::A | main.rs:130:9:132:9 | A |
+| main.rs:144:17:144:22 | MyEnum | main.rs:129:5:137:5 | enum MyEnum |
+| main.rs:144:17:144:25 | ...::B | main.rs:132:12:135:9 | B |
+| main.rs:145:9:145:14 | MyEnum | main.rs:129:5:137:5 | enum MyEnum |
+| main.rs:145:9:145:17 | ...::C | main.rs:135:12:136:9 | C |
+| main.rs:155:13:155:13 | f | main.rs:162:5:164:5 | fn f |
+| main.rs:156:13:156:16 | Self | main.rs:150:5:158:5 | trait MyTrait |
+| main.rs:156:13:156:19 | ...::f | main.rs:151:9:151:20 | fn f |
+| main.rs:167:10:167:16 | MyTrait | main.rs:150:5:158:5 | trait MyTrait |
+| main.rs:167:22:167:29 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:170:13:170:13 | f | main.rs:162:5:164:5 | fn f |
+| main.rs:171:13:171:16 | Self | main.rs:166:5:177:5 | impl MyTrait for MyStruct { ... } |
+| main.rs:171:13:171:19 | ...::g | main.rs:174:9:176:9 | fn g |
+| main.rs:180:10:180:17 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:183:13:183:13 | f | main.rs:162:5:164:5 | fn f |
+| main.rs:189:17:189:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:190:9:190:15 | MyTrait | main.rs:150:5:158:5 | trait MyTrait |
+| main.rs:190:9:190:18 | ...::f | main.rs:151:9:151:20 | fn f |
+| main.rs:191:9:191:16 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:191:9:191:19 | ...::f | main.rs:167:33:172:9 | fn f |
+| main.rs:192:10:192:17 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:193:10:193:16 | MyTrait | main.rs:150:5:158:5 | trait MyTrait |
+| main.rs:196:17:196:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:198:17:198:24 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:200:9:200:16 | MyStruct | main.rs:160:5:160:22 | struct MyStruct |
+| main.rs:200:9:200:19 | ...::h | main.rs:180:21:184:9 | fn h |
+| main.rs:209:19:209:22 | self | main.rs:205:1:213:1 | mod m9 |
+| main.rs:209:19:209:32 | ...::MyStruct | main.rs:206:5:206:26 | struct MyStruct |
+| main.rs:211:9:211:12 | self | main.rs:205:1:213:1 | mod m9 |
+| main.rs:211:9:211:22 | ...::MyStruct | main.rs:206:5:206:26 | struct MyStruct |
+| main.rs:221:12:221:12 | T | main.rs:218:7:218:7 | T |
+| main.rs:226:12:226:12 | T | main.rs:225:14:225:14 | T |
+| main.rs:228:7:230:7 | MyStruct::<...> | main.rs:216:5:222:5 | struct MyStruct |
+| main.rs:229:9:229:9 | T | main.rs:225:14:225:14 | T |
+| main.rs:232:9:232:16 | MyStruct | main.rs:216:5:222:5 | struct MyStruct |
+| main.rs:242:17:242:19 | Foo | main.rs:237:5:237:21 | struct Foo |
+| main.rs:243:9:243:11 | Foo | main.rs:239:5:239:15 | fn Foo |
+| main.rs:252:9:252:11 | Bar | main.rs:248:5:250:5 | enum Bar |
+| main.rs:252:9:252:19 | ...::FooBar | main.rs:249:9:249:17 | FooBar |
+| main.rs:257:13:257:15 | Foo | main.rs:237:5:237:21 | struct Foo |
+| main.rs:258:17:258:22 | FooBar | main.rs:249:9:249:17 | FooBar |
+| main.rs:259:17:259:22 | FooBar | main.rs:254:5:254:18 | fn FooBar |
+| main.rs:267:9:267:9 | E | main.rs:262:15:265:5 | enum E |
+| main.rs:267:9:267:12 | ...::C | main.rs:264:9:264:9 | C |
+| main.rs:270:17:270:17 | S | main.rs:262:5:262:13 | struct S |
+| main.rs:271:17:271:17 | C | main.rs:264:9:264:9 | C |
+| main.rs:284:16:284:16 | T | main.rs:278:7:278:7 | T |
+| main.rs:285:14:285:17 | Self | main.rs:276:5:286:5 | trait MyParamTrait |
+| main.rs:285:14:285:33 | ...::AssociatedType | main.rs:280:9:280:28 | type AssociatedType |
+| main.rs:294:13:294:16 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
+| main.rs:294:13:294:21 | ...::m13 | main.rs:289:1:302:1 | mod m13 |
+| main.rs:294:13:294:24 | ...::f | main.rs:290:5:290:17 | fn f |
+| main.rs:294:13:294:24 | ...::f | main.rs:290:19:291:19 | struct f |
+| main.rs:297:17:297:17 | f | main.rs:290:19:291:19 | struct f |
+| main.rs:298:21:298:21 | f | main.rs:290:19:291:19 | struct f |
+| main.rs:299:13:299:13 | f | main.rs:290:5:290:17 | fn f |
+| main.rs:313:9:313:14 | Trait1 | main.rs:305:5:309:5 | trait Trait1 |
+| main.rs:316:13:316:16 | Self | main.rs:311:5:319:5 | trait Trait2 |
+| main.rs:316:13:316:19 | ...::g | main.rs:308:9:308:20 | fn g |
+| main.rs:326:9:326:12 | Self | main.rs:321:5:334:5 | trait Trait3 |
+| main.rs:326:15:326:20 | Trait1 | main.rs:305:5:309:5 | trait Trait1 |
+| main.rs:327:9:327:10 | TT | main.rs:323:9:323:10 | TT |
+| main.rs:327:13:327:18 | Trait1 | main.rs:305:5:309:5 | trait Trait1 |
+| main.rs:329:25:329:26 | TT | main.rs:323:9:323:10 | TT |
+| main.rs:330:13:330:16 | Self | main.rs:321:5:334:5 | trait Trait3 |
+| main.rs:330:13:330:19 | ...::g | main.rs:308:9:308:20 | fn g |
+| main.rs:331:13:331:14 | TT | main.rs:323:9:323:10 | TT |
+| main.rs:331:13:331:17 | ...::g | main.rs:308:9:308:20 | fn g |
+| main.rs:339:10:339:15 | Trait1 | main.rs:305:5:309:5 | trait Trait1 |
+| main.rs:340:11:340:11 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:343:13:343:16 | Self | main.rs:338:5:350:5 | impl Trait1 for S { ... } |
+| main.rs:343:13:343:19 | ...::g | main.rs:347:9:349:9 | fn g |
+| main.rs:353:10:353:15 | Trait2 | main.rs:311:5:319:5 | trait Trait2 |
+| main.rs:354:11:354:11 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:363:17:363:17 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:364:10:364:10 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:365:14:365:19 | Trait1 | main.rs:305:5:309:5 | trait Trait1 |
+| main.rs:367:10:367:10 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:368:14:368:19 | Trait2 | main.rs:311:5:319:5 | trait Trait2 |
+| main.rs:370:9:370:9 | S | main.rs:336:5:336:13 | struct S |
+| main.rs:370:9:370:12 | ...::g | main.rs:347:9:349:9 | fn g |
+| main.rs:380:24:380:24 | T | main.rs:378:7:378:7 | T |
+| main.rs:382:24:382:24 | T | main.rs:378:7:378:7 | T |
+| main.rs:385:24:385:24 | T | main.rs:378:7:378:7 | T |
+| main.rs:386:13:386:16 | Self | main.rs:376:5:392:5 | trait Trait1 |
+| main.rs:386:13:386:19 | ...::g | main.rs:382:9:383:9 | fn g |
+| main.rs:390:18:390:18 | T | main.rs:378:7:378:7 | T |
+| main.rs:398:9:400:9 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 |
+| main.rs:399:11:399:11 | T | main.rs:396:7:396:7 | T |
+| main.rs:401:24:401:24 | T | main.rs:396:7:396:7 | T |
+| main.rs:403:13:403:16 | Self | main.rs:394:5:407:5 | trait Trait2 |
+| main.rs:403:13:403:19 | ...::g | main.rs:382:9:383:9 | fn g |
+| main.rs:405:13:405:16 | Self | main.rs:394:5:407:5 | trait Trait2 |
+| main.rs:405:13:405:19 | ...::c | main.rs:390:9:391:9 | Const |
+| main.rs:412:10:414:5 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 |
+| main.rs:413:7:413:7 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:415:11:415:11 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:416:24:416:24 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:418:13:418:16 | Self | main.rs:411:5:429:5 | impl Trait1::<...> for S { ... } |
+| main.rs:418:13:418:19 | ...::g | main.rs:422:9:425:9 | fn g |
+| main.rs:422:24:422:24 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:424:13:424:16 | Self | main.rs:411:5:429:5 | impl Trait1::<...> for S { ... } |
+| main.rs:424:13:424:19 | ...::c | main.rs:427:9:428:9 | Const |
+| main.rs:427:18:427:18 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:427:22:427:22 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:432:10:434:5 | Trait2::<...> | main.rs:394:5:407:5 | trait Trait2 |
+| main.rs:433:7:433:7 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:435:11:435:11 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:436:24:436:24 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:438:13:438:16 | Self | main.rs:431:5:440:5 | impl Trait2::<...> for S { ... } |
+| main.rs:445:17:445:17 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:446:10:446:10 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:447:14:449:11 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 |
+| main.rs:448:13:448:13 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:451:10:451:10 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:452:14:454:11 | Trait2::<...> | main.rs:394:5:407:5 | trait Trait2 |
+| main.rs:453:13:453:13 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:456:9:456:9 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:456:9:456:12 | ...::g | main.rs:422:9:425:9 | fn g |
+| main.rs:458:9:458:9 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:458:9:458:12 | ...::h | main.rs:385:9:388:9 | fn h |
+| main.rs:460:9:460:9 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:460:9:460:12 | ...::c | main.rs:427:9:428:9 | Const |
+| main.rs:461:10:461:10 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:462:14:464:11 | Trait1::<...> | main.rs:376:5:392:5 | trait Trait1 |
+| main.rs:463:13:463:13 | S | main.rs:409:5:409:13 | struct S |
+| main.rs:481:14:481:16 | Foo | main.rs:471:9:473:9 | trait Foo |
+| main.rs:481:22:481:22 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:487:14:487:16 | Bar | main.rs:475:9:477:9 | trait Bar |
+| main.rs:487:22:487:22 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:494:9:494:9 | m | main.rs:470:5:492:5 | mod m |
+| main.rs:494:9:494:12 | ...::X | main.rs:479:9:479:21 | struct X |
+| main.rs:497:17:497:17 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:500:17:500:17 | m | main.rs:470:5:492:5 | mod m |
+| main.rs:500:17:500:22 | ...::Foo | main.rs:471:9:473:9 | trait Foo |
+| main.rs:501:13:501:13 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:501:13:501:23 | ...::a_method | main.rs:481:26:484:13 | fn a_method |
+| main.rs:505:17:505:17 | m | main.rs:470:5:492:5 | mod m |
+| main.rs:505:17:505:22 | ...::Bar | main.rs:475:9:477:9 | trait Bar |
+| main.rs:506:13:506:13 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:506:13:506:23 | ...::a_method | main.rs:487:26:490:13 | fn a_method |
+| main.rs:510:17:510:17 | m | main.rs:470:5:492:5 | mod m |
+| main.rs:510:17:510:22 | ...::Bar | main.rs:475:9:477:9 | trait Bar |
+| main.rs:511:13:511:13 | X | main.rs:479:9:479:21 | struct X |
+| main.rs:511:13:511:23 | ...::a_method | main.rs:487:26:490:13 | fn a_method |
+| main.rs:516:13:516:13 | m | main.rs:470:5:492:5 | mod m |
+| main.rs:516:13:516:18 | ...::Bar | main.rs:475:9:477:9 | trait Bar |
+| main.rs:516:13:516:28 | ...::a_method | main.rs:476:13:476:31 | fn a_method |
+| main.rs:529:10:529:16 | MyTrait | main.rs:522:5:524:5 | trait MyTrait |
+| main.rs:530:9:530:9 | S | main.rs:526:5:526:13 | struct S |
+| main.rs:538:7:538:13 | MyTrait | main.rs:522:5:524:5 | trait MyTrait |
+| main.rs:539:10:539:10 | T | main.rs:537:10:537:10 | T |
+| main.rs:541:9:541:9 | T | main.rs:537:10:537:10 | T |
+| main.rs:541:9:541:12 | ...::f | main.rs:523:9:523:20 | fn f |
+| main.rs:542:9:542:15 | MyTrait | main.rs:522:5:524:5 | trait MyTrait |
+| main.rs:542:9:542:18 | ...::f | main.rs:523:9:523:20 | fn f |
+| main.rs:547:9:547:9 | g | main.rs:536:5:543:5 | fn g |
+| main.rs:548:11:548:11 | S | main.rs:526:5:526:13 | struct S |
+| main.rs:566:17:566:21 | super | main.rs:558:5:570:5 | mod m19 |
+| main.rs:566:17:566:24 | ...::f | main.rs:559:9:561:9 | fn f |
+| main.rs:567:17:567:21 | super | main.rs:558:5:570:5 | mod m19 |
+| main.rs:567:17:567:28 | ...::super | main.rs:553:1:571:1 | mod m18 |
+| main.rs:567:17:567:31 | ...::f | main.rs:554:5:556:5 | fn f |
+| main.rs:584:13:584:17 | super | main.rs:573:1:598:1 | mod m21 |
+| main.rs:584:13:584:22 | ...::m22 | main.rs:574:5:580:5 | mod m22 |
+| main.rs:584:13:584:30 | ...::MyEnum | main.rs:575:9:577:9 | enum MyEnum |
+| main.rs:585:13:585:16 | self | main.rs:575:9:577:9 | enum MyEnum |
+| main.rs:589:13:589:17 | super | main.rs:573:1:598:1 | mod m21 |
+| main.rs:589:13:589:22 | ...::m22 | main.rs:574:5:580:5 | mod m22 |
+| main.rs:589:13:589:32 | ...::MyStruct | main.rs:579:9:579:28 | struct MyStruct |
+| main.rs:590:13:590:16 | self | main.rs:579:9:579:28 | struct MyStruct |
+| main.rs:594:21:594:26 | MyEnum | main.rs:575:9:577:9 | enum MyEnum |
+| main.rs:594:21:594:29 | ...::A | main.rs:576:13:576:13 | A |
+| main.rs:595:21:595:28 | MyStruct | main.rs:579:9:579:28 | struct MyStruct |
+| main.rs:611:10:613:5 | Trait1::<...> | main.rs:601:5:606:5 | trait Trait1 |
+| main.rs:612:7:612:10 | Self | main.rs:608:5:608:13 | struct S |
+| main.rs:614:11:614:11 | S | main.rs:608:5:608:13 | struct S |
+| main.rs:622:17:622:17 | S | main.rs:608:5:608:13 | struct S |
+| main.rs:638:15:638:15 | T | main.rs:637:26:637:26 | T |
+| main.rs:643:9:643:24 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct |
+| main.rs:643:23:643:23 | T | main.rs:642:10:642:10 | T |
+| main.rs:645:9:645:9 | T | main.rs:642:10:642:10 | T |
+| main.rs:645:12:645:17 | TraitA | main.rs:628:5:630:5 | trait TraitA |
+| main.rs:654:9:654:24 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct |
+| main.rs:654:23:654:23 | T | main.rs:653:10:653:10 | T |
+| main.rs:656:9:656:9 | T | main.rs:653:10:653:10 | T |
+| main.rs:656:12:656:17 | TraitB | main.rs:632:5:634:5 | trait TraitB |
+| main.rs:657:9:657:9 | T | main.rs:653:10:653:10 | T |
+| main.rs:657:12:657:17 | TraitA | main.rs:628:5:630:5 | trait TraitA |
+| main.rs:668:10:668:15 | TraitA | main.rs:628:5:630:5 | trait TraitA |
+| main.rs:668:21:668:31 | Implementor | main.rs:665:5:665:23 | struct Implementor |
+| main.rs:675:10:675:15 | TraitB | main.rs:632:5:634:5 | trait TraitB |
+| main.rs:675:21:675:31 | Implementor | main.rs:665:5:665:23 | struct Implementor |
+| main.rs:683:24:683:34 | Implementor | main.rs:665:5:665:23 | struct Implementor |
+| main.rs:684:23:684:35 | GenericStruct | main.rs:636:5:639:5 | struct GenericStruct |
+| main.rs:690:9:690:36 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct |
+| main.rs:690:9:690:50 | ...::call_trait_a | main.rs:647:9:649:9 | fn call_trait_a |
+| main.rs:690:25:690:35 | Implementor | main.rs:665:5:665:23 | struct Implementor |
+| main.rs:693:9:693:36 | GenericStruct::<...> | main.rs:636:5:639:5 | struct GenericStruct |
+| main.rs:693:9:693:47 | ...::call_both | main.rs:659:9:662:9 | fn call_both |
+| main.rs:693:25:693:35 | Implementor | main.rs:665:5:665:23 | struct Implementor |
+| main.rs:699:3:699:12 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
+| main.rs:699:3:699:24 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
+| main.rs:703:6:703:12 | AStruct | main.rs:702:1:702:17 | struct AStruct |
+| main.rs:705:7:705:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
+| main.rs:705:7:705:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
+| main.rs:708:7:708:16 | proc_macro | proc_macro.rs:0:0:0:0 | Crate(proc_macro@0.0.1) |
+| main.rs:708:7:708:28 | ...::add_suffix | proc_macro.rs:4:1:12:1 | fn add_suffix |
+| main.rs:713:9:713:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
+| main.rs:713:9:713:19 | ...::marker | {EXTERNAL LOCATION} | mod marker |
+| main.rs:713:9:713:32 | ...::PhantomData | {EXTERNAL LOCATION} | struct PhantomData |
+| main.rs:714:9:714:11 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
+| main.rs:714:9:714:19 | ...::result | {EXTERNAL LOCATION} | mod result |
+| main.rs:714:9:714:27 | ...::Result | {EXTERNAL LOCATION} | enum Result |
+| main.rs:722:19:722:22 | Self | main.rs:716:5:724:5 | trait Reduce |
+| main.rs:722:19:722:29 | ...::Input | main.rs:717:9:717:19 | type Input |
+| main.rs:723:14:723:46 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
+| main.rs:723:21:723:24 | Self | main.rs:716:5:724:5 | trait Reduce |
+| main.rs:723:21:723:32 | ...::Output | main.rs:718:21:719:20 | type Output |
+| main.rs:723:35:723:38 | Self | main.rs:716:5:724:5 | trait Reduce |
+| main.rs:723:35:723:45 | ...::Error | main.rs:717:21:718:19 | type Error |
+| main.rs:727:17:727:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData |
+| main.rs:727:29:727:33 | Input | main.rs:726:19:726:23 | Input |
+| main.rs:728:17:728:34 | PhantomData::<...> | {EXTERNAL LOCATION} | struct PhantomData |
+| main.rs:728:29:728:33 | Error | main.rs:726:26:726:30 | Error |
+| main.rs:735:11:735:16 | Reduce | main.rs:716:5:724:5 | trait Reduce |
+| main.rs:736:13:739:9 | MyImpl::<...> | main.rs:726:5:729:5 | struct MyImpl |
+| main.rs:737:13:737:17 | Input | main.rs:733:13:733:17 | Input |
+| main.rs:738:13:738:17 | Error | main.rs:734:13:734:17 | Error |
+| main.rs:741:22:744:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
+| main.rs:742:13:742:17 | Input | main.rs:733:13:733:17 | Input |
+| main.rs:743:13:743:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } |
+| main.rs:743:13:743:23 | ...::Error | main.rs:745:11:749:9 | type Error |
+| main.rs:746:22:748:9 | Option::<...> | {EXTERNAL LOCATION} | enum Option |
+| main.rs:747:11:747:15 | Error | main.rs:734:13:734:17 | Error |
+| main.rs:751:13:751:17 | Input | main.rs:733:13:733:17 | Input |
+| main.rs:756:19:756:22 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } |
+| main.rs:756:19:756:29 | ...::Input | main.rs:741:9:745:9 | type Input |
+| main.rs:757:14:760:9 | Result::<...> | {EXTERNAL LOCATION} | enum Result |
+| main.rs:758:13:758:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } |
+| main.rs:758:13:758:24 | ...::Output | main.rs:749:11:752:9 | type Output |
+| main.rs:759:13:759:16 | Self | main.rs:731:5:763:5 | impl Reduce for MyImpl::<...> { ... } |
+| main.rs:759:13:759:23 | ...::Error | main.rs:745:11:749:9 | type Error |
+| main.rs:766:5:766:7 | std | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
+| main.rs:766:11:766:14 | self | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
+| main.rs:768:15:768:17 | ztd | {EXTERNAL LOCATION} | Crate(std@0.0.0) |
+| main.rs:768:15:768:25 | ...::string | {EXTERNAL LOCATION} | mod string |
+| main.rs:768:15:768:33 | ...::String | {EXTERNAL LOCATION} | struct String |
+| main.rs:771:5:771:6 | my | main.rs:1:1:1:7 | mod my |
+| main.rs:771:5:771:14 | ...::nested | my.rs:1:1:1:15 | mod nested |
+| main.rs:771:5:771:23 | ...::nested1 | my/nested.rs:1:1:17:1 | mod nested1 |
+| main.rs:771:5:771:32 | ...::nested2 | my/nested.rs:2:5:11:5 | mod nested2 |
+| main.rs:771:5:771:35 | ...::f | my/nested.rs:3:9:5:9 | fn f |
+| main.rs:772:5:772:6 | my | main.rs:1:1:1:7 | mod my |
+| main.rs:772:5:772:9 | ...::f | my.rs:5:1:7:1 | fn f |
+| main.rs:773:5:773:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
+| main.rs:773:5:773:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
+| main.rs:773:5:773:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
+| main.rs:773:5:773:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
+| main.rs:774:5:774:5 | f | my2/nested2.rs:3:9:5:9 | fn f |
+| main.rs:774:5:774:5 | f | my2/nested2.rs:23:9:25:9 | fn f |
+| main.rs:775:5:775:5 | g | my2/nested2.rs:7:9:9:9 | fn g |
+| main.rs:776:5:776:9 | crate | main.rs:0:0:0:0 | Crate(main@0.0.1) |
+| main.rs:776:5:776:12 | ...::h | main.rs:56:1:75:1 | fn h |
+| main.rs:777:5:777:6 | m1 | main.rs:19:1:43:1 | mod m1 |
+| main.rs:777:5:777:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
+| main.rs:777:5:777:13 | ...::g | main.rs:29:9:33:9 | fn g |
+| main.rs:778:5:778:6 | m1 | main.rs:19:1:43:1 | mod m1 |
+| main.rs:778:5:778:10 | ...::m2 | main.rs:24:5:42:5 | mod m2 |
+| main.rs:778:5:778:14 | ...::m3 | main.rs:35:9:41:9 | mod m3 |
+| main.rs:778:5:778:17 | ...::h | main.rs:36:27:40:13 | fn h |
+| main.rs:779:5:779:6 | m4 | main.rs:45:1:52:1 | mod m4 |
+| main.rs:779:5:779:9 | ...::i | main.rs:48:5:51:5 | fn i |
+| main.rs:780:5:780:5 | h | main.rs:56:1:75:1 | fn h |
+| main.rs:781:5:781:11 | f_alias | my2/nested2.rs:3:9:5:9 | fn f |
+| main.rs:782:5:782:11 | g_alias | my2/nested2.rs:7:9:9:9 | fn g |
+| main.rs:783:5:783:5 | j | main.rs:103:1:107:1 | fn j |
+| main.rs:784:5:784:6 | m6 | main.rs:115:1:126:1 | mod m6 |
+| main.rs:784:5:784:9 | ...::g | main.rs:120:5:125:5 | fn g |
+| main.rs:785:5:785:6 | m7 | main.rs:128:1:147:1 | mod m7 |
+| main.rs:785:5:785:9 | ...::f | main.rs:139:5:146:5 | fn f |
+| main.rs:786:5:786:6 | m8 | main.rs:149:1:203:1 | mod m8 |
+| main.rs:786:5:786:9 | ...::g | main.rs:187:5:202:5 | fn g |
+| main.rs:787:5:787:6 | m9 | main.rs:205:1:213:1 | mod m9 |
+| main.rs:787:5:787:9 | ...::f | main.rs:208:5:212:5 | fn f |
+| main.rs:788:5:788:7 | m11 | main.rs:236:1:273:1 | mod m11 |
+| main.rs:788:5:788:10 | ...::f | main.rs:241:5:244:5 | fn f |
+| main.rs:789:5:789:7 | m15 | main.rs:304:1:373:1 | mod m15 |
+| main.rs:789:5:789:10 | ...::f | main.rs:360:5:372:5 | fn f |
+| main.rs:790:5:790:7 | m16 | main.rs:375:1:467:1 | mod m16 |
+| main.rs:790:5:790:10 | ...::f | main.rs:442:5:466:5 | fn f |
+| main.rs:791:5:791:20 | trait_visibility | main.rs:469:1:519:1 | mod trait_visibility |
+| main.rs:791:5:791:23 | ...::f | main.rs:496:5:518:5 | fn f |
+| main.rs:792:5:792:7 | m17 | main.rs:521:1:551:1 | mod m17 |
+| main.rs:792:5:792:10 | ...::f | main.rs:545:5:550:5 | fn f |
+| main.rs:793:5:793:11 | nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
+| main.rs:793:5:793:14 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
+| main.rs:794:5:794:11 | nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
+| main.rs:794:5:794:14 | ...::f | my2/nested2.rs:23:9:25:9 | fn f |
+| main.rs:795:5:795:7 | my3 | my2/mod.rs:18:1:18:12 | mod my3 |
+| main.rs:795:5:795:10 | ...::f | my2/my3/mod.rs:1:1:5:1 | fn f |
+| main.rs:796:5:796:12 | nested_f | my/my4/my5/mod.rs:1:1:3:1 | fn f |
+| main.rs:797:5:797:7 | m18 | main.rs:553:1:571:1 | mod m18 |
+| main.rs:797:5:797:12 | ...::m19 | main.rs:558:5:570:5 | mod m19 |
+| main.rs:797:5:797:17 | ...::m20 | main.rs:563:9:569:9 | mod m20 |
+| main.rs:797:5:797:20 | ...::g | main.rs:564:13:568:13 | fn g |
+| main.rs:798:5:798:7 | m23 | main.rs:600:1:625:1 | mod m23 |
+| main.rs:798:5:798:10 | ...::f | main.rs:620:5:624:5 | fn f |
+| main.rs:799:5:799:7 | m24 | main.rs:627:1:695:1 | mod m24 |
+| main.rs:799:5:799:10 | ...::f | main.rs:681:5:694:5 | fn f |
+| main.rs:800:5:800:8 | zelf | main.rs:0:0:0:0 | Crate(main@0.0.1) |
+| main.rs:800:5:800:11 | ...::h | main.rs:56:1:75:1 | fn h |
+| main.rs:802:5:802:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
+| main.rs:803:5:803:11 | AStruct | main.rs:702:1:702:17 | struct AStruct |
| my2/mod.rs:5:5:5:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
| my2/mod.rs:5:5:5:20 | ...::nested3 | my2/nested2.rs:1:1:11:1 | mod nested3 |
| my2/mod.rs:5:5:5:29 | ...::nested4 | my2/nested2.rs:2:5:10:5 | mod nested4 |
| my2/mod.rs:5:5:5:32 | ...::f | my2/nested2.rs:3:9:5:9 | fn f |
| my2/mod.rs:8:9:8:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
| my2/mod.rs:8:9:8:24 | ...::nested5 | my2/nested2.rs:13:1:19:1 | mod nested5 |
-| my2/mod.rs:10:9:10:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
-| my2/mod.rs:10:9:10:24 | ...::nested7 | my2/nested2.rs:21:1:27:1 | mod nested7 |
-| my2/mod.rs:10:9:10:33 | ...::nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
-| my2/mod.rs:10:37:10:40 | self | my2/nested2.rs:22:5:26:5 | mod nested8 |
-| my2/mod.rs:17:5:17:9 | mymod | my2/mod.rs:14:1:15:10 | mod mymod |
-| my2/mod.rs:17:5:17:12 | ...::f | my2/renamed.rs:1:1:1:13 | fn f |
+| my2/mod.rs:11:9:11:15 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
+| my2/mod.rs:11:9:11:24 | ...::nested7 | my2/nested2.rs:21:1:27:1 | mod nested7 |
+| my2/mod.rs:11:9:11:33 | ...::nested8 | my2/nested2.rs:22:5:26:5 | mod nested8 |
+| my2/mod.rs:12:5:12:8 | self | my2/nested2.rs:22:5:26:5 | mod nested8 |
+| my2/mod.rs:13:5:13:5 | f | my2/nested2.rs:23:9:25:9 | fn f |
+| my2/mod.rs:16:5:16:11 | nested2 | my2/mod.rs:1:1:1:16 | mod nested2 |
+| my2/mod.rs:16:5:16:20 | ...::nested5 | my2/nested2.rs:13:1:19:1 | mod nested5 |
+| my2/mod.rs:16:5:16:29 | ...::nested6 | my2/nested2.rs:14:5:18:5 | mod nested6 |
+| my2/mod.rs:16:5:16:32 | ...::f | my2/nested2.rs:15:9:17:9 | fn f |
+| my2/mod.rs:23:9:23:13 | mymod | my2/mod.rs:20:1:21:10 | mod mymod |
+| my2/mod.rs:23:9:23:16 | ...::f | my2/renamed.rs:1:1:1:13 | fn f |
| my2/my3/mod.rs:3:5:3:5 | g | my2/mod.rs:3:1:6:1 | fn g |
-| my2/my3/mod.rs:4:5:4:5 | h | main.rs:50:1:69:1 | fn h |
-| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:17:30 | SourceFile |
-| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:799:2 | SourceFile |
-| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:50:1:69:1 | fn h |
-| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:17:30 | SourceFile |
+| my2/my3/mod.rs:4:5:4:5 | h | main.rs:56:1:75:1 | fn h |
+| my2/my3/mod.rs:7:5:7:9 | super | my2/mod.rs:1:1:23:34 | SourceFile |
+| my2/my3/mod.rs:7:5:7:16 | ...::super | main.rs:1:1:805:2 | SourceFile |
+| my2/my3/mod.rs:7:5:7:19 | ...::h | main.rs:56:1:75:1 | fn h |
+| my2/my3/mod.rs:8:5:8:9 | super | my2/mod.rs:1:1:23:34 | SourceFile |
| my2/my3/mod.rs:8:5:8:12 | ...::g | my2/mod.rs:3:1:6:1 | fn g |
+| my2/my3/mod.rs:10:5:10:9 | super | my2/mod.rs:1:1:23:34 | SourceFile |
| my.rs:3:5:3:10 | nested | my.rs:1:1:1:15 | mod nested |
| my.rs:3:5:3:13 | ...::g | my/nested.rs:19:1:22:1 | fn g |
| my.rs:11:5:11:5 | g | my/nested.rs:19:1:22:1 | fn g |
From f6bdfba3b328e8f9d42f5af0fa0cae8363122e84 Mon Sep 17 00:00:00 2001
From: Tom Hvitved
Date: Wed, 17 Sep 2025 13:43:39 +0200
Subject: [PATCH 143/219] Rust: Path resolution improvements
---
.../codeql/rust/internal/PathResolution.qll | 60 +-
.../PathResolutionConsistency.expected | 2 +
.../dataflow/sources/InlineFlow.expected | 840 +++++++++---------
.../library-tests/dataflow/sources/test.rs | 4 +-
.../PathResolutionConsistency.expected | 1 -
.../library-tests/path-resolution/main.rs | 2 +-
.../path-resolution/my2/my3/mod.rs | 2 +-
.../path-resolution/path-resolution.expected | 2 +-
8 files changed, 497 insertions(+), 416 deletions(-)
diff --git a/rust/ql/lib/codeql/rust/internal/PathResolution.qll b/rust/ql/lib/codeql/rust/internal/PathResolution.qll
index 4b718fc43998..f819632ce100 100644
--- a/rust/ql/lib/codeql/rust/internal/PathResolution.qll
+++ b/rust/ql/lib/codeql/rust/internal/PathResolution.qll
@@ -72,9 +72,9 @@ private ItemNode getAChildSuccessor(ItemNode item, string name, SuccessorKind ki
if item instanceof ImplOrTraitItemNode and result instanceof AssocItem
then kind.isExternal()
else
- if result instanceof Use
- then kind.isInternal()
- else kind.isBoth()
+ if result.isPublic()
+ then kind.isBoth()
+ else kind.isInternal()
)
}
@@ -165,6 +165,20 @@ abstract class ItemNode extends Locatable {
/** Gets the visibility of this item, if any. */
abstract Visibility getVisibility();
+ /**
+ * Holds if this item is public.
+ *
+ * This is the case when this item either has `pub` visibility (but is not
+ * a `use`; a `use` itself is not visible from the outside), or when this
+ * item is a variant.
+ */
+ predicate isPublic() {
+ exists(this.getVisibility()) and
+ not this instanceof Use
+ or
+ this instanceof Variant
+ }
+
/** Gets the `i`th type parameter of this item, if any. */
abstract TypeParam getTypeParam(int i);
@@ -380,9 +394,7 @@ abstract private class ModuleLikeNode extends ItemNode {
private class SourceFileItemNode extends ModuleLikeNode, SourceFile {
pragma[nomagic]
- ModuleLikeNode getSuper() {
- result = any(ModuleItemNode mod | fileImport(mod, this)).getASuccessor("super")
- }
+ ModuleLikeNode getSuper() { fileImport(result.getAnItemInScope(), this) }
override string getName() { result = "(source file)" }
@@ -1300,7 +1312,8 @@ private predicate useTreeDeclares(UseTree tree, string name) {
*/
pragma[nomagic]
private predicate declaresDirectly(ItemNode item, Namespace ns, string name) {
- exists(ItemNode child, SuccessorKind kind | child = getAChildSuccessor(item, name, kind) |
+ exists(ItemNode child, SuccessorKind kind |
+ child = getAChildSuccessor(item, name, kind) and
child.getNamespace() = ns and
kind.isInternalOrBoth()
)
@@ -1491,6 +1504,13 @@ private ItemNode resolvePathCandQualifier(RelevantPath qualifier, RelevantPath p
name = path.getText()
}
+pragma[nomagic]
+private Crate getCrate0(Locatable l) { result.getASourceFile().getFile() = l.getFile() }
+
+bindingset[l]
+pragma[inline_late]
+private Crate getCrate(Locatable l) { result = getCrate0(l) }
+
/**
* Gets the item that `path` resolves to in `ns` when `qualifier` is the
* qualifier of `path` and `qualifier` resolves to `q`, if any.
@@ -1501,8 +1521,17 @@ private ItemNode resolvePathCandQualified(
) {
exists(string name, SuccessorKind kind |
q = resolvePathCandQualifier(qualifier, path, name) and
- result = getASuccessor(q, name, ns, kind) and
+ result = getASuccessor(q, name, ns, kind)
+ |
kind.isExternalOrBoth()
+ or
+ // Non-public items are visible to paths in descendant modules of the declaring
+ // module; the declaration may happen via a `use` statement, where the item
+ // being used is _not_ itself in an ancestor module, and we currently don't track
+ // that information in `getASuccessor`. So, for simplicity, we allow for non-public
+ // items when the path and the item are in the same crate.
+ getCrate(path) = getCrate(result) and
+ not result instanceof TypeParam
)
}
@@ -1646,10 +1675,12 @@ private ItemNode resolveUseTreeListItemQualifier(
pragma[nomagic]
private ItemNode resolveUseTreeListItem(Use use, UseTree tree) {
- tree = use.getUseTree() and
- result = resolvePathCand(tree.getPath())
- or
- result = resolveUseTreeListItem(use, tree, tree.getPath(), _)
+ exists(Path path | path = tree.getPath() |
+ tree = use.getUseTree() and
+ result = resolvePathCand(path)
+ or
+ result = resolveUseTreeListItem(use, tree, path, _)
+ )
}
/** Holds if `use` imports `item` as `name`. */
@@ -1673,7 +1704,10 @@ private predicate useImportEdge(Use use, string name, ItemNode item, SuccessorKi
item = used and
(
not tree.hasRename() and
- name = item.getName()
+ exists(string pathName |
+ pathName = tree.getPath().getText() and
+ if pathName = "self" then name = item.getName() else name = pathName
+ )
or
exists(Rename rename | rename = tree.getRename() |
name = rename.getName().getText()
diff --git a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected
index 5ba71c14933d..0fb7a59f6f47 100644
--- a/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected
+++ b/rust/ql/test/library-tests/dataflow/sources/CONSISTENCY/PathResolutionConsistency.expected
@@ -11,6 +11,8 @@ multipleCallTargets
| test.rs:179:30:179:68 | ...::_print(...) |
| test.rs:188:26:188:105 | ...::_print(...) |
| test.rs:229:22:229:72 | ... .read_to_string(...) |
+| test.rs:664:22:664:43 | file.read(...) |
+| test.rs:673:22:673:41 | f1.read(...) |
| test.rs:697:18:697:38 | ...::_print(...) |
| test.rs:702:18:702:45 | ...::_print(...) |
| test.rs:720:38:720:42 | ...::_print(...) |
diff --git a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
index 88a728253d80..db0cb969d5a7 100644
--- a/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
+++ b/rust/ql/test/library-tests/dataflow/sources/InlineFlow.expected
@@ -1,138 +1,140 @@
models
-| 1 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
-| 2 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
-| 3 | Source: ::file_name; ReturnValue; file |
-| 4 | Source: ::path; ReturnValue; file |
-| 5 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
-| 6 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
-| 7 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
-| 8 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
-| 9 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
-| 10 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
-| 11 | Source: ::file_name; ReturnValue; file |
-| 12 | Source: ::path; ReturnValue; file |
-| 13 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
-| 14 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
-| 15 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
-| 16 | Source: std::env::args; ReturnValue.Element; commandargs |
-| 17 | Source: std::env::args_os; ReturnValue.Element; commandargs |
-| 18 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
-| 19 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
-| 20 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs |
-| 21 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment |
-| 22 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment |
-| 23 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file |
-| 24 | Source: std::fs::read; ReturnValue; file |
-| 25 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file |
-| 26 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file |
-| 27 | Source: std::fs::read_to_string; ReturnValue; file |
-| 28 | Source: std::io::stdio::stdin; ReturnValue; stdin |
-| 29 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
-| 30 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
-| 31 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
-| 32 | Source: tokio::io::stdin::stdin; ReturnValue; stdin |
-| 33 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
-| 34 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value |
-| 35 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
-| 36 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint |
-| 37 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 38 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint |
-| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
-| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint |
-| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
-| 42 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint |
-| 43 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
-| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint |
-| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
-| 46 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint |
-| 47 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint |
-| 48 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint |
-| 49 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint |
-| 50 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint |
-| 51 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint |
-| 52 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint |
-| 53 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint |
-| 54 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint |
-| 55 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint |
-| 56 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint |
-| 57 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint |
-| 58 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 59 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint |
-| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
-| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
-| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint |
-| 63 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
-| 64 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint |
-| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint |
-| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
-| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint |
-| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 72 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
-| 73 | Summary: ::as_str; Argument[self]; ReturnValue; value |
-| 74 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
-| 75 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
-| 76 | Summary: ::new; Argument[0].Reference; ReturnValue; value |
-| 77 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value |
-| 78 | Summary: ::new; Argument[0]; ReturnValue; value |
-| 79 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
-| 80 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
-| 81 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
-| 82 | Summary: ::as_str; Argument[self]; ReturnValue; value |
-| 83 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
-| 84 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 85 | Summary: ::new; Argument[0]; ReturnValue; taint |
-| 86 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 87 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
-| 88 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
-| 89 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
-| 90 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
-| 91 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
-| 92 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
-| 93 | Summary: ::read; Argument[self]; Argument[0]; taint |
-| 94 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint |
-| 95 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint |
-| 96 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
-| 97 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint |
-| 98 | Summary: ::next; Argument[self]; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; taint |
-| 99 | Summary: ::fill_buf; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
-| 100 | Summary: ::buffer; Argument[self]; ReturnValue; taint |
-| 101 | Summary: ::new; Argument[0]; ReturnValue; taint |
-| 102 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
-| 103 | Summary: ::read; Argument[self]; Argument[0]; taint |
-| 104 | Summary: ::read_exact; Argument[self]; Argument[0].Reference; taint |
-| 105 | Summary: ::read_exact; Argument[self]; Argument[0]; taint |
-| 106 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint |
-| 107 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
-| 108 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint |
-| 109 | Summary: ::lock; Argument[self]; ReturnValue; taint |
-| 110 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
-| 111 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
-| 112 | Summary: ::as_path; Argument[self]; ReturnValue; value |
-| 113 | Summary: ::buffer; Argument[self]; ReturnValue; taint |
-| 114 | Summary: ::new; Argument[0]; ReturnValue; taint |
-| 115 | Summary: ::next_line; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
-| 116 | Summary: ::next_segment; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
-| 117 | Summary: ::peek; Argument[self]; Argument[0].Reference; taint |
-| 118 | Summary: ::try_read; Argument[self]; Argument[0].Reference; taint |
-| 119 | Summary: ::try_read_buf; Argument[self]; Argument[0].Reference; taint |
+| 1 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 2 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 3 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 4 | Source: ::send_request; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 5 | Source: ::file_name; ReturnValue; file |
+| 6 | Source: ::path; ReturnValue; file |
+| 7 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 8 | Source: ::open; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 9 | Source: ::connect; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 10 | Source: ::connect_timeout; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 11 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 12 | Source: ::open; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 13 | Source: ::file_name; ReturnValue; file |
+| 14 | Source: ::path; ReturnValue; file |
+| 15 | Source: ::connect; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 16 | Source: reqwest::blocking::get; ReturnValue.Field[core::result::Result::Ok(0)]; remote |
+| 17 | Source: reqwest::get; ReturnValue.Future.Field[core::result::Result::Ok(0)]; remote |
+| 18 | Source: std::env::args; ReturnValue.Element; commandargs |
+| 19 | Source: std::env::args_os; ReturnValue.Element; commandargs |
+| 20 | Source: std::env::current_dir; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
+| 21 | Source: std::env::current_exe; ReturnValue.Field[core::result::Result::Ok(0)]; commandargs |
+| 22 | Source: std::env::home_dir; ReturnValue.Field[core::option::Option::Some(0)]; commandargs |
+| 23 | Source: std::env::var; ReturnValue.Field[core::result::Result::Ok(0)]; environment |
+| 24 | Source: std::env::var_os; ReturnValue.Field[core::option::Option::Some(0)]; environment |
+| 25 | Source: std::fs::read; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 26 | Source: std::fs::read; ReturnValue; file |
+| 27 | Source: std::fs::read_link; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 28 | Source: std::fs::read_to_string; ReturnValue.Field[core::result::Result::Ok(0)]; file |
+| 29 | Source: std::fs::read_to_string; ReturnValue; file |
+| 30 | Source: std::io::stdio::stdin; ReturnValue; stdin |
+| 31 | Source: tokio::fs::read::read; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 32 | Source: tokio::fs::read_link::read_link; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 33 | Source: tokio::fs::read_to_string::read_to_string; ReturnValue.Future.Field[core::result::Result::Ok(0)]; file |
+| 34 | Source: tokio::io::stdin::stdin; ReturnValue; stdin |
+| 35 | Summary: <_ as core::clone::Clone>::clone; Argument[self].Reference; ReturnValue; value |
+| 36 | Summary: <_ as core::iter::traits::iterator::Iterator>::collect; Argument[self].Element; ReturnValue.Element; value |
+| 37 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Element; ReturnValue.Field[core::option::Option::Some(0)]; value |
+| 38 | Summary: <_ as futures_io::if_std::AsyncBufRead>::poll_fill_buf; Argument[self].Reference; ReturnValue.Field[core::task::poll::Poll::Ready(0)].Field[core::result::Result::Ok(0)]; taint |
+| 39 | Summary: <_ as futures_util::io::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 40 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self].Reference; Argument[0].Reference; taint |
+| 41 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 42 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self].Reference; Argument[1].Reference; taint |
+| 43 | Summary: <_ as futures_util::io::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 44 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self].Reference; Argument[0].Reference; taint |
+| 45 | Summary: <_ as futures_util::io::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
+| 46 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self].Reference; Argument[0].Reference; taint |
+| 47 | Summary: <_ as futures_util::io::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 48 | Summary: <_ as std::io::BufRead>::lines; Argument[self]; ReturnValue; taint |
+| 49 | Summary: <_ as std::io::BufRead>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 50 | Summary: <_ as std::io::BufRead>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 51 | Summary: <_ as std::io::BufRead>::split; Argument[self]; ReturnValue; taint |
+| 52 | Summary: <_ as std::io::Read>::bytes; Argument[self]; ReturnValue; taint |
+| 53 | Summary: <_ as std::io::Read>::chain; Argument[0]; ReturnValue; taint |
+| 54 | Summary: <_ as std::io::Read>::chain; Argument[self]; ReturnValue; taint |
+| 55 | Summary: <_ as std::io::Read>::read; Argument[self]; Argument[0].Reference; taint |
+| 56 | Summary: <_ as std::io::Read>::read_exact; Argument[self]; Argument[0].Reference; taint |
+| 57 | Summary: <_ as std::io::Read>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 58 | Summary: <_ as std::io::Read>::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 59 | Summary: <_ as std::io::Read>::take; Argument[self]; ReturnValue; taint |
+| 60 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::fill_buf; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 61 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::lines; Argument[self]; ReturnValue; taint |
+| 62 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_line; Argument[self]; Argument[0].Reference; taint |
+| 63 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::read_until; Argument[self]; Argument[1].Reference; taint |
+| 64 | Summary: <_ as tokio::io::util::async_buf_read_ext::AsyncBufReadExt>::split; Argument[self]; ReturnValue; taint |
+| 65 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read; Argument[self]; Argument[0].Reference; taint |
+| 66 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_buf; Argument[self]; Argument[0].Reference; taint |
+| 67 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_exact; Argument[self]; Argument[0].Reference; taint |
+| 68 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_f32; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 69 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i16; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 70 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_i64_le; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 71 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 72 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 73 | Summary: <_ as tokio::io::util::async_read_ext::AsyncReadExt>::read_u8; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 74 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
+| 75 | Summary: ::as_str; Argument[self]; ReturnValue; value |
+| 76 | Summary: ::expect; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
+| 77 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value |
+| 78 | Summary: ::new; Argument[0].Reference; ReturnValue; value |
+| 79 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::__pointer]; value |
+| 80 | Summary: ::new; Argument[0]; ReturnValue; value |
+| 81 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
+| 82 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value |
+| 83 | Summary: ::as_bytes; Argument[self]; ReturnValue; value |
+| 84 | Summary: ::as_str; Argument[self]; ReturnValue; value |
+| 85 | Summary: ::parse; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 86 | Summary: ::connect; Argument[1]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 87 | Summary: ::new; Argument[0]; ReturnValue; taint |
+| 88 | Summary: ::bytes; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 89 | Summary: ::chunk; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)].Field[core::option::Option::Some(0)]; taint |
+| 90 | Summary: ::text; Argument[self]; ReturnValue.Future.Field[core::result::Result::Ok(0)]; taint |
+| 91 | Summary: ::bytes; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 92 | Summary: ::text; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 93 | Summary: ::text_with_charset; Argument[self]; ReturnValue.Field[core::result::Result::Ok(0)]; taint |
+| 94 | Summary: ::read; Argument[self]; Argument[0].Reference; taint |
+| 95 | Summary: ::read; Argument[self]; Argument[0]; taint |
+| 96 | Summary: ::read_to_end; Argument[self]; Argument[0].Reference; taint |
+| 97 | Summary: ::read_to_end; Argument[self]; Argument[0]; taint |
+| 98 | Summary: ::read_to_string; Argument[self]; Argument[0].Reference; taint |
+| 99 | Summary: ::read_to_string; Argument[self]; Argument[0]; taint |
+| 100 | Summary: