From a0311c0ea3ce9ee02dbaace4e11cc9f7be59c79f Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 19 Jan 2026 15:07:42 +0000 Subject: [PATCH 01/12] Rust: Test spacing. --- .../dataflow/taint/TaintFlowStep.expected | 84 +++---- .../dataflow/taint/inline-taint-flow.expected | 212 +++++++++--------- .../test/library-tests/dataflow/taint/main.rs | 15 ++ 3 files changed, 163 insertions(+), 148 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index dfd91b81506c..d3f838b794df 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -1,43 +1,43 @@ | main.rs:8:20:8:20 | s | main.rs:8:14:8:20 | FormatArgsExpr | -| main.rs:16:5:16:5 | [post] b [implicit borrow] | main.rs:16:5:16:5 | [SSA] b | -| main.rs:20:5:20:5 | [post] c [implicit borrow] | main.rs:20:5:20:5 | [SSA] c | -| main.rs:31:13:31:13 | a | main.rs:31:13:31:19 | a as u8 | -| main.rs:32:10:32:10 | b | main.rs:32:10:32:17 | b as i64 | -| main.rs:32:10:32:17 | [post] b as i64 | main.rs:32:10:32:10 | [post] b | -| main.rs:37:23:37:23 | i | main.rs:37:17:37:23 | FormatArgsExpr | -| main.rs:41:24:41:24 | s | main.rs:41:18:41:24 | FormatArgsExpr | -| main.rs:46:23:46:23 | [post] s [implicit borrow] | main.rs:46:23:46:23 | [post] s | -| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | -| main.rs:46:23:46:29 | s[...] [pre-dereferenced] | main.rs:46:23:46:29 | s[...] | -| main.rs:57:24:57:24 | i | main.rs:57:18:57:24 | FormatArgsExpr | -| main.rs:62:14:62:16 | [post] arr [implicit borrow] | main.rs:62:14:62:16 | [post] arr | -| main.rs:62:14:62:19 | arr[1] [pre-dereferenced] | main.rs:62:14:62:19 | arr[1] | -| main.rs:72:24:72:24 | [post] s [implicit borrow] | main.rs:72:24:72:24 | [post] s | -| main.rs:72:24:72:27 | s[1] | main.rs:72:18:72:27 | FormatArgsExpr | -| main.rs:72:24:72:27 | s[1] [pre-dereferenced] | main.rs:72:24:72:27 | s[1] | -| main.rs:77:9:77:12 | [post] arr2 [implicit borrow] | main.rs:77:9:77:12 | [post] arr2 | -| main.rs:77:9:77:15 | arr2[1] [pre-dereferenced] | main.rs:77:9:77:15 | arr2[1] | -| main.rs:98:14:98:47 | TupleExpr | main.rs:98:14:98:49 | ... .0 | -| main.rs:99:14:99:47 | TupleExpr | main.rs:99:14:99:49 | ... .1 | -| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | -| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | -| main.rs:106:14:106:83 | TupleExpr | main.rs:106:14:106:85 | ... .0 | -| main.rs:107:14:107:83 | TupleExpr | main.rs:107:14:107:85 | ... .0 | -| main.rs:107:14:107:85 | ... .0 | main.rs:107:14:107:87 | ... .0 | -| main.rs:108:14:108:83 | TupleExpr | main.rs:108:14:108:85 | ... .0 | -| main.rs:108:14:108:85 | ... .0 | main.rs:108:14:108:87 | ... .1 | -| main.rs:109:14:109:83 | TupleExpr | main.rs:109:14:109:85 | ... .1 | -| main.rs:110:14:110:83 | TupleExpr | main.rs:110:14:110:85 | ... .1 | -| main.rs:110:14:110:85 | ... .1 | main.rs:110:14:110:87 | ... .0 | -| main.rs:111:14:111:83 | TupleExpr | main.rs:111:14:111:85 | ... .1 | -| main.rs:111:14:111:85 | ... .1 | main.rs:111:14:111:87 | ... .1 | -| main.rs:114:14:114:64 | TupleExpr | main.rs:114:14:114:66 | ... .0 | -| main.rs:115:14:115:64 | TupleExpr | main.rs:115:14:115:66 | ... .0 | -| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | -| main.rs:116:14:116:64 | TupleExpr | main.rs:116:14:116:66 | ... .0 | -| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | -| main.rs:117:14:117:64 | TupleExpr | main.rs:117:14:117:66 | ... .1 | -| main.rs:118:14:118:64 | TupleExpr | main.rs:118:14:118:66 | ... .1 | -| main.rs:118:14:118:66 | ... .1 | main.rs:118:14:118:68 | ... .0 | -| main.rs:119:14:119:64 | TupleExpr | main.rs:119:14:119:66 | ... .1 | -| main.rs:119:14:119:66 | ... .1 | main.rs:119:14:119:68 | ... .1 | +| main.rs:17:5:17:5 | [post] b [implicit borrow] | main.rs:17:5:17:5 | [SSA] b | +| main.rs:21:5:21:5 | [post] c [implicit borrow] | main.rs:21:5:21:5 | [SSA] c | +| main.rs:46:13:46:13 | a | main.rs:46:13:46:19 | a as u8 | +| main.rs:47:10:47:10 | b | main.rs:47:10:47:17 | b as i64 | +| main.rs:47:10:47:17 | [post] b as i64 | main.rs:47:10:47:10 | [post] b | +| main.rs:52:23:52:23 | i | main.rs:52:17:52:23 | FormatArgsExpr | +| main.rs:56:24:56:24 | s | main.rs:56:18:56:24 | FormatArgsExpr | +| main.rs:61:23:61:23 | [post] s [implicit borrow] | main.rs:61:23:61:23 | [post] s | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | +| main.rs:61:23:61:29 | s[...] [pre-dereferenced] | main.rs:61:23:61:29 | s[...] | +| main.rs:72:24:72:24 | i | main.rs:72:18:72:24 | FormatArgsExpr | +| main.rs:77:14:77:16 | [post] arr [implicit borrow] | main.rs:77:14:77:16 | [post] arr | +| main.rs:77:14:77:19 | arr[1] [pre-dereferenced] | main.rs:77:14:77:19 | arr[1] | +| main.rs:87:24:87:24 | [post] s [implicit borrow] | main.rs:87:24:87:24 | [post] s | +| main.rs:87:24:87:27 | s[1] | main.rs:87:18:87:27 | FormatArgsExpr | +| main.rs:87:24:87:27 | s[1] [pre-dereferenced] | main.rs:87:24:87:27 | s[1] | +| main.rs:92:9:92:12 | [post] arr2 [implicit borrow] | main.rs:92:9:92:12 | [post] arr2 | +| main.rs:92:9:92:15 | arr2[1] [pre-dereferenced] | main.rs:92:9:92:15 | arr2[1] | +| main.rs:113:14:113:47 | TupleExpr | main.rs:113:14:113:49 | ... .0 | +| main.rs:114:14:114:47 | TupleExpr | main.rs:114:14:114:49 | ... .1 | +| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | +| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | +| main.rs:121:14:121:83 | TupleExpr | main.rs:121:14:121:85 | ... .0 | +| main.rs:122:14:122:83 | TupleExpr | main.rs:122:14:122:85 | ... .0 | +| main.rs:122:14:122:85 | ... .0 | main.rs:122:14:122:87 | ... .0 | +| main.rs:123:14:123:83 | TupleExpr | main.rs:123:14:123:85 | ... .0 | +| main.rs:123:14:123:85 | ... .0 | main.rs:123:14:123:87 | ... .1 | +| main.rs:124:14:124:83 | TupleExpr | main.rs:124:14:124:85 | ... .1 | +| main.rs:125:14:125:83 | TupleExpr | main.rs:125:14:125:85 | ... .1 | +| main.rs:125:14:125:85 | ... .1 | main.rs:125:14:125:87 | ... .0 | +| main.rs:126:14:126:83 | TupleExpr | main.rs:126:14:126:85 | ... .1 | +| main.rs:126:14:126:85 | ... .1 | main.rs:126:14:126:87 | ... .1 | +| main.rs:129:14:129:64 | TupleExpr | main.rs:129:14:129:66 | ... .0 | +| main.rs:130:14:130:64 | TupleExpr | main.rs:130:14:130:66 | ... .0 | +| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 | +| main.rs:131:14:131:64 | TupleExpr | main.rs:131:14:131:66 | ... .0 | +| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | +| main.rs:132:14:132:64 | TupleExpr | main.rs:132:14:132:66 | ... .1 | +| main.rs:133:14:133:64 | TupleExpr | main.rs:133:14:133:66 | ... .1 | +| main.rs:133:14:133:66 | ... .1 | main.rs:133:14:133:68 | ... .0 | +| main.rs:134:14:134:64 | TupleExpr | main.rs:134:14:134:66 | ... .1 | +| main.rs:134:14:134:66 | ... .1 | main.rs:134:14:134:68 | ... .1 | diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index 53a6a4e01a0c..ff182738a8e8 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -9,118 +9,118 @@ edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | | main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:1 | -| main.rs:15:9:15:13 | mut b | main.rs:16:5:16:5 | b | provenance | | -| main.rs:15:17:15:26 | source(...) | main.rs:15:9:15:13 | mut b | provenance | | -| main.rs:16:5:16:5 | b | main.rs:17:10:17:10 | b | provenance | MaD:4 | -| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:2 | -| main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | provenance | MaD:3 | -| main.rs:25:9:25:9 | a | main.rs:26:11:26:11 | a | provenance | | -| main.rs:25:13:25:22 | source(...) | main.rs:25:9:25:9 | a | provenance | | -| main.rs:26:11:26:11 | a | main.rs:26:10:26:11 | - ... | provenance | MaD:5 | -| main.rs:30:9:30:9 | a | main.rs:31:9:31:9 | b | provenance | | -| main.rs:30:13:30:22 | source(...) | main.rs:30:9:30:9 | a | provenance | | -| main.rs:31:9:31:9 | b | main.rs:32:10:32:17 | b as i64 | provenance | | -| main.rs:45:13:45:13 | s | main.rs:46:23:46:23 | s | provenance | | -| main.rs:45:13:45:13 | s | main.rs:46:23:46:29 | s[...] | provenance | | -| main.rs:45:17:45:26 | source(...) | main.rs:45:13:45:13 | s | provenance | | -| main.rs:46:13:46:18 | sliced [&ref] | main.rs:47:14:47:19 | sliced | provenance | | -| main.rs:46:22:46:29 | &... [&ref] | main.rs:46:13:46:18 | sliced [&ref] | provenance | | -| main.rs:46:23:46:23 | s | main.rs:46:23:46:29 | s[...] | provenance | MaD:6 | -| main.rs:46:23:46:29 | s[...] | main.rs:46:22:46:29 | &... [&ref] | provenance | | -| main.rs:61:13:61:15 | arr | main.rs:62:14:62:16 | arr | provenance | | -| main.rs:61:19:61:28 | source(...) | main.rs:61:13:61:15 | arr | provenance | | -| main.rs:62:14:62:16 | arr | main.rs:62:14:62:19 | arr[1] | provenance | MaD:6 | -| main.rs:77:9:77:12 | [post] arr2 [element] | main.rs:78:14:78:17 | arr2 | provenance | | -| main.rs:77:19:77:28 | source(...) | main.rs:77:9:77:12 | [post] arr2 [element] | provenance | | -| main.rs:98:14:98:47 | TupleExpr [tuple.0] | main.rs:98:14:98:49 | ... .0 | provenance | | -| main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:47 | TupleExpr [tuple.0] | provenance | | -| main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | provenance | | -| main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | provenance | | -| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | main.rs:108:14:108:85 | ... .0 [tuple.1] | provenance | | -| main.rs:108:14:108:85 | ... .0 [tuple.1] | main.rs:108:14:108:87 | ... .1 | provenance | | -| main.rs:108:15:108:48 | TupleExpr [tuple.1] | main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | provenance | | -| main.rs:108:32:108:47 | source_string(...) | main.rs:108:15:108:48 | TupleExpr [tuple.1] | provenance | | -| main.rs:114:14:114:64 | TupleExpr [tuple.0] | main.rs:114:14:114:66 | ... .0 | provenance | | -| main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:115:14:115:64 | TupleExpr [tuple.0] | main.rs:115:14:115:66 | ... .0 | provenance | | -| main.rs:115:14:115:66 | ... .0 | main.rs:115:14:115:68 | ... .0 | provenance | | -| main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:116:14:116:64 | TupleExpr [tuple.0] | main.rs:116:14:116:66 | ... .0 | provenance | | -| main.rs:116:14:116:66 | ... .0 | main.rs:116:14:116:68 | ... .1 | provenance | | -| main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | +| main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:4 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:2 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:3 | +| main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | +| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:5 | +| main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | +| main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | +| main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | +| main.rs:60:13:60:13 | s | main.rs:61:23:61:23 | s | provenance | | +| main.rs:60:13:60:13 | s | main.rs:61:23:61:29 | s[...] | provenance | | +| main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | +| main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | +| main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:6 | +| main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | +| main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | +| main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:6 | +| main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | +| main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | +| main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | +| main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:47 | TupleExpr [tuple.0] | provenance | | +| main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | provenance | | +| main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | provenance | | +| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | main.rs:123:14:123:85 | ... .0 [tuple.1] | provenance | | +| main.rs:123:14:123:85 | ... .0 [tuple.1] | main.rs:123:14:123:87 | ... .1 | provenance | | +| main.rs:123:15:123:48 | TupleExpr [tuple.1] | main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | provenance | | +| main.rs:123:32:123:47 | source_string(...) | main.rs:123:15:123:48 | TupleExpr [tuple.1] | provenance | | +| main.rs:129:14:129:64 | TupleExpr [tuple.0] | main.rs:129:14:129:66 | ... .0 | provenance | | +| main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:130:14:130:64 | TupleExpr [tuple.0] | main.rs:130:14:130:66 | ... .0 | provenance | | +| main.rs:130:14:130:66 | ... .0 | main.rs:130:14:130:68 | ... .0 | provenance | | +| main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | +| main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | +| main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | | main.rs:13:10:13:10 | a | semmle.label | a | | main.rs:13:10:13:14 | ... + ... | semmle.label | ... + ... | -| main.rs:15:9:15:13 | mut b | semmle.label | mut b | -| main.rs:15:17:15:26 | source(...) | semmle.label | source(...) | -| main.rs:16:5:16:5 | b | semmle.label | b | -| main.rs:17:10:17:10 | b | semmle.label | b | -| main.rs:20:10:20:19 | source(...) | semmle.label | source(...) | -| main.rs:21:10:21:10 | c | semmle.label | c | -| main.rs:25:9:25:9 | a | semmle.label | a | -| main.rs:25:13:25:22 | source(...) | semmle.label | source(...) | -| main.rs:26:10:26:11 | - ... | semmle.label | - ... | -| main.rs:26:11:26:11 | a | semmle.label | a | -| main.rs:30:9:30:9 | a | semmle.label | a | -| main.rs:30:13:30:22 | source(...) | semmle.label | source(...) | -| main.rs:31:9:31:9 | b | semmle.label | b | -| main.rs:32:10:32:17 | b as i64 | semmle.label | b as i64 | -| main.rs:45:13:45:13 | s | semmle.label | s | -| main.rs:45:17:45:26 | source(...) | semmle.label | source(...) | -| main.rs:46:13:46:18 | sliced [&ref] | semmle.label | sliced [&ref] | -| main.rs:46:22:46:29 | &... [&ref] | semmle.label | &... [&ref] | -| main.rs:46:23:46:23 | s | semmle.label | s | -| main.rs:46:23:46:29 | s[...] | semmle.label | s[...] | -| main.rs:47:14:47:19 | sliced | semmle.label | sliced | -| main.rs:61:13:61:15 | arr | semmle.label | arr | -| main.rs:61:19:61:28 | source(...) | semmle.label | source(...) | -| main.rs:62:14:62:16 | arr | semmle.label | arr | -| main.rs:62:14:62:19 | arr[1] | semmle.label | arr[1] | -| main.rs:77:9:77:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | -| main.rs:77:19:77:28 | source(...) | semmle.label | source(...) | -| main.rs:78:14:78:17 | arr2 | semmle.label | arr2 | -| main.rs:98:14:98:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:98:14:98:49 | ... .0 | semmle.label | ... .0 | -| main.rs:98:15:98:30 | source_string(...) | semmle.label | source_string(...) | -| main.rs:101:14:101:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:102:14:102:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:102:14:102:30 | ... .0 | semmle.label | ... .0 | -| main.rs:103:14:103:28 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:103:14:103:30 | ... .1 | semmle.label | ... .1 | -| main.rs:108:14:108:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | -| main.rs:108:14:108:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] | -| main.rs:108:14:108:87 | ... .1 | semmle.label | ... .1 | -| main.rs:108:15:108:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | -| main.rs:108:32:108:47 | source_string(...) | semmle.label | source_string(...) | -| main.rs:114:14:114:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:114:14:114:66 | ... .0 | semmle.label | ... .0 | -| main.rs:114:15:114:29 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:115:14:115:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:115:14:115:66 | ... .0 | semmle.label | ... .0 | -| main.rs:115:14:115:68 | ... .0 | semmle.label | ... .0 | -| main.rs:115:15:115:29 | source_tuple(...) | semmle.label | source_tuple(...) | -| main.rs:116:14:116:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | -| main.rs:116:14:116:66 | ... .0 | semmle.label | ... .0 | -| main.rs:116:14:116:68 | ... .1 | semmle.label | ... .1 | -| main.rs:116:15:116:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:16:9:16:13 | mut b | semmle.label | mut b | +| main.rs:16:17:16:26 | source(...) | semmle.label | source(...) | +| main.rs:17:5:17:5 | b | semmle.label | b | +| main.rs:18:10:18:10 | b | semmle.label | b | +| main.rs:21:10:21:19 | source(...) | semmle.label | source(...) | +| main.rs:22:10:22:10 | c | semmle.label | c | +| main.rs:26:9:26:9 | a | semmle.label | a | +| main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | +| main.rs:27:10:27:11 | - ... | semmle.label | - ... | +| main.rs:27:11:27:11 | a | semmle.label | a | +| main.rs:45:9:45:9 | a | semmle.label | a | +| main.rs:45:13:45:22 | source(...) | semmle.label | source(...) | +| main.rs:46:9:46:9 | b | semmle.label | b | +| main.rs:47:10:47:17 | b as i64 | semmle.label | b as i64 | +| main.rs:60:13:60:13 | s | semmle.label | s | +| main.rs:60:17:60:26 | source(...) | semmle.label | source(...) | +| main.rs:61:13:61:18 | sliced [&ref] | semmle.label | sliced [&ref] | +| main.rs:61:22:61:29 | &... [&ref] | semmle.label | &... [&ref] | +| main.rs:61:23:61:23 | s | semmle.label | s | +| main.rs:61:23:61:29 | s[...] | semmle.label | s[...] | +| main.rs:62:14:62:19 | sliced | semmle.label | sliced | +| main.rs:76:13:76:15 | arr | semmle.label | arr | +| main.rs:76:19:76:28 | source(...) | semmle.label | source(...) | +| main.rs:77:14:77:16 | arr | semmle.label | arr | +| main.rs:77:14:77:19 | arr[1] | semmle.label | arr[1] | +| main.rs:92:9:92:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] | +| main.rs:92:19:92:28 | source(...) | semmle.label | source(...) | +| main.rs:93:14:93:17 | arr2 | semmle.label | arr2 | +| main.rs:113:14:113:47 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:113:14:113:49 | ... .0 | semmle.label | ... .0 | +| main.rs:113:15:113:30 | source_string(...) | semmle.label | source_string(...) | +| main.rs:116:14:116:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:117:14:117:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:117:14:117:30 | ... .0 | semmle.label | ... .0 | +| main.rs:118:14:118:28 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:118:14:118:30 | ... .1 | semmle.label | ... .1 | +| main.rs:123:14:123:83 | TupleExpr [tuple.0, tuple.1] | semmle.label | TupleExpr [tuple.0, tuple.1] | +| main.rs:123:14:123:85 | ... .0 [tuple.1] | semmle.label | ... .0 [tuple.1] | +| main.rs:123:14:123:87 | ... .1 | semmle.label | ... .1 | +| main.rs:123:15:123:48 | TupleExpr [tuple.1] | semmle.label | TupleExpr [tuple.1] | +| main.rs:123:32:123:47 | source_string(...) | semmle.label | source_string(...) | +| main.rs:129:14:129:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:129:14:129:66 | ... .0 | semmle.label | ... .0 | +| main.rs:129:15:129:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:130:14:130:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:130:14:130:66 | ... .0 | semmle.label | ... .0 | +| main.rs:130:14:130:68 | ... .0 | semmle.label | ... .0 | +| main.rs:130:15:130:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:131:14:131:64 | TupleExpr [tuple.0] | semmle.label | TupleExpr [tuple.0] | +| main.rs:131:14:131:66 | ... .0 | semmle.label | ... .0 | +| main.rs:131:14:131:68 | ... .1 | semmle.label | ... .1 | +| main.rs:131:15:131:29 | source_tuple(...) | semmle.label | source_tuple(...) | subpaths testFailures #select | main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | -| main.rs:17:10:17:10 | b | main.rs:15:17:15:26 | source(...) | main.rs:17:10:17:10 | b | $@ | main.rs:15:17:15:26 | source(...) | source(...) | -| main.rs:21:10:21:10 | c | main.rs:20:10:20:19 | source(...) | main.rs:21:10:21:10 | c | $@ | main.rs:20:10:20:19 | source(...) | source(...) | -| main.rs:26:10:26:11 | - ... | main.rs:25:13:25:22 | source(...) | main.rs:26:10:26:11 | - ... | $@ | main.rs:25:13:25:22 | source(...) | source(...) | -| main.rs:32:10:32:17 | b as i64 | main.rs:30:13:30:22 | source(...) | main.rs:32:10:32:17 | b as i64 | $@ | main.rs:30:13:30:22 | source(...) | source(...) | -| main.rs:47:14:47:19 | sliced | main.rs:45:17:45:26 | source(...) | main.rs:47:14:47:19 | sliced | $@ | main.rs:45:17:45:26 | source(...) | source(...) | -| main.rs:62:14:62:19 | arr[1] | main.rs:61:19:61:28 | source(...) | main.rs:62:14:62:19 | arr[1] | $@ | main.rs:61:19:61:28 | source(...) | source(...) | -| main.rs:78:14:78:17 | arr2 | main.rs:77:19:77:28 | source(...) | main.rs:78:14:78:17 | arr2 | $@ | main.rs:77:19:77:28 | source(...) | source(...) | -| main.rs:98:14:98:49 | ... .0 | main.rs:98:15:98:30 | source_string(...) | main.rs:98:14:98:49 | ... .0 | $@ | main.rs:98:15:98:30 | source_string(...) | source_string(...) | -| main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | main.rs:101:14:101:28 | source_tuple(...) | $@ | main.rs:101:14:101:28 | source_tuple(...) | source_tuple(...) | -| main.rs:102:14:102:30 | ... .0 | main.rs:102:14:102:28 | source_tuple(...) | main.rs:102:14:102:30 | ... .0 | $@ | main.rs:102:14:102:28 | source_tuple(...) | source_tuple(...) | -| main.rs:103:14:103:30 | ... .1 | main.rs:103:14:103:28 | source_tuple(...) | main.rs:103:14:103:30 | ... .1 | $@ | main.rs:103:14:103:28 | source_tuple(...) | source_tuple(...) | -| main.rs:108:14:108:87 | ... .1 | main.rs:108:32:108:47 | source_string(...) | main.rs:108:14:108:87 | ... .1 | $@ | main.rs:108:32:108:47 | source_string(...) | source_string(...) | -| main.rs:114:14:114:66 | ... .0 | main.rs:114:15:114:29 | source_tuple(...) | main.rs:114:14:114:66 | ... .0 | $@ | main.rs:114:15:114:29 | source_tuple(...) | source_tuple(...) | -| main.rs:115:14:115:68 | ... .0 | main.rs:115:15:115:29 | source_tuple(...) | main.rs:115:14:115:68 | ... .0 | $@ | main.rs:115:15:115:29 | source_tuple(...) | source_tuple(...) | -| main.rs:116:14:116:68 | ... .1 | main.rs:116:15:116:29 | source_tuple(...) | main.rs:116:14:116:68 | ... .1 | $@ | main.rs:116:15:116:29 | source_tuple(...) | source_tuple(...) | +| main.rs:18:10:18:10 | b | main.rs:16:17:16:26 | source(...) | main.rs:18:10:18:10 | b | $@ | main.rs:16:17:16:26 | source(...) | source(...) | +| main.rs:22:10:22:10 | c | main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | $@ | main.rs:21:10:21:19 | source(...) | source(...) | +| main.rs:27:10:27:11 | - ... | main.rs:26:13:26:22 | source(...) | main.rs:27:10:27:11 | - ... | $@ | main.rs:26:13:26:22 | source(...) | source(...) | +| main.rs:47:10:47:17 | b as i64 | main.rs:45:13:45:22 | source(...) | main.rs:47:10:47:17 | b as i64 | $@ | main.rs:45:13:45:22 | source(...) | source(...) | +| main.rs:62:14:62:19 | sliced | main.rs:60:17:60:26 | source(...) | main.rs:62:14:62:19 | sliced | $@ | main.rs:60:17:60:26 | source(...) | source(...) | +| main.rs:77:14:77:19 | arr[1] | main.rs:76:19:76:28 | source(...) | main.rs:77:14:77:19 | arr[1] | $@ | main.rs:76:19:76:28 | source(...) | source(...) | +| main.rs:93:14:93:17 | arr2 | main.rs:92:19:92:28 | source(...) | main.rs:93:14:93:17 | arr2 | $@ | main.rs:92:19:92:28 | source(...) | source(...) | +| main.rs:113:14:113:49 | ... .0 | main.rs:113:15:113:30 | source_string(...) | main.rs:113:14:113:49 | ... .0 | $@ | main.rs:113:15:113:30 | source_string(...) | source_string(...) | +| main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | main.rs:116:14:116:28 | source_tuple(...) | $@ | main.rs:116:14:116:28 | source_tuple(...) | source_tuple(...) | +| main.rs:117:14:117:30 | ... .0 | main.rs:117:14:117:28 | source_tuple(...) | main.rs:117:14:117:30 | ... .0 | $@ | main.rs:117:14:117:28 | source_tuple(...) | source_tuple(...) | +| main.rs:118:14:118:30 | ... .1 | main.rs:118:14:118:28 | source_tuple(...) | main.rs:118:14:118:30 | ... .1 | $@ | main.rs:118:14:118:28 | source_tuple(...) | source_tuple(...) | +| main.rs:123:14:123:87 | ... .1 | main.rs:123:32:123:47 | source_string(...) | main.rs:123:14:123:87 | ... .1 | $@ | main.rs:123:32:123:47 | source_string(...) | source_string(...) | +| main.rs:129:14:129:66 | ... .0 | main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:66 | ... .0 | $@ | main.rs:129:15:129:29 | source_tuple(...) | source_tuple(...) | +| main.rs:130:14:130:68 | ... .0 | main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:68 | ... .0 | $@ | main.rs:130:15:130:29 | source_tuple(...) | source_tuple(...) | +| main.rs:131:14:131:68 | ... .1 | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:68 | ... .1 | $@ | main.rs:131:15:131:29 | source_tuple(...) | source_tuple(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index e7c23d38e98d..506c6e5eb3c0 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -12,6 +12,7 @@ fn addition() { let a = source(42); sink(a + 1); // $ hasTaintFlow=42 + let mut b = source(58); b += 2; sink(b); // $ hasTaintFlow=58 @@ -26,6 +27,20 @@ fn negation() { sink(-a); // $ hasTaintFlow=17 } + + + + + + + + + + + + + + fn cast() { let a = source(77); let b = a as u8; From 50fdc99b8c9cb7e1c1a89a9e9a015600a2679097 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 15 Dec 2025 18:22:50 +0000 Subject: [PATCH 02/12] Rust: More test cases for operators, std::ops and std::num::Wrapping. --- .../dataflow/taint/TaintFlowStep.expected | 11 + .../dataflow/taint/inline-taint-flow.expected | 245 ++++++++++++++++-- .../test/library-tests/dataflow/taint/main.rs | 98 +++++-- 3 files changed, 323 insertions(+), 31 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index d3f838b794df..3273569a34ad 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -41,3 +41,14 @@ | main.rs:133:14:133:66 | ... .1 | main.rs:133:14:133:68 | ... .0 | | main.rs:134:14:134:64 | TupleExpr | main.rs:134:14:134:66 | ... .1 | | main.rs:134:14:134:66 | ... .1 | main.rs:134:14:134:68 | ... .1 | +| main.rs:170:5:170:5 | [post] a [implicit borrow] | main.rs:170:5:170:5 | [post] a | +| main.rs:171:5:171:5 | [post] a [implicit borrow] | main.rs:171:5:171:5 | [post] a | +| main.rs:172:5:172:5 | [post] a [implicit borrow] | main.rs:172:5:172:5 | [post] a | +| main.rs:173:5:173:5 | [post] a [implicit borrow] | main.rs:173:5:173:5 | [post] a | +| main.rs:174:5:174:5 | [post] a [implicit borrow] | main.rs:174:5:174:5 | [post] a | +| main.rs:175:5:175:5 | [post] a [implicit borrow] | main.rs:175:5:175:5 | [post] a | +| main.rs:191:24:191:24 | s | main.rs:191:18:191:24 | FormatArgsExpr | +| main.rs:196:9:196:9 | [post] a [implicit borrow] | main.rs:196:9:196:9 | [post] a | +| main.rs:197:9:197:9 | [post] a [implicit borrow] | main.rs:197:9:197:9 | [post] a | +| main.rs:198:9:198:9 | [post] a [implicit borrow] | main.rs:198:9:198:9 | [SSA] a | +| main.rs:199:9:199:9 | [post] a [implicit borrow] | main.rs:199:9:199:9 | [SSA] a | diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index ff182738a8e8..447f1c5f7bd1 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,22 +1,71 @@ models -| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | -| 5 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | -| 6 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | +| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 7 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | +| 8 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint | +| 9 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 11 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | +| 12 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 13 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 14 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | +| 15 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0]; ReturnValue; taint | +| 16 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self]; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 18 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | +| 19 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | +| 21 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0]; ReturnValue; taint | +| 22 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self]; ReturnValue; taint | +| 23 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | +| 24 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint | +| 25 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 27 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 28 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 29 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | +| 30 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint | +| 31 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self]; ReturnValue; taint | +| 32 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 33 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 34 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | +| 35 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0]; ReturnValue; taint | +| 36 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self]; ReturnValue; taint | +| 37 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 38 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 39 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | +| main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:1 | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:3 | +| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:1 | +| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 | | main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | | main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | -| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:4 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:2 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:3 | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:6 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:5 | | main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | -| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | -| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:5 | +| main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:13 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:28 | +| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:16 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:14 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:15 | +| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:9 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:7 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:8 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:31 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:29 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:30 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:25 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:23 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:24 | | main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | | main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | | main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | @@ -25,11 +74,11 @@ edges | main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | | main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | | main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | -| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:6 | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:39 | | main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | | main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | | main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | -| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:6 | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:39 | | main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | | main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | | main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | @@ -48,11 +97,68 @@ edges | main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | | main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | +| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:3 | +| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:1 | +| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 | +| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:16 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:14 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:15 | +| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:9 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:7 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:8 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:31 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:31 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:29 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:30 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:36 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:36 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:34 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:35 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:22 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:21 | +| main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:5 | +| main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:19 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:17 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | +| main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:10 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:11 | +| main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:32 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:33 | +| main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:37 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:38 | +| main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:26 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:27 | +| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:13 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:28 | +| main.rs:196:9:196:9 | [post] a | main.rs:197:9:197:9 | a | provenance | | +| main.rs:196:9:196:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | +| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:4 | +| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:5 | +| main.rs:197:9:197:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | +| main.rs:197:9:197:9 | a | main.rs:197:9:197:9 | [post] a | provenance | MaD:6 | +| main.rs:198:9:198:9 | a | main.rs:199:9:199:9 | a | provenance | MaD:6 | +| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:4 | +| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:5 | +| main.rs:199:9:199:9 | a | main.rs:200:14:200:14 | a | provenance | MaD:6 | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | | main.rs:13:10:13:10 | a | semmle.label | a | | main.rs:13:10:13:14 | ... + ... | semmle.label | ... + ... | +| main.rs:14:10:14:14 | ... + ... | semmle.label | ... + ... | +| main.rs:14:14:14:14 | a | semmle.label | a | | main.rs:16:9:16:13 | mut b | semmle.label | mut b | | main.rs:16:17:16:26 | source(...) | semmle.label | source(...) | | main.rs:17:5:17:5 | b | semmle.label | b | @@ -60,9 +166,27 @@ nodes | main.rs:21:10:21:19 | source(...) | semmle.label | source(...) | | main.rs:22:10:22:10 | c | semmle.label | c | | main.rs:26:9:26:9 | a | semmle.label | a | -| main.rs:26:13:26:22 | source(...) | semmle.label | source(...) | +| main.rs:26:13:26:21 | source(...) | semmle.label | source(...) | | main.rs:27:10:27:11 | - ... | semmle.label | - ... | | main.rs:27:11:27:11 | a | semmle.label | a | +| main.rs:29:10:29:19 | ! ... | semmle.label | ! ... | +| main.rs:29:11:29:19 | source(...) | semmle.label | source(...) | +| main.rs:31:10:31:18 | source(...) | semmle.label | source(...) | +| main.rs:31:10:31:22 | ... - ... | semmle.label | ... - ... | +| main.rs:32:10:32:25 | ... - ... | semmle.label | ... - ... | +| main.rs:32:17:32:25 | source(...) | semmle.label | source(...) | +| main.rs:34:10:34:18 | source(...) | semmle.label | source(...) | +| main.rs:34:10:34:22 | ... * ... | semmle.label | ... * ... | +| main.rs:35:10:35:25 | ... * ... | semmle.label | ... * ... | +| main.rs:35:17:35:25 | source(...) | semmle.label | source(...) | +| main.rs:37:10:37:18 | source(...) | semmle.label | source(...) | +| main.rs:37:10:37:23 | ... << ... | semmle.label | ... << ... | +| main.rs:38:10:38:26 | ... << ... | semmle.label | ... << ... | +| main.rs:38:18:38:26 | source(...) | semmle.label | source(...) | +| main.rs:40:10:40:18 | source(...) | semmle.label | source(...) | +| main.rs:40:10:40:22 | ... ^ ... | semmle.label | ... ^ ... | +| main.rs:41:10:41:27 | ... ^ ... | semmle.label | ... ^ ... | +| main.rs:41:18:41:27 | source(...) | semmle.label | source(...) | | main.rs:45:9:45:9 | a | semmle.label | a | | main.rs:45:13:45:22 | source(...) | semmle.label | source(...) | | main.rs:46:9:46:9 | b | semmle.label | b | @@ -105,13 +229,78 @@ nodes | main.rs:131:14:131:66 | ... .0 | semmle.label | ... .0 | | main.rs:131:14:131:68 | ... .1 | semmle.label | ... .1 | | main.rs:131:15:131:29 | source_tuple(...) | semmle.label | source_tuple(...) | +| main.rs:141:10:141:18 | source(...) | semmle.label | source(...) | +| main.rs:141:10:141:28 | ... .add(...) | semmle.label | ... .add(...) | +| main.rs:143:10:143:28 | 1i64.add(...) | semmle.label | 1i64.add(...) | +| main.rs:143:19:143:27 | source(...) | semmle.label | source(...) | +| main.rs:146:10:146:18 | source(...) | semmle.label | source(...) | +| main.rs:146:10:146:28 | ... .sub(...) | semmle.label | ... .sub(...) | +| main.rs:148:10:148:28 | 1i64.sub(...) | semmle.label | 1i64.sub(...) | +| main.rs:148:19:148:27 | source(...) | semmle.label | source(...) | +| main.rs:151:10:151:18 | source(...) | semmle.label | source(...) | +| main.rs:151:10:151:28 | ... .mul(...) | semmle.label | ... .mul(...) | +| main.rs:153:10:153:28 | 1i64.mul(...) | semmle.label | 1i64.mul(...) | +| main.rs:153:19:153:27 | source(...) | semmle.label | source(...) | +| main.rs:156:10:156:18 | source(...) | semmle.label | source(...) | +| main.rs:156:10:156:28 | ... .shl(...) | semmle.label | ... .shl(...) | +| main.rs:157:10:157:18 | source(...) | semmle.label | source(...) | +| main.rs:157:10:157:25 | ... .shl(...) | semmle.label | ... .shl(...) | +| main.rs:158:10:158:28 | 1i64.shl(...) | semmle.label | 1i64.shl(...) | +| main.rs:158:19:158:27 | source(...) | semmle.label | source(...) | +| main.rs:160:10:160:18 | source(...) | semmle.label | source(...) | +| main.rs:160:10:160:28 | ... .shr(...) | semmle.label | ... .shr(...) | +| main.rs:161:10:161:18 | source(...) | semmle.label | source(...) | +| main.rs:161:10:161:25 | ... .shr(...) | semmle.label | ... .shr(...) | +| main.rs:162:10:162:28 | 1i64.shr(...) | semmle.label | 1i64.shr(...) | +| main.rs:162:19:162:27 | source(...) | semmle.label | source(...) | +| main.rs:164:10:164:18 | source(...) | semmle.label | source(...) | +| main.rs:164:10:164:30 | ... .bitor(...) | semmle.label | ... .bitor(...) | +| main.rs:166:10:166:30 | 1i64.bitor(...) | semmle.label | 1i64.bitor(...) | +| main.rs:166:21:166:29 | source(...) | semmle.label | source(...) | +| main.rs:170:5:170:5 | [post] a | semmle.label | [post] a | +| main.rs:170:18:170:26 | source(...) | semmle.label | source(...) | +| main.rs:171:5:171:5 | [post] a | semmle.label | [post] a | +| main.rs:171:5:171:5 | a | semmle.label | a | +| main.rs:171:18:171:26 | source(...) | semmle.label | source(...) | +| main.rs:172:5:172:5 | [post] a | semmle.label | [post] a | +| main.rs:172:5:172:5 | a | semmle.label | a | +| main.rs:172:18:172:26 | source(...) | semmle.label | source(...) | +| main.rs:173:5:173:5 | [post] a | semmle.label | [post] a | +| main.rs:173:18:173:26 | source(...) | semmle.label | source(...) | +| main.rs:174:5:174:5 | [post] a | semmle.label | [post] a | +| main.rs:174:18:174:26 | source(...) | semmle.label | source(...) | +| main.rs:175:5:175:5 | [post] a | semmle.label | [post] a | +| main.rs:175:21:175:29 | source(...) | semmle.label | source(...) | +| main.rs:176:10:176:10 | a | semmle.label | a | +| main.rs:178:10:178:18 | source(...) | semmle.label | source(...) | +| main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() | +| main.rs:179:10:179:18 | source(...) | semmle.label | source(...) | +| main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() | +| main.rs:196:9:196:9 | [post] a | semmle.label | [post] a | +| main.rs:196:22:196:30 | source(...) | semmle.label | source(...) | +| main.rs:197:9:197:9 | [post] a | semmle.label | [post] a | +| main.rs:197:9:197:9 | a | semmle.label | a | +| main.rs:198:9:198:9 | a | semmle.label | a | +| main.rs:198:14:198:22 | source(...) | semmle.label | source(...) | +| main.rs:199:9:199:9 | a | semmle.label | a | +| main.rs:200:14:200:14 | a | semmle.label | a | subpaths testFailures #select | main.rs:13:10:13:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:13:10:13:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | +| main.rs:14:10:14:14 | ... + ... | main.rs:12:13:12:22 | source(...) | main.rs:14:10:14:14 | ... + ... | $@ | main.rs:12:13:12:22 | source(...) | source(...) | | main.rs:18:10:18:10 | b | main.rs:16:17:16:26 | source(...) | main.rs:18:10:18:10 | b | $@ | main.rs:16:17:16:26 | source(...) | source(...) | | main.rs:22:10:22:10 | c | main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | $@ | main.rs:21:10:21:19 | source(...) | source(...) | -| main.rs:27:10:27:11 | - ... | main.rs:26:13:26:22 | source(...) | main.rs:27:10:27:11 | - ... | $@ | main.rs:26:13:26:22 | source(...) | source(...) | +| main.rs:27:10:27:11 | - ... | main.rs:26:13:26:21 | source(...) | main.rs:27:10:27:11 | - ... | $@ | main.rs:26:13:26:21 | source(...) | source(...) | +| main.rs:29:10:29:19 | ! ... | main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | $@ | main.rs:29:11:29:19 | source(...) | source(...) | +| main.rs:31:10:31:22 | ... - ... | main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | $@ | main.rs:31:10:31:18 | source(...) | source(...) | +| main.rs:32:10:32:25 | ... - ... | main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | $@ | main.rs:32:17:32:25 | source(...) | source(...) | +| main.rs:34:10:34:22 | ... * ... | main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | $@ | main.rs:34:10:34:18 | source(...) | source(...) | +| main.rs:35:10:35:25 | ... * ... | main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | $@ | main.rs:35:17:35:25 | source(...) | source(...) | +| main.rs:37:10:37:23 | ... << ... | main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | $@ | main.rs:37:10:37:18 | source(...) | source(...) | +| main.rs:38:10:38:26 | ... << ... | main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | $@ | main.rs:38:18:38:26 | source(...) | source(...) | +| main.rs:40:10:40:22 | ... ^ ... | main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | $@ | main.rs:40:10:40:18 | source(...) | source(...) | +| main.rs:41:10:41:27 | ... ^ ... | main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | $@ | main.rs:41:18:41:27 | source(...) | source(...) | | main.rs:47:10:47:17 | b as i64 | main.rs:45:13:45:22 | source(...) | main.rs:47:10:47:17 | b as i64 | $@ | main.rs:45:13:45:22 | source(...) | source(...) | | main.rs:62:14:62:19 | sliced | main.rs:60:17:60:26 | source(...) | main.rs:62:14:62:19 | sliced | $@ | main.rs:60:17:60:26 | source(...) | source(...) | | main.rs:77:14:77:19 | arr[1] | main.rs:76:19:76:28 | source(...) | main.rs:77:14:77:19 | arr[1] | $@ | main.rs:76:19:76:28 | source(...) | source(...) | @@ -124,3 +313,27 @@ testFailures | main.rs:129:14:129:66 | ... .0 | main.rs:129:15:129:29 | source_tuple(...) | main.rs:129:14:129:66 | ... .0 | $@ | main.rs:129:15:129:29 | source_tuple(...) | source_tuple(...) | | main.rs:130:14:130:68 | ... .0 | main.rs:130:15:130:29 | source_tuple(...) | main.rs:130:14:130:68 | ... .0 | $@ | main.rs:130:15:130:29 | source_tuple(...) | source_tuple(...) | | main.rs:131:14:131:68 | ... .1 | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:68 | ... .1 | $@ | main.rs:131:15:131:29 | source_tuple(...) | source_tuple(...) | +| main.rs:141:10:141:28 | ... .add(...) | main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | $@ | main.rs:141:10:141:18 | source(...) | source(...) | +| main.rs:143:10:143:28 | 1i64.add(...) | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | $@ | main.rs:143:19:143:27 | source(...) | source(...) | +| main.rs:146:10:146:28 | ... .sub(...) | main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | $@ | main.rs:146:10:146:18 | source(...) | source(...) | +| main.rs:148:10:148:28 | 1i64.sub(...) | main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | $@ | main.rs:148:19:148:27 | source(...) | source(...) | +| main.rs:151:10:151:28 | ... .mul(...) | main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | $@ | main.rs:151:10:151:18 | source(...) | source(...) | +| main.rs:153:10:153:28 | 1i64.mul(...) | main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | $@ | main.rs:153:19:153:27 | source(...) | source(...) | +| main.rs:156:10:156:28 | ... .shl(...) | main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | $@ | main.rs:156:10:156:18 | source(...) | source(...) | +| main.rs:157:10:157:25 | ... .shl(...) | main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | $@ | main.rs:157:10:157:18 | source(...) | source(...) | +| main.rs:158:10:158:28 | 1i64.shl(...) | main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | $@ | main.rs:158:19:158:27 | source(...) | source(...) | +| main.rs:160:10:160:28 | ... .shr(...) | main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | $@ | main.rs:160:10:160:18 | source(...) | source(...) | +| main.rs:161:10:161:25 | ... .shr(...) | main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | $@ | main.rs:161:10:161:18 | source(...) | source(...) | +| main.rs:162:10:162:28 | 1i64.shr(...) | main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | $@ | main.rs:162:19:162:27 | source(...) | source(...) | +| main.rs:164:10:164:30 | ... .bitor(...) | main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | $@ | main.rs:164:10:164:18 | source(...) | source(...) | +| main.rs:166:10:166:30 | 1i64.bitor(...) | main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | $@ | main.rs:166:21:166:29 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:170:18:170:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:170:18:170:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:171:18:171:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:171:18:171:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:172:18:172:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:172:18:172:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:173:18:173:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:173:18:173:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:174:18:174:26 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:174:18:174:26 | source(...) | source(...) | +| main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) | +| main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) | +| main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) | +| main.rs:200:14:200:14 | a | main.rs:196:22:196:30 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:196:22:196:30 | source(...) | source(...) | +| main.rs:200:14:200:14 | a | main.rs:198:14:198:22 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:198:14:198:22 | source(...) | source(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 506c6e5eb3c0..35a6271d2f1b 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -11,7 +11,7 @@ fn sink(s: i64) { fn addition() { let a = source(42); sink(a + 1); // $ hasTaintFlow=42 - + sink(1 + a); // $ hasTaintFlow=42 let mut b = source(58); b += 2; @@ -22,24 +22,24 @@ fn addition() { sink(c); // $ hasTaintFlow=99 } -fn negation() { - let a = source(17); - sink(-a); // $ hasTaintFlow=17 -} - - - - - - - - - +fn more_ops() { + let a = source(1); + sink(-a); // $ hasTaintFlow=1 + sink(!source(2)); // $ hasTaintFlow=2 + sink(source(3) - 3); // $ hasTaintFlow=3 + sink(4i64 - source(4)); // $ hasTaintFlow=4 + sink(source(5) * 5); // $ hasTaintFlow=5 + sink(6i64 * source(6)); // $ hasTaintFlow=6 + sink(source(7) << 7); // $ hasTaintFlow=7 + sink(8i64 << source(8)); // $ hasTaintFlow=8 + sink(source(9) ^ 9); // $ hasTaintFlow=9 + sink(10i64 ^ source(10)); // $ hasTaintFlow=10 +} fn cast() { let a = source(77); @@ -135,12 +135,80 @@ mod tuples { } } +use std::ops::{Add, Sub, Mul, Shl, Shr, BitOr, AddAssign, SubAssign, MulAssign, ShlAssign, ShrAssign, BitXorAssign, Neg, Not}; + +fn std_ops() { + sink(source(1).add(2i64)); // $ hasTaintFlow=1 + sink(source(1).add(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.add(source(2))); // $ hasTaintFlow=2 + sink(1.add(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).sub(2i64)); // $ hasTaintFlow=1 + sink(source(1).sub(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.sub(source(2))); // $ hasTaintFlow=2 + sink(1.sub(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).mul(2i64)); // $ hasTaintFlow=1 + sink(source(1).mul(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.mul(source(2))); // $ hasTaintFlow=2 + sink(1.mul(source(2))); // $ MISSING: hasTaintFlow=2 + + sink(source(1).shl(2i64)); // $ hasTaintFlow=1 + sink(source(1).shl(2)); // $ hasTaintFlow=1 + sink(1i64.shl(source(2))); // $ hasTaintFlow=2 + + sink(source(1).shr(2i64)); // $ hasTaintFlow=1 + sink(source(1).shr(2)); // $ hasTaintFlow=1 + sink(1i64.shr(source(2))); // $ hasTaintFlow=2 + + sink(source(1).bitor(2i64)); // $ hasTaintFlow=1 + sink(source(1).bitor(2)); // $ MISSING: hasTaintFlow=1 + sink(1i64.bitor(source(2))); // $ hasTaintFlow=2 + sink(1.bitor(source(2))); // $ MISSING: hasTaintFlow=2 + + let mut a: i64 = 1; + a.add_assign(source(2)); + a.sub_assign(source(3)); + a.mul_assign(source(4)); + a.shl_assign(source(5)); + a.shr_assign(source(6)); + a.bitxor_assign(source(7)); + sink(a); // $ hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 hasTaintFlow=7 + + sink(source(1).neg()); // $ hasTaintFlow=1 + sink(source(1).not()); // $ hasTaintFlow=1 +} + +mod wrapping { + use std::num::Wrapping; + use std::ops::AddAssign; + + fn source(i: i64) -> Wrapping { + Wrapping(i) + } + + fn sink(s: Wrapping) { + println!("{}", s); + } + + pub fn wrapping() { + let mut a: Wrapping = Wrapping(1); + a.add_assign(source(2)); + a.add_assign(Wrapping(crate::source(3))); + a += source(4); + a += std::num::Wrapping(crate::source(5)); + sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=3 hasTaintFlow=5 + } +} + fn main() { addition(); - negation(); + more_ops(); cast(); string_slice(); array_source::array_tainted(); array_sink::array_with_taint(); tuples::tuples(); + std_ops(); + wrapping::wrapping(); } From fc5d5b4fcc083a8c1836cbcc2fa41c0af6c7bb70 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Tue, 16 Dec 2025 09:44:35 +0000 Subject: [PATCH 03/12] Rust: Compress the existing core::ops::arith models a bit. --- .../rust/frameworks/stdlib/core.model.yml | 47 ++--- .../dataflow/taint/inline-taint-flow.expected | 180 +++++++++--------- 2 files changed, 101 insertions(+), 126 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index e92ae4defa34..83cf1c21c234 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -14,46 +14,33 @@ extensions: - ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"] # Arithmetic operators - - ["<_ as core::ops::arith::Add>::add", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"] # Arithmetic assignment expressions - - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] # Bitwise operators - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] # Bitwise assignment operators - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] @@ -63,11 +50,9 @@ extensions: - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] # Shift operators - - ["<_ as core::ops::bit::Shl>::shl", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shl>::shl", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[self]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[0]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"] # Shift assignment operators - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] @@ -156,4 +141,4 @@ extensions: data: - ["core::ops::range::RangeInclusive::start"] - ["core::ops::range::RangeInclusive::end"] - - ["core::result::Result::Err(0)"] \ No newline at end of file + - ["core::result::Result::Err(0)"] diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index 447f1c5f7bd1..3f538a7500ed 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,71 +1,61 @@ models | 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | -| 7 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | -| 8 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint | -| 9 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | -| 10 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 11 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | -| 12 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self].Reference; Argument[self].Reference; taint | -| 13 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | -| 14 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0]; ReturnValue; taint | -| 16 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self]; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 18 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | -| 19 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self].Reference; Argument[self].Reference; taint | -| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | -| 21 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0]; ReturnValue; taint | -| 22 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self]; ReturnValue; taint | -| 23 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 24 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint | -| 25 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 27 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | -| 28 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | -| 29 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 30 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint | -| 31 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self]; ReturnValue; taint | -| 32 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 33 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | -| 34 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | -| 35 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0]; ReturnValue; taint | -| 36 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self]; ReturnValue; taint | -| 37 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 38 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | -| 39 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 5 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | +| 6 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 7 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | +| 8 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 9 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | +| 13 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 14 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | +| 15 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | +| 16 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 18 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 19 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 20 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 21 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | +| 22 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 23 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 24 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 25 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | +| 27 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 28 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 29 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:3 | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:2 | | main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:1 | | main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 | | main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | | main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | -| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:6 | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:4 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:3 | | main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:5 | | main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | | main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | -| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:13 | -| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:28 | -| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:16 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:14 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:15 | -| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:9 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:7 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:8 | -| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:31 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:29 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:30 | -| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:25 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:23 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:24 | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:9 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:20 | +| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:11 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:10 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:11 | +| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:6 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:5 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:6 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:22 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:21 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:22 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:17 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:16 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:17 | | main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | | main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | | main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | @@ -74,11 +64,11 @@ edges | main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | | main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | | main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | -| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:39 | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:29 | | main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | | main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | | main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | -| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:39 | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:29 | | main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | | main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | | main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | @@ -97,61 +87,61 @@ edges | main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | | main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:3 | +| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:2 | | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:1 | | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 | -| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:16 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:14 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:15 | -| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:9 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:7 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:8 | -| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:31 | -| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:31 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:29 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:30 | -| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:36 | -| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:36 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:34 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:35 | -| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:22 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:21 | +| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:11 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:10 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:11 | +| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:6 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:5 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:6 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:22 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:22 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:21 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:22 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:26 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:26 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:25 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:26 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:15 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:14 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:15 | | main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:3 | | main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 | -| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:5 | | main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:19 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:17 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | +| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:12 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | | main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:10 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:11 | +| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:7 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | | main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:32 | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:33 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:23 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:24 | | main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:37 | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:38 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:27 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:28 | | main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:26 | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:27 | -| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:13 | -| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:28 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:18 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:19 | +| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:9 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:20 | | main.rs:196:9:196:9 | [post] a | main.rs:197:9:197:9 | a | provenance | | | main.rs:196:9:196:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | +| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:3 | | main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:4 | -| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:5 | | main.rs:197:9:197:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | -| main.rs:197:9:197:9 | a | main.rs:197:9:197:9 | [post] a | provenance | MaD:6 | -| main.rs:198:9:198:9 | a | main.rs:199:9:199:9 | a | provenance | MaD:6 | +| main.rs:197:9:197:9 | a | main.rs:197:9:197:9 | [post] a | provenance | MaD:4 | +| main.rs:198:9:198:9 | a | main.rs:199:9:199:9 | a | provenance | MaD:4 | +| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:3 | | main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:4 | -| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:5 | -| main.rs:199:9:199:9 | a | main.rs:200:14:200:14 | a | provenance | MaD:6 | +| main.rs:199:9:199:9 | a | main.rs:200:14:200:14 | a | provenance | MaD:4 | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | From ff6e598f72dd8ea475d75eb442a6e42e456546b7 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Mon, 19 Jan 2026 16:09:20 +0000 Subject: [PATCH 04/12] Rust: Annotate failures with explanation. --- rust/ql/test/library-tests/dataflow/taint/main.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 35a6271d2f1b..3c54d7063055 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -139,7 +139,7 @@ use std::ops::{Add, Sub, Mul, Shl, Shr, BitOr, AddAssign, SubAssign, MulAssign, fn std_ops() { sink(source(1).add(2i64)); // $ hasTaintFlow=1 - sink(source(1).add(2)); // $ MISSING: hasTaintFlow=1 + sink(source(1).add(2)); // $ MISSING: hasTaintFlow=1 --- the missing results here are due to failing to resolve targets for `add` etc where there's no explicit type sink(1i64.add(source(2))); // $ hasTaintFlow=2 sink(1.add(source(2))); // $ MISSING: hasTaintFlow=2 @@ -197,7 +197,7 @@ mod wrapping { a.add_assign(Wrapping(crate::source(3))); a += source(4); a += std::num::Wrapping(crate::source(5)); - sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=3 hasTaintFlow=5 + sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=3 hasTaintFlow=5 --- we don't currently find any `Call`s for `Wrapping` above } } From 1d461ff5ad440b3d4f50a7d52fda9536eb555052 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Jan 2026 12:09:29 +0000 Subject: [PATCH 05/12] Rust: Test unpacking the Wrapping number. --- .../test/library-tests/dataflow/taint/TaintFlowStep.expected | 1 + rust/ql/test/library-tests/dataflow/taint/main.rs | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 3273569a34ad..07c018316693 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -52,3 +52,4 @@ | main.rs:197:9:197:9 | [post] a [implicit borrow] | main.rs:197:9:197:9 | [post] a | | main.rs:198:9:198:9 | [post] a [implicit borrow] | main.rs:198:9:198:9 | [SSA] a | | main.rs:199:9:199:9 | [post] a [implicit borrow] | main.rs:199:9:199:9 | [SSA] a | +| main.rs:201:21:201:21 | a | main.rs:201:21:201:23 | a.0 | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 3c54d7063055..f211edd10fc4 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -192,12 +192,13 @@ mod wrapping { } pub fn wrapping() { - let mut a: Wrapping = Wrapping(1); + let mut a: Wrapping = Wrapping(crate::source(1)); a.add_assign(source(2)); a.add_assign(Wrapping(crate::source(3))); a += source(4); a += std::num::Wrapping(crate::source(5)); - sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=3 hasTaintFlow=5 --- we don't currently find any `Call`s for `Wrapping` above + sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=1 hasTaintFlow=3 hasTaintFlow=5 + crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5 } } From f8d0a0d509b93ea486961e0b7b1cad8c538c8a9b Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Jan 2026 12:55:22 +0000 Subject: [PATCH 06/12] Rust: Expand the Wrapping test some more. --- .../dataflow/taint/TaintFlowStep.expected | 26 ++++++++-- .../dataflow/taint/inline-taint-flow.expected | 51 +++++++++++-------- .../test/library-tests/dataflow/taint/main.rs | 51 +++++++++++++++++-- 3 files changed, 98 insertions(+), 30 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected index 07c018316693..316b532b0656 100644 --- a/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/taint/TaintFlowStep.expected @@ -47,9 +47,25 @@ | main.rs:173:5:173:5 | [post] a [implicit borrow] | main.rs:173:5:173:5 | [post] a | | main.rs:174:5:174:5 | [post] a [implicit borrow] | main.rs:174:5:174:5 | [post] a | | main.rs:175:5:175:5 | [post] a [implicit borrow] | main.rs:175:5:175:5 | [post] a | -| main.rs:191:24:191:24 | s | main.rs:191:18:191:24 | FormatArgsExpr | -| main.rs:196:9:196:9 | [post] a [implicit borrow] | main.rs:196:9:196:9 | [post] a | -| main.rs:197:9:197:9 | [post] a [implicit borrow] | main.rs:197:9:197:9 | [post] a | -| main.rs:198:9:198:9 | [post] a [implicit borrow] | main.rs:198:9:198:9 | [SSA] a | -| main.rs:199:9:199:9 | [post] a [implicit borrow] | main.rs:199:9:199:9 | [SSA] a | +| main.rs:191:9:191:9 | i | main.rs:191:9:191:18 | i as usize | +| main.rs:195:24:195:24 | s | main.rs:195:18:195:24 | FormatArgsExpr | | main.rs:201:21:201:21 | a | main.rs:201:21:201:23 | a.0 | +| main.rs:203:9:203:9 | [post] a [implicit borrow] | main.rs:203:9:203:9 | [post] a | +| main.rs:204:9:204:9 | [post] a [implicit borrow] | main.rs:204:9:204:9 | [post] a | +| main.rs:206:21:206:21 | a | main.rs:206:21:206:23 | a.0 | +| main.rs:209:9:209:9 | [post] a [implicit borrow] | main.rs:209:9:209:9 | [SSA] a | +| main.rs:210:9:210:9 | [post] a [implicit borrow] | main.rs:210:9:210:9 | [SSA] a | +| main.rs:212:21:212:21 | a | main.rs:212:21:212:23 | a.0 | +| main.rs:215:9:215:9 | [post] a [implicit borrow] | main.rs:215:9:215:9 | [SSA] a | +| main.rs:216:9:216:9 | [post] a [implicit borrow] | main.rs:216:9:216:9 | [SSA] a | +| main.rs:218:21:218:21 | a | main.rs:218:21:218:23 | a.0 | +| main.rs:221:9:221:9 | [post] a [implicit borrow] | main.rs:221:9:221:9 | [SSA] a | +| main.rs:223:21:223:21 | a | main.rs:223:21:223:23 | a.0 | +| main.rs:228:21:228:22 | v1 | main.rs:228:21:228:24 | v1.0 | +| main.rs:230:21:230:22 | v2 | main.rs:230:21:230:24 | v2.0 | +| main.rs:232:21:232:22 | v3 | main.rs:232:21:232:24 | v3.0 | +| main.rs:234:21:234:22 | v4 | main.rs:234:21:234:24 | v4.0 | +| main.rs:236:21:236:22 | v5 | main.rs:236:21:236:24 | v5.0 | +| main.rs:238:21:238:22 | v6 | main.rs:238:21:238:24 | v6.0 | +| main.rs:240:21:240:22 | v7 | main.rs:240:21:240:24 | v7.0 | +| main.rs:242:21:242:22 | v8 | main.rs:242:21:242:24 | v8.0 | diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index 3f538a7500ed..fc5d67fa7325 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -132,16 +132,20 @@ edges | main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:19 | | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:9 | | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:20 | -| main.rs:196:9:196:9 | [post] a | main.rs:197:9:197:9 | a | provenance | | -| main.rs:196:9:196:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | -| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:3 | -| main.rs:196:22:196:30 | source(...) | main.rs:196:9:196:9 | [post] a | provenance | MaD:4 | -| main.rs:197:9:197:9 | [post] a | main.rs:198:9:198:9 | a | provenance | | -| main.rs:197:9:197:9 | a | main.rs:197:9:197:9 | [post] a | provenance | MaD:4 | -| main.rs:198:9:198:9 | a | main.rs:199:9:199:9 | a | provenance | MaD:4 | -| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:3 | -| main.rs:198:14:198:22 | source(...) | main.rs:199:9:199:9 | a | provenance | MaD:4 | -| main.rs:199:9:199:9 | a | main.rs:200:14:200:14 | a | provenance | MaD:4 | +| main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | | +| main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:3 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 | +| main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:4 | +| main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | | +| main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:4 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:3 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 | +| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:4 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:23 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:24 | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | @@ -266,14 +270,19 @@ nodes | main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() | | main.rs:179:10:179:18 | source(...) | semmle.label | source(...) | | main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() | -| main.rs:196:9:196:9 | [post] a | semmle.label | [post] a | -| main.rs:196:22:196:30 | source(...) | semmle.label | source(...) | -| main.rs:197:9:197:9 | [post] a | semmle.label | [post] a | -| main.rs:197:9:197:9 | a | semmle.label | a | -| main.rs:198:9:198:9 | a | semmle.label | a | -| main.rs:198:14:198:22 | source(...) | semmle.label | source(...) | -| main.rs:199:9:199:9 | a | semmle.label | a | -| main.rs:200:14:200:14 | a | semmle.label | a | +| main.rs:203:9:203:9 | [post] a | semmle.label | [post] a | +| main.rs:203:22:203:30 | source(...) | semmle.label | source(...) | +| main.rs:204:9:204:9 | [post] a | semmle.label | [post] a | +| main.rs:204:9:204:9 | a | semmle.label | a | +| main.rs:205:14:205:14 | a | semmle.label | a | +| main.rs:208:9:208:9 | a | semmle.label | a | +| main.rs:208:13:208:21 | source(...) | semmle.label | source(...) | +| main.rs:209:9:209:9 | a | semmle.label | a | +| main.rs:209:14:209:22 | source(...) | semmle.label | source(...) | +| main.rs:210:9:210:9 | a | semmle.label | a | +| main.rs:211:14:211:14 | a | semmle.label | a | +| main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) | +| main.rs:222:14:222:14 | a | semmle.label | a | subpaths testFailures #select @@ -325,5 +334,7 @@ testFailures | main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) | | main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) | | main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) | -| main.rs:200:14:200:14 | a | main.rs:196:22:196:30 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:196:22:196:30 | source(...) | source(...) | -| main.rs:200:14:200:14 | a | main.rs:198:14:198:22 | source(...) | main.rs:200:14:200:14 | a | $@ | main.rs:198:14:198:22 | source(...) | source(...) | +| main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) | +| main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) | +| main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) | +| main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index f211edd10fc4..3df882befb58 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -181,24 +181,65 @@ fn std_ops() { mod wrapping { use std::num::Wrapping; - use std::ops::AddAssign; + use std::ops::{Add, AddAssign, Neg, Not}; fn source(i: i64) -> Wrapping { Wrapping(i) } + fn source_usize(i: i64) -> usize { + i as usize + } + fn sink(s: Wrapping) { println!("{}", s); } pub fn wrapping() { let mut a: Wrapping = Wrapping(crate::source(1)); + sink(a); // $ MISSING: hasTaintFlow=1 + crate::sink(a.0); // $ MISSING: hasTaintFlow=1 + a.add_assign(source(2)); a.add_assign(Wrapping(crate::source(3))); - a += source(4); - a += std::num::Wrapping(crate::source(5)); - sink(a); // $ hasTaintFlow=2 hasTaintFlow=4 MISSING: hasTaintFlow=1 hasTaintFlow=3 hasTaintFlow=5 - crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3 hasTaintFlow=4 hasTaintFlow=5 + sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3 + crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3 + + a = source(4); + a += source(5); + a += std::num::Wrapping(crate::source(6)); + sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 + crate::sink(a.0); // $ MISSING: hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 + + a = source(7); + a &= source(8); + a &= Wrapping(crate::source(9)); + sink(a); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 + crate::sink(a.0); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 + + a = source(10); + a <<= source_usize(11); + sink(a); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 + crate::sink(a.0); // $ MISSING: hasTaintFlow=10 hasTaintFlow=11 + + let b: Wrapping = Wrapping(crate::source(1)); + let c: Wrapping = Wrapping(crate::source(2)); + let v1 = b + c; + crate::sink(v1.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + let v2 = b.add(c); + crate::sink(v2.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + let v3 = -b; + crate::sink(v3.0); // $ MISSING: hasTaintFlow=1 + let v4 = b.neg(); + crate::sink(v4.0); // $ MISSING: hasTaintFlow=1 + let v5 = !b; + crate::sink(v5.0); // $ MISSING: hasTaintFlow=1 + let v6 = b.not(); + crate::sink(v6.0); // $ MISSING: hasTaintFlow=1 + let v7 = b & c; + crate::sink(v7.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + let v8 = b << source_usize(3); + crate::sink(v8.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=3 } } From e8ef58d381063db39e24d699d267a80bbbfc84e6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Jan 2026 13:04:47 +0000 Subject: [PATCH 07/12] Rust: Fix an issue with identifying sources and sinks in the test. --- rust/ql/lib/utils/test/InlineFlowTest.qll | 2 +- .../dataflow/taint/inline-taint-flow.expected | 35 +++++++++++++++++++ .../test/library-tests/dataflow/taint/main.rs | 10 +++--- 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/rust/ql/lib/utils/test/InlineFlowTest.qll b/rust/ql/lib/utils/test/InlineFlowTest.qll index aad06087d283..704172b95bd9 100644 --- a/rust/ql/lib/utils/test/InlineFlowTest.qll +++ b/rust/ql/lib/utils/test/InlineFlowTest.qll @@ -19,7 +19,7 @@ private import internal.InlineExpectationsTestImpl as InlineExpectationsTestImpl */ bindingset[name] private predicate callTargetName(CallExpr call, string name) { - call.getFunction().(PathExpr).toString().matches(name + "%") + call.getFunction().(PathExpr).getPath().getText().matches(name + "%") } private module FlowTestImpl implements InputSig { diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index fc5d67fa7325..c4f606f007dc 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -132,20 +132,35 @@ edges | main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:19 | | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:9 | | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:20 | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | main.rs:199:13:199:17 | mut a [Wrapping] | provenance | | +| main.rs:199:45:199:60 | ...::source(...) | main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:201:21:201:21 | a [Wrapping] | main.rs:201:21:201:23 | a.0 | provenance | | | main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | | | main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:203:9:203:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:3 | | main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 | | main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | +| main.rs:204:9:204:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:4 | +| main.rs:206:21:206:21 | a [Wrapping] | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | | | main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | | | main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:4 | | main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:3 | | main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 | | main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:4 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:4 | | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:23 | | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:24 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:23 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:24 | +| main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | | +| main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:21 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:22 | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | @@ -270,19 +285,32 @@ nodes | main.rs:178:10:178:24 | ... .neg() | semmle.label | ... .neg() | | main.rs:179:10:179:18 | source(...) | semmle.label | source(...) | | main.rs:179:10:179:24 | ... .not() | semmle.label | ... .not() | +| main.rs:199:13:199:17 | mut a [Wrapping] | semmle.label | mut a [Wrapping] | +| main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:199:45:199:60 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:201:21:201:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:201:21:201:23 | a.0 | semmle.label | a.0 | | main.rs:203:9:203:9 | [post] a | semmle.label | [post] a | | main.rs:203:22:203:30 | source(...) | semmle.label | source(...) | | main.rs:204:9:204:9 | [post] a | semmle.label | [post] a | | main.rs:204:9:204:9 | a | semmle.label | a | | main.rs:205:14:205:14 | a | semmle.label | a | +| main.rs:206:21:206:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:206:21:206:23 | a.0 | semmle.label | a.0 | | main.rs:208:9:208:9 | a | semmle.label | a | | main.rs:208:13:208:21 | source(...) | semmle.label | source(...) | | main.rs:209:9:209:9 | a | semmle.label | a | | main.rs:209:14:209:22 | source(...) | semmle.label | source(...) | | main.rs:210:9:210:9 | a | semmle.label | a | | main.rs:211:14:211:14 | a | semmle.label | a | +| main.rs:212:21:212:23 | a.0 | semmle.label | a.0 | | main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) | | main.rs:222:14:222:14 | a | semmle.label | a | +| main.rs:223:21:223:23 | a.0 | semmle.label | a.0 | +| main.rs:241:13:241:14 | v8 | semmle.label | v8 | +| main.rs:241:18:241:37 | ... << ... | semmle.label | ... << ... | +| main.rs:241:23:241:37 | source_usize(...) | semmle.label | source_usize(...) | +| main.rs:242:21:242:24 | v8.0 | semmle.label | v8.0 | subpaths testFailures #select @@ -334,7 +362,14 @@ testFailures | main.rs:176:10:176:10 | a | main.rs:175:21:175:29 | source(...) | main.rs:176:10:176:10 | a | $@ | main.rs:175:21:175:29 | source(...) | source(...) | | main.rs:178:10:178:24 | ... .neg() | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | $@ | main.rs:178:10:178:18 | source(...) | source(...) | | main.rs:179:10:179:24 | ... .not() | main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | $@ | main.rs:179:10:179:18 | source(...) | source(...) | +| main.rs:201:21:201:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:201:21:201:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) | | main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:203:22:203:30 | source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:203:22:203:30 | source(...) | source(...) | | main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) | | main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) | | main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:242:21:242:24 | v8.0 | main.rs:241:23:241:37 | source_usize(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:241:23:241:37 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 3df882befb58..87634c800724 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -198,18 +198,18 @@ mod wrapping { pub fn wrapping() { let mut a: Wrapping = Wrapping(crate::source(1)); sink(a); // $ MISSING: hasTaintFlow=1 - crate::sink(a.0); // $ MISSING: hasTaintFlow=1 + crate::sink(a.0); // $ hasValueFlow=1 a.add_assign(source(2)); a.add_assign(Wrapping(crate::source(3))); sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3 - crate::sink(a.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 hasTaintFlow=3 + crate::sink(a.0); // $ hasValueFlow=1 hasTaintFlow=2 MISSING: hasTaintFlow=3 a = source(4); a += source(5); a += std::num::Wrapping(crate::source(6)); sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 - crate::sink(a.0); // $ MISSING: hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 + crate::sink(a.0); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 a = source(7); a &= source(8); @@ -220,7 +220,7 @@ mod wrapping { a = source(10); a <<= source_usize(11); sink(a); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 - crate::sink(a.0); // $ MISSING: hasTaintFlow=10 hasTaintFlow=11 + crate::sink(a.0); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 let b: Wrapping = Wrapping(crate::source(1)); let c: Wrapping = Wrapping(crate::source(2)); @@ -239,7 +239,7 @@ mod wrapping { let v7 = b & c; crate::sink(v7.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 let v8 = b << source_usize(3); - crate::sink(v8.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=3 + crate::sink(v8.0); // $ hasTaintFlow=3 MISSING: hasTaintFlow=1 } } From 9d645508ea1aabb9c5bc0f3aae6b89133a1ec853 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Jan 2026 18:09:37 +0000 Subject: [PATCH 08/12] Rust: Add model variants for core::ops:arith on Wrapping. --- .../rust/frameworks/stdlib/core.model.yml | 21 ++ .../dataflow/taint/inline-taint-flow.expected | 295 ++++++++++++------ .../test/library-tests/dataflow/taint/main.rs | 12 +- 3 files changed, 223 insertions(+), 105 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index 83cf1c21c234..cc5813c685ac 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -12,29 +12,50 @@ extensions: - ["<_ as core::ops::index::IndexMut>::index_mut", "Argument[self].Reference.Element", "ReturnValue.Reference", "value", "manual"] # Unary operators - ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Neg>::neg", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"] # Arithmetic operators - ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Div>::div", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic assignment expressions - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise operators - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index c4f606f007dc..8510f066cfe0 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,61 +1,66 @@ models -| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | -| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 5 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | -| 6 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | -| 7 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | -| 8 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 9 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | -| 10 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | -| 11 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | -| 12 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | -| 13 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 14 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | -| 16 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | -| 18 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 19 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | -| 20 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | -| 21 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 22 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | -| 23 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 24 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | -| 25 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | -| 27 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 28 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | -| 29 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | +| 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 4 | Summary: <_ as core::ops::arith::Add>::add; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 7 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 8 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 9 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | +| 12 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 13 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 14 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 15 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | +| 16 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | +| 17 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | +| 18 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self,0].Reference; Argument[self].Reference; taint | +| 19 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | +| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | +| 21 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | +| 22 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 23 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 24 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 25 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | +| 27 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 28 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 29 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 30 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | +| 31 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | +| 32 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 33 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 34 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:2 | -| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:1 | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:3 | | main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 | +| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:3 | | main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | | main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | -| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:4 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:3 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:7 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:6 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:7 | | main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | | main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | -| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:9 | -| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:20 | -| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:11 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:10 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:11 | -| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:6 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:5 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:6 | -| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:22 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:21 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:22 | -| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:17 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:16 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:17 | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:14 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:25 | +| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:16 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:15 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:16 | +| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:10 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:9 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:10 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:27 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:26 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:27 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:22 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:21 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:22 | | main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | | main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | | main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | @@ -64,11 +69,11 @@ edges | main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | | main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | | main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | -| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:29 | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:34 | | main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | | main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | | main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | -| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:29 | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:34 | | main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | | main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | | main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | @@ -87,52 +92,54 @@ edges | main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | | main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:2 | -| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:1 | +| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:3 | | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 | -| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:11 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:10 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:11 | -| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:6 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:5 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:6 | -| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:22 | -| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:22 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:21 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:22 | -| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:26 | -| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:26 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:25 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:26 | -| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:15 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:14 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:15 | +| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:3 | +| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:16 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:15 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:16 | +| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:10 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:9 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:10 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:27 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:27 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:26 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:27 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:31 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:31 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:30 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:31 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:20 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:19 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | | main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:3 | -| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:6 | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:7 | | main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:12 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | +| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:17 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | | main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:7 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | +| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:11 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | | main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:23 | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:24 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:28 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:29 | | main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:27 | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:28 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:32 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:33 | | main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:18 | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:19 | -| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:9 | -| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:20 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:23 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:24 | +| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:14 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:25 | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:203:9:203:9 | a [Wrapping] | provenance | | +| main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | | main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | main.rs:199:13:199:17 | mut a [Wrapping] | provenance | | | main.rs:199:45:199:60 | ...::source(...) | main.rs:199:36:199:61 | Wrapping(...) [Wrapping] | provenance | | @@ -140,27 +147,71 @@ edges | main.rs:203:9:203:9 | [post] a | main.rs:204:9:204:9 | a | provenance | | | main.rs:203:9:203:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | | main.rs:203:9:203:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | -| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:3 | -| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 | +| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | +| main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:203:9:203:9 | a [Wrapping] | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:8 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:6 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:7 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:5 | | main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | | main.rs:204:9:204:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | -| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:4 | +| main.rs:204:9:204:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:7 | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:8 | +| main.rs:204:9:204:9 | a [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:8 | +| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:31:204:46 | ...::source(...) | main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | provenance | | | main.rs:206:21:206:21 | a [Wrapping] | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | | | main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | | -| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:4 | -| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:3 | -| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 | -| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:4 | -| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:4 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:23 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:24 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:23 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:24 | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:7 | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:8 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:6 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:7 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:7 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:8 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:7 | +| main.rs:210:9:210:9 | a [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:8 | +| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:33:210:48 | ...::source(...) | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | provenance | | +| main.rs:212:21:212:21 | a [Wrapping] | main.rs:212:21:212:23 | a.0 | provenance | | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:28 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:29 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:28 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:29 | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:227:18:227:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:229:18:229:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:231:19:231:19 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:233:18:233:18 | b [Wrapping] | provenance | | +| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | main.rs:225:13:225:13 | b [Wrapping] | provenance | | +| main.rs:225:41:225:56 | ...::source(...) | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:227:22:227:22 | c [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:229:24:229:24 | c [Wrapping] | provenance | | +| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | main.rs:226:13:226:13 | c [Wrapping] | provenance | | +| main.rs:226:41:226:56 | ...::source(...) | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:227:13:227:14 | v1 [Wrapping] | main.rs:228:21:228:22 | v1 [Wrapping] | provenance | | +| main.rs:227:18:227:18 | b [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:4 | +| main.rs:227:18:227:22 | ... + ... [Wrapping] | main.rs:227:13:227:14 | v1 [Wrapping] | provenance | | +| main.rs:227:22:227:22 | c [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 | +| main.rs:228:21:228:22 | v1 [Wrapping] | main.rs:228:21:228:24 | v1.0 | provenance | | +| main.rs:229:13:229:14 | v2 [Wrapping] | main.rs:230:21:230:22 | v2 [Wrapping] | provenance | | +| main.rs:229:18:229:18 | b [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:4 | +| main.rs:229:18:229:25 | b.add(...) [Wrapping] | main.rs:229:13:229:14 | v2 [Wrapping] | provenance | | +| main.rs:229:24:229:24 | c [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 | +| main.rs:230:21:230:22 | v2 [Wrapping] | main.rs:230:21:230:24 | v2.0 | provenance | | +| main.rs:231:13:231:14 | v3 [Wrapping] | main.rs:232:21:232:22 | v3 [Wrapping] | provenance | | +| main.rs:231:18:231:19 | - ... [Wrapping] | main.rs:231:13:231:14 | v3 [Wrapping] | provenance | | +| main.rs:231:19:231:19 | b [Wrapping] | main.rs:231:18:231:19 | - ... [Wrapping] | provenance | MaD:13 | +| main.rs:232:21:232:22 | v3 [Wrapping] | main.rs:232:21:232:24 | v3.0 | provenance | | +| main.rs:233:13:233:14 | v4 [Wrapping] | main.rs:234:21:234:22 | v4 [Wrapping] | provenance | | +| main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:13 | +| main.rs:233:18:233:24 | b.neg() [Wrapping] | main.rs:233:13:233:14 | v4 [Wrapping] | provenance | | +| main.rs:234:21:234:22 | v4 [Wrapping] | main.rs:234:21:234:24 | v4.0 | provenance | | | main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | | | main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:21 | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:22 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:26 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:27 | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | @@ -291,9 +342,15 @@ nodes | main.rs:201:21:201:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:201:21:201:23 | a.0 | semmle.label | a.0 | | main.rs:203:9:203:9 | [post] a | semmle.label | [post] a | +| main.rs:203:9:203:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] | +| main.rs:203:9:203:9 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:203:22:203:30 | source(...) | semmle.label | source(...) | | main.rs:204:9:204:9 | [post] a | semmle.label | [post] a | +| main.rs:204:9:204:9 | [post] a [Wrapping] | semmle.label | [post] a [Wrapping] | | main.rs:204:9:204:9 | a | semmle.label | a | +| main.rs:204:9:204:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:204:31:204:46 | ...::source(...) | semmle.label | ...::source(...) | | main.rs:205:14:205:14 | a | semmle.label | a | | main.rs:206:21:206:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:206:21:206:23 | a.0 | semmle.label | a.0 | @@ -302,11 +359,43 @@ nodes | main.rs:209:9:209:9 | a | semmle.label | a | | main.rs:209:14:209:22 | source(...) | semmle.label | source(...) | | main.rs:210:9:210:9 | a | semmle.label | a | +| main.rs:210:9:210:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | semmle.label | ...::Wrapping(...) [Wrapping] | +| main.rs:210:33:210:48 | ...::source(...) | semmle.label | ...::source(...) | | main.rs:211:14:211:14 | a | semmle.label | a | +| main.rs:212:21:212:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:212:21:212:23 | a.0 | semmle.label | a.0 | | main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) | | main.rs:222:14:222:14 | a | semmle.label | a | | main.rs:223:21:223:23 | a.0 | semmle.label | a.0 | +| main.rs:225:13:225:13 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:225:41:225:56 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:226:13:226:13 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:226:41:226:56 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:227:13:227:14 | v1 [Wrapping] | semmle.label | v1 [Wrapping] | +| main.rs:227:18:227:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:227:18:227:22 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | +| main.rs:227:22:227:22 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:228:21:228:22 | v1 [Wrapping] | semmle.label | v1 [Wrapping] | +| main.rs:228:21:228:24 | v1.0 | semmle.label | v1.0 | +| main.rs:229:13:229:14 | v2 [Wrapping] | semmle.label | v2 [Wrapping] | +| main.rs:229:18:229:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:229:18:229:25 | b.add(...) [Wrapping] | semmle.label | b.add(...) [Wrapping] | +| main.rs:229:24:229:24 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:230:21:230:22 | v2 [Wrapping] | semmle.label | v2 [Wrapping] | +| main.rs:230:21:230:24 | v2.0 | semmle.label | v2.0 | +| main.rs:231:13:231:14 | v3 [Wrapping] | semmle.label | v3 [Wrapping] | +| main.rs:231:18:231:19 | - ... [Wrapping] | semmle.label | - ... [Wrapping] | +| main.rs:231:19:231:19 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:232:21:232:22 | v3 [Wrapping] | semmle.label | v3 [Wrapping] | +| main.rs:232:21:232:24 | v3.0 | semmle.label | v3.0 | +| main.rs:233:13:233:14 | v4 [Wrapping] | semmle.label | v4 [Wrapping] | +| main.rs:233:18:233:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:233:18:233:24 | b.neg() [Wrapping] | semmle.label | b.neg() [Wrapping] | +| main.rs:234:21:234:22 | v4 [Wrapping] | semmle.label | v4 [Wrapping] | +| main.rs:234:21:234:24 | v4.0 | semmle.label | v4.0 | | main.rs:241:13:241:14 | v8 | semmle.label | v8 | | main.rs:241:18:241:37 | ... << ... | semmle.label | ... << ... | | main.rs:241:23:241:37 | source_usize(...) | semmle.label | source_usize(...) | @@ -366,10 +455,18 @@ testFailures | main.rs:205:14:205:14 | a | main.rs:203:22:203:30 | source(...) | main.rs:205:14:205:14 | a | $@ | main.rs:203:22:203:30 | source(...) | source(...) | | main.rs:206:21:206:23 | a.0 | main.rs:199:45:199:60 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:199:45:199:60 | ...::source(...) | ...::source(...) | | main.rs:206:21:206:23 | a.0 | main.rs:203:22:203:30 | source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:203:22:203:30 | source(...) | source(...) | +| main.rs:206:21:206:23 | a.0 | main.rs:204:31:204:46 | ...::source(...) | main.rs:206:21:206:23 | a.0 | $@ | main.rs:204:31:204:46 | ...::source(...) | ...::source(...) | | main.rs:211:14:211:14 | a | main.rs:208:13:208:21 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:208:13:208:21 | source(...) | source(...) | | main.rs:211:14:211:14 | a | main.rs:209:14:209:22 | source(...) | main.rs:211:14:211:14 | a | $@ | main.rs:209:14:209:22 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) | +| main.rs:212:21:212:23 | a.0 | main.rs:210:33:210:48 | ...::source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:210:33:210:48 | ...::source(...) | ...::source(...) | | main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | | main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:228:21:228:24 | v1.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:228:21:228:24 | v1.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:230:21:230:24 | v2.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:230:21:230:24 | v2.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:232:21:232:24 | v3.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:232:21:232:24 | v3.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:234:21:234:24 | v4.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:234:21:234:24 | v4.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | | main.rs:242:21:242:24 | v8.0 | main.rs:241:23:241:37 | source_usize(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:241:23:241:37 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index 87634c800724..dc2afd0d02c4 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -203,13 +203,13 @@ mod wrapping { a.add_assign(source(2)); a.add_assign(Wrapping(crate::source(3))); sink(a); // $ hasTaintFlow=2 MISSING: hasTaintFlow=1 hasTaintFlow=3 - crate::sink(a.0); // $ hasValueFlow=1 hasTaintFlow=2 MISSING: hasTaintFlow=3 + crate::sink(a.0); // $ hasValueFlow=1 hasTaintFlow=2 hasTaintFlow=3 a = source(4); a += source(5); a += std::num::Wrapping(crate::source(6)); sink(a); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 - crate::sink(a.0); // $ hasTaintFlow=4 hasTaintFlow=5 MISSING: hasTaintFlow=6 + crate::sink(a.0); // $ hasTaintFlow=4 hasTaintFlow=5 hasTaintFlow=6 a = source(7); a &= source(8); @@ -225,13 +225,13 @@ mod wrapping { let b: Wrapping = Wrapping(crate::source(1)); let c: Wrapping = Wrapping(crate::source(2)); let v1 = b + c; - crate::sink(v1.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + crate::sink(v1.0); // $ hasTaintFlow=1 hasTaintFlow=2 let v2 = b.add(c); - crate::sink(v2.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + crate::sink(v2.0); // $ hasTaintFlow=1 hasTaintFlow=2 let v3 = -b; - crate::sink(v3.0); // $ MISSING: hasTaintFlow=1 + crate::sink(v3.0); // $ hasTaintFlow=1 let v4 = b.neg(); - crate::sink(v4.0); // $ MISSING: hasTaintFlow=1 + crate::sink(v4.0); // $ hasTaintFlow=1 let v5 = !b; crate::sink(v5.0); // $ MISSING: hasTaintFlow=1 let v6 = b.not(); From fa9677d6157bab842f4263ea9f1400249ac0b83c Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 22 Jan 2026 09:25:16 +0000 Subject: [PATCH 09/12] Rust: Add model variants for core::ops::bit on Wrapping. --- .../rust/frameworks/stdlib/core.model.yml | 16 ++ .../dataflow/taint/inline-taint-flow.expected | 189 +++++++++++++----- .../test/library-tests/dataflow/taint/main.rs | 12 +- 3 files changed, 162 insertions(+), 55 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index cc5813c685ac..52ab56886841 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -14,6 +14,7 @@ extensions: - ["<_ as core::ops::arith::Neg>::neg", "Argument[self]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Neg>::neg", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::Not>::not", "Argument[self]", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Not>::not", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic operators - ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] @@ -59,27 +60,42 @@ extensions: # Bitwise operators - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise assignment operators - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift operators - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0]", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"] + - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift assignment operators - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Clone - ["<_ as core::clone::Clone>::clone", "Argument[self].Reference", "ReturnValue", "value", "manual"] # Conversions diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index 8510f066cfe0..d15c5d9be435 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -17,22 +17,31 @@ models | 16 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | | 17 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | | 18 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 19 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | -| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | -| 21 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 22 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | -| 23 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 24 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | -| 25 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 27 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | -| 28 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 29 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | -| 30 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | -| 31 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | -| 32 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 33 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | -| 34 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 19 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 20 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 21 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0]; Argument[self].Reference; taint | +| 22 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 23 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 24 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | +| 25 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | +| 27 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 28 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 29 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 30 | Summary: <_ as core::ops::bit::Not>::not; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 31 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 32 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | +| 33 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 34 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 35 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 36 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 37 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 38 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 39 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | +| 40 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | +| 41 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | +| 42 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 43 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | @@ -48,19 +57,19 @@ edges | main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | | main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:14 | -| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:25 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:31 | | main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:16 | | main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:15 | | main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:16 | | main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:10 | | main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:9 | | main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:10 | -| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:27 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:26 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:27 | -| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:22 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:21 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:22 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:34 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:32 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:34 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:27 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:26 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:27 | | main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | | main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | | main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | @@ -69,11 +78,11 @@ edges | main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | | main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | | main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | -| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:34 | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:43 | | main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | | main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | | main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | -| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:34 | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:43 | | main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | | main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | | main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | @@ -101,17 +110,17 @@ edges | main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:10 | | main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:9 | | main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:10 | -| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:27 | -| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:27 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:26 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:27 | -| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:31 | -| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:31 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:30 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:31 | -| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:20 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:19 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:34 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:34 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:32 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:34 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:40 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:40 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:39 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:40 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:25 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:24 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:25 | | main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | @@ -127,16 +136,16 @@ edges | main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:11 | | main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | | main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:28 | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:29 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:36 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:37 | | main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:32 | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:33 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:41 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:42 | | main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:23 | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:24 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:28 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:29 | | main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:14 | -| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:25 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:31 | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:203:9:203:9 | a [Wrapping] | provenance | | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | @@ -176,18 +185,39 @@ edges | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | | main.rs:210:33:210:48 | ...::source(...) | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | provenance | | | main.rs:212:21:212:21 | a [Wrapping] | main.rs:212:21:212:23 | a.0 | provenance | | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:28 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:29 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:28 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:29 | +| main.rs:214:9:214:9 | a | main.rs:215:9:215:9 | a | provenance | | +| main.rs:214:13:214:21 | source(...) | main.rs:214:9:214:9 | a | provenance | | +| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:23 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:20 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:21 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:22 | +| main.rs:216:9:216:9 | a | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:23 | +| main.rs:216:9:216:9 | a [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:23 | +| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:22 | +| main.rs:216:23:216:38 | ...::source(...) | main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | provenance | | +| main.rs:218:21:218:21 | a [Wrapping] | main.rs:218:21:218:23 | a.0 | provenance | | +| main.rs:220:9:220:9 | a | main.rs:221:9:221:9 | a | provenance | | +| main.rs:220:13:220:22 | source(...) | main.rs:220:9:220:9 | a | provenance | | +| main.rs:221:9:221:9 | a | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:38 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:36 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:37 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:35 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:36 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:37 | +| main.rs:223:21:223:21 | a [Wrapping] | main.rs:223:21:223:23 | a.0 | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:227:18:227:18 | b [Wrapping] | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:229:18:229:18 | b [Wrapping] | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:231:19:231:19 | b [Wrapping] | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:233:18:233:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:235:19:235:19 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:237:18:237:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:239:18:239:18 | b [Wrapping] | provenance | | +| main.rs:225:13:225:13 | b [Wrapping] | main.rs:241:18:241:18 | b [Wrapping] | provenance | | | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | main.rs:225:13:225:13 | b [Wrapping] | provenance | | | main.rs:225:41:225:56 | ...::source(...) | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | provenance | | | main.rs:226:13:226:13 | c [Wrapping] | main.rs:227:22:227:22 | c [Wrapping] | provenance | | | main.rs:226:13:226:13 | c [Wrapping] | main.rs:229:24:229:24 | c [Wrapping] | provenance | | +| main.rs:226:13:226:13 | c [Wrapping] | main.rs:239:22:239:22 | c [Wrapping] | provenance | | | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | main.rs:226:13:226:13 | c [Wrapping] | provenance | | | main.rs:226:41:226:56 | ...::source(...) | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | provenance | | | main.rs:227:13:227:14 | v1 [Wrapping] | main.rs:228:21:228:22 | v1 [Wrapping] | provenance | | @@ -208,10 +238,28 @@ edges | main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:13 | | main.rs:233:18:233:24 | b.neg() [Wrapping] | main.rs:233:13:233:14 | v4 [Wrapping] | provenance | | | main.rs:234:21:234:22 | v4 [Wrapping] | main.rs:234:21:234:24 | v4.0 | provenance | | +| main.rs:235:13:235:14 | v5 [Wrapping] | main.rs:236:21:236:22 | v5 [Wrapping] | provenance | | +| main.rs:235:18:235:19 | ! ... [Wrapping] | main.rs:235:13:235:14 | v5 [Wrapping] | provenance | | +| main.rs:235:19:235:19 | b [Wrapping] | main.rs:235:18:235:19 | ! ... [Wrapping] | provenance | MaD:30 | +| main.rs:236:21:236:22 | v5 [Wrapping] | main.rs:236:21:236:24 | v5.0 | provenance | | +| main.rs:237:13:237:14 | v6 [Wrapping] | main.rs:238:21:238:22 | v6 [Wrapping] | provenance | | +| main.rs:237:18:237:18 | b [Wrapping] | main.rs:237:18:237:24 | b.not() [Wrapping] | provenance | MaD:30 | +| main.rs:237:18:237:24 | b.not() [Wrapping] | main.rs:237:13:237:14 | v6 [Wrapping] | provenance | | +| main.rs:238:21:238:22 | v6 [Wrapping] | main.rs:238:21:238:24 | v6.0 | provenance | | +| main.rs:239:13:239:14 | v7 [Wrapping] | main.rs:240:21:240:22 | v7 [Wrapping] | provenance | | +| main.rs:239:18:239:18 | b [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:19 | +| main.rs:239:18:239:22 | ... & ... [Wrapping] | main.rs:239:13:239:14 | v7 [Wrapping] | provenance | | +| main.rs:239:22:239:22 | c [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:19 | +| main.rs:240:21:240:22 | v7 [Wrapping] | main.rs:240:21:240:24 | v7.0 | provenance | | | main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | | +| main.rs:241:13:241:14 | v8 [Wrapping] | main.rs:242:21:242:22 | v8 [Wrapping] | provenance | | +| main.rs:241:18:241:18 | b [Wrapping] | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:33 | | main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:26 | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:27 | +| main.rs:241:18:241:37 | ... << ... [Wrapping] | main.rs:241:13:241:14 | v8 [Wrapping] | provenance | | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:32 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:34 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:33 | +| main.rs:242:21:242:22 | v8 [Wrapping] | main.rs:242:21:242:24 | v8.0 | provenance | | nodes | main.rs:12:9:12:9 | a | semmle.label | a | | main.rs:12:13:12:22 | source(...) | semmle.label | source(...) | @@ -365,8 +413,22 @@ nodes | main.rs:211:14:211:14 | a | semmle.label | a | | main.rs:212:21:212:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:212:21:212:23 | a.0 | semmle.label | a.0 | +| main.rs:214:9:214:9 | a | semmle.label | a | +| main.rs:214:13:214:21 | source(...) | semmle.label | source(...) | +| main.rs:215:9:215:9 | a | semmle.label | a | +| main.rs:215:14:215:22 | source(...) | semmle.label | source(...) | +| main.rs:216:9:216:9 | a | semmle.label | a | +| main.rs:216:9:216:9 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | +| main.rs:216:23:216:38 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:218:21:218:21 | a [Wrapping] | semmle.label | a [Wrapping] | +| main.rs:218:21:218:23 | a.0 | semmle.label | a.0 | +| main.rs:220:9:220:9 | a | semmle.label | a | +| main.rs:220:13:220:22 | source(...) | semmle.label | source(...) | +| main.rs:221:9:221:9 | a | semmle.label | a | | main.rs:221:15:221:30 | source_usize(...) | semmle.label | source_usize(...) | | main.rs:222:14:222:14 | a | semmle.label | a | +| main.rs:223:21:223:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:223:21:223:23 | a.0 | semmle.label | a.0 | | main.rs:225:13:225:13 | b [Wrapping] | semmle.label | b [Wrapping] | | main.rs:225:32:225:57 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | @@ -396,9 +458,29 @@ nodes | main.rs:233:18:233:24 | b.neg() [Wrapping] | semmle.label | b.neg() [Wrapping] | | main.rs:234:21:234:22 | v4 [Wrapping] | semmle.label | v4 [Wrapping] | | main.rs:234:21:234:24 | v4.0 | semmle.label | v4.0 | +| main.rs:235:13:235:14 | v5 [Wrapping] | semmle.label | v5 [Wrapping] | +| main.rs:235:18:235:19 | ! ... [Wrapping] | semmle.label | ! ... [Wrapping] | +| main.rs:235:19:235:19 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:236:21:236:22 | v5 [Wrapping] | semmle.label | v5 [Wrapping] | +| main.rs:236:21:236:24 | v5.0 | semmle.label | v5.0 | +| main.rs:237:13:237:14 | v6 [Wrapping] | semmle.label | v6 [Wrapping] | +| main.rs:237:18:237:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:237:18:237:24 | b.not() [Wrapping] | semmle.label | b.not() [Wrapping] | +| main.rs:238:21:238:22 | v6 [Wrapping] | semmle.label | v6 [Wrapping] | +| main.rs:238:21:238:24 | v6.0 | semmle.label | v6.0 | +| main.rs:239:13:239:14 | v7 [Wrapping] | semmle.label | v7 [Wrapping] | +| main.rs:239:18:239:18 | b [Wrapping] | semmle.label | b [Wrapping] | +| main.rs:239:18:239:22 | ... & ... [Wrapping] | semmle.label | ... & ... [Wrapping] | +| main.rs:239:22:239:22 | c [Wrapping] | semmle.label | c [Wrapping] | +| main.rs:240:21:240:22 | v7 [Wrapping] | semmle.label | v7 [Wrapping] | +| main.rs:240:21:240:24 | v7.0 | semmle.label | v7.0 | | main.rs:241:13:241:14 | v8 | semmle.label | v8 | +| main.rs:241:13:241:14 | v8 [Wrapping] | semmle.label | v8 [Wrapping] | +| main.rs:241:18:241:18 | b [Wrapping] | semmle.label | b [Wrapping] | | main.rs:241:18:241:37 | ... << ... | semmle.label | ... << ... | +| main.rs:241:18:241:37 | ... << ... [Wrapping] | semmle.label | ... << ... [Wrapping] | | main.rs:241:23:241:37 | source_usize(...) | semmle.label | source_usize(...) | +| main.rs:242:21:242:22 | v8 [Wrapping] | semmle.label | v8 [Wrapping] | | main.rs:242:21:242:24 | v8.0 | semmle.label | v8.0 | subpaths testFailures @@ -461,7 +543,11 @@ testFailures | main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:210:33:210:48 | ...::source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:210:33:210:48 | ...::source(...) | ...::source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:214:13:214:21 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:214:13:214:21 | source(...) | source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:215:14:215:22 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:215:14:215:22 | source(...) | source(...) | +| main.rs:218:21:218:23 | a.0 | main.rs:216:23:216:38 | ...::source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:216:23:216:38 | ...::source(...) | ...::source(...) | | main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | +| main.rs:223:21:223:23 | a.0 | main.rs:220:13:220:22 | source(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:220:13:220:22 | source(...) | source(...) | | main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | | main.rs:228:21:228:24 | v1.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | | main.rs:228:21:228:24 | v1.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:228:21:228:24 | v1.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | @@ -469,4 +555,9 @@ testFailures | main.rs:230:21:230:24 | v2.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:230:21:230:24 | v2.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | | main.rs:232:21:232:24 | v3.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:232:21:232:24 | v3.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | | main.rs:234:21:234:24 | v4.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:234:21:234:24 | v4.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:236:21:236:24 | v5.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:236:21:236:24 | v5.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:238:21:238:24 | v6.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:238:21:238:24 | v6.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:240:21:240:24 | v7.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | +| main.rs:240:21:240:24 | v7.0 | main.rs:226:41:226:56 | ...::source(...) | main.rs:240:21:240:24 | v7.0 | $@ | main.rs:226:41:226:56 | ...::source(...) | ...::source(...) | +| main.rs:242:21:242:24 | v8.0 | main.rs:225:41:225:56 | ...::source(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:225:41:225:56 | ...::source(...) | ...::source(...) | | main.rs:242:21:242:24 | v8.0 | main.rs:241:23:241:37 | source_usize(...) | main.rs:242:21:242:24 | v8.0 | $@ | main.rs:241:23:241:37 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index dc2afd0d02c4..e6802166333b 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -215,12 +215,12 @@ mod wrapping { a &= source(8); a &= Wrapping(crate::source(9)); sink(a); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 - crate::sink(a.0); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 + crate::sink(a.0); // $ hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 a = source(10); a <<= source_usize(11); sink(a); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 - crate::sink(a.0); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 + crate::sink(a.0); // $ hasTaintFlow=11 hasTaintFlow=10 let b: Wrapping = Wrapping(crate::source(1)); let c: Wrapping = Wrapping(crate::source(2)); @@ -233,13 +233,13 @@ mod wrapping { let v4 = b.neg(); crate::sink(v4.0); // $ hasTaintFlow=1 let v5 = !b; - crate::sink(v5.0); // $ MISSING: hasTaintFlow=1 + crate::sink(v5.0); // $ hasTaintFlow=1 let v6 = b.not(); - crate::sink(v6.0); // $ MISSING: hasTaintFlow=1 + crate::sink(v6.0); // $ hasTaintFlow=1 let v7 = b & c; - crate::sink(v7.0); // $ MISSING: hasTaintFlow=1 hasTaintFlow=2 + crate::sink(v7.0); // $ hasTaintFlow=1 hasTaintFlow=2 let v8 = b << source_usize(3); - crate::sink(v8.0); // $ hasTaintFlow=3 MISSING: hasTaintFlow=1 + crate::sink(v8.0); // $ hasTaintFlow=1 hasTaintFlow=3 } } From 3d6765ba1cf3dd069bfd4a21f55d1bfe27f4b6b2 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:11:18 +0000 Subject: [PATCH 10/12] Rust: Clean up / fix some existing models. --- .../rust/frameworks/stdlib/core.model.yml | 51 ++-- .../dataflow/taint/inline-taint-flow.expected | 279 +++++++++--------- .../test/library-tests/dataflow/taint/main.rs | 4 +- 3 files changed, 157 insertions(+), 177 deletions(-) diff --git a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml index 52ab56886841..94aae55a60e7 100644 --- a/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml +++ b/rust/ql/lib/codeql/rust/frameworks/stdlib/core.model.yml @@ -17,83 +17,68 @@ extensions: - ["<_ as core::ops::bit::Not>::not", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic operators - ["<_ as core::ops::arith::Add>::add", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::Add>::add", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Add>::add", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::Sub>::sub", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Sub>::sub", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::Mul>::mul", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Mul>::mul", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Div>::div", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::Div>::div", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Div>::div", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[self].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::Rem>::rem", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::arith::Rem>::rem", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Arithmetic assignment expressions - - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::AddAssign>::add_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::SubAssign>::sub_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::MulAssign>::mul_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::DivAssign>::div_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self,0].Reference", "Argument[self].Reference", "taint", "manual"] + - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::arith::RemAssign>::rem_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise operators - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitAnd>::bitand", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitOr>::bitor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::BitXor>::bitxor", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Bitwise assignment operators + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitAndAssign>::bitand_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitOrAssign>::bitor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::BitXorAssign>::bitxor_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift operators - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shl>::shl", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shl>::shl", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0]", "ReturnValue", "taint", "manual"] - - ["<_ as core::ops::bit::Shr>::shr", "Argument[0].Reference", "ReturnValue", "taint", "manual"] - ["<_ as core::ops::bit::Shr>::shr", "Argument[self,0].Field[core::num::wrapping::Wrapping(0)]", "ReturnValue.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Shift assignment operators + - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::ShlAssign>::shl_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] + - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0]", "Argument[self].Reference", "taint", "manual"] - - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Reference", "Argument[self].Reference", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] - ["<_ as core::ops::bit::ShrAssign>::shr_assign", "Argument[0].Field[core::num::wrapping::Wrapping(0)]", "Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]", "taint", "manual"] # Clone diff --git a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected index d15c5d9be435..221de45702b5 100644 --- a/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected +++ b/rust/ql/test/library-tests/dataflow/taint/inline-taint-flow.expected @@ -1,75 +1,61 @@ models -| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 3 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | -| 4 | Summary: <_ as core::ops::arith::Add>::add; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 7 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 8 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 9 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | -| 10 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | -| 11 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | -| 12 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 13 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 14 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[0].Reference; ReturnValue; taint | -| 16 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | -| 18 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self,0].Reference; Argument[self].Reference; taint | -| 19 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 20 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 21 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0]; Argument[self].Reference; taint | -| 22 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 23 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 24 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[0].Reference; ReturnValue; taint | -| 25 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 27 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | -| 28 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 29 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | -| 30 | Summary: <_ as core::ops::bit::Not>::not; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 31 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | -| 32 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 33 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | -| 34 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | -| 35 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 36 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 37 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | -| 38 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | -| 39 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[0].Reference; ReturnValue; taint | -| 40 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | -| 41 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 42 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | -| 43 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 1 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 2 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 4 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 5 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 6 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 7 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 8 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[0]; Argument[self].Reference; taint | +| 9 | Summary: <_ as core::ops::arith::MulAssign>::mul_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 10 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 11 | Summary: <_ as core::ops::arith::Neg>::neg; Argument[self]; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::arith::Sub>::sub; Argument[self,0]; ReturnValue; taint | +| 13 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[0]; Argument[self].Reference; taint | +| 14 | Summary: <_ as core::ops::arith::SubAssign>::sub_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 15 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 16 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 17 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[0]; Argument[self].Reference; taint | +| 18 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 19 | Summary: <_ as core::ops::bit::BitAndAssign>::bitand_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 20 | Summary: <_ as core::ops::bit::BitOr>::bitor; Argument[self,0]; ReturnValue; taint | +| 21 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 22 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[0]; Argument[self].Reference; taint | +| 23 | Summary: <_ as core::ops::bit::BitXorAssign>::bitxor_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 24 | Summary: <_ as core::ops::bit::Not>::not; Argument[self].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 25 | Summary: <_ as core::ops::bit::Not>::not; Argument[self]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 27 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 28 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0].Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 29 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[0]; Argument[self].Reference; taint | +| 30 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; Argument[self].Reference.Field[core::num::wrapping::Wrapping(0)]; taint | +| 31 | Summary: <_ as core::ops::bit::ShlAssign>::shl_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 32 | Summary: <_ as core::ops::bit::Shr>::shr; Argument[self,0]; ReturnValue; taint | +| 33 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[0]; Argument[self].Reference; taint | +| 34 | Summary: <_ as core::ops::bit::ShrAssign>::shr_assign; Argument[self].Reference; Argument[self].Reference; taint | +| 35 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:12:9:12:9 | a | main.rs:13:10:13:10 | a | provenance | | | main.rs:12:9:12:9 | a | main.rs:14:14:14:14 | a | provenance | | | main.rs:12:13:12:22 | source(...) | main.rs:12:9:12:9 | a | provenance | | -| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:3 | +| main.rs:13:10:13:10 | a | main.rs:13:10:13:14 | ... + ... | provenance | MaD:2 | | main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:2 | -| main.rs:14:14:14:14 | a | main.rs:14:10:14:14 | ... + ... | provenance | MaD:3 | | main.rs:16:9:16:13 | mut b | main.rs:17:5:17:5 | b | provenance | | | main.rs:16:17:16:26 | source(...) | main.rs:16:9:16:13 | mut b | provenance | | -| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:7 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:6 | -| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:7 | +| main.rs:17:5:17:5 | b | main.rs:18:10:18:10 | b | provenance | MaD:6 | +| main.rs:21:10:21:19 | source(...) | main.rs:22:10:22:10 | c | provenance | MaD:4 | | main.rs:26:9:26:9 | a | main.rs:27:11:27:11 | a | provenance | | | main.rs:26:13:26:21 | source(...) | main.rs:26:9:26:9 | a | provenance | | -| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:14 | -| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:31 | -| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:16 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:15 | -| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:16 | -| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:10 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:9 | -| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:10 | -| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:34 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:32 | -| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:34 | -| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:27 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:26 | -| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:27 | +| main.rs:27:11:27:11 | a | main.rs:27:10:27:11 | - ... | provenance | MaD:11 | +| main.rs:29:11:29:19 | source(...) | main.rs:29:10:29:19 | ! ... | provenance | MaD:25 | +| main.rs:31:10:31:18 | source(...) | main.rs:31:10:31:22 | ... - ... | provenance | MaD:12 | +| main.rs:32:17:32:25 | source(...) | main.rs:32:10:32:25 | ... - ... | provenance | MaD:12 | +| main.rs:34:10:34:18 | source(...) | main.rs:34:10:34:22 | ... * ... | provenance | MaD:7 | +| main.rs:35:17:35:25 | source(...) | main.rs:35:10:35:25 | ... * ... | provenance | MaD:7 | +| main.rs:37:10:37:18 | source(...) | main.rs:37:10:37:23 | ... << ... | provenance | MaD:27 | +| main.rs:38:18:38:26 | source(...) | main.rs:38:10:38:26 | ... << ... | provenance | MaD:27 | +| main.rs:40:10:40:18 | source(...) | main.rs:40:10:40:22 | ... ^ ... | provenance | MaD:21 | +| main.rs:41:18:41:27 | source(...) | main.rs:41:10:41:27 | ... ^ ... | provenance | MaD:21 | | main.rs:45:9:45:9 | a | main.rs:46:9:46:9 | b | provenance | | | main.rs:45:13:45:22 | source(...) | main.rs:45:9:45:9 | a | provenance | | | main.rs:46:9:46:9 | b | main.rs:47:10:47:17 | b as i64 | provenance | | @@ -78,11 +64,11 @@ edges | main.rs:60:17:60:26 | source(...) | main.rs:60:13:60:13 | s | provenance | | | main.rs:61:13:61:18 | sliced [&ref] | main.rs:62:14:62:19 | sliced | provenance | | | main.rs:61:22:61:29 | &... [&ref] | main.rs:61:13:61:18 | sliced [&ref] | provenance | | -| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:43 | +| main.rs:61:23:61:23 | s | main.rs:61:23:61:29 | s[...] | provenance | MaD:35 | | main.rs:61:23:61:29 | s[...] | main.rs:61:22:61:29 | &... [&ref] | provenance | | | main.rs:76:13:76:15 | arr | main.rs:77:14:77:16 | arr | provenance | | | main.rs:76:19:76:28 | source(...) | main.rs:76:13:76:15 | arr | provenance | | -| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:43 | +| main.rs:77:14:77:16 | arr | main.rs:77:14:77:19 | arr[1] | provenance | MaD:35 | | main.rs:92:9:92:12 | [post] arr2 [element] | main.rs:93:14:93:17 | arr2 | provenance | | | main.rs:92:19:92:28 | source(...) | main.rs:92:9:92:12 | [post] arr2 [element] | provenance | | | main.rs:113:14:113:47 | TupleExpr [tuple.0] | main.rs:113:14:113:49 | ... .0 | provenance | | @@ -101,51 +87,54 @@ edges | main.rs:131:14:131:64 | TupleExpr [tuple.0] | main.rs:131:14:131:66 | ... .0 | provenance | | | main.rs:131:14:131:66 | ... .0 | main.rs:131:14:131:68 | ... .1 | provenance | | | main.rs:131:15:131:29 | source_tuple(...) | main.rs:131:14:131:64 | TupleExpr [tuple.0] | provenance | | -| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:3 | +| main.rs:141:10:141:18 | source(...) | main.rs:141:10:141:28 | ... .add(...) | provenance | MaD:2 | | main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:2 | -| main.rs:143:19:143:27 | source(...) | main.rs:143:10:143:28 | 1i64.add(...) | provenance | MaD:3 | -| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:16 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:15 | -| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:16 | -| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:10 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:9 | -| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:10 | -| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:34 | -| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:34 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:32 | -| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:34 | -| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:40 | -| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:40 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:39 | -| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:40 | -| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:25 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:24 | -| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:25 | +| main.rs:146:10:146:18 | source(...) | main.rs:146:10:146:28 | ... .sub(...) | provenance | MaD:12 | +| main.rs:148:19:148:27 | source(...) | main.rs:148:10:148:28 | 1i64.sub(...) | provenance | MaD:12 | +| main.rs:151:10:151:18 | source(...) | main.rs:151:10:151:28 | ... .mul(...) | provenance | MaD:7 | +| main.rs:153:19:153:27 | source(...) | main.rs:153:10:153:28 | 1i64.mul(...) | provenance | MaD:7 | +| main.rs:156:10:156:18 | source(...) | main.rs:156:10:156:28 | ... .shl(...) | provenance | MaD:27 | +| main.rs:157:10:157:18 | source(...) | main.rs:157:10:157:25 | ... .shl(...) | provenance | MaD:27 | +| main.rs:158:19:158:27 | source(...) | main.rs:158:10:158:28 | 1i64.shl(...) | provenance | MaD:27 | +| main.rs:160:10:160:18 | source(...) | main.rs:160:10:160:28 | ... .shr(...) | provenance | MaD:32 | +| main.rs:161:10:161:18 | source(...) | main.rs:161:10:161:25 | ... .shr(...) | provenance | MaD:32 | +| main.rs:162:19:162:27 | source(...) | main.rs:162:10:162:28 | 1i64.shr(...) | provenance | MaD:32 | +| main.rs:164:10:164:18 | source(...) | main.rs:164:10:164:30 | ... .bitor(...) | provenance | MaD:20 | +| main.rs:166:21:166:29 | source(...) | main.rs:166:10:166:30 | 1i64.bitor(...) | provenance | MaD:20 | | main.rs:170:5:170:5 | [post] a | main.rs:171:5:171:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:170:5:170:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | | main.rs:170:5:170:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:6 | -| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:7 | +| main.rs:170:18:170:26 | source(...) | main.rs:170:5:170:5 | [post] a | provenance | MaD:4 | | main.rs:171:5:171:5 | [post] a | main.rs:172:5:172:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:171:5:171:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | | main.rs:171:5:171:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:17 | -| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:18 | +| main.rs:171:5:171:5 | a | main.rs:171:5:171:5 | [post] a | provenance | MaD:14 | +| main.rs:171:18:171:26 | source(...) | main.rs:171:5:171:5 | [post] a | provenance | MaD:13 | +| main.rs:172:5:172:5 | [post] a | main.rs:173:5:173:5 | a | provenance | | +| main.rs:172:5:172:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:172:5:172:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | | main.rs:172:5:172:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:11 | -| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:12 | +| main.rs:172:5:172:5 | a | main.rs:172:5:172:5 | [post] a | provenance | MaD:9 | +| main.rs:172:18:172:26 | source(...) | main.rs:172:5:172:5 | [post] a | provenance | MaD:8 | +| main.rs:173:5:173:5 | [post] a | main.rs:174:5:174:5 | a | provenance | | +| main.rs:173:5:173:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | | main.rs:173:5:173:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:36 | -| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:37 | +| main.rs:173:5:173:5 | a | main.rs:173:5:173:5 | [post] a | provenance | MaD:31 | +| main.rs:173:18:173:26 | source(...) | main.rs:173:5:173:5 | [post] a | provenance | MaD:29 | +| main.rs:174:5:174:5 | [post] a | main.rs:175:5:175:5 | a | provenance | | | main.rs:174:5:174:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:41 | -| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:42 | +| main.rs:174:5:174:5 | a | main.rs:174:5:174:5 | [post] a | provenance | MaD:34 | +| main.rs:174:18:174:26 | source(...) | main.rs:174:5:174:5 | [post] a | provenance | MaD:33 | | main.rs:175:5:175:5 | [post] a | main.rs:176:10:176:10 | a | provenance | | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:28 | -| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:29 | -| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:14 | -| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:31 | +| main.rs:175:5:175:5 | a | main.rs:175:5:175:5 | [post] a | provenance | MaD:23 | +| main.rs:175:21:175:29 | source(...) | main.rs:175:5:175:5 | [post] a | provenance | MaD:22 | +| main.rs:178:10:178:18 | source(...) | main.rs:178:10:178:24 | ... .neg() | provenance | MaD:11 | +| main.rs:179:10:179:18 | source(...) | main.rs:179:10:179:24 | ... .not() | provenance | MaD:25 | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:201:21:201:21 | a [Wrapping] | provenance | | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:203:9:203:9 | a [Wrapping] | provenance | | | main.rs:199:13:199:17 | mut a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | @@ -158,52 +147,52 @@ edges | main.rs:203:9:203:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:204:9:204:9 | a [Wrapping] | provenance | | | main.rs:203:9:203:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | -| main.rs:203:9:203:9 | a [Wrapping] | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:8 | -| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:6 | -| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:7 | -| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:203:9:203:9 | a [Wrapping] | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a | provenance | MaD:4 | +| main.rs:203:22:203:30 | source(...) | main.rs:203:9:203:9 | [post] a [Wrapping] | provenance | MaD:3 | | main.rs:204:9:204:9 | [post] a | main.rs:205:14:205:14 | a | provenance | | | main.rs:204:9:204:9 | [post] a | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:204:9:204:9 | [post] a [Wrapping] | main.rs:206:21:206:21 | a [Wrapping] | provenance | | -| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:7 | -| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:8 | -| main.rs:204:9:204:9 | a [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:8 | -| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a | provenance | MaD:6 | +| main.rs:204:9:204:9 | a | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:9:204:9 | a [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:5 | +| main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | main.rs:204:9:204:9 | [post] a [Wrapping] | provenance | MaD:3 | | main.rs:204:31:204:46 | ...::source(...) | main.rs:204:22:204:47 | Wrapping(...) [Wrapping] | provenance | | | main.rs:206:21:206:21 | a [Wrapping] | main.rs:206:21:206:23 | a.0 | provenance | | | main.rs:208:9:208:9 | a | main.rs:209:9:209:9 | a | provenance | | | main.rs:208:13:208:21 | source(...) | main.rs:208:9:208:9 | a | provenance | | -| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:7 | -| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:8 | -| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:6 | -| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:7 | -| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:5 | -| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:7 | -| main.rs:210:9:210:9 | a | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:8 | -| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:7 | -| main.rs:210:9:210:9 | a [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:8 | -| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a | provenance | MaD:6 | +| main.rs:209:9:209:9 | a | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:5 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a | provenance | MaD:4 | +| main.rs:209:14:209:22 | source(...) | main.rs:210:9:210:9 | a [Wrapping] | provenance | MaD:3 | +| main.rs:210:9:210:9 | a | main.rs:211:14:211:14 | a | provenance | MaD:6 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:9:210:9 | a | main.rs:212:21:212:23 | a.0 | provenance | MaD:6 | +| main.rs:210:9:210:9 | a [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:5 | +| main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | main.rs:212:21:212:21 | a [Wrapping] | provenance | MaD:3 | | main.rs:210:33:210:48 | ...::source(...) | main.rs:210:14:210:49 | ...::Wrapping(...) [Wrapping] | provenance | | | main.rs:212:21:212:21 | a [Wrapping] | main.rs:212:21:212:23 | a.0 | provenance | | | main.rs:214:9:214:9 | a | main.rs:215:9:215:9 | a | provenance | | | main.rs:214:13:214:21 | source(...) | main.rs:214:9:214:9 | a | provenance | | -| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:23 | -| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:20 | -| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:21 | -| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:22 | -| main.rs:216:9:216:9 | a | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:23 | -| main.rs:216:9:216:9 | a [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:23 | -| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:22 | +| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a | provenance | MaD:19 | +| main.rs:215:9:215:9 | a | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:18 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a | provenance | MaD:17 | +| main.rs:215:14:215:22 | source(...) | main.rs:216:9:216:9 | a [Wrapping] | provenance | MaD:16 | +| main.rs:216:9:216:9 | a | main.rs:217:14:217:14 | a | provenance | MaD:19 | +| main.rs:216:9:216:9 | a | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 | +| main.rs:216:9:216:9 | a | main.rs:218:21:218:23 | a.0 | provenance | MaD:19 | +| main.rs:216:9:216:9 | a [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:18 | +| main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | main.rs:218:21:218:21 | a [Wrapping] | provenance | MaD:16 | | main.rs:216:23:216:38 | ...::source(...) | main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | provenance | | | main.rs:218:21:218:21 | a [Wrapping] | main.rs:218:21:218:23 | a.0 | provenance | | | main.rs:220:9:220:9 | a | main.rs:221:9:221:9 | a | provenance | | | main.rs:220:13:220:22 | source(...) | main.rs:220:9:220:9 | a | provenance | | -| main.rs:221:9:221:9 | a | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:38 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:36 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:37 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:35 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:36 | -| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:37 | +| main.rs:221:9:221:9 | a | main.rs:222:14:222:14 | a | provenance | MaD:31 | +| main.rs:221:9:221:9 | a | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:30 | +| main.rs:221:9:221:9 | a | main.rs:223:21:223:23 | a.0 | provenance | MaD:31 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | provenance | MaD:29 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:21 | a [Wrapping] | provenance | MaD:28 | +| main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | provenance | MaD:29 | | main.rs:223:21:223:21 | a [Wrapping] | main.rs:223:21:223:23 | a.0 | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:227:18:227:18 | b [Wrapping] | provenance | | | main.rs:225:13:225:13 | b [Wrapping] | main.rs:229:18:229:18 | b [Wrapping] | provenance | | @@ -221,44 +210,43 @@ edges | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | main.rs:226:13:226:13 | c [Wrapping] | provenance | | | main.rs:226:41:226:56 | ...::source(...) | main.rs:226:32:226:57 | Wrapping(...) [Wrapping] | provenance | | | main.rs:227:13:227:14 | v1 [Wrapping] | main.rs:228:21:228:22 | v1 [Wrapping] | provenance | | -| main.rs:227:18:227:18 | b [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:4 | +| main.rs:227:18:227:18 | b [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 | | main.rs:227:18:227:22 | ... + ... [Wrapping] | main.rs:227:13:227:14 | v1 [Wrapping] | provenance | | | main.rs:227:22:227:22 | c [Wrapping] | main.rs:227:18:227:22 | ... + ... [Wrapping] | provenance | MaD:1 | | main.rs:228:21:228:22 | v1 [Wrapping] | main.rs:228:21:228:24 | v1.0 | provenance | | | main.rs:229:13:229:14 | v2 [Wrapping] | main.rs:230:21:230:22 | v2 [Wrapping] | provenance | | -| main.rs:229:18:229:18 | b [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:4 | +| main.rs:229:18:229:18 | b [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 | | main.rs:229:18:229:25 | b.add(...) [Wrapping] | main.rs:229:13:229:14 | v2 [Wrapping] | provenance | | | main.rs:229:24:229:24 | c [Wrapping] | main.rs:229:18:229:25 | b.add(...) [Wrapping] | provenance | MaD:1 | | main.rs:230:21:230:22 | v2 [Wrapping] | main.rs:230:21:230:24 | v2.0 | provenance | | | main.rs:231:13:231:14 | v3 [Wrapping] | main.rs:232:21:232:22 | v3 [Wrapping] | provenance | | | main.rs:231:18:231:19 | - ... [Wrapping] | main.rs:231:13:231:14 | v3 [Wrapping] | provenance | | -| main.rs:231:19:231:19 | b [Wrapping] | main.rs:231:18:231:19 | - ... [Wrapping] | provenance | MaD:13 | +| main.rs:231:19:231:19 | b [Wrapping] | main.rs:231:18:231:19 | - ... [Wrapping] | provenance | MaD:10 | | main.rs:232:21:232:22 | v3 [Wrapping] | main.rs:232:21:232:24 | v3.0 | provenance | | | main.rs:233:13:233:14 | v4 [Wrapping] | main.rs:234:21:234:22 | v4 [Wrapping] | provenance | | -| main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:13 | +| main.rs:233:18:233:18 | b [Wrapping] | main.rs:233:18:233:24 | b.neg() [Wrapping] | provenance | MaD:10 | | main.rs:233:18:233:24 | b.neg() [Wrapping] | main.rs:233:13:233:14 | v4 [Wrapping] | provenance | | | main.rs:234:21:234:22 | v4 [Wrapping] | main.rs:234:21:234:24 | v4.0 | provenance | | | main.rs:235:13:235:14 | v5 [Wrapping] | main.rs:236:21:236:22 | v5 [Wrapping] | provenance | | | main.rs:235:18:235:19 | ! ... [Wrapping] | main.rs:235:13:235:14 | v5 [Wrapping] | provenance | | -| main.rs:235:19:235:19 | b [Wrapping] | main.rs:235:18:235:19 | ! ... [Wrapping] | provenance | MaD:30 | +| main.rs:235:19:235:19 | b [Wrapping] | main.rs:235:18:235:19 | ! ... [Wrapping] | provenance | MaD:24 | | main.rs:236:21:236:22 | v5 [Wrapping] | main.rs:236:21:236:24 | v5.0 | provenance | | | main.rs:237:13:237:14 | v6 [Wrapping] | main.rs:238:21:238:22 | v6 [Wrapping] | provenance | | -| main.rs:237:18:237:18 | b [Wrapping] | main.rs:237:18:237:24 | b.not() [Wrapping] | provenance | MaD:30 | +| main.rs:237:18:237:18 | b [Wrapping] | main.rs:237:18:237:24 | b.not() [Wrapping] | provenance | MaD:24 | | main.rs:237:18:237:24 | b.not() [Wrapping] | main.rs:237:13:237:14 | v6 [Wrapping] | provenance | | | main.rs:238:21:238:22 | v6 [Wrapping] | main.rs:238:21:238:24 | v6.0 | provenance | | | main.rs:239:13:239:14 | v7 [Wrapping] | main.rs:240:21:240:22 | v7 [Wrapping] | provenance | | -| main.rs:239:18:239:18 | b [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:19 | +| main.rs:239:18:239:18 | b [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 | | main.rs:239:18:239:22 | ... & ... [Wrapping] | main.rs:239:13:239:14 | v7 [Wrapping] | provenance | | -| main.rs:239:22:239:22 | c [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:19 | +| main.rs:239:22:239:22 | c [Wrapping] | main.rs:239:18:239:22 | ... & ... [Wrapping] | provenance | MaD:15 | | main.rs:240:21:240:22 | v7 [Wrapping] | main.rs:240:21:240:24 | v7.0 | provenance | | | main.rs:241:13:241:14 | v8 | main.rs:242:21:242:24 | v8.0 | provenance | | | main.rs:241:13:241:14 | v8 [Wrapping] | main.rs:242:21:242:22 | v8 [Wrapping] | provenance | | -| main.rs:241:18:241:18 | b [Wrapping] | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:33 | +| main.rs:241:18:241:18 | b [Wrapping] | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 | | main.rs:241:18:241:37 | ... << ... | main.rs:241:13:241:14 | v8 | provenance | | | main.rs:241:18:241:37 | ... << ... [Wrapping] | main.rs:241:13:241:14 | v8 [Wrapping] | provenance | | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:32 | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:34 | -| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:33 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... | provenance | MaD:27 | +| main.rs:241:23:241:37 | source_usize(...) | main.rs:241:18:241:37 | ... << ... [Wrapping] | provenance | MaD:26 | | main.rs:242:21:242:22 | v8 [Wrapping] | main.rs:242:21:242:24 | v8.0 | provenance | | nodes | main.rs:12:9:12:9 | a | semmle.label | a | @@ -374,10 +362,13 @@ nodes | main.rs:172:5:172:5 | a | semmle.label | a | | main.rs:172:18:172:26 | source(...) | semmle.label | source(...) | | main.rs:173:5:173:5 | [post] a | semmle.label | [post] a | +| main.rs:173:5:173:5 | a | semmle.label | a | | main.rs:173:18:173:26 | source(...) | semmle.label | source(...) | | main.rs:174:5:174:5 | [post] a | semmle.label | [post] a | +| main.rs:174:5:174:5 | a | semmle.label | a | | main.rs:174:18:174:26 | source(...) | semmle.label | source(...) | | main.rs:175:5:175:5 | [post] a | semmle.label | [post] a | +| main.rs:175:5:175:5 | a | semmle.label | a | | main.rs:175:21:175:29 | source(...) | semmle.label | source(...) | | main.rs:176:10:176:10 | a | semmle.label | a | | main.rs:178:10:178:18 | source(...) | semmle.label | source(...) | @@ -421,6 +412,7 @@ nodes | main.rs:216:9:216:9 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:216:14:216:39 | Wrapping(...) [Wrapping] | semmle.label | Wrapping(...) [Wrapping] | | main.rs:216:23:216:38 | ...::source(...) | semmle.label | ...::source(...) | +| main.rs:217:14:217:14 | a | semmle.label | a | | main.rs:218:21:218:21 | a [Wrapping] | semmle.label | a [Wrapping] | | main.rs:218:21:218:23 | a.0 | semmle.label | a.0 | | main.rs:220:9:220:9 | a | semmle.label | a | @@ -543,9 +535,12 @@ testFailures | main.rs:212:21:212:23 | a.0 | main.rs:208:13:208:21 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:208:13:208:21 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:209:14:209:22 | source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:209:14:209:22 | source(...) | source(...) | | main.rs:212:21:212:23 | a.0 | main.rs:210:33:210:48 | ...::source(...) | main.rs:212:21:212:23 | a.0 | $@ | main.rs:210:33:210:48 | ...::source(...) | ...::source(...) | +| main.rs:217:14:217:14 | a | main.rs:214:13:214:21 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:214:13:214:21 | source(...) | source(...) | +| main.rs:217:14:217:14 | a | main.rs:215:14:215:22 | source(...) | main.rs:217:14:217:14 | a | $@ | main.rs:215:14:215:22 | source(...) | source(...) | | main.rs:218:21:218:23 | a.0 | main.rs:214:13:214:21 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:214:13:214:21 | source(...) | source(...) | | main.rs:218:21:218:23 | a.0 | main.rs:215:14:215:22 | source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:215:14:215:22 | source(...) | source(...) | | main.rs:218:21:218:23 | a.0 | main.rs:216:23:216:38 | ...::source(...) | main.rs:218:21:218:23 | a.0 | $@ | main.rs:216:23:216:38 | ...::source(...) | ...::source(...) | +| main.rs:222:14:222:14 | a | main.rs:220:13:220:22 | source(...) | main.rs:222:14:222:14 | a | $@ | main.rs:220:13:220:22 | source(...) | source(...) | | main.rs:222:14:222:14 | a | main.rs:221:15:221:30 | source_usize(...) | main.rs:222:14:222:14 | a | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | | main.rs:223:21:223:23 | a.0 | main.rs:220:13:220:22 | source(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:220:13:220:22 | source(...) | source(...) | | main.rs:223:21:223:23 | a.0 | main.rs:221:15:221:30 | source_usize(...) | main.rs:223:21:223:23 | a.0 | $@ | main.rs:221:15:221:30 | source_usize(...) | source_usize(...) | diff --git a/rust/ql/test/library-tests/dataflow/taint/main.rs b/rust/ql/test/library-tests/dataflow/taint/main.rs index e6802166333b..07770cc71189 100644 --- a/rust/ql/test/library-tests/dataflow/taint/main.rs +++ b/rust/ql/test/library-tests/dataflow/taint/main.rs @@ -214,12 +214,12 @@ mod wrapping { a = source(7); a &= source(8); a &= Wrapping(crate::source(9)); - sink(a); // $ MISSING: hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 + sink(a); // $ hasTaintFlow=7 hasTaintFlow=8 MISSING: hasTaintFlow=9 crate::sink(a.0); // $ hasTaintFlow=7 hasTaintFlow=8 hasTaintFlow=9 a = source(10); a <<= source_usize(11); - sink(a); // $ hasTaintFlow=11 MISSING: hasTaintFlow=10 + sink(a); // $ hasTaintFlow=11 hasTaintFlow=10 crate::sink(a.0); // $ hasTaintFlow=11 hasTaintFlow=10 let b: Wrapping = Wrapping(crate::source(1)); From 67b52e29e0591da43e61caf6250fdaff18e4bfc0 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:22:47 +0000 Subject: [PATCH 11/12] Rust: Update other affected tests. --- .../dataflow/collections/inline-flow.expected | 23 ++--- .../dataflow/modeled/inline-flow.expected | 94 +++++++++---------- .../sources/database/InlineFlow.expected | 30 +++++- 3 files changed, 80 insertions(+), 67 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected index c0e096f98f0b..e3eba23d036a 100644 --- a/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/collections/inline-flow.expected @@ -1,8 +1,7 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0].Reference; Argument[self].Reference; taint | -| 3 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | -| 4 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | +| 2 | Summary: <_ as core::ops::arith::AddAssign>::add_assign; Argument[0]; Argument[self].Reference; taint | +| 3 | Summary: <_ as core::ops::index::Index>::index; Argument[self].Reference.Element; ReturnValue.Reference; value | edges | main.rs:15:13:15:13 | s | main.rs:16:20:16:20 | s | provenance | | | main.rs:15:17:15:25 | source(...) | main.rs:15:13:15:13 | s | provenance | | @@ -10,14 +9,14 @@ edges | main.rs:16:13:16:15 | arr [element] | main.rs:18:15:18:17 | arr [element] | provenance | | | main.rs:16:19:16:24 | [s; 5] [element] | main.rs:16:13:16:15 | arr [element] | provenance | | | main.rs:16:20:16:20 | s | main.rs:16:19:16:24 | [s; 5] [element] | provenance | | -| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:4 | -| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:17:14:17:16 | arr [element] | main.rs:17:14:17:19 | arr[2] | provenance | MaD:3 | +| main.rs:18:15:18:17 | arr [element] | main.rs:18:15:18:26 | arr.index(...) [&ref] | provenance | MaD:3 | | main.rs:18:15:18:26 | arr.index(...) [&ref] | main.rs:18:14:18:26 | * ... | provenance | MaD:1 | | main.rs:20:13:20:19 | mut arr | main.rs:21:14:21:16 | arr | provenance | | | main.rs:20:13:20:19 | mut arr | main.rs:22:15:22:17 | arr | provenance | | | main.rs:20:23:20:33 | source(...) | main.rs:20:13:20:19 | mut arr | provenance | | -| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:4 | -| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:4 | +| main.rs:21:14:21:16 | arr | main.rs:21:14:21:19 | arr[0] | provenance | MaD:3 | +| main.rs:22:15:22:17 | arr | main.rs:22:15:22:26 | arr.index(...) [&ref] | provenance | MaD:3 | | main.rs:22:15:22:26 | arr.index(...) [&ref] | main.rs:22:14:22:26 | * ... | provenance | MaD:1 | | main.rs:24:13:24:13 | s | main.rs:25:20:25:20 | s | provenance | | | main.rs:24:17:24:25 | source(...) | main.rs:24:13:24:13 | s | provenance | | @@ -30,17 +29,15 @@ edges | main.rs:30:19:30:29 | source(...) | main.rs:30:13:30:15 | arr | provenance | | | main.rs:37:9:37:11 | [post] arr [element] | main.rs:38:14:38:16 | arr [element] | provenance | | | main.rs:37:18:37:26 | source(...) | main.rs:37:9:37:11 | [post] arr [element] | provenance | | -| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:4 | +| main.rs:38:14:38:16 | arr [element] | main.rs:38:14:38:19 | arr[0] | provenance | MaD:3 | | main.rs:46:9:46:14 | [post] arr[0] | main.rs:47:14:47:16 | arr | provenance | | | main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:2 | -| main.rs:46:19:46:27 | source(...) | main.rs:46:9:46:14 | [post] arr[0] | provenance | MaD:3 | -| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:4 | +| main.rs:47:14:47:16 | arr | main.rs:47:14:47:19 | arr[0] | provenance | MaD:3 | | main.rs:63:18:63:22 | SelfParam [&ref, S] | main.rs:63:56:65:9 | { ... } [&ref, S] | provenance | | | main.rs:76:34:76:44 | ...: Self [S] | main.rs:77:23:77:27 | other [S] | provenance | | | main.rs:77:13:77:18 | [post] self.0 | main.rs:76:23:76:31 | SelfParam [Return] [&ref, S] | provenance | | | main.rs:77:23:77:27 | other [S] | main.rs:77:23:77:29 | other.0 | provenance | | | main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:2 | -| main.rs:77:23:77:29 | other.0 | main.rs:77:13:77:18 | [post] self.0 | provenance | MaD:3 | | main.rs:82:13:82:13 | s | main.rs:83:19:83:19 | s | provenance | | | main.rs:82:17:82:25 | source(...) | main.rs:82:13:82:13 | s | provenance | | | main.rs:83:13:83:13 | s [S] | main.rs:84:14:84:14 | s [S] | provenance | | @@ -67,7 +64,6 @@ edges | main.rs:99:9:99:12 | [post] s[0] [S] | main.rs:99:9:99:9 | [post] s [S] | provenance | | | main.rs:99:17:99:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:2 | -| main.rs:99:17:99:28 | S(...) [S] | main.rs:99:9:99:12 | [post] s[0] [S] | provenance | MaD:3 | | main.rs:99:19:99:27 | source(...) | main.rs:99:17:99:28 | S(...) [S] | provenance | | | main.rs:100:14:100:14 | s [S] | main.rs:100:14:100:16 | s.0 | provenance | | | main.rs:104:9:104:23 | [post] * ... [S] | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | provenance | | @@ -75,13 +71,11 @@ edges | main.rs:104:10:104:23 | [post] s.index_mut(...) [&ref, S] | main.rs:104:10:104:10 | [post] s [S] | provenance | | | main.rs:104:28:104:39 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:2 | -| main.rs:104:28:104:39 | S(...) [S] | main.rs:104:9:104:23 | [post] * ... [S] | provenance | MaD:3 | | main.rs:104:30:104:38 | source(...) | main.rs:104:28:104:39 | S(...) [S] | provenance | | | main.rs:105:9:105:9 | [post] s [S] | main.rs:106:14:106:14 | s [S] | provenance | | | main.rs:105:9:105:12 | [post] s[0] [S] | main.rs:105:9:105:9 | [post] s [S] | provenance | | | main.rs:105:17:105:28 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:2 | -| main.rs:105:17:105:28 | S(...) [S] | main.rs:105:9:105:12 | [post] s[0] [S] | provenance | MaD:3 | | main.rs:105:19:105:27 | source(...) | main.rs:105:17:105:28 | S(...) [S] | provenance | | | main.rs:106:14:106:14 | s [S] | main.rs:106:14:106:16 | s.0 | provenance | | | main.rs:110:10:110:24 | [post] * ... [S] | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | provenance | | @@ -89,7 +83,6 @@ edges | main.rs:110:11:110:24 | [post] s.index_mut(...) [&ref, S] | main.rs:110:11:110:11 | [post] s [S] | provenance | | | main.rs:110:38:110:49 | S(...) [S] | main.rs:76:34:76:44 | ...: Self [S] | provenance | | | main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:2 | -| main.rs:110:38:110:49 | S(...) [S] | main.rs:110:10:110:24 | [post] * ... [S] | provenance | MaD:3 | | main.rs:110:40:110:48 | source(...) | main.rs:110:38:110:49 | S(...) [S] | provenance | | | main.rs:111:14:111:14 | s [S] | main.rs:111:14:111:16 | s.0 | provenance | | nodes diff --git a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected index 14244fff454a..58a421b4d3f7 100644 --- a/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected @@ -4,53 +4,52 @@ models | 3 | Summary: <_ as core::cmp::Ord>::clamp; Argument[self,0,1]; ReturnValue; value | | 4 | Summary: <_ as core::cmp::Ord>::max; Argument[self,0]; ReturnValue; value | | 5 | Summary: <_ as core::cmp::Ord>::min; Argument[self,0]; ReturnValue; value | -| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 7 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 8 | Summary: ::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 9 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | -| 10 | Summary: ::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value | -| 11 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | -| 12 | Summary: ::clone; Argument[self]; ReturnValue; value | -| 13 | Summary: ::map_or; Argument[1].ReturnValue; ReturnValue; value | -| 14 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 15 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | -| 16 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | -| 17 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value | -| 18 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | -| 19 | Summary: ::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | -| 20 | Summary: ::new; Argument[0].Reference; ReturnValue; value | -| 21 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 22 | Summary: ::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | -| 23 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 24 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | -| 25 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | +| 6 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 7 | Summary: ::into_pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 8 | Summary: ::new; Argument[0]; ReturnValue.Field[alloc::boxed::Box(0)]; value | +| 9 | Summary: ::pin; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; value | +| 10 | Summary: ::clone; Argument[self].Reference; ReturnValue; value | +| 11 | Summary: ::clone; Argument[self]; ReturnValue; value | +| 12 | Summary: ::map_or; Argument[1].ReturnValue; ReturnValue; value | +| 13 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 14 | Summary: ::zip; Argument[0].Field[core::option::Option::Some(0)]; ReturnValue.Field[core::option::Option::Some(0)].Field[1]; value | +| 15 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Field[alloc::boxed::Box(0)]; ReturnValue.Reference; value | +| 16 | Summary: ::deref; Argument[self].Reference.Field[core::pin::Pin::pointer].Reference; ReturnValue.Reference; value | +| 17 | Summary: ::into_inner; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 18 | Summary: ::into_inner_unchecked; Argument[0].Field[core::pin::Pin::pointer]; ReturnValue; value | +| 19 | Summary: ::new; Argument[0].Reference; ReturnValue; value | +| 20 | Summary: ::new; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 21 | Summary: ::new_unchecked; Argument[0]; ReturnValue.Field[core::pin::Pin::pointer]; value | +| 22 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 23 | Summary: core::ptr::read; Argument[0].Reference; ReturnValue; value | +| 24 | Summary: core::ptr::write; Argument[1]; Argument[0].Reference; value | edges | main.rs:12:9:12:9 | a [Some] | main.rs:13:10:13:10 | a [Some] | provenance | | | main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:13 | a [Some] | provenance | | | main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | | | main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | | -| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:14 | +| main.rs:13:10:13:10 | a [Some] | main.rs:13:10:13:19 | a.unwrap() | provenance | MaD:13 | | main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:10 | b [Some] | provenance | | | main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | MaD:2 | | main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | | -| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:14 | +| main.rs:15:10:15:10 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:13 | | main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:10 | a [Ok] | provenance | | | main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | | | main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | | | main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | | -| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:23 | +| main.rs:20:10:20:10 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:22 | | main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:10 | b [Ok] | provenance | | | main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:2 | | main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | | -| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:23 | +| main.rs:22:10:22:10 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:22 | | main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | | | main.rs:26:9:26:9 | a | main.rs:28:13:28:13 | a | provenance | | | main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | | | main.rs:28:9:28:9 | b | main.rs:29:10:29:10 | b | provenance | | | main.rs:28:9:28:9 | b [&ref] | main.rs:29:10:29:10 | b | provenance | | | main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:2 | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:11 | -| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:12 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() | provenance | MaD:10 | +| main.rs:28:13:28:13 | a | main.rs:28:13:28:21 | a.clone() [&ref] | provenance | MaD:11 | | main.rs:28:13:28:21 | a.clone() | main.rs:28:9:28:9 | b | provenance | | | main.rs:28:13:28:21 | a.clone() [&ref] | main.rs:28:9:28:9 | b [&ref] | provenance | | | main.rs:43:18:43:22 | SelfParam [&ref, Wrapper] | main.rs:44:26:44:31 | self.n | provenance | | @@ -75,19 +74,18 @@ edges | main.rs:66:22:66:31 | source(...) | main.rs:66:17:66:32 | Some(...) [Some] | provenance | | | main.rs:67:13:67:13 | z [Some, tuple.1] | main.rs:68:15:68:15 | z [Some, tuple.1] | provenance | | | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | main.rs:67:13:67:13 | z [Some, tuple.1] | provenance | | -| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:15 | +| main.rs:67:23:67:23 | b [Some] | main.rs:67:17:67:24 | a.zip(...) [Some, tuple.1] | provenance | MaD:14 | | main.rs:68:15:68:15 | z [Some, tuple.1] | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | provenance | | | main.rs:69:13:69:24 | Some(...) [Some, tuple.1] | main.rs:69:18:69:23 | TuplePat [tuple.1] | provenance | | | main.rs:69:18:69:23 | TuplePat [tuple.1] | main.rs:69:22:69:22 | m | provenance | | | main.rs:69:22:69:22 | m | main.rs:71:22:71:22 | m | provenance | | | main.rs:79:13:79:13 | b | main.rs:80:14:80:14 | b | provenance | | | main.rs:79:17:79:47 | a.map_or(...) | main.rs:79:13:79:13 | b | provenance | | -| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:13 | +| main.rs:79:33:79:46 | ... + ... | main.rs:79:17:79:47 | a.map_or(...) | provenance | MaD:12 | | main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:6 | -| main.rs:79:37:79:46 | source(...) | main.rs:79:33:79:46 | ... + ... | provenance | MaD:7 | | main.rs:92:29:92:29 | [post] y [&ref] | main.rs:93:33:93:33 | y [&ref] | provenance | | -| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:25 | -| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:24 | +| main.rs:92:32:92:41 | source(...) | main.rs:92:29:92:29 | [post] y [&ref] | provenance | MaD:24 | +| main.rs:93:33:93:33 | y [&ref] | main.rs:93:18:93:34 | ...::read(...) | provenance | MaD:23 | | main.rs:108:13:108:17 | mut i | main.rs:109:34:109:34 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:110:33:110:33 | i | provenance | | | main.rs:108:13:108:17 | mut i | main.rs:111:47:111:47 | i | provenance | | @@ -100,51 +98,51 @@ edges | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | main.rs:115:31:115:34 | pin1 [Pin, &ref] | provenance | | | main.rs:109:24:109:35 | ...::new(...) | main.rs:109:13:109:20 | mut pin1 | provenance | | | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | main.rs:109:13:109:20 | mut pin1 [Pin, &ref] | provenance | | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:20 | -| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:21 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) | provenance | MaD:19 | +| main.rs:109:33:109:34 | &i [&ref] | main.rs:109:24:109:35 | ...::new(...) [Pin, &ref] | provenance | MaD:20 | | main.rs:109:34:109:34 | i | main.rs:109:33:109:34 | &i [&ref] | provenance | | | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | provenance | | | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | main.rs:110:13:110:20 | mut pin2 [Pin, Box(0)] | provenance | | -| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:10 | +| main.rs:110:33:110:33 | i | main.rs:110:24:110:34 | ...::pin(...) [Pin, Box(0)] | provenance | MaD:9 | | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | provenance | | | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | main.rs:111:13:111:20 | mut pin3 [Pin, Box(0)] | provenance | | -| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:8 | -| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:9 | +| main.rs:111:38:111:48 | ...::new(...) [Box(0)] | main.rs:111:24:111:49 | ...::into_pin(...) [Pin, Box(0)] | provenance | MaD:7 | +| main.rs:111:47:111:47 | i | main.rs:111:38:111:48 | ...::new(...) [Box(0)] | provenance | MaD:8 | | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | main.rs:118:15:118:18 | pin4 [Pin, &ref] | provenance | | -| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:22 | +| main.rs:112:24:112:27 | &mut pinned [&ref] | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | provenance | MaD:21 | | main.rs:112:24:112:27 | ...::new_unchecked(...) [Pin, &ref] | main.rs:112:13:112:20 | mut pin4 [Pin, &ref] | provenance | | | main.rs:112:24:112:27 | mut pinned | main.rs:112:24:112:27 | pinned | provenance | | | main.rs:112:24:112:27 | pinned | main.rs:112:24:112:27 | &mut pinned [&ref] | provenance | | +| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:15 | | main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:16 | -| main.rs:114:15:114:18 | pin1 | main.rs:114:14:114:18 | * ... | provenance | MaD:17 | -| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:17 | +| main.rs:114:15:114:18 | pin1 [Pin, &ref] | main.rs:114:14:114:18 | * ... | provenance | MaD:16 | | main.rs:115:15:115:35 | ...::into_inner(...) | main.rs:115:14:115:35 | * ... | provenance | MaD:1 | | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | main.rs:115:14:115:35 | * ... | provenance | MaD:1 | -| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:18 | -| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:18 | -| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:16 | -| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:16 | -| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:17 | +| main.rs:115:31:115:34 | pin1 | main.rs:115:15:115:35 | ...::into_inner(...) | provenance | MaD:17 | +| main.rs:115:31:115:34 | pin1 [Pin, &ref] | main.rs:115:15:115:35 | ...::into_inner(...) [&ref] | provenance | MaD:17 | +| main.rs:116:15:116:18 | pin2 [Pin, Box(0)] | main.rs:116:14:116:18 | * ... | provenance | MaD:15 | +| main.rs:117:15:117:18 | pin3 [Pin, Box(0)] | main.rs:117:14:117:18 | * ... | provenance | MaD:15 | +| main.rs:118:15:118:18 | pin4 [Pin, &ref] | main.rs:118:14:118:18 | * ... | provenance | MaD:16 | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:123:34:123:35 | ms [MyStruct] | provenance | | | main.rs:122:13:122:18 | mut ms [MyStruct] | main.rs:127:14:127:15 | ms [MyStruct] | provenance | | | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | main.rs:122:13:122:18 | mut ms [MyStruct] | provenance | | | main.rs:122:38:122:47 | source(...) | main.rs:122:22:122:49 | MyStruct {...} [MyStruct] | provenance | | | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | provenance | | | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | main.rs:123:13:123:20 | mut pin1 [Pin, &ref, MyStruct] | provenance | | -| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:21 | +| main.rs:123:33:123:35 | &ms [&ref, MyStruct] | main.rs:123:24:123:36 | ...::new(...) [Pin, &ref, MyStruct] | provenance | MaD:20 | | main.rs:123:34:123:35 | ms [MyStruct] | main.rs:123:33:123:35 | &ms [&ref, MyStruct] | provenance | | | main.rs:127:14:127:15 | ms [MyStruct] | main.rs:127:14:127:19 | ms.val | provenance | | | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | main.rs:129:14:129:38 | ... .val | provenance | | -| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:18 | +| main.rs:129:30:129:33 | pin1 [Pin, &ref, MyStruct] | main.rs:129:14:129:34 | ...::into_inner(...) [&ref, MyStruct] | provenance | MaD:17 | | main.rs:136:13:136:18 | mut ms [MyStruct] | main.rs:137:44:137:45 | ms [MyStruct] | provenance | | | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | main.rs:136:13:136:18 | mut ms [MyStruct] | provenance | | | main.rs:136:38:136:47 | source(...) | main.rs:136:22:136:49 | MyStruct {...} [MyStruct] | provenance | | | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | provenance | | | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | main.rs:137:13:137:20 | mut pin5 [Pin, &ref, MyStruct] | provenance | | -| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:22 | +| main.rs:137:43:137:45 | &ms [&ref, MyStruct] | main.rs:137:24:137:46 | ...::new_unchecked(...) [Pin, &ref, MyStruct] | provenance | MaD:21 | | main.rs:137:44:137:45 | ms [MyStruct] | main.rs:137:43:137:45 | &ms [&ref, MyStruct] | provenance | | | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | main.rs:139:14:139:48 | ... .val | provenance | | -| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:19 | +| main.rs:139:40:139:43 | pin5 [Pin, &ref, MyStruct] | main.rs:139:14:139:44 | ...::into_inner_unchecked(...) [&ref, MyStruct] | provenance | MaD:18 | | main.rs:153:9:153:9 | a | main.rs:155:13:155:13 | a | provenance | | | main.rs:153:13:153:22 | source(...) | main.rs:153:9:153:9 | a | provenance | | | main.rs:154:9:154:9 | b | main.rs:155:19:155:19 | b | provenance | | diff --git a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected index f01253fb4939..5b3e890545b3 100644 --- a/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected +++ b/rust/ql/test/library-tests/dataflow/sources/database/InlineFlow.expected @@ -9,8 +9,8 @@ models | 8 | Source: ::get_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | | 9 | Source: ::take; ReturnValue.Field[core::option::Option::Some(0)]; database | | 10 | Source: ::take_opt; ReturnValue.Field[core::option::Option::Some(0)].Field[core::result::Result::Ok(0)]; database | -| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0].Field[core::num::wrapping::Wrapping(0)]; ReturnValue.Field[core::num::wrapping::Wrapping(0)]; taint | +| 12 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | | 13 | Summary: <_ as mysql::conn::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Field[core::result::Result::Ok(0)]; value | | 14 | Summary: <_ as mysql_async::queryable::Queryable>::query_fold; Argument[2].ReturnValue; ReturnValue.Future.Field[core::result::Result::Ok(0)]; value | | 15 | Summary: ::unwrap; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | @@ -54,15 +54,20 @@ edges | test.rs:57:14:57:39 | ...: ... | test.rs:59:22:59:29 | values.1 | provenance | | | test.rs:57:14:57:39 | ...: ... | test.rs:60:22:60:29 | values.2 | provenance | | | test.rs:64:13:64:17 | total | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:13:64:17 | total [Wrapping] | test.rs:68:14:68:18 | total | provenance | | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | test.rs:64:21:67:11 | TryExpr [Wrapping] | provenance | | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | test.rs:64:21:67:11 | TryExpr | provenance | | | test.rs:64:21:67:11 | TryExpr | test.rs:64:13:64:17 | total | provenance | | +| test.rs:64:21:67:11 | TryExpr [Wrapping] | test.rs:64:13:64:17 | total [Wrapping] | provenance | | | test.rs:64:26:64:35 | query_fold | test.rs:64:76:64:83 | ...: i64 | provenance | Src:MaD:2 | | test.rs:64:76:64:83 | ...: i64 | test.rs:65:18:65:20 | row | provenance | | | test.rs:64:76:64:83 | ...: i64 | test.rs:66:19:66:21 | row | provenance | | | test.rs:64:86:67:9 | { ... } | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | provenance | MaD:13 | +| test.rs:64:86:67:9 | { ... } [Wrapping] | test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | provenance | MaD:13 | | test.rs:66:13:66:21 | ... + ... | test.rs:64:86:67:9 | { ... } | provenance | | -| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:11 | +| test.rs:66:13:66:21 | ... + ... [Wrapping] | test.rs:64:86:67:9 | { ... } [Wrapping] | provenance | | | test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... | provenance | MaD:12 | +| test.rs:66:19:66:21 | row | test.rs:66:13:66:21 | ... + ... [Wrapping] | provenance | MaD:11 | | test.rs:70:22:70:31 | query_fold | test.rs:70:83:70:105 | ...: ... | provenance | Src:MaD:2 | | test.rs:70:83:70:105 | ...: ... | test.rs:71:17:71:18 | id | provenance | | | test.rs:70:83:70:105 | ...: ... | test.rs:72:17:72:20 | name | provenance | | @@ -95,16 +100,22 @@ edges | test.rs:144:14:144:39 | ...: ... | test.rs:146:22:146:29 | values.1 | provenance | | | test.rs:144:14:144:39 | ...: ... | test.rs:147:22:147:29 | values.2 | provenance | | | test.rs:151:13:151:17 | total | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:13:151:17 | total [Wrapping] | test.rs:155:14:155:18 | total | provenance | | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | test.rs:151:21:154:16 | await ... [Ok, Wrapping] | provenance | | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | test.rs:151:21:154:16 | await ... [Ok] | provenance | | +| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | test.rs:151:21:154:17 | TryExpr [Wrapping] | provenance | | | test.rs:151:21:154:16 | await ... [Ok] | test.rs:151:21:154:17 | TryExpr | provenance | | | test.rs:151:21:154:17 | TryExpr | test.rs:151:13:151:17 | total | provenance | | +| test.rs:151:21:154:17 | TryExpr [Wrapping] | test.rs:151:13:151:17 | total [Wrapping] | provenance | | | test.rs:151:26:151:35 | query_fold | test.rs:151:76:151:83 | ...: i64 | provenance | Src:MaD:4 | | test.rs:151:76:151:83 | ...: i64 | test.rs:152:18:152:20 | row | provenance | | | test.rs:151:76:151:83 | ...: i64 | test.rs:153:19:153:21 | row | provenance | | | test.rs:151:86:154:9 | { ... } | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | provenance | MaD:14 | +| test.rs:151:86:154:9 | { ... } [Wrapping] | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | provenance | MaD:14 | | test.rs:153:13:153:21 | ... + ... | test.rs:151:86:154:9 | { ... } | provenance | | -| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:11 | +| test.rs:153:13:153:21 | ... + ... [Wrapping] | test.rs:151:86:154:9 | { ... } [Wrapping] | provenance | | | test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... | provenance | MaD:12 | +| test.rs:153:19:153:21 | row | test.rs:153:13:153:21 | ... + ... [Wrapping] | provenance | MaD:11 | | test.rs:157:22:157:31 | query_fold | test.rs:157:83:157:105 | ...: ... | provenance | Src:MaD:4 | | test.rs:157:83:157:105 | ...: ... | test.rs:158:17:158:18 | id | provenance | | | test.rs:157:83:157:105 | ...: ... | test.rs:159:17:159:20 | name | provenance | | @@ -160,13 +171,18 @@ nodes | test.rs:59:22:59:29 | values.1 | semmle.label | values.1 | | test.rs:60:22:60:29 | values.2 | semmle.label | values.2 | | test.rs:64:13:64:17 | total | semmle.label | total | +| test.rs:64:13:64:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:64:21:67:10 | conn.query_fold(...) [Ok, Wrapping] | semmle.label | conn.query_fold(...) [Ok, Wrapping] | | test.rs:64:21:67:10 | conn.query_fold(...) [Ok] | semmle.label | conn.query_fold(...) [Ok] | | test.rs:64:21:67:11 | TryExpr | semmle.label | TryExpr | +| test.rs:64:21:67:11 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | | test.rs:64:26:64:35 | query_fold | semmle.label | query_fold | | test.rs:64:76:64:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:64:86:67:9 | { ... } | semmle.label | { ... } | +| test.rs:64:86:67:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | | test.rs:65:18:65:20 | row | semmle.label | row | | test.rs:66:13:66:21 | ... + ... | semmle.label | ... + ... | +| test.rs:66:13:66:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:66:19:66:21 | row | semmle.label | row | | test.rs:68:14:68:18 | total | semmle.label | total | | test.rs:70:22:70:31 | query_fold | semmle.label | query_fold | @@ -208,14 +224,20 @@ nodes | test.rs:146:22:146:29 | values.1 | semmle.label | values.1 | | test.rs:147:22:147:29 | values.2 | semmle.label | values.2 | | test.rs:151:13:151:17 | total | semmle.label | total | +| test.rs:151:13:151:17 | total [Wrapping] | semmle.label | total [Wrapping] | +| test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok, Wrapping] | semmle.label | conn.query_fold(...) [future, Ok, Wrapping] | | test.rs:151:21:154:10 | conn.query_fold(...) [future, Ok] | semmle.label | conn.query_fold(...) [future, Ok] | +| test.rs:151:21:154:16 | await ... [Ok, Wrapping] | semmle.label | await ... [Ok, Wrapping] | | test.rs:151:21:154:16 | await ... [Ok] | semmle.label | await ... [Ok] | | test.rs:151:21:154:17 | TryExpr | semmle.label | TryExpr | +| test.rs:151:21:154:17 | TryExpr [Wrapping] | semmle.label | TryExpr [Wrapping] | | test.rs:151:26:151:35 | query_fold | semmle.label | query_fold | | test.rs:151:76:151:83 | ...: i64 | semmle.label | ...: i64 | | test.rs:151:86:154:9 | { ... } | semmle.label | { ... } | +| test.rs:151:86:154:9 | { ... } [Wrapping] | semmle.label | { ... } [Wrapping] | | test.rs:152:18:152:20 | row | semmle.label | row | | test.rs:153:13:153:21 | ... + ... | semmle.label | ... + ... | +| test.rs:153:13:153:21 | ... + ... [Wrapping] | semmle.label | ... + ... [Wrapping] | | test.rs:153:19:153:21 | row | semmle.label | row | | test.rs:155:14:155:18 | total | semmle.label | total | | test.rs:157:22:157:31 | query_fold | semmle.label | query_fold | From b8581e89bf811f6c9840908315ea8c616746d5f6 Mon Sep 17 00:00:00 2001 From: Geoffrey White <40627776+geoffw0@users.noreply.github.com> Date: Thu, 22 Jan 2026 13:22:43 +0000 Subject: [PATCH 12/12] Rust: More affected tests. --- .../dataflow/global/inline-flow.expected | 2 +- .../UncontrolledAllocationSize.expected | 169 +++++++++--------- .../HardcodedCryptographicValue.expected | 63 +++---- 3 files changed, 111 insertions(+), 123 deletions(-) diff --git a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected index f4db29396539..5caa5c1c3ed9 100644 --- a/rust/ql/test/library-tests/dataflow/global/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/global/inline-flow.expected @@ -1,6 +1,6 @@ models | 1 | Summary: <& as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue; value | -| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | +| 2 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | | 3 | Summary: futures_executor::local_pool::block_on; Argument[0]; ReturnValue; value | edges | main.rs:12:28:14:1 | { ... } | main.rs:17:13:17:23 | get_data(...) | provenance | | diff --git a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected index a38f1b82f36f..907ac816ea97 100644 --- a/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected +++ b/rust/ql/test/query-tests/security/CWE-770/UncontrolledAllocationSize.expected @@ -59,44 +59,43 @@ edges | main.rs:18:41:18:41 | v | main.rs:32:60:32:60 | v | provenance | | | main.rs:18:41:18:41 | v | main.rs:35:49:35:49 | v | provenance | | | main.rs:20:9:20:10 | l2 | main.rs:21:31:21:32 | l2 | provenance | | -| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:44 | +| main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | main.rs:20:14:20:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:20:14:20:63 | ... .unwrap() | main.rs:20:9:20:10 | l2 | provenance | | -| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:20:50:20:50 | v | main.rs:20:14:20:54 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:21:31:21:32 | l2 | main.rs:21:13:21:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:21:31:21:32 | l2 | main.rs:22:31:22:32 | l2 | provenance | | | main.rs:21:31:21:32 | l2 | main.rs:23:31:23:32 | l2 | provenance | | | main.rs:21:31:21:32 | l2 | main.rs:24:38:24:39 | l2 | provenance | | -| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:30 | -| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:44 | +| main.rs:22:31:22:32 | l2 | main.rs:22:31:22:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:22:31:22:44 | l2.align_to(...) [Ok] | main.rs:22:31:22:53 | ... .unwrap() | provenance | MaD:42 | | main.rs:22:31:22:53 | ... .unwrap() | main.rs:22:13:22:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:30 | -| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:44 | -| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:38 | +| main.rs:23:31:23:32 | l2 | main.rs:23:31:23:44 | l2.align_to(...) [Ok] | provenance | MaD:28 | +| main.rs:23:31:23:44 | l2.align_to(...) [Ok] | main.rs:23:31:23:53 | ... .unwrap() | provenance | MaD:42 | +| main.rs:23:31:23:53 | ... .unwrap() | main.rs:23:31:23:68 | ... .pad_to_align() | provenance | MaD:36 | | main.rs:23:31:23:68 | ... .pad_to_align() | main.rs:23:13:23:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:24:38:24:39 | l2 | main.rs:24:13:24:36 | ...::alloc_zeroed | provenance | MaD:16 Sink:MaD:16 | | main.rs:29:9:29:10 | l4 | main.rs:30:31:30:32 | l4 | provenance | | | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | main.rs:29:9:29:10 | l4 | provenance | | -| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:29:60:29:60 | v | main.rs:29:14:29:64 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:30:31:30:32 | l4 | main.rs:30:13:30:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:32:9:32:10 | l5 | main.rs:33:31:33:32 | l5 | provenance | | | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | main.rs:32:9:32:10 | l5 | provenance | | -| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:27 | -| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:32:60:32:60 | v | main.rs:32:60:32:89 | ... * ... | provenance | MaD:25 | +| main.rs:32:60:32:89 | ... * ... | main.rs:32:14:32:118 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:33:31:33:32 | l5 | main.rs:33:13:33:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:35:9:35:10 | s6 | main.rs:36:60:36:61 | s6 | provenance | | | main.rs:35:14:35:54 | ... + ... | main.rs:35:9:35:10 | s6 | provenance | | | main.rs:35:15:35:49 | ... * ... | main.rs:35:14:35:54 | ... + ... | provenance | MaD:24 | -| main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:26 | | main.rs:35:49:35:49 | v | main.rs:35:15:35:49 | ... * ... | provenance | MaD:25 | | main.rs:36:9:36:10 | l6 | main.rs:37:31:37:32 | l6 | provenance | | | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | main.rs:36:9:36:10 | l6 | provenance | | -| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:36:60:36:61 | s6 | main.rs:36:14:36:65 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:37:31:37:32 | l6 | main.rs:37:13:37:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:37:31:37:32 | l6 | main.rs:39:60:39:61 | l6 | provenance | | | main.rs:39:9:39:10 | l7 | main.rs:40:31:40:32 | l7 | provenance | | | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | main.rs:39:9:39:10 | l7 | provenance | | -| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:41 | -| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:37 | +| main.rs:39:60:39:61 | l6 | main.rs:39:60:39:68 | l6.size() | provenance | MaD:39 | +| main.rs:39:60:39:68 | l6.size() | main.rs:39:14:39:72 | ...::from_size_align_unchecked(...) | provenance | MaD:35 | | main.rs:40:31:40:32 | l7 | main.rs:40:13:40:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:43:44:43:51 | ...: usize | main.rs:50:41:50:41 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:51:41:51:41 | v | provenance | | @@ -104,27 +103,27 @@ edges | main.rs:43:44:43:51 | ...: usize | main.rs:54:48:54:48 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:58:34:58:34 | v | provenance | | | main.rs:43:44:43:51 | ...: usize | main.rs:67:46:67:46 | v | provenance | | -| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:50:31:50:51 | ... .unwrap() [tuple.0] | main.rs:50:31:50:53 | ... .0 | provenance | | | main.rs:50:31:50:53 | ... .0 | main.rs:50:13:50:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | -| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:50:41:50:41 | v | main.rs:50:31:50:42 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:51:31:51:55 | ... .unwrap() [tuple.0] | main.rs:51:31:51:57 | ... .0 | provenance | | | main.rs:51:31:51:57 | ... .0 | main.rs:51:13:51:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:51:41:51:41 | v | main.rs:51:41:51:45 | ... + ... | provenance | MaD:24 | -| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | -| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:44 | +| main.rs:51:41:51:45 | ... + ... | main.rs:51:31:51:46 | l2.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | +| main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | main.rs:53:31:53:58 | ... .unwrap() | provenance | MaD:42 | | main.rs:53:31:53:58 | ... .unwrap() | main.rs:53:13:53:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 | -| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:44 | +| main.rs:53:48:53:48 | v | main.rs:53:31:53:49 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | +| main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | main.rs:54:31:54:63 | ... .unwrap() | provenance | MaD:42 | | main.rs:54:31:54:63 | ... .unwrap() | main.rs:54:13:54:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:27 | -| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:40 | +| main.rs:54:48:54:48 | v | main.rs:54:48:54:53 | ... * ... | provenance | MaD:25 | +| main.rs:54:48:54:53 | ... * ... | main.rs:54:31:54:54 | l2.repeat_packed(...) [Ok] | provenance | MaD:38 | | main.rs:58:9:58:20 | TuplePat [tuple.0] | main.rs:58:10:58:11 | k1 | provenance | | | main.rs:58:10:58:11 | k1 | main.rs:59:31:59:32 | k1 | provenance | | -| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:43 | +| main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | provenance | MaD:41 | | main.rs:58:24:58:66 | ... .expect(...) [tuple.0] | main.rs:58:9:58:20 | TuplePat [tuple.0] | provenance | | -| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:39 | +| main.rs:58:34:58:34 | v | main.rs:58:24:58:35 | l3.repeat(...) [Ok, tuple.0] | provenance | MaD:37 | | main.rs:59:31:59:32 | k1 | main.rs:59:13:59:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:59:31:59:32 | k1 | main.rs:60:34:60:35 | k1 | provenance | | | main.rs:59:31:59:32 | k1 | main.rs:62:24:62:25 | k1 | provenance | | @@ -132,32 +131,32 @@ edges | main.rs:59:31:59:32 | k1 | main.rs:65:31:65:32 | k1 | provenance | | | main.rs:60:9:60:20 | TuplePat [tuple.0] | main.rs:60:10:60:11 | k2 | provenance | | | main.rs:60:10:60:11 | k2 | main.rs:61:31:61:32 | k2 | provenance | | -| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:60:24:60:45 | ... .unwrap() [tuple.0] | main.rs:60:9:60:20 | TuplePat [tuple.0] | provenance | | -| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:32 | +| main.rs:60:34:60:35 | k1 | main.rs:60:24:60:36 | l3.extend(...) [Ok, tuple.0] | provenance | MaD:30 | | main.rs:61:31:61:32 | k2 | main.rs:61:13:61:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:62:9:62:20 | TuplePat [tuple.0] | main.rs:62:10:62:11 | k3 | provenance | | | main.rs:62:10:62:11 | k3 | main.rs:63:31:63:32 | k3 | provenance | | -| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:33 | -| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:44 | +| main.rs:62:24:62:25 | k1 | main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | provenance | MaD:31 | +| main.rs:62:24:62:36 | k1.extend(...) [Ok, tuple.0] | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | provenance | MaD:42 | | main.rs:62:24:62:45 | ... .unwrap() [tuple.0] | main.rs:62:9:62:20 | TuplePat [tuple.0] | provenance | | | main.rs:63:31:63:32 | k3 | main.rs:63:13:63:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:44 | +| main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | main.rs:64:31:64:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:64:31:64:59 | ... .unwrap() | main.rs:64:13:64:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | -| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:34 | -| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:35 | -| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:44 | +| main.rs:64:48:64:49 | k1 | main.rs:64:31:64:50 | l3.extend_packed(...) [Ok] | provenance | MaD:32 | +| main.rs:65:31:65:32 | k1 | main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | provenance | MaD:33 | +| main.rs:65:31:65:50 | k1.extend_packed(...) [Ok] | main.rs:65:31:65:59 | ... .unwrap() | provenance | MaD:42 | | main.rs:65:31:65:59 | ... .unwrap() | main.rs:65:13:65:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:67:9:67:10 | l4 | main.rs:68:31:68:32 | l4 | provenance | | -| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:44 | +| main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | main.rs:67:14:67:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:67:14:67:56 | ... .unwrap() | main.rs:67:9:67:10 | l4 | provenance | | -| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:67:46:67:46 | v | main.rs:67:14:67:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:68:31:68:32 | l4 | main.rs:68:13:68:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:86:35:86:42 | ...: usize | main.rs:87:54:87:54 | v | provenance | | | main.rs:87:9:87:14 | layout | main.rs:88:31:88:36 | layout | provenance | | -| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:44 | +| main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | main.rs:87:18:87:67 | ... .unwrap() | provenance | MaD:42 | | main.rs:87:18:87:67 | ... .unwrap() | main.rs:87:9:87:14 | layout | provenance | | -| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:87:54:87:54 | v | main.rs:87:18:87:58 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:88:31:88:36 | layout | main.rs:88:13:88:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:91:38:91:45 | ...: usize | main.rs:92:47:92:47 | v | provenance | | | main.rs:91:38:91:45 | ...: usize | main.rs:101:51:101:51 | v | provenance | | @@ -168,16 +167,16 @@ edges | main.rs:91:38:91:45 | ...: usize | main.rs:161:55:161:55 | v | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:96:35:96:36 | l1 | provenance | | | main.rs:92:9:92:10 | l1 | main.rs:102:35:102:36 | l1 | provenance | | -| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:44 | +| main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | main.rs:92:14:92:57 | ... .unwrap() | provenance | MaD:42 | | main.rs:92:14:92:57 | ... .unwrap() | main.rs:92:9:92:10 | l1 | provenance | | -| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:92:47:92:47 | v | main.rs:92:14:92:48 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:96:35:96:36 | l1 | main.rs:96:17:96:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:96:35:96:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:96:35:96:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | | main.rs:101:13:101:14 | l3 | main.rs:103:35:103:36 | l3 | provenance | | -| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:44 | +| main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | main.rs:101:18:101:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:101:18:101:61 | ... .unwrap() | main.rs:101:13:101:14 | l3 | provenance | | -| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:101:51:101:51 | v | main.rs:101:18:101:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:102:35:102:36 | l1 | main.rs:102:17:102:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:102:35:102:36 | l1 | main.rs:109:35:109:36 | l1 | provenance | | | main.rs:102:35:102:36 | l1 | main.rs:111:35:111:36 | l1 | provenance | | @@ -188,28 +187,28 @@ edges | main.rs:111:35:111:36 | l1 | main.rs:111:17:111:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:111:35:111:36 | l1 | main.rs:146:35:146:36 | l1 | provenance | | | main.rs:145:13:145:14 | l9 | main.rs:148:35:148:36 | l9 | provenance | | -| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:44 | +| main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | main.rs:145:18:145:61 | ... .unwrap() | provenance | MaD:42 | | main.rs:145:18:145:61 | ... .unwrap() | main.rs:145:13:145:14 | l9 | provenance | | -| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:145:51:145:51 | v | main.rs:145:18:145:52 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:146:35:146:36 | l1 | main.rs:146:17:146:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:146:35:146:36 | l1 | main.rs:177:31:177:32 | l1 | provenance | | | main.rs:148:35:148:36 | l9 | main.rs:148:17:148:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:151:9:151:11 | l10 | main.rs:152:31:152:33 | l10 | provenance | | -| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:44 | +| main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | main.rs:151:15:151:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:151:15:151:78 | ... .unwrap() | main.rs:151:9:151:11 | l10 | provenance | | -| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | -| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:46 | +| main.rs:151:48:151:68 | ...::min(...) | main.rs:151:15:151:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:151:62:151:62 | v | main.rs:151:48:151:68 | ...::min(...) | provenance | MaD:44 | | main.rs:152:31:152:33 | l10 | main.rs:152:13:152:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:154:9:154:11 | l11 | main.rs:155:31:155:33 | l11 | provenance | | -| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:44 | +| main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | main.rs:154:15:154:78 | ... .unwrap() | provenance | MaD:42 | | main.rs:154:15:154:78 | ... .unwrap() | main.rs:154:9:154:11 | l11 | provenance | | -| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | -| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:45 | +| main.rs:154:48:154:68 | ...::max(...) | main.rs:154:15:154:69 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | +| main.rs:154:62:154:62 | v | main.rs:154:48:154:68 | ...::max(...) | provenance | MaD:43 | | main.rs:155:31:155:33 | l11 | main.rs:155:13:155:29 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:161:13:161:15 | l13 | main.rs:162:35:162:37 | l13 | provenance | | -| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:44 | +| main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | main.rs:161:19:161:68 | ... .unwrap() | provenance | MaD:42 | | main.rs:161:19:161:68 | ... .unwrap() | main.rs:161:13:161:15 | l13 | provenance | | -| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:161:55:161:55 | v | main.rs:161:19:161:59 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:162:35:162:37 | l13 | main.rs:162:17:162:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:162:35:162:37 | l13 | main.rs:169:35:169:37 | l13 | provenance | | | main.rs:169:35:169:37 | l13 | main.rs:169:17:169:33 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | @@ -217,9 +216,9 @@ edges | main.rs:183:29:183:36 | ...: usize | main.rs:192:46:192:46 | v | provenance | | | main.rs:183:29:183:36 | ...: usize | main.rs:202:48:202:48 | v | provenance | | | main.rs:192:9:192:10 | l2 | main.rs:193:38:193:39 | l2 | provenance | | -| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:44 | +| main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | main.rs:192:14:192:56 | ... .unwrap() | provenance | MaD:42 | | main.rs:192:14:192:56 | ... .unwrap() | main.rs:192:9:192:10 | l2 | provenance | | -| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:31 | +| main.rs:192:46:192:46 | v | main.rs:192:14:192:47 | ...::array::<...>(...) [Ok] | provenance | MaD:29 | | main.rs:193:38:193:39 | l2 | main.rs:193:32:193:36 | alloc | provenance | MaD:12 Sink:MaD:12 | | main.rs:193:38:193:39 | l2 | main.rs:194:45:194:46 | l2 | provenance | | | main.rs:194:45:194:46 | l2 | main.rs:194:32:194:43 | alloc_zeroed | provenance | MaD:13 Sink:MaD:13 | @@ -258,19 +257,19 @@ edges | main.rs:231:42:231:42 | v | main.rs:231:13:231:40 | ...::with_capacity_in | provenance | MaD:6 Sink:MaD:6 | | main.rs:282:24:282:41 | ...: String | main.rs:283:21:283:30 | user_input | provenance | | | main.rs:283:9:283:17 | num_bytes | main.rs:285:54:285:62 | num_bytes | provenance | | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:28 | -| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:29 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:26 | +| main.rs:283:21:283:30 | user_input | main.rs:283:21:283:47 | user_input.parse() [Ok] | provenance | MaD:27 | | main.rs:283:21:283:47 | user_input.parse() [Ok] | main.rs:283:21:283:48 | TryExpr | provenance | | -| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:27 | +| main.rs:283:21:283:48 | TryExpr | main.rs:283:21:283:77 | ... * ... | provenance | MaD:25 | | main.rs:283:21:283:77 | ... * ... | main.rs:283:9:283:17 | num_bytes | provenance | | | main.rs:285:9:285:14 | layout | main.rs:287:40:287:45 | layout | provenance | | -| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:44 | +| main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | main.rs:285:18:285:75 | ... .unwrap() | provenance | MaD:42 | | main.rs:285:18:285:75 | ... .unwrap() | main.rs:285:9:285:14 | layout | provenance | | -| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:36 | +| main.rs:285:54:285:62 | num_bytes | main.rs:285:18:285:66 | ...::from_size_align(...) [Ok] | provenance | MaD:34 | | main.rs:287:40:287:45 | layout | main.rs:287:22:287:38 | ...::alloc | provenance | MaD:15 Sink:MaD:15 | | main.rs:311:25:311:38 | ...::args | main.rs:311:25:311:40 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:311:25:311:40 | ...::args(...) [element] | main.rs:311:25:311:47 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:42 | +| main.rs:311:25:311:47 | ... .nth(...) [Some] | main.rs:311:25:311:74 | ... .unwrap_or(...) | provenance | MaD:40 | | main.rs:311:25:311:74 | ... .unwrap_or(...) | main.rs:282:24:282:41 | ...: String | provenance | | | main.rs:320:9:320:9 | v | main.rs:323:34:323:34 | v | provenance | | | main.rs:320:9:320:9 | v | main.rs:324:42:324:42 | v | provenance | | @@ -280,10 +279,10 @@ edges | main.rs:320:9:320:9 | v | main.rs:328:22:328:22 | v | provenance | | | main.rs:320:13:320:26 | ...::args | main.rs:320:13:320:28 | ...::args(...) [element] | provenance | Src:MaD:22 | | main.rs:320:13:320:28 | ...::args(...) [element] | main.rs:320:13:320:35 | ... .nth(...) [Some] | provenance | MaD:23 | -| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:42 | -| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:28 | -| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:29 | -| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:44 | +| main.rs:320:13:320:35 | ... .nth(...) [Some] | main.rs:320:13:320:65 | ... .unwrap_or(...) | provenance | MaD:40 | +| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:26 | +| main.rs:320:13:320:65 | ... .unwrap_or(...) | main.rs:320:13:320:82 | ... .parse() [Ok] | provenance | MaD:27 | +| main.rs:320:13:320:82 | ... .parse() [Ok] | main.rs:320:13:320:91 | ... .unwrap() | provenance | MaD:42 | | main.rs:320:13:320:91 | ... .unwrap() | main.rs:320:9:320:9 | v | provenance | | | main.rs:323:34:323:34 | v | main.rs:12:36:12:43 | ...: usize | provenance | | | main.rs:324:42:324:42 | v | main.rs:43:44:43:51 | ...: usize | provenance | | @@ -315,29 +314,27 @@ models | 21 | Sink: libc::unix::realloc; Argument[1]; alloc-size | | 22 | Source: std::env::args; ReturnValue.Element; commandargs | | 23 | Summary: <_ as core::iter::traits::iterator::Iterator>::nth; Argument[self].Reference.Element; ReturnValue.Field[core::option::Option::Some(0)]; value | -| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self]; ReturnValue; taint | -| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0].Reference; ReturnValue; taint | -| 26 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[0]; ReturnValue; taint | -| 27 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self]; ReturnValue; taint | -| 28 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | -| 29 | Summary: ::deref; Argument[self]; ReturnValue; value | -| 30 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 31 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 32 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 33 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 34 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 35 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 36 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 37 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | -| 38 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | -| 39 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | -| 40 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | -| 41 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | -| 42 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | -| 43 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 44 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | -| 45 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | -| 46 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | +| 24 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 25 | Summary: <_ as core::ops::arith::Mul>::mul; Argument[self,0]; ReturnValue; taint | +| 26 | Summary: <_ as core::ops::deref::Deref>::deref; Argument[self].Reference; ReturnValue.Reference; taint | +| 27 | Summary: ::deref; Argument[self]; ReturnValue; value | +| 28 | Summary: ::align_to; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 29 | Summary: ::array; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 30 | Summary: ::extend; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 31 | Summary: ::extend; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 32 | Summary: ::extend_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 33 | Summary: ::extend_packed; Argument[self].Reference; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 34 | Summary: ::from_size_align; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 35 | Summary: ::from_size_align_unchecked; Argument[0]; ReturnValue; taint | +| 36 | Summary: ::pad_to_align; Argument[self].Reference; ReturnValue; taint | +| 37 | Summary: ::repeat; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)].Field[0]; taint | +| 38 | Summary: ::repeat_packed; Argument[0]; ReturnValue.Field[core::result::Result::Ok(0)]; taint | +| 39 | Summary: ::size; Argument[self].Reference; ReturnValue; taint | +| 40 | Summary: ::unwrap_or; Argument[self].Field[core::option::Option::Some(0)]; ReturnValue; value | +| 41 | Summary: ::expect; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 42 | Summary: ::unwrap; Argument[self].Field[core::result::Result::Ok(0)]; ReturnValue; value | +| 43 | Summary: core::cmp::max; Argument[0]; ReturnValue; value | +| 44 | Summary: core::cmp::min; Argument[0]; ReturnValue; value | nodes | main.rs:12:36:12:43 | ...: usize | semmle.label | ...: usize | | main.rs:18:13:18:31 | ...::realloc | semmle.label | ...::realloc | diff --git a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected index 1d9837feafe2..5423999d7c3f 100644 --- a/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected +++ b/rust/ql/test/query-tests/security/CWE-798/HardcodedCryptographicValue.expected @@ -23,32 +23,32 @@ edges | test_cipher.rs:18:28:18:36 | &... [&ref] | test_cipher.rs:18:9:18:14 | const1 [&ref] | provenance | | | test_cipher.rs:18:29:18:36 | [0u8; 16] | test_cipher.rs:18:28:18:36 | &... [&ref] | provenance | | | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | test_cipher.rs:19:30:19:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:19:73:19:78 | const1 [&ref] | test_cipher.rs:19:49:19:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:25:9:25:14 | const4 [&ref] | test_cipher.rs:26:66:26:71 | const4 [&ref] | provenance | | | test_cipher.rs:25:28:25:36 | &... [&ref] | test_cipher.rs:25:9:25:14 | const4 [&ref] | provenance | | | test_cipher.rs:25:29:25:36 | [0u8; 16] | test_cipher.rs:25:28:25:36 | &... [&ref] | provenance | | | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | test_cipher.rs:26:30:26:40 | ...::new | provenance | MaD:4 Sink:MaD:4 | -| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:26:66:26:71 | const4 [&ref] | test_cipher.rs:26:42:26:72 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:29:9:29:14 | const5 [&ref] | test_cipher.rs:30:95:30:100 | const5 [&ref] | provenance | | | test_cipher.rs:29:28:29:36 | &... [&ref] | test_cipher.rs:29:9:29:14 | const5 [&ref] | provenance | | | test_cipher.rs:29:29:29:36 | [0u8; 16] | test_cipher.rs:29:28:29:36 | &... [&ref] | provenance | | | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | test_cipher.rs:30:30:30:40 | ...::new | provenance | MaD:5 Sink:MaD:5 | -| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:30:95:30:100 | const5 [&ref] | test_cipher.rs:30:72:30:101 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:37:9:37:14 | const7 | test_cipher.rs:38:74:38:79 | const7 | provenance | | | test_cipher.rs:37:27:37:74 | [...] | test_cipher.rs:37:9:37:14 | const7 | provenance | | | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | test_cipher.rs:38:30:38:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:38:73:38:79 | &const7 [&ref] | test_cipher.rs:38:49:38:80 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:38:74:38:79 | const7 | test_cipher.rs:38:73:38:79 | &const7 [&ref] | provenance | | | test_cipher.rs:41:9:41:14 | const8 [&ref] | test_cipher.rs:42:73:42:78 | const8 [&ref] | provenance | | | test_cipher.rs:41:28:41:76 | &... [&ref] | test_cipher.rs:41:9:41:14 | const8 [&ref] | provenance | | | test_cipher.rs:41:29:41:76 | [...] | test_cipher.rs:41:28:41:76 | &... [&ref] | provenance | | | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | test_cipher.rs:42:30:42:47 | ...::new | provenance | MaD:3 Sink:MaD:3 | -| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:23 | +| test_cipher.rs:42:73:42:78 | const8 [&ref] | test_cipher.rs:42:49:42:79 | ...::from_slice(...) [&ref] | provenance | MaD:18 | | test_cipher.rs:50:9:50:15 | const10 [element] | test_cipher.rs:51:75:51:81 | const10 [element] | provenance | | | test_cipher.rs:50:37:50:52 | ...::zeroed | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | provenance | Src:MaD:7 | | test_cipher.rs:50:37:50:54 | ...::zeroed(...) [element] | test_cipher.rs:50:9:50:15 | const10 [element] | provenance | | | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | test_cipher.rs:51:31:51:48 | ...::new | provenance | MaD:3 Sink:MaD:3 Sink:MaD:3 | -| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:23 | +| test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | test_cipher.rs:51:50:51:82 | ...::from_slice(...) [&ref, element] | provenance | MaD:18 | | test_cipher.rs:51:75:51:81 | const10 [element] | test_cipher.rs:51:74:51:81 | &const10 [&ref, element] | provenance | | | test_cipher.rs:73:9:73:14 | const2 [&ref] | test_cipher.rs:74:46:74:51 | const2 [&ref] | provenance | | | test_cipher.rs:73:18:73:26 | &... [&ref] | test_cipher.rs:73:9:73:14 | const2 [&ref] | provenance | | @@ -65,14 +65,14 @@ edges | test_cookie.rs:38:9:38:14 | array2 | test_cookie.rs:42:34:42:39 | array2 | provenance | | | test_cookie.rs:38:18:38:37 | ...::from(...) | test_cookie.rs:38:9:38:14 | array2 | provenance | | | test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:8 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:18 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:19 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:20 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:21 | -| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:22 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:13 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:14 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:15 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:16 | +| test_cookie.rs:38:28:38:36 | [0u8; 64] | test_cookie.rs:38:18:38:37 | ...::from(...) | provenance | MaD:17 | | test_cookie.rs:42:34:42:39 | array2 | test_cookie.rs:42:14:42:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_cookie.rs:49:9:49:14 | array3 [element] | test_cookie.rs:53:34:53:39 | array3 [element] | provenance | | -| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:24 | +| test_cookie.rs:49:23:49:25 | 0u8 | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | provenance | MaD:19 | | test_cookie.rs:49:23:49:29 | ...::from_elem(...) [element] | test_cookie.rs:49:9:49:14 | array3 [element] | provenance | | | test_cookie.rs:53:34:53:39 | array3 [element] | test_cookie.rs:53:14:53:32 | ...::from | provenance | MaD:2 Sink:MaD:2 | | test_heuristic.rs:44:9:44:16 | const_iv [&ref] | test_heuristic.rs:45:41:45:48 | const_iv | provenance | | @@ -80,15 +80,11 @@ edges | test_heuristic.rs:44:31:44:38 | [0u8; 16] | test_heuristic.rs:44:30:44:38 | &... [&ref] | provenance | | | test_heuristic.rs:64:20:64:27 | [0u8; 16] | test_heuristic.rs:64:19:64:27 | &... | provenance | | | test_heuristic.rs:65:31:65:38 | [0u8; 16] | test_heuristic.rs:65:30:65:38 | &... | provenance | | -| test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:10 | | test_heuristic.rs:69:32:69:32 | 1 | test_heuristic.rs:69:22:69:32 | ... + ... | provenance | MaD:9 | -| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:15 | -| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:17 | -| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:16 | -| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:14 | -| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:13 | -| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:12 | -| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:11 | +| test_heuristic.rs:70:23:70:35 | ... << ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 | +| test_heuristic.rs:70:34:70:35 | 32 | test_heuristic.rs:70:23:70:35 | ... << ... | provenance | MaD:12 | +| test_heuristic.rs:70:41:70:61 | ... & ... | test_heuristic.rs:70:22:70:62 | ... ^ ... | provenance | MaD:11 | +| test_heuristic.rs:70:52:70:61 | 0xFFFFFFFF | test_heuristic.rs:70:41:70:61 | ... & ... | provenance | MaD:10 | models | 1 | Sink: <_ as crypto_common::KeyInit>::new_from_slice; Argument[0]; credentials-key | | 2 | Sink: ::from; Argument[0]; credentials-key | @@ -98,22 +94,17 @@ models | 6 | Sink: ::from; Argument[0].Reference; credentials-key | | 7 | Source: core::mem::zeroed; ReturnValue.Element; constant-source | | 8 | Summary: <_ as core::convert::From>::from; Argument[0]; ReturnValue; taint | -| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[0].Reference; ReturnValue; taint | -| 10 | Summary: <_ as core::ops::arith::Add>::add; Argument[0]; ReturnValue; taint | -| 11 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0].Reference; ReturnValue; taint | -| 12 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[0]; ReturnValue; taint | -| 13 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0].Reference; ReturnValue; taint | -| 14 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[0]; ReturnValue; taint | -| 15 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self]; ReturnValue; taint | -| 16 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0].Reference; ReturnValue; taint | -| 17 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[0]; ReturnValue; taint | -| 18 | Summary: ::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value | -| 19 | Summary: ::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value | -| 20 | Summary: ::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value | -| 21 | Summary: ::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value | -| 22 | Summary: ::from; Argument[0]; ReturnValue; taint | -| 23 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | -| 24 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | +| 9 | Summary: <_ as core::ops::arith::Add>::add; Argument[self,0]; ReturnValue; taint | +| 10 | Summary: <_ as core::ops::bit::BitAnd>::bitand; Argument[self,0]; ReturnValue; taint | +| 11 | Summary: <_ as core::ops::bit::BitXor>::bitxor; Argument[self,0]; ReturnValue; taint | +| 12 | Summary: <_ as core::ops::bit::Shl>::shl; Argument[self,0]; ReturnValue; taint | +| 13 | Summary: ::from; Argument[0].Field[alloc::borrow::Cow::Owned(0)]; ReturnValue; value | +| 14 | Summary: ::from; Argument[0].Field[alloc::bstr::ByteString(0)]; ReturnValue; value | +| 15 | Summary: ::from; Argument[0].Field[alloc::collections::binary_heap::BinaryHeap::data]; ReturnValue; value | +| 16 | Summary: ::from; Argument[0].Field[alloc::string::String::vec]; ReturnValue; value | +| 17 | Summary: ::from; Argument[0]; ReturnValue; taint | +| 18 | Summary: ::from_slice; Argument[0].Reference; ReturnValue.Reference; value | +| 19 | Summary: alloc::vec::from_elem; Argument[0]; ReturnValue.Element; value | nodes | test_cipher.rs:18:9:18:14 | const1 [&ref] | semmle.label | const1 [&ref] | | test_cipher.rs:18:28:18:36 | &... [&ref] | semmle.label | &... [&ref] |