Skip to content

Commit 7e20536

Browse files
committed
Rust: Adjust clone modeling
1 parent 6df5a1e commit 7e20536

File tree

2 files changed

+5
-15
lines changed

2 files changed

+5
-15
lines changed

rust/ql/lib/codeql/rust/frameworks/stdlib/Clone.qll

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@ final class CloneCallable extends SummarizedCallable::Range {
1818
final override predicate propagatesFlow(
1919
string input, string output, boolean preservesValue, string model
2020
) {
21-
input = "Argument[self]" and
21+
// The `clone` method takes a `&self` parameter and dereferences it;
22+
// make sure to not clone the reference itself
23+
input = ["Argument[self].Reference", "Argument[self].WithoutReference"] and
2224
output = "ReturnValue" and
2325
preservesValue = true and
2426
model = "generated"

rust/ql/test/library-tests/dataflow/modeled/inline-flow.expected

+2-14
Original file line numberDiff line numberDiff line change
@@ -13,24 +13,18 @@ edges
1313
| main.rs:12:9:12:9 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated |
1414
| main.rs:12:13:12:28 | Some(...) [Some] | main.rs:12:9:12:9 | a [Some] | provenance | |
1515
| main.rs:12:18:12:27 | source(...) | main.rs:12:13:12:28 | Some(...) [Some] | provenance | |
16-
| main.rs:14:9:14:9 | b [&ref, Some] | main.rs:15:10:15:10 | b [&ref, Some] | provenance | |
1716
| main.rs:14:9:14:9 | b [Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 |
18-
| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [&ref, Some] | provenance | generated |
19-
| main.rs:14:13:14:21 | a.clone() [&ref, Some] | main.rs:14:9:14:9 | b [&ref, Some] | provenance | |
17+
| main.rs:14:13:14:13 | a [Some] | main.rs:14:13:14:21 | a.clone() [Some] | provenance | generated |
2018
| main.rs:14:13:14:21 | a.clone() [Some] | main.rs:14:9:14:9 | b [Some] | provenance | |
21-
| main.rs:15:10:15:10 | b [&ref, Some] | main.rs:15:10:15:19 | b.unwrap() | provenance | MaD:2 |
2219
| main.rs:19:9:19:9 | a [Ok] | main.rs:20:10:20:19 | a.unwrap() | provenance | MaD:5 |
2320
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:13 | a [Ok] | provenance | |
2421
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | MaD:4 |
2522
| main.rs:19:9:19:9 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated |
2623
| main.rs:19:31:19:44 | Ok(...) [Ok] | main.rs:19:9:19:9 | a [Ok] | provenance | |
2724
| main.rs:19:34:19:43 | source(...) | main.rs:19:31:19:44 | Ok(...) [Ok] | provenance | |
28-
| main.rs:21:9:21:9 | b [&ref, Ok] | main.rs:22:10:22:10 | b [&ref, Ok] | provenance | |
2925
| main.rs:21:9:21:9 | b [Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:5 |
30-
| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [&ref, Ok] | provenance | generated |
31-
| main.rs:21:13:21:21 | a.clone() [&ref, Ok] | main.rs:21:9:21:9 | b [&ref, Ok] | provenance | |
26+
| main.rs:21:13:21:13 | a [Ok] | main.rs:21:13:21:21 | a.clone() [Ok] | provenance | generated |
3227
| main.rs:21:13:21:21 | a.clone() [Ok] | main.rs:21:9:21:9 | b [Ok] | provenance | |
33-
| main.rs:22:10:22:10 | b [&ref, Ok] | main.rs:22:10:22:19 | b.unwrap() | provenance | MaD:5 |
3428
| main.rs:26:9:26:9 | a | main.rs:27:10:27:10 | a | provenance | |
3529
| main.rs:26:9:26:9 | a | main.rs:28:13:28:21 | a.clone() | provenance | generated |
3630
| main.rs:26:13:26:22 | source(...) | main.rs:26:9:26:9 | a | provenance | |
@@ -66,23 +60,17 @@ nodes
6660
| main.rs:12:13:12:28 | Some(...) [Some] | semmle.label | Some(...) [Some] |
6761
| main.rs:12:18:12:27 | source(...) | semmle.label | source(...) |
6862
| main.rs:13:10:13:19 | a.unwrap() | semmle.label | a.unwrap() |
69-
| main.rs:14:9:14:9 | b [&ref, Some] | semmle.label | b [&ref, Some] |
7063
| main.rs:14:9:14:9 | b [Some] | semmle.label | b [Some] |
7164
| main.rs:14:13:14:13 | a [Some] | semmle.label | a [Some] |
72-
| main.rs:14:13:14:21 | a.clone() [&ref, Some] | semmle.label | a.clone() [&ref, Some] |
7365
| main.rs:14:13:14:21 | a.clone() [Some] | semmle.label | a.clone() [Some] |
74-
| main.rs:15:10:15:10 | b [&ref, Some] | semmle.label | b [&ref, Some] |
7566
| main.rs:15:10:15:19 | b.unwrap() | semmle.label | b.unwrap() |
7667
| main.rs:19:9:19:9 | a [Ok] | semmle.label | a [Ok] |
7768
| main.rs:19:31:19:44 | Ok(...) [Ok] | semmle.label | Ok(...) [Ok] |
7869
| main.rs:19:34:19:43 | source(...) | semmle.label | source(...) |
7970
| main.rs:20:10:20:19 | a.unwrap() | semmle.label | a.unwrap() |
80-
| main.rs:21:9:21:9 | b [&ref, Ok] | semmle.label | b [&ref, Ok] |
8171
| main.rs:21:9:21:9 | b [Ok] | semmle.label | b [Ok] |
8272
| main.rs:21:13:21:13 | a [Ok] | semmle.label | a [Ok] |
83-
| main.rs:21:13:21:21 | a.clone() [&ref, Ok] | semmle.label | a.clone() [&ref, Ok] |
8473
| main.rs:21:13:21:21 | a.clone() [Ok] | semmle.label | a.clone() [Ok] |
85-
| main.rs:22:10:22:10 | b [&ref, Ok] | semmle.label | b [&ref, Ok] |
8674
| main.rs:22:10:22:19 | b.unwrap() | semmle.label | b.unwrap() |
8775
| main.rs:26:9:26:9 | a | semmle.label | a |
8876
| main.rs:26:13:26:22 | source(...) | semmle.label | source(...) |

0 commit comments

Comments
 (0)