Merge pull request #18568 from paldepind/rust-container

Rust: Change array element content type into a general collection element content type
This commit is contained in:
Simon Friis Vindum
2025-01-24 09:40:46 +01:00
committed by GitHub
9 changed files with 119 additions and 116 deletions

View File

@@ -759,12 +759,15 @@ final class ReferenceContent extends Content, TReferenceContent {
}
/**
* An element in an array.
* An element in a collection where we do not track the specific collection
* type nor the placement of the element in the collection. Therefore the
* collection should be one where the elements are reasonably homogeneous,
* i.e., if one is tainted all elements are considered tainted.
*
* Examples include the elements of a set, array, vector, or stack.
*/
final class ArrayElementContent extends Content, TArrayElement {
ArrayElementContent() { this = TArrayElement() }
override string toString() { result = "array[]" }
final class ElementContent extends Content, TElementContent {
override string toString() { result = "element" }
}
/**
@@ -1086,19 +1089,19 @@ module RustDataFlow implements InputSig<Location> {
)
or
exists(IndexExprCfgNode arr |
c instanceof ArrayElementContent and
c instanceof ElementContent and
node1.asExpr() = arr.getBase() and
node2.asExpr() = arr
)
or
exists(ForExprCfgNode for |
c instanceof ArrayElementContent and
c instanceof ElementContent and
node1.asExpr() = for.getIterable() and
node2.asPat() = for.getPat()
)
or
exists(SlicePatCfgNode pat |
c instanceof ArrayElementContent and
c instanceof ElementContent and
node1.asPat() = pat and
node2.asPat() = pat.getAPat()
)
@@ -1178,7 +1181,7 @@ module RustDataFlow implements InputSig<Location> {
node2.asExpr() = tuple
)
or
c instanceof ArrayElementContent and
c instanceof ElementContent and
node1.asExpr() =
[
node2.asExpr().(ArrayRepeatExprCfgNode).getRepeatOperand(),
@@ -1188,7 +1191,7 @@ module RustDataFlow implements InputSig<Location> {
tupleAssignment(node1, node2.(PostUpdateNode).getPreUpdateNode(), c)
or
exists(AssignmentExprCfgNode assignment, IndexExprCfgNode index |
c instanceof ArrayElementContent and
c instanceof ElementContent and
assignment.getLhs() = index and
node1.asExpr() = assignment.getRhs() and
node2.(PostUpdateNode).getPreUpdateNode().asExpr() = index.getBase()
@@ -1561,7 +1564,7 @@ private module Cached {
TVariantFieldContent(VariantCanonicalPath v, string field) {
field = v.getVariant().getFieldList().(RecordFieldList).getAField().getName().getText()
} or
TArrayElement() or
TElementContent() or
TTuplePositionContent(int pos) {
pos in [0 .. max([
any(TuplePat pat).getNumberOfFields(),

View File

@@ -79,8 +79,8 @@ module Input implements InputSig<Location, RustDataFlow> {
arg = s.getExtendedCanonicalPath() + "::" + field
)
or
result = "ArrayElement" and
c = TArrayElement() and
result = "Element" and
c = TElementContent() and
arg = ""
or
exists(int pos |

View File

@@ -28,7 +28,7 @@
* - `Parameter[n]`: the `n`-th parameter of a callback. May be a range of form `x..y` (inclusive)
* and/or a comma-separated list.
* - `ReturnValue`: the value returned by a function call.
* - `ArrayElement`: an element of an array.
* - `Element`: an element in a collection.
* - `Variant[v::f]`: field `f` of the variant with canonical path `v`, for example
* `Variant[crate::ihex::Record::Data::value]`.
* - `Variant[v(i)]`: position `i` inside the variant with canonical path `v`, for example

View File

@@ -44,7 +44,7 @@ module RustTaintTracking implements InputSig<Location, RustDataFlow> {
// source is a collection.
exists(SingletonContentSet cs |
RustDataFlow::readStep(pred, cs, succ) and
cs.getContent() instanceof ArrayElementContent
cs.getContent() instanceof ElementContent
)
or
exists(FormatArgsExprCfgNode format | succ.asExpr() = format |
@@ -64,7 +64,7 @@ module RustTaintTracking implements InputSig<Location, RustDataFlow> {
predicate defaultImplicitTaintRead(Node::Node node, ContentSet cs) {
exists(node) and
exists(Content c | c = cs.(SingletonContentSet).getContent() |
c instanceof ArrayElementContent or
c instanceof ElementContent or
c instanceof ReferenceContent
)
}

View File

@@ -526,26 +526,26 @@ storeStep
| main.rs:306:41:306:41 | 2 | D | main.rs:306:14:306:43 | ...::D {...} |
| main.rs:324:18:324:27 | source(...) | C | main.rs:323:14:325:5 | C {...} |
| main.rs:326:27:326:27 | 2 | D | main.rs:326:14:326:29 | D {...} |
| main.rs:344:17:344:17 | 1 | array[] | main.rs:344:16:344:33 | [...] |
| main.rs:344:20:344:20 | 2 | array[] | main.rs:344:16:344:33 | [...] |
| main.rs:344:23:344:32 | source(...) | array[] | main.rs:344:16:344:33 | [...] |
| main.rs:348:17:348:26 | source(...) | array[] | main.rs:348:16:348:31 | [...; 10] |
| main.rs:352:17:352:17 | 1 | array[] | main.rs:352:16:352:24 | [...] |
| main.rs:352:20:352:20 | 2 | array[] | main.rs:352:16:352:24 | [...] |
| main.rs:352:23:352:23 | 3 | array[] | main.rs:352:16:352:24 | [...] |
| main.rs:358:17:358:17 | 1 | array[] | main.rs:358:16:358:33 | [...] |
| main.rs:358:20:358:20 | 2 | array[] | main.rs:358:16:358:33 | [...] |
| main.rs:358:23:358:32 | source(...) | array[] | main.rs:358:16:358:33 | [...] |
| main.rs:363:17:363:17 | 1 | array[] | main.rs:363:16:363:24 | [...] |
| main.rs:363:20:363:20 | 2 | array[] | main.rs:363:16:363:24 | [...] |
| main.rs:363:23:363:23 | 3 | array[] | main.rs:363:16:363:24 | [...] |
| main.rs:370:17:370:17 | 1 | array[] | main.rs:370:16:370:33 | [...] |
| main.rs:370:20:370:20 | 2 | array[] | main.rs:370:16:370:33 | [...] |
| main.rs:370:23:370:32 | source(...) | array[] | main.rs:370:16:370:33 | [...] |
| main.rs:381:24:381:24 | 1 | array[] | main.rs:381:23:381:31 | [...] |
| main.rs:381:27:381:27 | 2 | array[] | main.rs:381:23:381:31 | [...] |
| main.rs:381:30:381:30 | 3 | array[] | main.rs:381:23:381:31 | [...] |
| main.rs:384:18:384:27 | source(...) | array[] | main.rs:384:5:384:11 | [post] mut_arr |
| main.rs:344:17:344:17 | 1 | element | main.rs:344:16:344:33 | [...] |
| main.rs:344:20:344:20 | 2 | element | main.rs:344:16:344:33 | [...] |
| main.rs:344:23:344:32 | source(...) | element | main.rs:344:16:344:33 | [...] |
| main.rs:348:17:348:26 | source(...) | element | main.rs:348:16:348:31 | [...; 10] |
| main.rs:352:17:352:17 | 1 | element | main.rs:352:16:352:24 | [...] |
| main.rs:352:20:352:20 | 2 | element | main.rs:352:16:352:24 | [...] |
| main.rs:352:23:352:23 | 3 | element | main.rs:352:16:352:24 | [...] |
| main.rs:358:17:358:17 | 1 | element | main.rs:358:16:358:33 | [...] |
| main.rs:358:20:358:20 | 2 | element | main.rs:358:16:358:33 | [...] |
| main.rs:358:23:358:32 | source(...) | element | main.rs:358:16:358:33 | [...] |
| main.rs:363:17:363:17 | 1 | element | main.rs:363:16:363:24 | [...] |
| main.rs:363:20:363:20 | 2 | element | main.rs:363:16:363:24 | [...] |
| main.rs:363:23:363:23 | 3 | element | main.rs:363:16:363:24 | [...] |
| main.rs:370:17:370:17 | 1 | element | main.rs:370:16:370:33 | [...] |
| main.rs:370:20:370:20 | 2 | element | main.rs:370:16:370:33 | [...] |
| main.rs:370:23:370:32 | source(...) | element | main.rs:370:16:370:33 | [...] |
| main.rs:381:24:381:24 | 1 | element | main.rs:381:23:381:31 | [...] |
| main.rs:381:27:381:27 | 2 | element | main.rs:381:23:381:31 | [...] |
| main.rs:381:30:381:30 | 3 | element | main.rs:381:23:381:31 | [...] |
| main.rs:384:18:384:27 | source(...) | element | main.rs:384:5:384:11 | [post] mut_arr |
| main.rs:396:35:396:61 | default_name | captured default_name | main.rs:396:35:396:61 | \|...\| ... |
| main.rs:418:27:418:27 | 0 | Some | main.rs:418:22:418:28 | Some(...) |
readStep
@@ -612,20 +612,20 @@ readStep
| main.rs:332:28:332:43 | D {...} | D | main.rs:332:41:332:41 | n |
| main.rs:335:9:335:24 | C {...} | C | main.rs:335:22:335:22 | n |
| main.rs:336:9:336:24 | D {...} | D | main.rs:336:22:336:22 | n |
| main.rs:345:14:345:17 | arr1 | array[] | main.rs:345:14:345:20 | arr1[2] |
| main.rs:349:14:349:17 | arr2 | array[] | main.rs:349:14:349:20 | arr2[4] |
| main.rs:353:14:353:17 | arr3 | array[] | main.rs:353:14:353:20 | arr3[2] |
| main.rs:359:15:359:18 | arr1 | array[] | main.rs:359:9:359:10 | n1 |
| main.rs:364:15:364:18 | arr2 | array[] | main.rs:364:9:364:10 | n2 |
| main.rs:372:9:372:17 | SlicePat | array[] | main.rs:372:10:372:10 | a |
| main.rs:372:9:372:17 | SlicePat | array[] | main.rs:372:13:372:13 | b |
| main.rs:372:9:372:17 | SlicePat | array[] | main.rs:372:16:372:16 | c |
| main.rs:382:10:382:16 | mut_arr | array[] | main.rs:382:10:382:19 | mut_arr[1] |
| main.rs:384:5:384:11 | mut_arr | array[] | main.rs:384:5:384:14 | mut_arr[1] |
| main.rs:385:13:385:19 | mut_arr | array[] | main.rs:385:13:385:22 | mut_arr[1] |
| main.rs:387:10:387:16 | mut_arr | array[] | main.rs:387:10:387:19 | mut_arr[0] |
| main.rs:345:14:345:17 | arr1 | element | main.rs:345:14:345:20 | arr1[2] |
| main.rs:349:14:349:17 | arr2 | element | main.rs:349:14:349:20 | arr2[4] |
| main.rs:353:14:353:17 | arr3 | element | main.rs:353:14:353:20 | arr3[2] |
| main.rs:359:15:359:18 | arr1 | element | main.rs:359:9:359:10 | n1 |
| main.rs:364:15:364:18 | arr2 | element | main.rs:364:9:364:10 | n2 |
| main.rs:372:9:372:17 | SlicePat | element | main.rs:372:10:372:10 | a |
| main.rs:372:9:372:17 | SlicePat | element | main.rs:372:13:372:13 | b |
| main.rs:372:9:372:17 | SlicePat | element | main.rs:372:16:372:16 | c |
| main.rs:382:10:382:16 | mut_arr | element | main.rs:382:10:382:19 | mut_arr[1] |
| main.rs:384:5:384:11 | mut_arr | element | main.rs:384:5:384:14 | mut_arr[1] |
| main.rs:385:13:385:19 | mut_arr | element | main.rs:385:13:385:22 | mut_arr[1] |
| main.rs:387:10:387:16 | mut_arr | element | main.rs:387:10:387:19 | mut_arr[0] |
| main.rs:394:7:394:18 | TuplePat | tuple.0 | main.rs:394:8:394:11 | cond |
| main.rs:394:7:394:18 | TuplePat | tuple.1 | main.rs:394:14:394:17 | name |
| main.rs:394:23:394:27 | names | array[] | main.rs:394:7:394:18 | TuplePat |
| main.rs:394:23:394:27 | names | element | main.rs:394:7:394:18 | TuplePat |
| main.rs:396:35:396:61 | [post] \|...\| ... | captured default_name | main.rs:396:35:396:61 | [post] default_name |
| main.rs:396:38:396:49 | this | captured default_name | main.rs:396:38:396:49 | default_name |

View File

@@ -118,40 +118,40 @@ edges
| main.rs:331:11:331:12 | s1 [C] | main.rs:332:9:332:24 | C {...} [C] | provenance | |
| main.rs:332:9:332:24 | C {...} [C] | main.rs:332:22:332:22 | n | provenance | |
| main.rs:332:22:332:22 | n | main.rs:332:53:332:53 | n | provenance | |
| main.rs:344:9:344:12 | arr1 [array[]] | main.rs:345:14:345:17 | arr1 [array[]] | provenance | |
| main.rs:344:16:344:33 | [...] [array[]] | main.rs:344:9:344:12 | arr1 [array[]] | provenance | |
| main.rs:344:23:344:32 | source(...) | main.rs:344:16:344:33 | [...] [array[]] | provenance | |
| main.rs:344:9:344:12 | arr1 [element] | main.rs:345:14:345:17 | arr1 [element] | provenance | |
| main.rs:344:16:344:33 | [...] [element] | main.rs:344:9:344:12 | arr1 [element] | provenance | |
| main.rs:344:23:344:32 | source(...) | main.rs:344:16:344:33 | [...] [element] | provenance | |
| main.rs:345:9:345:10 | n1 | main.rs:346:10:346:11 | n1 | provenance | |
| main.rs:345:14:345:17 | arr1 [array[]] | main.rs:345:14:345:20 | arr1[2] | provenance | |
| main.rs:345:14:345:17 | arr1 [element] | main.rs:345:14:345:20 | arr1[2] | provenance | |
| main.rs:345:14:345:20 | arr1[2] | main.rs:345:9:345:10 | n1 | provenance | |
| main.rs:348:9:348:12 | arr2 [array[]] | main.rs:349:14:349:17 | arr2 [array[]] | provenance | |
| main.rs:348:16:348:31 | [...; 10] [array[]] | main.rs:348:9:348:12 | arr2 [array[]] | provenance | |
| main.rs:348:17:348:26 | source(...) | main.rs:348:16:348:31 | [...; 10] [array[]] | provenance | |
| main.rs:348:9:348:12 | arr2 [element] | main.rs:349:14:349:17 | arr2 [element] | provenance | |
| main.rs:348:16:348:31 | [...; 10] [element] | main.rs:348:9:348:12 | arr2 [element] | provenance | |
| main.rs:348:17:348:26 | source(...) | main.rs:348:16:348:31 | [...; 10] [element] | provenance | |
| main.rs:349:9:349:10 | n2 | main.rs:350:10:350:11 | n2 | provenance | |
| main.rs:349:14:349:17 | arr2 [array[]] | main.rs:349:14:349:20 | arr2[4] | provenance | |
| main.rs:349:14:349:17 | arr2 [element] | main.rs:349:14:349:20 | arr2[4] | provenance | |
| main.rs:349:14:349:20 | arr2[4] | main.rs:349:9:349:10 | n2 | provenance | |
| main.rs:358:9:358:12 | arr1 [array[]] | main.rs:359:15:359:18 | arr1 [array[]] | provenance | |
| main.rs:358:16:358:33 | [...] [array[]] | main.rs:358:9:358:12 | arr1 [array[]] | provenance | |
| main.rs:358:23:358:32 | source(...) | main.rs:358:16:358:33 | [...] [array[]] | provenance | |
| main.rs:358:9:358:12 | arr1 [element] | main.rs:359:15:359:18 | arr1 [element] | provenance | |
| main.rs:358:16:358:33 | [...] [element] | main.rs:358:9:358:12 | arr1 [element] | provenance | |
| main.rs:358:23:358:32 | source(...) | main.rs:358:16:358:33 | [...] [element] | provenance | |
| main.rs:359:9:359:10 | n1 | main.rs:360:14:360:15 | n1 | provenance | |
| main.rs:359:15:359:18 | arr1 [array[]] | main.rs:359:9:359:10 | n1 | provenance | |
| main.rs:370:9:370:12 | arr1 [array[]] | main.rs:371:11:371:14 | arr1 [array[]] | provenance | |
| main.rs:370:16:370:33 | [...] [array[]] | main.rs:370:9:370:12 | arr1 [array[]] | provenance | |
| main.rs:370:23:370:32 | source(...) | main.rs:370:16:370:33 | [...] [array[]] | provenance | |
| main.rs:371:11:371:14 | arr1 [array[]] | main.rs:372:9:372:17 | SlicePat [array[]] | provenance | |
| main.rs:372:9:372:17 | SlicePat [array[]] | main.rs:372:10:372:10 | a | provenance | |
| main.rs:372:9:372:17 | SlicePat [array[]] | main.rs:372:13:372:13 | b | provenance | |
| main.rs:372:9:372:17 | SlicePat [array[]] | main.rs:372:16:372:16 | c | provenance | |
| main.rs:359:15:359:18 | arr1 [element] | main.rs:359:9:359:10 | n1 | provenance | |
| main.rs:370:9:370:12 | arr1 [element] | main.rs:371:11:371:14 | arr1 [element] | provenance | |
| main.rs:370:16:370:33 | [...] [element] | main.rs:370:9:370:12 | arr1 [element] | provenance | |
| main.rs:370:23:370:32 | source(...) | main.rs:370:16:370:33 | [...] [element] | provenance | |
| main.rs:371:11:371:14 | arr1 [element] | main.rs:372:9:372:17 | SlicePat [element] | provenance | |
| main.rs:372:9:372:17 | SlicePat [element] | main.rs:372:10:372:10 | a | provenance | |
| main.rs:372:9:372:17 | SlicePat [element] | main.rs:372:13:372:13 | b | provenance | |
| main.rs:372:9:372:17 | SlicePat [element] | main.rs:372:16:372:16 | c | provenance | |
| main.rs:372:10:372:10 | a | main.rs:373:18:373:18 | a | provenance | |
| main.rs:372:13:372:13 | b | main.rs:374:18:374:18 | b | provenance | |
| main.rs:372:16:372:16 | c | main.rs:375:18:375:18 | c | provenance | |
| main.rs:384:5:384:11 | [post] mut_arr [array[]] | main.rs:385:13:385:19 | mut_arr [array[]] | provenance | |
| main.rs:384:5:384:11 | [post] mut_arr [array[]] | main.rs:387:10:387:16 | mut_arr [array[]] | provenance | |
| main.rs:384:18:384:27 | source(...) | main.rs:384:5:384:11 | [post] mut_arr [array[]] | provenance | |
| main.rs:384:5:384:11 | [post] mut_arr [element] | main.rs:385:13:385:19 | mut_arr [element] | provenance | |
| main.rs:384:5:384:11 | [post] mut_arr [element] | main.rs:387:10:387:16 | mut_arr [element] | provenance | |
| main.rs:384:18:384:27 | source(...) | main.rs:384:5:384:11 | [post] mut_arr [element] | provenance | |
| main.rs:385:9:385:9 | d | main.rs:386:10:386:10 | d | provenance | |
| main.rs:385:13:385:19 | mut_arr [array[]] | main.rs:385:13:385:22 | mut_arr[1] | provenance | |
| main.rs:385:13:385:19 | mut_arr [element] | main.rs:385:13:385:22 | mut_arr[1] | provenance | |
| main.rs:385:13:385:22 | mut_arr[1] | main.rs:385:9:385:9 | d | provenance | |
| main.rs:387:10:387:16 | mut_arr [array[]] | main.rs:387:10:387:19 | mut_arr[0] | provenance | |
| main.rs:387:10:387:16 | mut_arr [element] | main.rs:387:10:387:19 | mut_arr[0] | provenance | |
| main.rs:410:9:410:9 | s | main.rs:411:10:411:10 | s | provenance | |
| main.rs:410:25:410:26 | source(...) | main.rs:410:9:410:9 | s | provenance | |
nodes
@@ -293,44 +293,44 @@ nodes
| main.rs:332:9:332:24 | C {...} [C] | semmle.label | C {...} [C] |
| main.rs:332:22:332:22 | n | semmle.label | n |
| main.rs:332:53:332:53 | n | semmle.label | n |
| main.rs:344:9:344:12 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:344:16:344:33 | [...] [array[]] | semmle.label | [...] [array[]] |
| main.rs:344:9:344:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:344:16:344:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:344:23:344:32 | source(...) | semmle.label | source(...) |
| main.rs:345:9:345:10 | n1 | semmle.label | n1 |
| main.rs:345:14:345:17 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:345:14:345:17 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:345:14:345:20 | arr1[2] | semmle.label | arr1[2] |
| main.rs:346:10:346:11 | n1 | semmle.label | n1 |
| main.rs:348:9:348:12 | arr2 [array[]] | semmle.label | arr2 [array[]] |
| main.rs:348:16:348:31 | [...; 10] [array[]] | semmle.label | [...; 10] [array[]] |
| main.rs:348:9:348:12 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:348:16:348:31 | [...; 10] [element] | semmle.label | [...; 10] [element] |
| main.rs:348:17:348:26 | source(...) | semmle.label | source(...) |
| main.rs:349:9:349:10 | n2 | semmle.label | n2 |
| main.rs:349:14:349:17 | arr2 [array[]] | semmle.label | arr2 [array[]] |
| main.rs:349:14:349:17 | arr2 [element] | semmle.label | arr2 [element] |
| main.rs:349:14:349:20 | arr2[4] | semmle.label | arr2[4] |
| main.rs:350:10:350:11 | n2 | semmle.label | n2 |
| main.rs:358:9:358:12 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:358:16:358:33 | [...] [array[]] | semmle.label | [...] [array[]] |
| main.rs:358:9:358:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:358:16:358:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:358:23:358:32 | source(...) | semmle.label | source(...) |
| main.rs:359:9:359:10 | n1 | semmle.label | n1 |
| main.rs:359:15:359:18 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:359:15:359:18 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:360:14:360:15 | n1 | semmle.label | n1 |
| main.rs:370:9:370:12 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:370:16:370:33 | [...] [array[]] | semmle.label | [...] [array[]] |
| main.rs:370:9:370:12 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:370:16:370:33 | [...] [element] | semmle.label | [...] [element] |
| main.rs:370:23:370:32 | source(...) | semmle.label | source(...) |
| main.rs:371:11:371:14 | arr1 [array[]] | semmle.label | arr1 [array[]] |
| main.rs:372:9:372:17 | SlicePat [array[]] | semmle.label | SlicePat [array[]] |
| main.rs:371:11:371:14 | arr1 [element] | semmle.label | arr1 [element] |
| main.rs:372:9:372:17 | SlicePat [element] | semmle.label | SlicePat [element] |
| main.rs:372:10:372:10 | a | semmle.label | a |
| main.rs:372:13:372:13 | b | semmle.label | b |
| main.rs:372:16:372:16 | c | semmle.label | c |
| main.rs:373:18:373:18 | a | semmle.label | a |
| main.rs:374:18:374:18 | b | semmle.label | b |
| main.rs:375:18:375:18 | c | semmle.label | c |
| main.rs:384:5:384:11 | [post] mut_arr [array[]] | semmle.label | [post] mut_arr [array[]] |
| main.rs:384:5:384:11 | [post] mut_arr [element] | semmle.label | [post] mut_arr [element] |
| main.rs:384:18:384:27 | source(...) | semmle.label | source(...) |
| main.rs:385:9:385:9 | d | semmle.label | d |
| main.rs:385:13:385:19 | mut_arr [array[]] | semmle.label | mut_arr [array[]] |
| main.rs:385:13:385:19 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:385:13:385:22 | mut_arr[1] | semmle.label | mut_arr[1] |
| main.rs:386:10:386:10 | d | semmle.label | d |
| main.rs:387:10:387:16 | mut_arr [array[]] | semmle.label | mut_arr [array[]] |
| main.rs:387:10:387:16 | mut_arr [element] | semmle.label | mut_arr [element] |
| main.rs:387:10:387:19 | mut_arr[0] | semmle.label | mut_arr[0] |
| main.rs:410:9:410:9 | s | semmle.label | s |
| main.rs:410:25:410:26 | source(...) | semmle.label | source(...) |

View File

@@ -6,12 +6,12 @@ models
| 5 | Source: repo::test; crate::enum_source; test-source; ReturnValue.Variant[crate::MyFieldEnum::D::field_d] |
| 6 | Source: repo::test; crate::simple_source; test-source; ReturnValue |
| 7 | Summary: repo::test; crate::coerce; Argument[0]; ReturnValue; taint |
| 8 | Summary: repo::test; crate::get_array_element; Argument[0].ArrayElement; ReturnValue; value |
| 8 | Summary: repo::test; crate::get_array_element; Argument[0].Element; ReturnValue; value |
| 9 | Summary: repo::test; crate::get_struct_field; Argument[0].Struct[crate::MyStruct::field1]; ReturnValue; value |
| 10 | Summary: repo::test; crate::get_tuple_element; Argument[0].Tuple[0]; ReturnValue; value |
| 11 | Summary: repo::test; crate::get_var_field; Argument[0].Variant[crate::MyFieldEnum::C::field_c]; ReturnValue; value |
| 12 | Summary: repo::test; crate::get_var_pos; Argument[0].Variant[crate::MyPosEnum::A(0)]; ReturnValue; value |
| 13 | Summary: repo::test; crate::set_array_element; Argument[0]; ReturnValue.ArrayElement; value |
| 13 | Summary: repo::test; crate::set_array_element; Argument[0]; ReturnValue.Element; value |
| 14 | Summary: repo::test; crate::set_tuple_element; Argument[0]; ReturnValue.Tuple[1]; value |
| 15 | Summary: repo::test; crate::set_var_field; Argument[0]; ReturnValue.Variant[crate::MyFieldEnum::D::field_d]; value |
| 16 | Summary: repo::test; crate::set_var_pos; Argument[0]; ReturnValue.Variant[crate::MyPosEnum::B(0)]; value |
@@ -97,22 +97,22 @@ edges
| main.rs:138:9:138:9 | s | main.rs:139:29:139:29 | s | provenance | |
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | |
| main.rs:138:13:138:21 | source(...) | main.rs:138:9:138:9 | s | provenance | |
| main.rs:139:28:139:30 | [...] [array[]] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:8 |
| main.rs:139:28:139:30 | [...] [array[]] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:8 |
| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [array[]] | provenance | |
| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [array[]] | provenance | |
| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:8 |
| main.rs:139:28:139:30 | [...] [element] | main.rs:139:10:139:31 | get_array_element(...) | provenance | MaD:8 |
| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | |
| main.rs:139:29:139:29 | s | main.rs:139:28:139:30 | [...] [element] | provenance | |
| main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | |
| main.rs:148:9:148:9 | s | main.rs:149:33:149:33 | s | provenance | |
| main.rs:148:13:148:21 | source(...) | main.rs:148:9:148:9 | s | provenance | |
| main.rs:148:13:148:21 | source(...) | main.rs:148:9:148:9 | s | provenance | |
| main.rs:149:9:149:11 | arr [array[]] | main.rs:150:10:150:12 | arr [array[]] | provenance | |
| main.rs:149:9:149:11 | arr [array[]] | main.rs:150:10:150:12 | arr [array[]] | provenance | |
| main.rs:149:15:149:34 | set_array_element(...) [array[]] | main.rs:149:9:149:11 | arr [array[]] | provenance | |
| main.rs:149:15:149:34 | set_array_element(...) [array[]] | main.rs:149:9:149:11 | arr [array[]] | provenance | |
| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [array[]] | provenance | MaD:13 |
| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [array[]] | provenance | MaD:13 |
| main.rs:150:10:150:12 | arr [array[]] | main.rs:150:10:150:15 | arr[0] | provenance | |
| main.rs:150:10:150:12 | arr [array[]] | main.rs:150:10:150:15 | arr[0] | provenance | |
| main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | |
| main.rs:149:9:149:11 | arr [element] | main.rs:150:10:150:12 | arr [element] | provenance | |
| main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | |
| main.rs:149:15:149:34 | set_array_element(...) [element] | main.rs:149:9:149:11 | arr [element] | provenance | |
| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:13 |
| main.rs:149:33:149:33 | s | main.rs:149:15:149:34 | set_array_element(...) [element] | provenance | MaD:13 |
| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | |
| main.rs:150:10:150:12 | arr [element] | main.rs:150:10:150:15 | arr[0] | provenance | |
| main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | |
| main.rs:159:9:159:9 | s | main.rs:160:14:160:14 | s | provenance | |
| main.rs:159:13:159:22 | source(...) | main.rs:159:9:159:9 | s | provenance | |
@@ -290,22 +290,22 @@ nodes
| main.rs:138:13:138:21 | source(...) | semmle.label | source(...) |
| main.rs:139:10:139:31 | get_array_element(...) | semmle.label | get_array_element(...) |
| main.rs:139:10:139:31 | get_array_element(...) | semmle.label | get_array_element(...) |
| main.rs:139:28:139:30 | [...] [array[]] | semmle.label | [...] [array[]] |
| main.rs:139:28:139:30 | [...] [array[]] | semmle.label | [...] [array[]] |
| main.rs:139:28:139:30 | [...] [element] | semmle.label | [...] [element] |
| main.rs:139:28:139:30 | [...] [element] | semmle.label | [...] [element] |
| main.rs:139:29:139:29 | s | semmle.label | s |
| main.rs:139:29:139:29 | s | semmle.label | s |
| main.rs:148:9:148:9 | s | semmle.label | s |
| main.rs:148:9:148:9 | s | semmle.label | s |
| main.rs:148:13:148:21 | source(...) | semmle.label | source(...) |
| main.rs:148:13:148:21 | source(...) | semmle.label | source(...) |
| main.rs:149:9:149:11 | arr [array[]] | semmle.label | arr [array[]] |
| main.rs:149:9:149:11 | arr [array[]] | semmle.label | arr [array[]] |
| main.rs:149:15:149:34 | set_array_element(...) [array[]] | semmle.label | set_array_element(...) [array[]] |
| main.rs:149:15:149:34 | set_array_element(...) [array[]] | semmle.label | set_array_element(...) [array[]] |
| main.rs:149:9:149:11 | arr [element] | semmle.label | arr [element] |
| main.rs:149:9:149:11 | arr [element] | semmle.label | arr [element] |
| main.rs:149:15:149:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] |
| main.rs:149:15:149:34 | set_array_element(...) [element] | semmle.label | set_array_element(...) [element] |
| main.rs:149:33:149:33 | s | semmle.label | s |
| main.rs:149:33:149:33 | s | semmle.label | s |
| main.rs:150:10:150:12 | arr [array[]] | semmle.label | arr [array[]] |
| main.rs:150:10:150:12 | arr [array[]] | semmle.label | arr [array[]] |
| main.rs:150:10:150:12 | arr [element] | semmle.label | arr [element] |
| main.rs:150:10:150:12 | arr [element] | semmle.label | arr [element] |
| main.rs:150:10:150:15 | arr[0] | semmle.label | arr[0] |
| main.rs:150:10:150:15 | arr[0] | semmle.label | arr[0] |
| main.rs:159:9:159:9 | s | semmle.label | s |

View File

@@ -24,7 +24,7 @@ extensions:
- ["repo::test", "crate::set_var_field", "Argument[0]", "ReturnValue.Variant[crate::MyFieldEnum::D::field_d]", "value", "manual"]
- ["repo::test", "crate::get_struct_field", "Argument[0].Struct[crate::MyStruct::field1]", "ReturnValue", "value", "manual"]
- ["repo::test", "crate::set_struct_field", "Argument[0]", "ReturnValue.Struct[crate::MyStruct::field2]", "value", "manual"]
- ["repo::test", "crate::get_array_element", "Argument[0].ArrayElement", "ReturnValue", "value", "manual"]
- ["repo::test", "crate::set_array_element", "Argument[0]", "ReturnValue.ArrayElement", "value", "manual"]
- ["repo::test", "crate::get_array_element", "Argument[0].Element", "ReturnValue", "value", "manual"]
- ["repo::test", "crate::set_array_element", "Argument[0]", "ReturnValue.Element", "value", "manual"]
- ["repo::test", "crate::get_tuple_element", "Argument[0].Tuple[0]", "ReturnValue", "value", "manual"]
- ["repo::test", "crate::set_tuple_element", "Argument[0]", "ReturnValue.Tuple[1]", "value", "manual"]

View File

@@ -14,8 +14,8 @@ edges
| main.rs:38:23:38:29 | s[...] | main.rs:38:22:38:29 | &... [&ref] | provenance | |
| main.rs:53:13:53:15 | arr | main.rs:54:14:54:19 | arr[1] | provenance | |
| main.rs:53:19:53:28 | source(...) | main.rs:53:13:53:15 | arr | provenance | |
| main.rs:69:9:69:12 | [post] arr2 [array[]] | main.rs:70:14:70:17 | arr2 | provenance | |
| main.rs:69:19:69:28 | source(...) | main.rs:69:9:69:12 | [post] arr2 [array[]] | provenance | |
| main.rs:69:9:69:12 | [post] arr2 [element] | main.rs:70:14:70:17 | arr2 | provenance | |
| main.rs:69:19:69:28 | source(...) | main.rs:69:9:69:12 | [post] arr2 [element] | provenance | |
nodes
| main.rs:12:9:12:9 | a | semmle.label | a |
| main.rs:12:13:12:22 | source(...) | semmle.label | source(...) |
@@ -36,7 +36,7 @@ nodes
| main.rs:53:13:53:15 | arr | semmle.label | arr |
| main.rs:53:19:53:28 | source(...) | semmle.label | source(...) |
| main.rs:54:14:54:19 | arr[1] | semmle.label | arr[1] |
| main.rs:69:9:69:12 | [post] arr2 [array[]] | semmle.label | [post] arr2 [array[]] |
| main.rs:69:9:69:12 | [post] arr2 [element] | semmle.label | [post] arr2 [element] |
| main.rs:69:19:69:28 | source(...) | semmle.label | source(...) |
| main.rs:70:14:70:17 | arr2 | semmle.label | arr2 |
subpaths