diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll index b4346babb53b..624ee880e769 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/DataFlowImpl.qll @@ -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 { ) 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 { 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 { 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(), diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll index cfa2cf416fb0..b0d803849bdd 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/FlowSummaryImpl.qll @@ -79,8 +79,8 @@ module Input implements InputSig { arg = s.getExtendedCanonicalPath() + "::" + field ) or - result = "ArrayElement" and - c = TArrayElement() and + result = "Element" and + c = TElementContent() and arg = "" or exists(int pos | diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll index 47b6f2ef9acc..21e3c9e02c82 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/ModelsAsData.qll @@ -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 diff --git a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll index 14653337a894..1e1543c61e0b 100644 --- a/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll +++ b/rust/ql/lib/codeql/rust/dataflow/internal/TaintTrackingImpl.qll @@ -44,7 +44,7 @@ module RustTaintTracking implements InputSig { // 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 { 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 ) } diff --git a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected index 8691e4aedcf4..8fb07aecc0f7 100644 --- a/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected +++ b/rust/ql/test/library-tests/dataflow/local/DataFlowStep.expected @@ -514,26 +514,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 @@ -600,20 +600,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 | diff --git a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected index 95de98aeeb66..f4b7ae7a0e8b 100644 --- a/rust/ql/test/library-tests/dataflow/local/inline-flow.expected +++ b/rust/ql/test/library-tests/dataflow/local/inline-flow.expected @@ -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(...) | diff --git a/rust/ql/test/library-tests/dataflow/models/models.expected b/rust/ql/test/library-tests/dataflow/models/models.expected index 264342be93be..f7ca72e82cde 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.expected +++ b/rust/ql/test/library-tests/dataflow/models/models.expected @@ -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 | diff --git a/rust/ql/test/library-tests/dataflow/models/models.ext.yml b/rust/ql/test/library-tests/dataflow/models/models.ext.yml index 3d58126fac0a..47d1a3717fab 100644 --- a/rust/ql/test/library-tests/dataflow/models/models.ext.yml +++ b/rust/ql/test/library-tests/dataflow/models/models.ext.yml @@ -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"] 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 2de69da5312d..55240680d53d 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 @@ -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