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] 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 cc5813c685a..52ab5688684 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 8510f066cfe..d15c5d9be43 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 dc2afd0d02c..e6802166333 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 } }