diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll index 7b89e9714ff0..7ea2b45060f2 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/DataFlowPrivate.qll @@ -1436,7 +1436,7 @@ private predicate localFlowStepWithSummaries(Node node1, Node node2) { or readStep(node1, _, node2) or - DataFlowImplCommon::argumentValueFlowsThrough(node1, _, node2, _) + DataFlowImplCommon::argumentValueFlowsThroughExposedForCppOnly(node1, _, node2, _) } /** Holds if `node` flows to a node that is used in a `SwitchInstruction`. */ diff --git a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll index ff5f3e46e648..71acc779448a 100644 --- a/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll +++ b/cpp/ql/lib/semmle/code/cpp/ir/dataflow/internal/ProductFlow.qll @@ -546,7 +546,7 @@ module ProductFlow { Flow1::PathGraph::edges(pred1, succ1, _, _) and exists(ReturnKindExt returnKind | succ1.getNode() = getAnOutNodeExt(call, returnKind) and - returnKind = getParamReturnPosition(_, pred1.asParameterReturnNode()).getKind() + returnKind = getParamReturnPosition(pred1.asParameterReturnNode()).getKind() ) } @@ -574,7 +574,7 @@ module ProductFlow { Flow2::PathGraph::edges(pred2, succ2, _, _) and exists(ReturnKindExt returnKind | succ2.getNode() = getAnOutNodeExt(call, returnKind) and - returnKind = getParamReturnPosition(_, pred2.asParameterReturnNode()).getKind() + returnKind = getParamReturnPosition(pred2.asParameterReturnNode()).getKind() ) } diff --git a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected index b372493c5baf..449cb05a81e7 100644 --- a/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected +++ b/cpp/ql/test/experimental/query-tests/Security/CWE/CWE-409/DecompressionBombs/DecompressionBombs.expected @@ -49,25 +49,33 @@ edges | minizipTest.cpp:24:41:24:47 | *access to array | minizipTest.cpp:24:29:24:38 | **zip_reader | provenance | Config | | minizipTest.cpp:24:41:24:47 | *access to array | minizipTest.cpp:24:29:24:38 | *zip_reader | provenance | Config | | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:20:25:20:39 | *input | provenance | | +| zlibTest.cpp:16:26:16:30 | *input [Reverse] | zlibTest.cpp:20:25:20:39 | *input [Reverse] | provenance | | | zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:16:26:16:30 | *input | provenance | | | zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:24:17:24:26 | & ... | provenance | Config | | zlibTest.cpp:20:25:20:39 | *input | zlibTest.cpp:25:13:25:22 | & ... | provenance | Config | +| zlibTest.cpp:20:25:20:39 | *input [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | provenance | | | zlibTest.cpp:24:17:24:26 | & ... | zlibTest.cpp:25:13:25:22 | & ... | provenance | | | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:38:29:38:36 | *fileName | provenance | | +| zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | zlibTest.cpp:38:29:38:36 | *fileName [Reverse] | provenance | | | zlibTest.cpp:38:22:38:27 | call to gzopen | zlibTest.cpp:38:22:38:27 | call to gzopen | provenance | | | zlibTest.cpp:38:22:38:27 | call to gzopen | zlibTest.cpp:41:20:41:26 | inFileZ | provenance | | | zlibTest.cpp:38:29:38:36 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | provenance | | | zlibTest.cpp:38:29:38:36 | *fileName | zlibTest.cpp:38:22:38:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:38:29:38:36 | *fileName [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | provenance | | | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:48:29:48:36 | *fileName | provenance | | +| zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | zlibTest.cpp:48:29:48:36 | *fileName [Reverse] | provenance | | | zlibTest.cpp:48:22:48:27 | call to gzopen | zlibTest.cpp:48:22:48:27 | call to gzopen | provenance | | | zlibTest.cpp:48:22:48:27 | call to gzopen | zlibTest.cpp:51:38:51:44 | inFileZ | provenance | | | zlibTest.cpp:48:29:48:36 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | provenance | | | zlibTest.cpp:48:29:48:36 | *fileName | zlibTest.cpp:48:22:48:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:48:29:48:36 | *fileName [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | provenance | | | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:58:29:58:36 | *fileName | provenance | | +| zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | zlibTest.cpp:58:29:58:36 | *fileName [Reverse] | provenance | | | zlibTest.cpp:58:22:58:27 | call to gzopen | zlibTest.cpp:58:22:58:27 | call to gzopen | provenance | | | zlibTest.cpp:58:22:58:27 | call to gzopen | zlibTest.cpp:62:25:62:31 | inFileZ | provenance | | | zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | | zlibTest.cpp:58:29:58:36 | *fileName | zlibTest.cpp:58:22:58:27 | call to gzopen | provenance | Config | +| zlibTest.cpp:58:29:58:36 | *fileName [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | provenance | | | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:71:26:71:30 | *input | provenance | | | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:77:45:77:59 | *input | provenance | | | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv | provenance | | @@ -78,34 +86,76 @@ edges | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | provenance | | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | provenance | | +| zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:82:18:82:24 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | provenance | | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | provenance | | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | provenance | | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:83:19:83:25 | *access to array | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | provenance | | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | provenance | | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | provenance | | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:84:18:84:24 | *access to array | provenance | | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | provenance | | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | provenance | | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | provenance | | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | provenance | | | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | provenance | | | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | zlibTest.cpp:85:19:85:25 | *access to array | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | provenance | | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | provenance | | | zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | provenance | | | zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:85:19:85:25 | InflateString output argument | provenance | | | zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:80:33:80:36 | **argv | provenance | | -| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:80:33:80:36 | **argv [Return] | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | provenance | | +| zlibTest.cpp:85:19:85:25 | InflateString output argument | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | provenance | | | zstdTest.cpp:26:39:26:42 | **argv | zstdTest.cpp:27:35:27:41 | *access to array | provenance | | | zstdTest.cpp:26:39:26:42 | *argv | zstdTest.cpp:27:35:27:41 | *access to array | provenance | | | zstdTest.cpp:27:23:27:33 | call to fopen_orDie | zstdTest.cpp:27:23:27:33 | call to fopen_orDie | provenance | | @@ -161,41 +211,65 @@ nodes | minizipTest.cpp:28:13:28:19 | *access to array | semmle.label | *access to array | | zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | | zlibTest.cpp:16:26:16:30 | *input | semmle.label | *input | +| zlibTest.cpp:16:26:16:30 | *input [Reverse] | semmle.label | *input [Reverse] | +| zlibTest.cpp:16:26:16:30 | *input [Reverse] | semmle.label | *input [Reverse] | | zlibTest.cpp:20:25:20:39 | *input | semmle.label | *input | +| zlibTest.cpp:20:25:20:39 | *input [Reverse] | semmle.label | *input [Reverse] | | zlibTest.cpp:24:17:24:26 | & ... | semmle.label | & ... | | zlibTest.cpp:25:13:25:22 | & ... | semmle.label | & ... | | zlibTest.cpp:37:25:37:32 | *fileName | semmle.label | *fileName | | zlibTest.cpp:37:25:37:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | +| zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:38:22:38:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:38:22:38:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:38:29:38:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:38:29:38:36 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:41:20:41:26 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:47:26:47:33 | *fileName | semmle.label | *fileName | | zlibTest.cpp:47:26:47:33 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | +| zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:48:22:48:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:48:22:48:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:48:29:48:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:48:29:48:36 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:51:38:51:44 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:57:25:57:32 | *fileName | semmle.label | *fileName | | zlibTest.cpp:57:25:57:32 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | +| zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:58:22:58:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:58:22:58:27 | call to gzopen | semmle.label | call to gzopen | | zlibTest.cpp:58:29:58:36 | *fileName | semmle.label | *fileName | +| zlibTest.cpp:58:29:58:36 | *fileName [Reverse] | semmle.label | *fileName [Reverse] | | zlibTest.cpp:62:25:62:31 | inFileZ | semmle.label | inFileZ | | zlibTest.cpp:71:26:71:30 | *input | semmle.label | *input | | zlibTest.cpp:71:26:71:30 | *input | semmle.label | *input | | zlibTest.cpp:77:45:77:59 | *input | semmle.label | *input | | zlibTest.cpp:80:33:80:36 | **argv | semmle.label | **argv | | zlibTest.cpp:80:33:80:36 | **argv | semmle.label | **argv | -| zlibTest.cpp:80:33:80:36 | **argv [Return] | semmle.label | **argv [Return] | +| zlibTest.cpp:80:33:80:36 | **argv [Reverse] | semmle.label | **argv [Reverse] | | zlibTest.cpp:81:19:81:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | +| zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | semmle.label | UnsafeGzfread output argument | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | semmle.label | UnsafeGzfread output argument [Reverse] | | zlibTest.cpp:82:18:82:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | +| zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | semmle.label | UnsafeGzgets output argument | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | semmle.label | UnsafeGzgets output argument [Reverse] | | zlibTest.cpp:83:19:83:25 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | +| zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | semmle.label | UnsafeInflate output argument | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | semmle.label | UnsafeInflate output argument [Reverse] | | zlibTest.cpp:84:18:84:24 | *access to array | semmle.label | *access to array | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | +| zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | semmle.label | *access to array [Reverse] | | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | semmle.label | UnsafeGzread output argument | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | semmle.label | UnsafeGzread output argument [Reverse] | | zlibTest.cpp:85:19:85:25 | *access to array | semmle.label | *access to array | | zlibTest.cpp:85:19:85:25 | InflateString output argument | semmle.label | InflateString output argument | | zstdTest.cpp:26:39:26:42 | **argv | semmle.label | **argv | @@ -216,12 +290,20 @@ subpaths | main.cpp:9:27:9:30 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | libarchiveTests.cpp:30:45:30:48 | **argv | main.cpp:9:27:9:30 | libarchive_test output argument | | main.cpp:10:24:10:27 | **argv | minizipTest.cpp:12:42:12:45 | **argv | minizipTest.cpp:12:42:12:45 | **argv | main.cpp:10:24:10:27 | minizip_test output argument | | main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv | main.cpp:11:21:11:24 | zlib_test output argument | -| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Return] | main.cpp:11:21:11:24 | zlib_test output argument | -| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Return] | main.cpp:11:21:11:24 | zlib_test output argument | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | main.cpp:11:21:11:24 | zlib_test output argument | +| main.cpp:11:21:11:24 | **argv | zlibTest.cpp:80:33:80:36 | **argv | zlibTest.cpp:80:33:80:36 | **argv [Reverse] | main.cpp:11:21:11:24 | zlib_test output argument | | zlibTest.cpp:81:19:81:25 | *access to array | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:47:26:47:33 | *fileName | zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | +| zlibTest.cpp:81:19:81:25 | UnsafeGzfread output argument [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | zlibTest.cpp:47:26:47:33 | *fileName [Reverse] | zlibTest.cpp:81:19:81:25 | *access to array [Reverse] | | zlibTest.cpp:82:18:82:24 | *access to array | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:57:25:57:32 | *fileName | zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | +| zlibTest.cpp:82:18:82:24 | UnsafeGzgets output argument [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | zlibTest.cpp:57:25:57:32 | *fileName [Reverse] | zlibTest.cpp:82:18:82:24 | *access to array [Reverse] | | zlibTest.cpp:83:19:83:25 | *access to array | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:16:26:16:30 | *input | zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | +| zlibTest.cpp:83:19:83:25 | UnsafeInflate output argument [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | zlibTest.cpp:16:26:16:30 | *input [Reverse] | zlibTest.cpp:83:19:83:25 | *access to array [Reverse] | | zlibTest.cpp:84:18:84:24 | *access to array | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:37:25:37:32 | *fileName | zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | +| zlibTest.cpp:84:18:84:24 | UnsafeGzread output argument [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | zlibTest.cpp:37:25:37:32 | *fileName [Reverse] | zlibTest.cpp:84:18:84:24 | *access to array [Reverse] | | zlibTest.cpp:85:19:85:25 | *access to array | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:71:26:71:30 | *input | zlibTest.cpp:85:19:85:25 | InflateString output argument | #select | brotliTest.cpp:18:35:18:53 | *access to array | main.cpp:7:33:7:36 | **argv | brotliTest.cpp:18:35:18:53 | *access to array | The decompression output of $@ is not limited | brotliTest.cpp:18:5:18:27 | call to BrotliDecoderDecompress | BrotliDecoderDecompress | diff --git a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected index 43725bb4524e..050c26165069 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/ir-path-flow.expected @@ -1,9 +1,9 @@ edges | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | | -| A.cpp:25:7:25:10 | *this [post update] [c] | A.cpp:23:5:23:5 | *this [Return] [c] | provenance | | +| A.cpp:25:7:25:10 | *this [post update] [c] | A.cpp:23:5:23:5 | *this [Reverse] [c] | provenance | | | A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | *this [post update] [c] | provenance | | | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | | -| A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:27:10:27:12 | *this [Return] [c] | provenance | | +| A.cpp:27:22:27:25 | *this [post update] [c] | A.cpp:27:10:27:12 | *this [Reverse] [c] | provenance | | | A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | *this [post update] [c] | provenance | | | A.cpp:28:8:28:10 | *this [c] | A.cpp:28:23:28:26 | *this [c] | provenance | | | A.cpp:28:23:28:26 | *this [c] | A.cpp:28:29:28:29 | c | provenance | | @@ -68,28 +68,28 @@ edges | A.cpp:112:7:112:13 | *... = ... [a] | A.cpp:118:18:118:39 | *cc [a] | provenance | | | A.cpp:118:18:118:39 | *cc [a] | A.cpp:120:12:120:13 | *c1 [a] | provenance | | | A.cpp:120:12:120:13 | *c1 [a] | A.cpp:120:12:120:16 | a | provenance | | -| A.cpp:124:14:124:14 | *b [Return] [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | | +| A.cpp:124:14:124:14 | *b [Reverse] [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | | | A.cpp:124:14:124:14 | *b [c] | A.cpp:131:8:131:8 | f7 output argument [c] | provenance | | -| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:124:14:124:14 | *b [Return] [c] | provenance | | +| A.cpp:126:5:126:5 | set output argument [c] | A.cpp:124:14:124:14 | *b [Reverse] [c] | provenance | | | A.cpp:126:5:126:5 | set output argument [c] | A.cpp:124:14:124:14 | *b [c] | provenance | | | A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | | | A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | set output argument [c] | provenance | | | A.cpp:126:12:126:18 | new | A.cpp:126:12:126:18 | new | provenance | | | A.cpp:131:8:131:8 | f7 output argument [c] | A.cpp:132:10:132:10 | *b [c] | provenance | | | A.cpp:132:10:132:10 | *b [c] | A.cpp:132:10:132:13 | c | provenance | | -| A.cpp:140:5:140:5 | *this [Return] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | provenance | | -| A.cpp:140:5:140:5 | *this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | -| A.cpp:140:13:140:13 | *b [Return] [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | | +| A.cpp:140:5:140:5 | *this [Reverse] [*b, c] | A.cpp:151:12:151:24 | call to D [*b, c] | provenance | | +| A.cpp:140:5:140:5 | *this [Reverse] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:140:13:140:13 | *b [Reverse] [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | | | A.cpp:140:13:140:13 | *b [c] | A.cpp:151:18:151:18 | D output argument [c] | provenance | | | A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | | -| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:140:13:140:13 | *b [Return] [c] | provenance | | +| A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:140:13:140:13 | *b [Reverse] [c] | provenance | | | A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:140:13:140:13 | *b [c] | provenance | | | A.cpp:142:7:142:7 | *b [post update] [c] | A.cpp:143:7:143:31 | *... = ... [c] | provenance | | | A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | *b [post update] [c] | provenance | | | A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | | -| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:140:5:140:5 | *this [Return] [*b, c] | provenance | | -| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Return] [b] | provenance | | -| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Return] [b] | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [*b, c] | A.cpp:140:5:140:5 | *this [Reverse] [*b, c] | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Reverse] [b] | provenance | | +| A.cpp:143:7:143:10 | *this [post update] [b] | A.cpp:140:5:140:5 | *this [Reverse] [b] | provenance | | | A.cpp:143:7:143:31 | *... = ... [c] | A.cpp:143:7:143:10 | *this [post update] [*b, c] | provenance | | | A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | | | A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | *this [post update] [b] | provenance | | @@ -145,10 +145,10 @@ edges | A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | | | A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:184:7:184:23 | *... = ... [*next, head] | provenance | | | A.cpp:181:32:181:35 | *next [head] | A.cpp:184:7:184:23 | *... = ... [head] | provenance | | -| A.cpp:183:7:183:10 | *this [post update] [head] | A.cpp:181:5:181:10 | *this [Return] [head] | provenance | | +| A.cpp:183:7:183:10 | *this [post update] [head] | A.cpp:181:5:181:10 | *this [Reverse] [head] | provenance | | | A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | *this [post update] [head] | provenance | | -| A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | provenance | | -| A.cpp:184:7:184:10 | *this [post update] [*next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, head] | provenance | | +| A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | A.cpp:181:5:181:10 | *this [Reverse] [*next, *next, head] | provenance | | +| A.cpp:184:7:184:10 | *this [post update] [*next, head] | A.cpp:181:5:181:10 | *this [Reverse] [*next, head] | provenance | | | A.cpp:184:7:184:23 | *... = ... [*next, head] | A.cpp:184:7:184:10 | *this [post update] [*next, *next, head] | provenance | | | A.cpp:184:7:184:23 | *... = ... [head] | A.cpp:184:7:184:10 | *this [post update] [*next, head] | provenance | | | B.cpp:6:15:6:24 | new | B.cpp:6:15:6:24 | new | provenance | | @@ -177,14 +177,14 @@ edges | B.cpp:19:14:19:17 | *box1 [elem2] | B.cpp:19:10:19:24 | elem2 | provenance | | | B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | | | B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | | -| B.cpp:35:7:35:10 | *this [post update] [elem1] | B.cpp:33:5:33:8 | *this [Return] [elem1] | provenance | | +| B.cpp:35:7:35:10 | *this [post update] [elem1] | B.cpp:33:5:33:8 | *this [Reverse] [elem1] | provenance | | | B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | *this [post update] [elem1] | provenance | | -| B.cpp:36:7:36:10 | *this [post update] [elem2] | B.cpp:33:5:33:8 | *this [Return] [elem2] | provenance | | +| B.cpp:36:7:36:10 | *this [post update] [elem2] | B.cpp:33:5:33:8 | *this [Reverse] [elem2] | provenance | | | B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | *this [post update] [elem2] | provenance | | | B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:46:7:46:21 | *... = ... [elem1] | provenance | | | B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:46:7:46:21 | *... = ... [elem2] | provenance | | -| B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | provenance | | -| B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | provenance | | +| B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem1] | provenance | | +| B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem2] | provenance | | | B.cpp:46:7:46:21 | *... = ... [elem1] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | provenance | | | B.cpp:46:7:46:21 | *... = ... [elem2] | B.cpp:46:7:46:10 | *this [post update] [*box1, elem2] | provenance | | | C.cpp:18:12:18:18 | *new [s1] | C.cpp:19:5:19:5 | *c [s1] | provenance | | @@ -193,12 +193,14 @@ edges | C.cpp:18:12:18:18 | call to C [s3] | C.cpp:18:12:18:18 | *new [s3] | provenance | | | C.cpp:19:5:19:5 | *c [s1] | C.cpp:27:8:27:11 | *this [s1] | provenance | | | C.cpp:19:5:19:5 | *c [s3] | C.cpp:27:8:27:11 | *this [s3] | provenance | | -| C.cpp:22:3:22:3 | *this [Return] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | -| C.cpp:22:3:22:3 | *this [Return] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | -| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:22:3:22:3 | *this [Return] [s1] | provenance | | +| C.cpp:22:3:22:3 | *this [Reverse] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | +| C.cpp:22:3:22:3 | *this [Reverse] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | +| C.cpp:22:3:22:3 | *this [Reverse] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | +| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:22:3:22:3 | *this [Reverse] [s1] | provenance | | +| C.cpp:22:3:22:3 | *this [post update] [s1] | C.cpp:22:3:22:3 | *this [Reverse] [s1] | provenance | | | C.cpp:22:12:22:21 | new | C.cpp:22:3:22:3 | *this [post update] [s1] | provenance | | | C.cpp:22:12:22:21 | new | C.cpp:22:12:22:21 | new | provenance | | -| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:22:3:22:3 | *this [Return] [s3] | provenance | | +| C.cpp:24:5:24:8 | *this [post update] [s3] | C.cpp:22:3:22:3 | *this [Reverse] [s3] | provenance | | | C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | *this [post update] [s3] | provenance | | | C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | | | C.cpp:27:8:27:11 | *this [s1] | C.cpp:29:10:29:11 | *this [s1] | provenance | | @@ -210,12 +212,16 @@ edges | D.cpp:10:30:10:33 | elem | D.cpp:10:11:10:17 | *getElem | provenance | | | D.cpp:10:30:10:33 | elem | D.cpp:10:30:10:33 | elem | provenance | | | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | | -| D.cpp:11:29:11:32 | *this [post update] [elem] | D.cpp:11:10:11:16 | *this [Return] [elem] | provenance | | +| D.cpp:11:29:11:32 | *this [post update] [elem] | D.cpp:11:10:11:16 | *this [Reverse] [elem] | provenance | | | D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | *this [post update] [elem] | provenance | | +| D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | D.cpp:17:30:17:32 | *box [Reverse] [elem] | provenance | | | D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:30:17:32 | *this [*box, elem] | provenance | | +| D.cpp:17:30:17:32 | *box [Reverse] [elem] | D.cpp:17:30:17:32 | *box [Reverse] [elem] | provenance | | +| D.cpp:17:30:17:32 | *box [Reverse] [elem] | D.cpp:17:30:17:32 | *this [Reverse] [*box, elem] | provenance | | | D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | provenance | | | D.cpp:17:30:17:32 | *box [elem] | D.cpp:17:30:17:32 | *box [elem] | provenance | | | D.cpp:17:30:17:32 | *this [*box, elem] | D.cpp:17:30:17:32 | *box [elem] | provenance | | +| D.cpp:17:30:17:32 | *this [Reverse] [*box, elem] | D.cpp:17:11:17:17 | *this [Reverse] [*box, elem] | provenance | | | D.cpp:21:30:21:31 | *b2 [*box, elem] | D.cpp:22:10:22:11 | *b2 [*box, elem] | provenance | | | D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | provenance | | | D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] | provenance | | @@ -238,12 +244,16 @@ edges | D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | provenance | | | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | D.cpp:45:14:45:14 | *b [*box, elem] | provenance | | | D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | provenance | | -| D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:44:8:44:14 | *call to getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | provenance | | +| D.cpp:44:8:44:14 | *call to getBox1 [Reverse] [elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | D.cpp:44:8:44:14 | *call to getBox1 [Reverse] [elem] | provenance | | | D.cpp:45:14:45:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | | D.cpp:49:15:49:24 | new | D.cpp:49:15:49:24 | new | provenance | | | D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | provenance | | | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | D.cpp:52:14:52:14 | *b [*box, elem] | provenance | | -| D.cpp:51:8:51:14 | setElem output argument [elem] | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:51:8:51:14 | *call to getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | provenance | | +| D.cpp:51:8:51:14 | *call to getBox1 [Reverse] [elem] | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | provenance | | +| D.cpp:51:8:51:14 | setElem output argument [elem] | D.cpp:51:8:51:14 | *call to getBox1 [Reverse] [elem] | provenance | | | D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | provenance | | | D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | setElem output argument [elem] | provenance | | | D.cpp:52:14:52:14 | *b [*box, elem] | D.cpp:21:30:21:31 | *b2 [*box, elem] | provenance | | @@ -269,15 +279,15 @@ edges | E.cpp:30:23:30:26 | *data [post update] [*buffer] | E.cpp:30:21:30:21 | *p [post update] [data, *buffer] | provenance | | | E.cpp:32:10:32:10 | *b [*buffer] | E.cpp:32:13:32:18 | *buffer | provenance | | | E.cpp:33:18:33:19 | *& ... [data, *buffer] | E.cpp:19:27:19:27 | *p [data, *buffer] | provenance | | -| aliasing.cpp:8:23:8:23 | *s [Return] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | | +| aliasing.cpp:8:23:8:23 | *s [Reverse] [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | | | aliasing.cpp:8:23:8:23 | *s [m1] | aliasing.cpp:25:17:25:19 | pointerSetter output argument [m1] | provenance | | -| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:8:23:8:23 | *s [Return] [m1] | provenance | | +| aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:8:23:8:23 | *s [Reverse] [m1] | provenance | | | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | aliasing.cpp:8:23:8:23 | *s [m1] | provenance | | | aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | provenance | | | aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | | -| aliasing.cpp:12:25:12:25 | *s [Return] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | | +| aliasing.cpp:12:25:12:25 | *s [Reverse] [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | | | aliasing.cpp:12:25:12:25 | *s [m1] | aliasing.cpp:26:19:26:20 | referenceSetter output argument [m1] | provenance | | -| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:12:25:12:25 | *s [Return] [m1] | provenance | | +| aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:12:25:12:25 | *s [Reverse] [m1] | provenance | | | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | aliasing.cpp:12:25:12:25 | *s [m1] | provenance | | | aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | provenance | | | aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | | @@ -395,18 +405,18 @@ edges | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | arrays.cpp:50:20:50:22 | *ptr [data] | provenance | | | arrays.cpp:50:20:50:22 | *ptr [data] | arrays.cpp:50:8:50:25 | *access to array [data] | provenance | | | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | | -| by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:11:39:11:39 | *s [Return] [a] | provenance | | +| by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:11:39:11:39 | *s [Reverse] [a] | provenance | | | by_reference.cpp:12:5:12:5 | *s [post update] [a] | by_reference.cpp:11:39:11:39 | *s [a] | provenance | | | by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | *s [post update] [a] | provenance | | | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | | -| by_reference.cpp:16:5:16:8 | *this [post update] [a] | by_reference.cpp:15:8:15:18 | *this [Return] [a] | provenance | | +| by_reference.cpp:16:5:16:8 | *this [post update] [a] | by_reference.cpp:15:8:15:18 | *this [Reverse] [a] | provenance | | | by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | *this [post update] [a] | provenance | | | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | | -| by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | by_reference.cpp:19:8:19:20 | *this [Return] [a] | provenance | | +| by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | by_reference.cpp:19:8:19:20 | *this [Reverse] [a] | provenance | | | by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | | | by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | provenance | | | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | | -| by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | by_reference.cpp:23:8:23:26 | *this [Return] [a] | provenance | | +| by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | by_reference.cpp:23:8:23:26 | *this [Reverse] [a] | provenance | | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | provenance | | | by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:32:12:32:12 | *s [a] | provenance | | @@ -447,27 +457,27 @@ edges | by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | provenance | | | by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | provenance | | | by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | | -| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | | -| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | | -| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | | -| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | | +| by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | | | by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:102:21:102:39 | taint_inner_a_ptr output argument [a] | provenance | | | by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:103:27:103:35 | taint_inner_a_ptr output argument [a] | provenance | | | by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:106:21:106:41 | taint_inner_a_ptr output argument [a] | provenance | | | by_reference.cpp:83:31:83:35 | *inner [a] | by_reference.cpp:107:29:107:37 | taint_inner_a_ptr output argument [a] | provenance | | -| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:83:31:83:35 | *inner [Return] [a] | provenance | | +| by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | provenance | | | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | by_reference.cpp:83:31:83:35 | *inner [a] | provenance | | | by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | provenance | | | by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | | -| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | | -| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | | -| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | | -| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | | +| by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | | | by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:122:21:122:38 | taint_inner_a_ref output argument [a] | provenance | | | by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:123:21:123:36 | taint_inner_a_ref output argument [a] | provenance | | | by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:126:21:126:40 | taint_inner_a_ref output argument [a] | provenance | | | by_reference.cpp:87:31:87:35 | *inner [a] | by_reference.cpp:127:21:127:38 | taint_inner_a_ref output argument [a] | provenance | | -| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:87:31:87:35 | *inner [Return] [a] | provenance | | +| by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | provenance | | | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | by_reference.cpp:87:31:87:35 | *inner [a] | provenance | | | by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | provenance | | | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | | @@ -624,10 +634,10 @@ edges | complex.cpp:10:20:10:21 | b_ | complex.cpp:10:7:10:7 | *b | provenance | | | complex.cpp:10:20:10:21 | b_ | complex.cpp:10:20:10:21 | b_ | provenance | | | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | | -| complex.cpp:11:22:11:23 | *this [post update] [a_] | complex.cpp:11:8:11:11 | *this [Return] [a_] | provenance | | +| complex.cpp:11:22:11:23 | *this [post update] [a_] | complex.cpp:11:8:11:11 | *this [Reverse] [a_] | provenance | | | complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | *this [post update] [a_] | provenance | | | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | | -| complex.cpp:12:22:12:23 | *this [post update] [b_] | complex.cpp:12:8:12:11 | *this [Return] [b_] | provenance | | +| complex.cpp:12:22:12:23 | *this [post update] [b_] | complex.cpp:12:8:12:11 | *this [Reverse] [b_] | provenance | | | complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | *this [post update] [b_] | provenance | | | complex.cpp:40:17:40:17 | *b [inner, f, a_] | complex.cpp:42:8:42:8 | *b [inner, f, a_] | provenance | | | complex.cpp:40:17:40:17 | *b [inner, f, b_] | complex.cpp:43:8:43:8 | *b [inner, f, b_] | provenance | | @@ -696,8 +706,8 @@ edges | constructors.cpp:19:22:19:23 | *this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | | | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:9:19:9 | *b | provenance | | | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:19:22:19:23 | b_ | provenance | | -| constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:23:5:23:7 | *this [Return] [a_] | provenance | | -| constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:23:5:23:7 | *this [Return] [b_] | provenance | | +| constructors.cpp:23:5:23:7 | *this [post update] [a_] | constructors.cpp:23:5:23:7 | *this [Reverse] [a_] | provenance | | +| constructors.cpp:23:5:23:7 | *this [post update] [b_] | constructors.cpp:23:5:23:7 | *this [Reverse] [b_] | provenance | | | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | | | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | | | constructors.cpp:23:28:23:28 | a | constructors.cpp:23:5:23:7 | *this [post update] [a_] | provenance | | @@ -725,49 +735,79 @@ edges | constructors.cpp:46:9:46:9 | *h [a_] | constructors.cpp:26:15:26:15 | *f [a_] | provenance | | | constructors.cpp:46:9:46:9 | *h [b_] | constructors.cpp:26:15:26:15 | *f [b_] | provenance | | | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | | -| qualifiers.cpp:9:30:9:33 | *this [post update] [a] | qualifiers.cpp:9:10:9:13 | *this [Return] [a] | provenance | | +| qualifiers.cpp:9:30:9:33 | *this [post update] [a] | qualifiers.cpp:9:10:9:13 | *this [Reverse] [a] | provenance | | | qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | provenance | | +| qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | provenance | | | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | | -| qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | provenance | | +| qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | provenance | | | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | qualifiers.cpp:12:27:12:31 | *inner [a] | provenance | | | qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | provenance | | +| qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | provenance | | | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | | -| qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | provenance | | +| qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | provenance | | | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | qualifiers.cpp:13:29:13:33 | *inner [a] | provenance | | | qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | provenance | | +| qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | provenance | | +| qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | provenance | | +| qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | *this [Reverse] [*inner, a] | provenance | | +| qualifiers.cpp:18:32:18:36 | *this [Reverse] [*inner, a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | provenance | | | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | provenance | | | qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | provenance | | -| qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:22:11:22:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:22:11:22:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | qualifiers.cpp:22:11:22:18 | *call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | provenance | | | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | qualifiers.cpp:23:16:23:20 | *inner [a] | provenance | | | qualifiers.cpp:23:16:23:20 | *inner [a] | qualifiers.cpp:23:23:23:23 | a | provenance | | | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | provenance | | -| qualifiers.cpp:27:11:27:18 | setA output argument [a] | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:27:11:27:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | setA output argument [a] | qualifiers.cpp:27:11:27:18 | *call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | provenance | | | qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | setA output argument [a] | provenance | | | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | qualifiers.cpp:28:16:28:20 | *inner [a] | provenance | | | qualifiers.cpp:28:16:28:20 | *inner [a] | qualifiers.cpp:28:23:28:23 | a | provenance | | | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | provenance | | -| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | provenance | | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | provenance | | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | provenance | | | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | qualifiers.cpp:33:16:33:20 | *inner [a] | provenance | | | qualifiers.cpp:33:16:33:20 | *inner [a] | qualifiers.cpp:33:23:33:23 | a | provenance | | -| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | provenance | | | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | provenance | | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | provenance | | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | provenance | | | qualifiers.cpp:38:10:38:14 | *outer [*inner, a] | qualifiers.cpp:38:16:38:20 | *inner [a] | provenance | | | qualifiers.cpp:38:16:38:20 | *inner [a] | qualifiers.cpp:38:23:38:23 | a | provenance | | | qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | provenance | | -| qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:42:6:42:22 | ** ... [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:42:6:42:22 | ** ... [Reverse] [a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | qualifiers.cpp:42:6:42:22 | ** ... [Reverse] [a] | provenance | | | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | provenance | | | qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | provenance | | | qualifiers.cpp:43:10:43:14 | *outer [*inner, a] | qualifiers.cpp:43:16:43:20 | *inner [a] | provenance | | | qualifiers.cpp:43:16:43:20 | *inner [a] | qualifiers.cpp:43:23:43:23 | a | provenance | | | qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | provenance | | | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | provenance | | -| qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | provenance | | +| qualifiers.cpp:47:15:47:22 | *call to getInner [Reverse] [a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | qualifiers.cpp:47:15:47:22 | *call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | provenance | | | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | qualifiers.cpp:48:16:48:20 | *inner [a] | provenance | | | qualifiers.cpp:48:16:48:20 | *inner [a] | qualifiers.cpp:48:23:48:23 | a | provenance | | @@ -790,10 +830,10 @@ edges | simple.cpp:19:22:19:23 | b_ | simple.cpp:19:9:19:9 | *b | provenance | | | simple.cpp:19:22:19:23 | b_ | simple.cpp:19:22:19:23 | b_ | provenance | | | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | | -| simple.cpp:20:24:20:25 | *this [post update] [a_] | simple.cpp:20:10:20:13 | *this [Return] [a_] | provenance | | +| simple.cpp:20:24:20:25 | *this [post update] [a_] | simple.cpp:20:10:20:13 | *this [Reverse] [a_] | provenance | | | simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | *this [post update] [a_] | provenance | | | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | | -| simple.cpp:21:24:21:25 | *this [post update] [b_] | simple.cpp:21:10:21:13 | *this [Return] [b_] | provenance | | +| simple.cpp:21:24:21:25 | *this [post update] [b_] | simple.cpp:21:10:21:13 | *this [Reverse] [b_] | provenance | | | simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | *this [post update] [b_] | provenance | | | simple.cpp:26:15:26:15 | *f [a_] | simple.cpp:28:10:28:10 | *f [a_] | provenance | | | simple.cpp:26:15:26:15 | *f [b_] | simple.cpp:29:10:29:10 | *f [b_] | provenance | | @@ -884,11 +924,11 @@ edges | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | struct_init.c:46:16:46:24 | *pointerAB [a] | provenance | | | struct_init.c:46:16:46:24 | *pointerAB [a] | struct_init.c:14:24:14:25 | *ab [a] | provenance | | nodes -| A.cpp:23:5:23:5 | *this [Return] [c] | semmle.label | *this [Return] [c] | +| A.cpp:23:5:23:5 | *this [Reverse] [c] | semmle.label | *this [Reverse] [c] | | A.cpp:23:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | *this [post update] [c] | semmle.label | *this [post update] [c] | | A.cpp:25:7:25:17 | ... = ... | semmle.label | ... = ... | -| A.cpp:27:10:27:12 | *this [Return] [c] | semmle.label | *this [Return] [c] | +| A.cpp:27:10:27:12 | *this [Reverse] [c] | semmle.label | *this [Reverse] [c] | | A.cpp:27:17:27:17 | c | semmle.label | c | | A.cpp:27:22:27:25 | *this [post update] [c] | semmle.label | *this [post update] [c] | | A.cpp:27:22:27:32 | ... = ... | semmle.label | ... = ... | @@ -956,7 +996,7 @@ nodes | A.cpp:118:18:118:39 | *cc [a] | semmle.label | *cc [a] | | A.cpp:120:12:120:13 | *c1 [a] | semmle.label | *c1 [a] | | A.cpp:120:12:120:16 | a | semmle.label | a | -| A.cpp:124:14:124:14 | *b [Return] [c] | semmle.label | *b [Return] [c] | +| A.cpp:124:14:124:14 | *b [Reverse] [c] | semmle.label | *b [Reverse] [c] | | A.cpp:124:14:124:14 | *b [c] | semmle.label | *b [c] | | A.cpp:126:5:126:5 | set output argument [c] | semmle.label | set output argument [c] | | A.cpp:126:12:126:18 | new | semmle.label | new | @@ -964,10 +1004,10 @@ nodes | A.cpp:131:8:131:8 | f7 output argument [c] | semmle.label | f7 output argument [c] | | A.cpp:132:10:132:10 | *b [c] | semmle.label | *b [c] | | A.cpp:132:10:132:13 | c | semmle.label | c | -| A.cpp:140:5:140:5 | *this [Return] [*b, c] | semmle.label | *this [Return] [*b, c] | -| A.cpp:140:5:140:5 | *this [Return] [b] | semmle.label | *this [Return] [b] | -| A.cpp:140:5:140:5 | *this [Return] [b] | semmle.label | *this [Return] [b] | -| A.cpp:140:13:140:13 | *b [Return] [c] | semmle.label | *b [Return] [c] | +| A.cpp:140:5:140:5 | *this [Reverse] [*b, c] | semmle.label | *this [Reverse] [*b, c] | +| A.cpp:140:5:140:5 | *this [Reverse] [b] | semmle.label | *this [Reverse] [b] | +| A.cpp:140:5:140:5 | *this [Reverse] [b] | semmle.label | *this [Reverse] [b] | +| A.cpp:140:13:140:13 | *b [Reverse] [c] | semmle.label | *b [Reverse] [c] | | A.cpp:140:13:140:13 | *b [c] | semmle.label | *b [c] | | A.cpp:140:13:140:13 | b | semmle.label | b | | A.cpp:142:7:142:7 | *b [post update] [c] | semmle.label | *b [post update] [c] | @@ -1026,9 +1066,9 @@ nodes | A.cpp:169:12:169:18 | head | semmle.label | head | | A.cpp:173:26:173:26 | *o [c] | semmle.label | *o [c] | | A.cpp:173:26:173:26 | *o [c] | semmle.label | *o [c] | -| A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | semmle.label | *this [Return] [*next, *next, head] | -| A.cpp:181:5:181:10 | *this [Return] [*next, head] | semmle.label | *this [Return] [*next, head] | -| A.cpp:181:5:181:10 | *this [Return] [head] | semmle.label | *this [Return] [head] | +| A.cpp:181:5:181:10 | *this [Reverse] [*next, *next, head] | semmle.label | *this [Reverse] [*next, *next, head] | +| A.cpp:181:5:181:10 | *this [Reverse] [*next, head] | semmle.label | *this [Reverse] [*next, head] | +| A.cpp:181:5:181:10 | *this [Reverse] [head] | semmle.label | *this [Reverse] [head] | | A.cpp:181:15:181:21 | newHead | semmle.label | newHead | | A.cpp:181:32:181:35 | *next [*next, head] | semmle.label | *next [*next, head] | | A.cpp:181:32:181:35 | *next [head] | semmle.label | *next [head] | @@ -1060,16 +1100,16 @@ nodes | B.cpp:19:10:19:11 | *b2 [*box1, elem2] | semmle.label | *b2 [*box1, elem2] | | B.cpp:19:10:19:24 | elem2 | semmle.label | elem2 | | B.cpp:19:14:19:17 | *box1 [elem2] | semmle.label | *box1 [elem2] | -| B.cpp:33:5:33:8 | *this [Return] [elem1] | semmle.label | *this [Return] [elem1] | -| B.cpp:33:5:33:8 | *this [Return] [elem2] | semmle.label | *this [Return] [elem2] | +| B.cpp:33:5:33:8 | *this [Reverse] [elem1] | semmle.label | *this [Reverse] [elem1] | +| B.cpp:33:5:33:8 | *this [Reverse] [elem2] | semmle.label | *this [Reverse] [elem2] | | B.cpp:33:16:33:17 | e1 | semmle.label | e1 | | B.cpp:33:26:33:27 | e2 | semmle.label | e2 | | B.cpp:35:7:35:10 | *this [post update] [elem1] | semmle.label | *this [post update] [elem1] | | B.cpp:35:7:35:22 | ... = ... | semmle.label | ... = ... | | B.cpp:36:7:36:10 | *this [post update] [elem2] | semmle.label | *this [post update] [elem2] | | B.cpp:36:7:36:22 | ... = ... | semmle.label | ... = ... | -| B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | semmle.label | *this [Return] [*box1, elem1] | -| B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | semmle.label | *this [Return] [*box1, elem2] | +| B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem1] | semmle.label | *this [Reverse] [*box1, elem1] | +| B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem2] | semmle.label | *this [Reverse] [*box1, elem2] | | B.cpp:44:16:44:17 | *b1 [elem1] | semmle.label | *b1 [elem1] | | B.cpp:44:16:44:17 | *b1 [elem2] | semmle.label | *b1 [elem2] | | B.cpp:46:7:46:10 | *this [post update] [*box1, elem1] | semmle.label | *this [post update] [*box1, elem1] | @@ -1082,8 +1122,9 @@ nodes | C.cpp:18:12:18:18 | call to C [s3] | semmle.label | call to C [s3] | | C.cpp:19:5:19:5 | *c [s1] | semmle.label | *c [s1] | | C.cpp:19:5:19:5 | *c [s3] | semmle.label | *c [s3] | -| C.cpp:22:3:22:3 | *this [Return] [s1] | semmle.label | *this [Return] [s1] | -| C.cpp:22:3:22:3 | *this [Return] [s3] | semmle.label | *this [Return] [s3] | +| C.cpp:22:3:22:3 | *this [Reverse] [s1] | semmle.label | *this [Reverse] [s1] | +| C.cpp:22:3:22:3 | *this [Reverse] [s1] | semmle.label | *this [Reverse] [s1] | +| C.cpp:22:3:22:3 | *this [Reverse] [s3] | semmle.label | *this [Reverse] [s3] | | C.cpp:22:3:22:3 | *this [post update] [s1] | semmle.label | *this [post update] [s1] | | C.cpp:22:12:22:21 | new | semmle.label | new | | C.cpp:22:12:22:21 | new | semmle.label | new | @@ -1101,15 +1142,20 @@ nodes | D.cpp:10:30:10:33 | *this [elem] | semmle.label | *this [elem] | | D.cpp:10:30:10:33 | elem | semmle.label | elem | | D.cpp:10:30:10:33 | elem | semmle.label | elem | -| D.cpp:11:10:11:16 | *this [Return] [elem] | semmle.label | *this [Return] [elem] | +| D.cpp:11:10:11:16 | *this [Reverse] [elem] | semmle.label | *this [Reverse] [elem] | | D.cpp:11:24:11:24 | e | semmle.label | e | | D.cpp:11:29:11:32 | *this [post update] [elem] | semmle.label | *this [post update] [elem] | | D.cpp:11:29:11:36 | ... = ... | semmle.label | ... = ... | +| D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | semmle.label | **getBox1 [Reverse] [elem] | | D.cpp:17:11:17:17 | **getBox1 [elem] | semmle.label | **getBox1 [elem] | | D.cpp:17:11:17:17 | *this [*box, elem] | semmle.label | *this [*box, elem] | +| D.cpp:17:11:17:17 | *this [Reverse] [*box, elem] | semmle.label | *this [Reverse] [*box, elem] | +| D.cpp:17:30:17:32 | *box [Reverse] [elem] | semmle.label | *box [Reverse] [elem] | +| D.cpp:17:30:17:32 | *box [Reverse] [elem] | semmle.label | *box [Reverse] [elem] | | D.cpp:17:30:17:32 | *box [elem] | semmle.label | *box [elem] | | D.cpp:17:30:17:32 | *box [elem] | semmle.label | *box [elem] | | D.cpp:17:30:17:32 | *this [*box, elem] | semmle.label | *this [*box, elem] | +| D.cpp:17:30:17:32 | *this [Reverse] [*box, elem] | semmle.label | *this [Reverse] [*box, elem] | | D.cpp:21:30:21:31 | *b2 [*box, elem] | semmle.label | *b2 [*box, elem] | | D.cpp:22:10:22:11 | *b2 [*box, elem] | semmle.label | *b2 [*box, elem] | | D.cpp:22:10:22:33 | call to getElem | semmle.label | call to getElem | @@ -1130,11 +1176,13 @@ nodes | D.cpp:42:15:42:24 | new | semmle.label | new | | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | semmle.label | getBox1 output argument [*box, elem] | | D.cpp:44:5:44:26 | ... = ... | semmle.label | ... = ... | +| D.cpp:44:8:44:14 | *call to getBox1 [Reverse] [elem] | semmle.label | *call to getBox1 [Reverse] [elem] | | D.cpp:44:8:44:14 | *call to getBox1 [post update] [elem] | semmle.label | *call to getBox1 [post update] [elem] | | D.cpp:45:14:45:14 | *b [*box, elem] | semmle.label | *b [*box, elem] | | D.cpp:49:15:49:24 | new | semmle.label | new | | D.cpp:49:15:49:24 | new | semmle.label | new | | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | semmle.label | getBox1 output argument [*box, elem] | +| D.cpp:51:8:51:14 | *call to getBox1 [Reverse] [elem] | semmle.label | *call to getBox1 [Reverse] [elem] | | D.cpp:51:8:51:14 | setElem output argument [elem] | semmle.label | setElem output argument [elem] | | D.cpp:51:27:51:27 | e | semmle.label | e | | D.cpp:52:14:52:14 | *b [*box, elem] | semmle.label | *b [*box, elem] | @@ -1164,12 +1212,12 @@ nodes | E.cpp:32:10:32:10 | *b [*buffer] | semmle.label | *b [*buffer] | | E.cpp:32:13:32:18 | *buffer | semmle.label | *buffer | | E.cpp:33:18:33:19 | *& ... [data, *buffer] | semmle.label | *& ... [data, *buffer] | -| aliasing.cpp:8:23:8:23 | *s [Return] [m1] | semmle.label | *s [Return] [m1] | +| aliasing.cpp:8:23:8:23 | *s [Reverse] [m1] | semmle.label | *s [Reverse] [m1] | | aliasing.cpp:8:23:8:23 | *s [m1] | semmle.label | *s [m1] | | aliasing.cpp:9:3:9:3 | *s [post update] [m1] | semmle.label | *s [post update] [m1] | | aliasing.cpp:9:3:9:22 | ... = ... | semmle.label | ... = ... | | aliasing.cpp:9:11:9:20 | call to user_input | semmle.label | call to user_input | -| aliasing.cpp:12:25:12:25 | *s [Return] [m1] | semmle.label | *s [Return] [m1] | +| aliasing.cpp:12:25:12:25 | *s [Reverse] [m1] | semmle.label | *s [Reverse] [m1] | | aliasing.cpp:12:25:12:25 | *s [m1] | semmle.label | *s [m1] | | aliasing.cpp:13:3:13:3 | *s [post update] [m1] | semmle.label | *s [post update] [m1] | | aliasing.cpp:13:3:13:21 | ... = ... | semmle.label | ... = ... | @@ -1295,20 +1343,20 @@ nodes | arrays.cpp:50:10:50:17 | *indirect [*ptr, data] | semmle.label | *indirect [*ptr, data] | | arrays.cpp:50:20:50:22 | *ptr [data] | semmle.label | *ptr [data] | | arrays.cpp:50:27:50:30 | data | semmle.label | data | -| by_reference.cpp:11:39:11:39 | *s [Return] [a] | semmle.label | *s [Return] [a] | +| by_reference.cpp:11:39:11:39 | *s [Reverse] [a] | semmle.label | *s [Reverse] [a] | | by_reference.cpp:11:39:11:39 | *s [a] | semmle.label | *s [a] | | by_reference.cpp:11:48:11:52 | value | semmle.label | value | | by_reference.cpp:12:5:12:5 | *s [post update] [a] | semmle.label | *s [post update] [a] | | by_reference.cpp:12:5:12:16 | ... = ... | semmle.label | ... = ... | -| by_reference.cpp:15:8:15:18 | *this [Return] [a] | semmle.label | *this [Return] [a] | +| by_reference.cpp:15:8:15:18 | *this [Reverse] [a] | semmle.label | *this [Reverse] [a] | | by_reference.cpp:15:26:15:30 | value | semmle.label | value | | by_reference.cpp:16:5:16:8 | *this [post update] [a] | semmle.label | *this [post update] [a] | | by_reference.cpp:16:5:16:19 | ... = ... | semmle.label | ... = ... | -| by_reference.cpp:19:8:19:20 | *this [Return] [a] | semmle.label | *this [Return] [a] | +| by_reference.cpp:19:8:19:20 | *this [Reverse] [a] | semmle.label | *this [Reverse] [a] | | by_reference.cpp:19:28:19:32 | value | semmle.label | value | | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | semmle.label | setDirectly output argument [a] | | by_reference.cpp:20:23:20:27 | value | semmle.label | value | -| by_reference.cpp:23:8:23:26 | *this [Return] [a] | semmle.label | *this [Return] [a] | +| by_reference.cpp:23:8:23:26 | *this [Reverse] [a] | semmle.label | *this [Reverse] [a] | | by_reference.cpp:23:34:23:38 | value | semmle.label | value | | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | semmle.label | nonMemberSetA output argument [a] | | by_reference.cpp:24:25:24:29 | value | semmle.label | value | @@ -1348,12 +1396,12 @@ nodes | by_reference.cpp:68:21:68:30 | call to user_input | semmle.label | call to user_input | | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | semmle.label | call to nonMemberGetA | | by_reference.cpp:69:22:69:23 | *& ... [a] | semmle.label | *& ... [a] | -| by_reference.cpp:83:31:83:35 | *inner [Return] [a] | semmle.label | *inner [Return] [a] | +| by_reference.cpp:83:31:83:35 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | | by_reference.cpp:83:31:83:35 | *inner [a] | semmle.label | *inner [a] | | by_reference.cpp:84:3:84:7 | *inner [post update] [a] | semmle.label | *inner [post update] [a] | | by_reference.cpp:84:3:84:25 | ... = ... | semmle.label | ... = ... | | by_reference.cpp:84:14:84:23 | call to user_input | semmle.label | call to user_input | -| by_reference.cpp:87:31:87:35 | *inner [Return] [a] | semmle.label | *inner [Return] [a] | +| by_reference.cpp:87:31:87:35 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | | by_reference.cpp:87:31:87:35 | *inner [a] | semmle.label | *inner [a] | | by_reference.cpp:88:3:88:7 | *inner [post update] [a] | semmle.label | *inner [post update] [a] | | by_reference.cpp:88:3:88:24 | ... = ... | semmle.label | ... = ... | @@ -1519,11 +1567,11 @@ nodes | complex.cpp:10:20:10:21 | *this [b_] | semmle.label | *this [b_] | | complex.cpp:10:20:10:21 | b_ | semmle.label | b_ | | complex.cpp:10:20:10:21 | b_ | semmle.label | b_ | -| complex.cpp:11:8:11:11 | *this [Return] [a_] | semmle.label | *this [Return] [a_] | +| complex.cpp:11:8:11:11 | *this [Reverse] [a_] | semmle.label | *this [Reverse] [a_] | | complex.cpp:11:17:11:17 | a | semmle.label | a | | complex.cpp:11:22:11:23 | *this [post update] [a_] | semmle.label | *this [post update] [a_] | | complex.cpp:11:22:11:27 | ... = ... | semmle.label | ... = ... | -| complex.cpp:12:8:12:11 | *this [Return] [b_] | semmle.label | *this [Return] [b_] | +| complex.cpp:12:8:12:11 | *this [Reverse] [b_] | semmle.label | *this [Reverse] [b_] | | complex.cpp:12:17:12:17 | b | semmle.label | b | | complex.cpp:12:22:12:23 | *this [post update] [b_] | semmle.label | *this [post update] [b_] | | complex.cpp:12:22:12:27 | ... = ... | semmle.label | ... = ... | @@ -1598,8 +1646,8 @@ nodes | constructors.cpp:19:22:19:23 | *this [b_] | semmle.label | *this [b_] | | constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ | | constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ | -| constructors.cpp:23:5:23:7 | *this [Return] [a_] | semmle.label | *this [Return] [a_] | -| constructors.cpp:23:5:23:7 | *this [Return] [b_] | semmle.label | *this [Return] [b_] | +| constructors.cpp:23:5:23:7 | *this [Reverse] [a_] | semmle.label | *this [Reverse] [a_] | +| constructors.cpp:23:5:23:7 | *this [Reverse] [b_] | semmle.label | *this [Reverse] [b_] | | constructors.cpp:23:5:23:7 | *this [post update] [a_] | semmle.label | *this [post update] [a_] | | constructors.cpp:23:5:23:7 | *this [post update] [b_] | semmle.label | *this [post update] [b_] | | constructors.cpp:23:13:23:13 | a | semmle.label | a | @@ -1624,39 +1672,56 @@ nodes | constructors.cpp:43:9:43:9 | *g [b_] | semmle.label | *g [b_] | | constructors.cpp:46:9:46:9 | *h [a_] | semmle.label | *h [a_] | | constructors.cpp:46:9:46:9 | *h [b_] | semmle.label | *h [b_] | -| qualifiers.cpp:9:10:9:13 | *this [Return] [a] | semmle.label | *this [Return] [a] | +| qualifiers.cpp:9:10:9:13 | *this [Reverse] [a] | semmle.label | *this [Reverse] [a] | | qualifiers.cpp:9:21:9:25 | value | semmle.label | value | | qualifiers.cpp:9:30:9:33 | *this [post update] [a] | semmle.label | *this [post update] [a] | | qualifiers.cpp:9:30:9:44 | ... = ... | semmle.label | ... = ... | -| qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | semmle.label | *inner [Return] [a] | +| qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | | qualifiers.cpp:12:27:12:31 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:12:40:12:44 | value | semmle.label | value | | qualifiers.cpp:12:49:12:53 | *inner [post update] [a] | semmle.label | *inner [post update] [a] | | qualifiers.cpp:12:49:12:64 | ... = ... | semmle.label | ... = ... | -| qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | semmle.label | *inner [Return] [a] | +| qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | | qualifiers.cpp:13:29:13:33 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:13:42:13:46 | value | semmle.label | value | | qualifiers.cpp:13:51:13:55 | *inner [post update] [a] | semmle.label | *inner [post update] [a] | | qualifiers.cpp:13:51:13:65 | ... = ... | semmle.label | ... = ... | +| qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | semmle.label | **getInner [Reverse] [a] | +| qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | semmle.label | *this [Reverse] [*inner, a] | +| qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:18:32:18:36 | *inner [Reverse] [a] | semmle.label | *inner [Reverse] [a] | +| qualifiers.cpp:18:32:18:36 | *this [Reverse] [*inner, a] | semmle.label | *this [Reverse] [*inner, a] | | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | | qualifiers.cpp:22:5:22:38 | ... = ... | semmle.label | ... = ... | +| qualifiers.cpp:22:11:22:18 | *call to getInner [Reverse] [a] | semmle.label | *call to getInner [Reverse] [a] | | qualifiers.cpp:22:11:22:18 | *call to getInner [post update] [a] | semmle.label | *call to getInner [post update] [a] | | qualifiers.cpp:22:27:22:36 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:23:10:23:14 | *outer [*inner, a] | semmle.label | *outer [*inner, a] | | qualifiers.cpp:23:16:23:20 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:23:23:23:23 | a | semmle.label | a | | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | +| qualifiers.cpp:27:11:27:18 | *call to getInner [Reverse] [a] | semmle.label | *call to getInner [Reverse] [a] | | qualifiers.cpp:27:11:27:18 | setA output argument [a] | semmle.label | setA output argument [a] | | qualifiers.cpp:27:28:27:37 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:28:10:28:14 | *outer [*inner, a] | semmle.label | *outer [*inner, a] | | qualifiers.cpp:28:16:28:20 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:28:23:28:23 | a | semmle.label | a | | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | semmle.label | *call to getInner [Reverse] [a] | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | semmle.label | *call to getInner [Reverse] [a] | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | semmle.label | pointerSetA output argument [Reverse] [a] | | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | semmle.label | pointerSetA output argument [a] | | qualifiers.cpp:32:35:32:44 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:33:10:33:14 | *outer [*inner, a] | semmle.label | *outer [*inner, a] | | qualifiers.cpp:33:16:33:20 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:33:23:33:23 | a | semmle.label | a | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | semmle.label | ** ... [Reverse] [a] | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | semmle.label | ** ... [Reverse] [a] | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | semmle.label | referenceSetA output argument [Reverse] [a] | | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | semmle.label | referenceSetA output argument [a] | | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | | qualifiers.cpp:37:38:37:47 | call to user_input | semmle.label | call to user_input | @@ -1664,6 +1729,7 @@ nodes | qualifiers.cpp:38:16:38:20 | *inner [a] | semmle.label | *inner [a] | | qualifiers.cpp:38:23:38:23 | a | semmle.label | a | | qualifiers.cpp:42:5:42:40 | ... = ... | semmle.label | ... = ... | +| qualifiers.cpp:42:6:42:22 | ** ... [Reverse] [a] | semmle.label | ** ... [Reverse] [a] | | qualifiers.cpp:42:6:42:22 | ** ... [post update] [a] | semmle.label | ** ... [post update] [a] | | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | | qualifiers.cpp:42:29:42:38 | call to user_input | semmle.label | call to user_input | @@ -1672,6 +1738,7 @@ nodes | qualifiers.cpp:43:23:43:23 | a | semmle.label | a | | qualifiers.cpp:47:5:47:42 | ... = ... | semmle.label | ... = ... | | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | semmle.label | getInner output argument [*inner, a] | +| qualifiers.cpp:47:15:47:22 | *call to getInner [Reverse] [a] | semmle.label | *call to getInner [Reverse] [a] | | qualifiers.cpp:47:15:47:22 | *call to getInner [post update] [a] | semmle.label | *call to getInner [post update] [a] | | qualifiers.cpp:47:31:47:40 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:48:10:48:14 | *outer [*inner, a] | semmle.label | *outer [*inner, a] | @@ -1698,11 +1765,11 @@ nodes | simple.cpp:19:22:19:23 | *this [b_] | semmle.label | *this [b_] | | simple.cpp:19:22:19:23 | b_ | semmle.label | b_ | | simple.cpp:19:22:19:23 | b_ | semmle.label | b_ | -| simple.cpp:20:10:20:13 | *this [Return] [a_] | semmle.label | *this [Return] [a_] | +| simple.cpp:20:10:20:13 | *this [Reverse] [a_] | semmle.label | *this [Reverse] [a_] | | simple.cpp:20:19:20:19 | a | semmle.label | a | | simple.cpp:20:24:20:25 | *this [post update] [a_] | semmle.label | *this [post update] [a_] | | simple.cpp:20:24:20:29 | ... = ... | semmle.label | ... = ... | -| simple.cpp:21:10:21:13 | *this [Return] [b_] | semmle.label | *this [Return] [b_] | +| simple.cpp:21:10:21:13 | *this [Reverse] [b_] | semmle.label | *this [Reverse] [b_] | | simple.cpp:21:19:21:19 | b | semmle.label | b | | simple.cpp:21:24:21:25 | *this [post update] [b_] | semmle.label | *this [post update] [b_] | | simple.cpp:21:24:21:29 | ... = ... | semmle.label | ... = ... | @@ -1796,67 +1863,79 @@ nodes | struct_init.c:46:10:46:14 | *outer [*pointerAB, a] | semmle.label | *outer [*pointerAB, a] | | struct_init.c:46:16:46:24 | *pointerAB [a] | semmle.label | *pointerAB [a] | subpaths -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Return] [c] | A.cpp:31:14:31:21 | call to B [c] | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Reverse] [c] | A.cpp:31:14:31:21 | call to B [c] | | A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | A.cpp:29:15:29:18 | **make [c] | A.cpp:48:12:48:18 | *call to make [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:55:5:55:5 | set output argument [c] | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Reverse] [c] | A.cpp:55:5:55:5 | set output argument [c] | | A.cpp:56:10:56:10 | *b [c] | A.cpp:28:8:28:10 | *this [c] | A.cpp:28:8:28:10 | *get | A.cpp:56:10:56:17 | call to get | | A.cpp:57:11:57:24 | *new [c] | A.cpp:28:8:28:10 | *this [c] | A.cpp:28:8:28:10 | *get | A.cpp:57:10:57:32 | call to get | -| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Return] [c] | A.cpp:57:11:57:24 | call to B [c] | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | *this [Reverse] [c] | A.cpp:57:11:57:24 | call to B [c] | | A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | A.cpp:85:9:85:14 | **setOnB [c] | A.cpp:64:10:64:15 | *call to setOnB [c] | | A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | A.cpp:78:6:78:15 | **setOnBWrap [c] | A.cpp:73:10:73:19 | *call to setOnBWrap [c] | | A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | A.cpp:85:9:85:14 | **setOnB [c] | A.cpp:81:10:81:15 | *call to setOnB [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:90:7:90:8 | set output argument [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Return] [c] | A.cpp:126:5:126:5 | set output argument [c] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | *this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Reverse] [c] | A.cpp:90:7:90:8 | set output argument [c] | +| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | *this [Reverse] [c] | A.cpp:126:5:126:5 | set output argument [c] | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | *this [Reverse] [b] | A.cpp:151:12:151:24 | call to D [b] | | A.cpp:152:10:152:13 | *b [c] | A.cpp:173:26:173:26 | *o [c] | A.cpp:173:26:173:26 | *o [c] | A.cpp:152:10:152:13 | sink output argument [c] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | *this [Return] [head] | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | A.cpp:181:5:181:10 | *this [Return] [*next, head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | -| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:181:5:181:10 | *this [Return] [*next, *next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | *this [Return] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | *this [Return] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:44:5:44:8 | *this [Return] [*box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | *this [Reverse] [head] | A.cpp:160:18:160:60 | call to MyList [head] | +| A.cpp:161:38:161:39 | *l1 [head] | A.cpp:181:32:181:35 | *next [head] | A.cpp:181:5:181:10 | *this [Reverse] [*next, head] | A.cpp:161:18:161:40 | call to MyList [*next, head] | +| A.cpp:162:38:162:39 | *l2 [*next, head] | A.cpp:181:32:181:35 | *next [*next, head] | A.cpp:181:5:181:10 | *this [Reverse] [*next, *next, head] | A.cpp:162:18:162:40 | call to MyList [*next, *next, head] | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | *this [Reverse] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] | +| B.cpp:8:25:8:26 | *b1 [elem1] | B.cpp:44:16:44:17 | *b1 [elem1] | B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [*box1, elem1] | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | *this [Reverse] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] | +| B.cpp:17:25:17:26 | *b1 [elem2] | B.cpp:44:16:44:17 | *b1 [elem2] | B.cpp:44:5:44:8 | *this [Reverse] [*box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [*box1, elem2] | | D.cpp:22:10:22:11 | *b2 [*box, elem] | D.cpp:17:11:17:17 | *this [*box, elem] | D.cpp:17:11:17:17 | **getBox1 [elem] | D.cpp:22:14:22:20 | *call to getBox1 [elem] | | D.cpp:22:14:22:20 | *call to getBox1 [elem] | D.cpp:10:11:10:17 | *this [elem] | D.cpp:10:11:10:17 | *getElem | D.cpp:22:10:22:33 | call to getElem | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Return] [elem] | D.cpp:37:8:37:10 | setElem output argument [elem] | -| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Return] [elem] | D.cpp:51:8:51:14 | setElem output argument [elem] | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Return] [a] | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Return] [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Reverse] [elem] | D.cpp:37:8:37:10 | setElem output argument [elem] | +| D.cpp:44:8:44:14 | *call to getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | *this [Reverse] [*box, elem] | D.cpp:44:5:44:5 | getBox1 output argument [*box, elem] | +| D.cpp:51:8:51:14 | *call to getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | **getBox1 [Reverse] [elem] | D.cpp:17:11:17:17 | *this [Reverse] [*box, elem] | D.cpp:51:5:51:5 | getBox1 output argument [*box, elem] | +| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | *this [Reverse] [elem] | D.cpp:51:8:51:14 | setElem output argument [elem] | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Reverse] [a] | by_reference.cpp:20:5:20:8 | setDirectly output argument [a] | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Reverse] [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [a] | by_reference.cpp:24:19:24:22 | nonMemberSetA output argument [a] | | by_reference.cpp:40:12:40:15 | *this [a] | by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:35:9:35:19 | *getDirectly | by_reference.cpp:40:18:40:28 | call to getDirectly | | by_reference.cpp:44:26:44:29 | *this [a] | by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:31:16:31:28 | *nonMemberGetA | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Return] [a] | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | *this [Reverse] [a] | by_reference.cpp:50:3:50:3 | setDirectly output argument [a] | | by_reference.cpp:51:8:51:8 | *s [a] | by_reference.cpp:35:9:35:19 | *this [a] | by_reference.cpp:35:9:35:19 | *getDirectly | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | *this [Return] [a] | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | *this [Reverse] [a] | by_reference.cpp:56:3:56:3 | setIndirectly output argument [a] | | by_reference.cpp:57:8:57:8 | *s [a] | by_reference.cpp:39:9:39:21 | *this [a] | by_reference.cpp:39:9:39:21 | *getIndirectly | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | *this [Return] [a] | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | *this [Reverse] [a] | by_reference.cpp:62:3:62:3 | setThroughNonMember output argument [a] | | by_reference.cpp:63:8:63:8 | *s [a] | by_reference.cpp:43:9:43:27 | *this [a] | by_reference.cpp:43:9:43:27 | *getThroughNonMember | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Return] [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [Reverse] [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | | by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | *s [a] | by_reference.cpp:68:17:68:18 | nonMemberSetA output argument [a] | | by_reference.cpp:69:22:69:23 | *& ... [a] | by_reference.cpp:31:46:31:46 | *s [a] | by_reference.cpp:31:16:31:28 | *nonMemberGetA | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | | complex.cpp:42:16:42:16 | *f [a_] | complex.cpp:9:7:9:7 | *this [a_] | complex.cpp:9:7:9:7 | *a | complex.cpp:42:18:42:18 | call to a | | complex.cpp:43:16:43:16 | *f [b_] | complex.cpp:10:7:10:7 | *this [b_] | complex.cpp:10:7:10:7 | *b | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Return] [a_] | complex.cpp:53:12:53:12 | setA output argument [a_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Return] [b_] | complex.cpp:54:12:54:12 | setB output argument [b_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Return] [a_] | complex.cpp:55:12:55:12 | setA output argument [a_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Return] [b_] | complex.cpp:56:12:56:12 | setB output argument [b_] | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Reverse] [a_] | complex.cpp:53:12:53:12 | setA output argument [a_] | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Reverse] [b_] | complex.cpp:54:12:54:12 | setB output argument [b_] | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | *this [Reverse] [a_] | complex.cpp:55:12:55:12 | setA output argument [a_] | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | *this [Reverse] [b_] | complex.cpp:56:12:56:12 | setB output argument [b_] | | constructors.cpp:28:10:28:10 | *f [a_] | constructors.cpp:18:9:18:9 | *this [a_] | constructors.cpp:18:9:18:9 | *a | constructors.cpp:28:12:28:12 | call to a | | constructors.cpp:29:10:29:10 | *f [b_] | constructors.cpp:19:9:19:9 | *this [b_] | constructors.cpp:19:9:19:9 | *b | constructors.cpp:29:12:29:12 | call to b | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Return] [a_] | constructors.cpp:34:9:34:9 | call to Foo [a_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Return] [b_] | constructors.cpp:35:9:35:9 | call to Foo [b_] | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Return] [a_] | constructors.cpp:36:9:36:9 | call to Foo [a_] | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Return] [b_] | constructors.cpp:36:9:36:9 | call to Foo [b_] | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | *this [Return] [a] | qualifiers.cpp:27:11:27:18 | setA output argument [a] | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | *inner [Return] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Reverse] [a_] | constructors.cpp:34:9:34:9 | call to Foo [a_] | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Reverse] [b_] | constructors.cpp:35:9:35:9 | call to Foo [b_] | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | *this [Reverse] [a_] | constructors.cpp:36:9:36:9 | call to Foo [a_] | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | *this [Reverse] [b_] | constructors.cpp:36:9:36:9 | call to Foo [b_] | +| qualifiers.cpp:22:11:22:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:22:5:22:9 | getInner output argument [*inner, a] | +| qualifiers.cpp:27:11:27:18 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:27:5:27:9 | getInner output argument [*inner, a] | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | *this [Reverse] [a] | qualifiers.cpp:27:11:27:18 | setA output argument [a] | +| qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:32:17:32:21 | getInner output argument [*inner, a] | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | +| qualifiers.cpp:32:23:32:30 | pointerSetA output argument [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | *call to getInner [Reverse] [a] | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | *inner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | *inner [a] | qualifiers.cpp:32:23:32:30 | pointerSetA output argument [a] | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | *inner [Return] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | +| qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:37:20:37:24 | getInner output argument [*inner, a] | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | +| qualifiers.cpp:37:19:37:35 | referenceSetA output argument [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:37:19:37:35 | ** ... [Reverse] [a] | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | *inner [Reverse] [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | *inner [a] | qualifiers.cpp:37:19:37:35 | referenceSetA output argument [a] | +| qualifiers.cpp:42:6:42:22 | ** ... [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:42:7:42:11 | getInner output argument [*inner, a] | +| qualifiers.cpp:47:15:47:22 | *call to getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | **getInner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | *this [Reverse] [*inner, a] | qualifiers.cpp:47:6:47:11 | getInner output argument [*inner, a] | | simple.cpp:28:10:28:10 | *f [a_] | simple.cpp:18:9:18:9 | *this [a_] | simple.cpp:18:9:18:9 | *a | simple.cpp:28:12:28:12 | call to a | | simple.cpp:29:10:29:10 | *f [b_] | simple.cpp:19:9:19:9 | *this [b_] | simple.cpp:19:9:19:9 | *b | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Return] [a_] | simple.cpp:39:5:39:5 | setA output argument [a_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Return] [b_] | simple.cpp:40:5:40:5 | setB output argument [b_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Return] [a_] | simple.cpp:41:5:41:5 | setA output argument [a_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Return] [b_] | simple.cpp:42:5:42:5 | setB output argument [b_] | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Reverse] [a_] | simple.cpp:39:5:39:5 | setA output argument [a_] | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Reverse] [b_] | simple.cpp:40:5:40:5 | setB output argument [b_] | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | *this [Reverse] [a_] | simple.cpp:41:5:41:5 | setA output argument [a_] | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | *this [Reverse] [b_] | simple.cpp:42:5:42:5 | setB output argument [b_] | | simple.cpp:84:14:84:20 | *this [f2, f1] | simple.cpp:78:9:78:15 | *this [f2, f1] | simple.cpp:78:9:78:15 | *getf2f1 | simple.cpp:84:14:84:20 | call to getf2f1 | | struct_init.c:24:10:24:12 | *& ... [a] | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:14:24:14:25 | *ab [a] | struct_init.c:24:10:24:12 | absink output argument [a] | #select diff --git a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected index 98e930290732..7156f2fd5c49 100644 --- a/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected +++ b/cpp/ql/test/library-tests/dataflow/fields/path-flow.expected @@ -1,9 +1,9 @@ edges | A.cpp:23:10:23:10 | c | A.cpp:25:7:25:17 | ... = ... | provenance | | -| A.cpp:25:7:25:10 | this [post update] [c] | A.cpp:23:5:23:5 | this [Return] [c] | provenance | | +| A.cpp:25:7:25:10 | this [post update] [c] | A.cpp:23:5:23:5 | this [Reverse] [c] | provenance | | | A.cpp:25:7:25:17 | ... = ... | A.cpp:25:7:25:10 | this [post update] [c] | provenance | | | A.cpp:27:17:27:17 | c | A.cpp:27:22:27:32 | ... = ... | provenance | | -| A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:27:10:27:12 | this [Return] [c] | provenance | | +| A.cpp:27:22:27:25 | this [post update] [c] | A.cpp:27:10:27:12 | this [Reverse] [c] | provenance | | | A.cpp:27:22:27:32 | ... = ... | A.cpp:27:22:27:25 | this [post update] [c] | provenance | | | A.cpp:28:8:28:10 | this [c] | A.cpp:28:23:28:26 | this [c] | provenance | | | A.cpp:28:23:28:26 | this [c] | A.cpp:28:29:28:29 | c | provenance | | @@ -54,27 +54,27 @@ edges | A.cpp:103:14:103:14 | c [a] | A.cpp:120:12:120:13 | c1 [a] | provenance | | | A.cpp:107:12:107:13 | c1 [a] | A.cpp:107:16:107:16 | a | provenance | | | A.cpp:120:12:120:13 | c1 [a] | A.cpp:120:16:120:16 | a | provenance | | -| A.cpp:124:14:124:14 | b [Return] [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | | +| A.cpp:124:14:124:14 | b [Reverse] [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | | | A.cpp:124:14:124:14 | b [c] | A.cpp:131:8:131:8 | ref arg b [c] | provenance | | -| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [Return] [c] | provenance | | +| A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [Reverse] [c] | provenance | | | A.cpp:126:5:126:5 | ref arg b [c] | A.cpp:124:14:124:14 | b [c] | provenance | | | A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | provenance | | | A.cpp:126:12:126:18 | new | A.cpp:126:5:126:5 | ref arg b [c] | provenance | | | A.cpp:131:8:131:8 | ref arg b [c] | A.cpp:132:10:132:10 | b [c] | provenance | | | A.cpp:132:10:132:10 | b [c] | A.cpp:132:13:132:13 | c | provenance | | -| A.cpp:140:5:140:5 | this [Return] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | provenance | | -| A.cpp:140:5:140:5 | this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | +| A.cpp:140:5:140:5 | this [Reverse] [b, c] | A.cpp:151:12:151:24 | call to D [b, c] | provenance | | +| A.cpp:140:5:140:5 | this [Reverse] [b] | A.cpp:151:12:151:24 | call to D [b] | provenance | | | A.cpp:140:13:140:13 | b | A.cpp:143:7:143:31 | ... = ... | provenance | | -| A.cpp:140:13:140:13 | b [Return] [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | | +| A.cpp:140:13:140:13 | b [Reverse] [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | | | A.cpp:140:13:140:13 | b [c] | A.cpp:151:18:151:18 | ref arg b [c] | provenance | | -| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [Return] [c] | provenance | | +| A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [Reverse] [c] | provenance | | | A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:140:13:140:13 | b [c] | provenance | | | A.cpp:142:7:142:7 | b [post update] [c] | A.cpp:143:7:143:31 | ... = ... [c] | provenance | | | A.cpp:142:7:142:20 | ... = ... | A.cpp:142:7:142:7 | b [post update] [c] | provenance | | | A.cpp:142:14:142:20 | new | A.cpp:142:7:142:20 | ... = ... | provenance | | -| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:140:5:140:5 | this [Return] [b, c] | provenance | | -| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Return] [b] | provenance | | -| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Return] [b] | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b, c] | A.cpp:140:5:140:5 | this [Reverse] [b, c] | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Reverse] [b] | provenance | | +| A.cpp:143:7:143:10 | this [post update] [b] | A.cpp:140:5:140:5 | this [Reverse] [b] | provenance | | | A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | | | A.cpp:143:7:143:31 | ... = ... | A.cpp:143:7:143:10 | this [post update] [b] | provenance | | | A.cpp:143:7:143:31 | ... = ... [c] | A.cpp:143:7:143:10 | this [post update] [b, c] | provenance | | @@ -126,10 +126,10 @@ edges | A.cpp:181:15:181:21 | newHead | A.cpp:183:7:183:20 | ... = ... | provenance | | | A.cpp:181:32:181:35 | next [head] | A.cpp:184:7:184:23 | ... = ... [head] | provenance | | | A.cpp:181:32:181:35 | next [next, head] | A.cpp:184:7:184:23 | ... = ... [next, head] | provenance | | -| A.cpp:183:7:183:10 | this [post update] [head] | A.cpp:181:5:181:10 | this [Return] [head] | provenance | | +| A.cpp:183:7:183:10 | this [post update] [head] | A.cpp:181:5:181:10 | this [Reverse] [head] | provenance | | | A.cpp:183:7:183:20 | ... = ... | A.cpp:183:7:183:10 | this [post update] [head] | provenance | | -| A.cpp:184:7:184:10 | this [post update] [next, head] | A.cpp:181:5:181:10 | this [Return] [next, head] | provenance | | -| A.cpp:184:7:184:10 | this [post update] [next, next, head] | A.cpp:181:5:181:10 | this [Return] [next, next, head] | provenance | | +| A.cpp:184:7:184:10 | this [post update] [next, head] | A.cpp:181:5:181:10 | this [Reverse] [next, head] | provenance | | +| A.cpp:184:7:184:10 | this [post update] [next, next, head] | A.cpp:181:5:181:10 | this [Reverse] [next, next, head] | provenance | | | A.cpp:184:7:184:23 | ... = ... [head] | A.cpp:184:7:184:10 | this [post update] [next, head] | provenance | | | A.cpp:184:7:184:23 | ... = ... [next, head] | A.cpp:184:7:184:10 | this [post update] [next, next, head] | provenance | | | B.cpp:6:15:6:24 | new | B.cpp:7:25:7:25 | e | provenance | | @@ -152,25 +152,25 @@ edges | B.cpp:19:14:19:17 | box1 [elem2] | B.cpp:19:20:19:24 | elem2 | provenance | | | B.cpp:33:16:33:17 | e1 | B.cpp:35:7:35:22 | ... = ... | provenance | | | B.cpp:33:26:33:27 | e2 | B.cpp:36:7:36:22 | ... = ... | provenance | | -| B.cpp:35:7:35:10 | this [post update] [elem1] | B.cpp:33:5:33:8 | this [Return] [elem1] | provenance | | +| B.cpp:35:7:35:10 | this [post update] [elem1] | B.cpp:33:5:33:8 | this [Reverse] [elem1] | provenance | | | B.cpp:35:7:35:22 | ... = ... | B.cpp:35:7:35:10 | this [post update] [elem1] | provenance | | -| B.cpp:36:7:36:10 | this [post update] [elem2] | B.cpp:33:5:33:8 | this [Return] [elem2] | provenance | | +| B.cpp:36:7:36:10 | this [post update] [elem2] | B.cpp:33:5:33:8 | this [Reverse] [elem2] | provenance | | | B.cpp:36:7:36:22 | ... = ... | B.cpp:36:7:36:10 | this [post update] [elem2] | provenance | | | B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:46:7:46:21 | ... = ... [elem1] | provenance | | | B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:46:7:46:21 | ... = ... [elem2] | provenance | | -| B.cpp:46:7:46:10 | this [post update] [box1, elem1] | B.cpp:44:5:44:8 | this [Return] [box1, elem1] | provenance | | -| B.cpp:46:7:46:10 | this [post update] [box1, elem2] | B.cpp:44:5:44:8 | this [Return] [box1, elem2] | provenance | | +| B.cpp:46:7:46:10 | this [post update] [box1, elem1] | B.cpp:44:5:44:8 | this [Reverse] [box1, elem1] | provenance | | +| B.cpp:46:7:46:10 | this [post update] [box1, elem2] | B.cpp:44:5:44:8 | this [Reverse] [box1, elem2] | provenance | | | B.cpp:46:7:46:21 | ... = ... [elem1] | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | provenance | | | B.cpp:46:7:46:21 | ... = ... [elem2] | B.cpp:46:7:46:10 | this [post update] [box1, elem2] | provenance | | | C.cpp:18:12:18:18 | call to C [s1] | C.cpp:19:5:19:5 | c [s1] | provenance | | | C.cpp:18:12:18:18 | call to C [s3] | C.cpp:19:5:19:5 | c [s3] | provenance | | | C.cpp:19:5:19:5 | c [s1] | C.cpp:27:8:27:11 | this [s1] | provenance | | | C.cpp:19:5:19:5 | c [s3] | C.cpp:27:8:27:11 | this [s3] | provenance | | -| C.cpp:22:3:22:3 | this [Return] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | -| C.cpp:22:3:22:3 | this [Return] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | -| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:22:3:22:3 | this [Return] [s1] | provenance | | +| C.cpp:22:3:22:3 | this [Reverse] [s1] | C.cpp:18:12:18:18 | call to C [s1] | provenance | | +| C.cpp:22:3:22:3 | this [Reverse] [s3] | C.cpp:18:12:18:18 | call to C [s3] | provenance | | +| C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | C.cpp:22:3:22:3 | this [Reverse] [s1] | provenance | | | C.cpp:22:12:22:21 | new | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | provenance | | -| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:22:3:22:3 | this [Return] [s3] | provenance | | +| C.cpp:24:5:24:8 | this [post update] [s3] | C.cpp:22:3:22:3 | this [Reverse] [s3] | provenance | | | C.cpp:24:5:24:25 | ... = ... | C.cpp:24:5:24:8 | this [post update] [s3] | provenance | | | C.cpp:24:16:24:25 | new | C.cpp:24:5:24:25 | ... = ... | provenance | | | C.cpp:27:8:27:11 | this [s1] | C.cpp:29:10:29:11 | this [s1] | provenance | | @@ -180,9 +180,11 @@ edges | D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | this [elem] | provenance | | | D.cpp:10:30:10:33 | this [elem] | D.cpp:10:30:10:33 | elem | provenance | | | D.cpp:11:24:11:24 | e | D.cpp:11:29:11:36 | ... = ... | provenance | | -| D.cpp:11:29:11:32 | this [post update] [elem] | D.cpp:11:10:11:16 | this [Return] [elem] | provenance | | +| D.cpp:11:29:11:32 | this [post update] [elem] | D.cpp:11:10:11:16 | this [Reverse] [elem] | provenance | | | D.cpp:11:29:11:36 | ... = ... | D.cpp:11:29:11:32 | this [post update] [elem] | provenance | | | D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | this [box, elem] | provenance | | +| D.cpp:17:30:17:32 | box [Reverse] [elem] | D.cpp:17:30:17:32 | this [Reverse] [box, elem] | provenance | | +| D.cpp:17:30:17:32 | this [Reverse] [box, elem] | D.cpp:17:11:17:17 | this [Reverse] [box, elem] | provenance | | | D.cpp:17:30:17:32 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | provenance | | | D.cpp:21:30:21:31 | b2 [box, elem] | D.cpp:22:10:22:11 | b2 [box, elem] | provenance | | | D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | provenance | | @@ -203,11 +205,15 @@ edges | D.cpp:42:15:42:24 | new | D.cpp:44:5:44:26 | ... = ... | provenance | | | D.cpp:44:5:44:5 | ref arg b [box, elem] | D.cpp:45:14:45:14 | b [box, elem] | provenance | | | D.cpp:44:5:44:26 | ... = ... | D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | provenance | | -| D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | provenance | | +| D.cpp:44:8:44:14 | call to getBox1 [Reverse] [elem] | D.cpp:17:30:17:32 | box [Reverse] [elem] | provenance | | +| D.cpp:44:8:44:14 | call to getBox1 [Reverse] [elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | provenance | | +| D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | D.cpp:44:8:44:14 | call to getBox1 [Reverse] [elem] | provenance | | | D.cpp:45:14:45:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | | D.cpp:49:15:49:24 | new | D.cpp:51:27:51:27 | e | provenance | | | D.cpp:51:5:51:5 | ref arg b [box, elem] | D.cpp:52:14:52:14 | b [box, elem] | provenance | | -| D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | D.cpp:51:5:51:5 | ref arg b [box, elem] | provenance | | +| D.cpp:51:8:51:14 | call to getBox1 [Reverse] [elem] | D.cpp:17:30:17:32 | box [Reverse] [elem] | provenance | | +| D.cpp:51:8:51:14 | call to getBox1 [Reverse] [elem] | D.cpp:51:5:51:5 | ref arg b [box, elem] | provenance | | +| D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | D.cpp:51:8:51:14 | call to getBox1 [Reverse] [elem] | provenance | | | D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | provenance | | | D.cpp:51:27:51:27 | e | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | provenance | | | D.cpp:52:14:52:14 | b [box, elem] | D.cpp:21:30:21:31 | b2 [box, elem] | provenance | | @@ -233,15 +239,15 @@ edges | E.cpp:32:10:32:10 | b [buffer] | E.cpp:32:13:32:18 | buffer | provenance | | | E.cpp:33:18:33:19 | & ... [data, buffer] | E.cpp:19:27:19:27 | p [data, buffer] | provenance | | | E.cpp:33:19:33:19 | p [data, buffer] | E.cpp:33:18:33:19 | & ... [data, buffer] | provenance | | -| aliasing.cpp:8:23:8:23 | s [Return] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | | +| aliasing.cpp:8:23:8:23 | s [Reverse] [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | | | aliasing.cpp:8:23:8:23 | s [m1] | aliasing.cpp:25:17:25:19 | ref arg & ... [m1] | provenance | | -| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [Return] [m1] | provenance | | +| aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [Reverse] [m1] | provenance | | | aliasing.cpp:9:3:9:3 | s [post update] [m1] | aliasing.cpp:8:23:8:23 | s [m1] | provenance | | | aliasing.cpp:9:3:9:22 | ... = ... | aliasing.cpp:9:3:9:3 | s [post update] [m1] | provenance | | | aliasing.cpp:9:11:9:20 | call to user_input | aliasing.cpp:9:3:9:22 | ... = ... | provenance | | -| aliasing.cpp:12:25:12:25 | s [Return] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | | +| aliasing.cpp:12:25:12:25 | s [Reverse] [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | | | aliasing.cpp:12:25:12:25 | s [m1] | aliasing.cpp:26:19:26:20 | ref arg s2 [m1] | provenance | | -| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [Return] [m1] | provenance | | +| aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [Reverse] [m1] | provenance | | | aliasing.cpp:13:3:13:3 | s [post update] [m1] | aliasing.cpp:12:25:12:25 | s [m1] | provenance | | | aliasing.cpp:13:3:13:21 | ... = ... | aliasing.cpp:13:3:13:3 | s [post update] [m1] | provenance | | | aliasing.cpp:13:10:13:19 | call to user_input | aliasing.cpp:13:3:13:21 | ... = ... | provenance | | @@ -264,13 +270,13 @@ edges | aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | | aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | | aliasing.cpp:105:23:105:24 | pa | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | | -| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | -| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | -| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | -| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | -| aliasing.cpp:105:23:105:24 | pa [Return] | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | aliasing.cpp:158:17:158:20 | ref arg data | provenance | | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | aliasing.cpp:164:17:164:20 | ref arg data | provenance | | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | aliasing.cpp:175:15:175:22 | ref arg & ... | provenance | | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | aliasing.cpp:187:15:187:22 | ref arg & ... | provenance | | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | aliasing.cpp:200:15:200:24 | ref arg & ... | provenance | | | aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa | provenance | | -| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa [Return] | provenance | | +| aliasing.cpp:106:9:106:18 | call to user_input | aliasing.cpp:105:23:105:24 | pa [Reverse] | provenance | | | aliasing.cpp:158:15:158:15 | s [post update] [data] | aliasing.cpp:159:9:159:9 | s [data] | provenance | | | aliasing.cpp:158:17:158:20 | ref arg data | aliasing.cpp:158:15:158:15 | s [post update] [data] | provenance | | | aliasing.cpp:159:9:159:9 | s [data] | aliasing.cpp:159:11:159:14 | data | provenance | | @@ -350,18 +356,18 @@ edges | arrays.cpp:44:10:44:17 | indirect [arr, data] | arrays.cpp:44:20:44:22 | arr [data] | provenance | | | arrays.cpp:44:20:44:22 | arr [data] | arrays.cpp:44:8:44:25 | access to array [data] | provenance | | | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:12:5:12:16 | ... = ... | provenance | | -| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [Return] [a] | provenance | | +| by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [Reverse] [a] | provenance | | | by_reference.cpp:12:5:12:5 | s [post update] [a] | by_reference.cpp:11:39:11:39 | s [a] | provenance | | | by_reference.cpp:12:5:12:16 | ... = ... | by_reference.cpp:12:5:12:5 | s [post update] [a] | provenance | | | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:16:5:16:19 | ... = ... | provenance | | -| by_reference.cpp:16:5:16:8 | this [post update] [a] | by_reference.cpp:15:8:15:18 | this [Return] [a] | provenance | | +| by_reference.cpp:16:5:16:8 | this [post update] [a] | by_reference.cpp:15:8:15:18 | this [Reverse] [a] | provenance | | | by_reference.cpp:16:5:16:19 | ... = ... | by_reference.cpp:16:5:16:8 | this [post update] [a] | provenance | | | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:20:23:20:27 | value | provenance | | -| by_reference.cpp:20:5:20:8 | ref arg this [a] | by_reference.cpp:19:8:19:20 | this [Return] [a] | provenance | | +| by_reference.cpp:20:5:20:8 | ref arg this [a] | by_reference.cpp:19:8:19:20 | this [Reverse] [a] | provenance | | | by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | provenance | | | by_reference.cpp:20:23:20:27 | value | by_reference.cpp:20:5:20:8 | ref arg this [a] | provenance | | | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:24:25:24:29 | value | provenance | | -| by_reference.cpp:24:19:24:22 | ref arg this [a] | by_reference.cpp:23:8:23:26 | this [Return] [a] | provenance | | +| by_reference.cpp:24:19:24:22 | ref arg this [a] | by_reference.cpp:23:8:23:26 | this [Reverse] [a] | provenance | | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | provenance | | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:24:19:24:22 | ref arg this [a] | provenance | | | by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:12:32:12 | s [a] | provenance | | @@ -395,36 +401,36 @@ edges | by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | provenance | | | by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | provenance | | | by_reference.cpp:69:23:69:23 | s [a] | by_reference.cpp:69:22:69:23 | & ... [a] | provenance | | -| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | -| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | -| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | -| by_reference.cpp:83:31:83:35 | inner [Return] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | +| by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | | | by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:102:21:102:39 | ref arg & ... [a] | provenance | | | by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:103:27:103:35 | ref arg inner_ptr [a] | provenance | | | by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:106:21:106:41 | ref arg & ... [a] | provenance | | | by_reference.cpp:83:31:83:35 | inner [a] | by_reference.cpp:107:29:107:37 | ref arg inner_ptr [a] | provenance | | -| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [Return] [a] | provenance | | +| by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | provenance | | | by_reference.cpp:84:3:84:7 | inner [post update] [a] | by_reference.cpp:83:31:83:35 | inner [a] | provenance | | | by_reference.cpp:84:3:84:25 | ... = ... | by_reference.cpp:84:3:84:7 | inner [post update] [a] | provenance | | | by_reference.cpp:84:14:84:23 | call to user_input | by_reference.cpp:84:3:84:25 | ... = ... | provenance | | -| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | -| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | -| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | -| by_reference.cpp:87:31:87:35 | inner [Return] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | +| by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | | | by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:122:27:122:38 | ref arg inner_nested [a] | provenance | | | by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:123:21:123:36 | ref arg * ... [a] | provenance | | | by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:126:29:126:40 | ref arg inner_nested [a] | provenance | | | by_reference.cpp:87:31:87:35 | inner [a] | by_reference.cpp:127:21:127:38 | ref arg * ... [a] | provenance | | -| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [Return] [a] | provenance | | +| by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | provenance | | | by_reference.cpp:88:3:88:7 | inner [post update] [a] | by_reference.cpp:87:31:87:35 | inner [a] | provenance | | | by_reference.cpp:88:3:88:24 | ... = ... | by_reference.cpp:88:3:88:7 | inner [post update] [a] | provenance | | | by_reference.cpp:88:13:88:22 | call to user_input | by_reference.cpp:88:3:88:24 | ... = ... | provenance | | | by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | | by_reference.cpp:91:25:91:26 | pa | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | | -| by_reference.cpp:91:25:91:26 | pa [Return] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | -| by_reference.cpp:91:25:91:26 | pa [Return] | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | | +| by_reference.cpp:91:25:91:26 | pa [Reverse] | by_reference.cpp:104:15:104:22 | ref arg & ... | provenance | | +| by_reference.cpp:91:25:91:26 | pa [Reverse] | by_reference.cpp:108:15:108:24 | ref arg & ... | provenance | | | by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa | provenance | | -| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa [Return] | provenance | | +| by_reference.cpp:92:9:92:18 | call to user_input | by_reference.cpp:91:25:91:26 | pa [Reverse] | provenance | | | by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:124:21:124:21 | ref arg a | provenance | | | by_reference.cpp:95:25:95:26 | pa | by_reference.cpp:128:23:128:23 | ref arg a | provenance | | | by_reference.cpp:96:8:96:17 | call to user_input | by_reference.cpp:95:25:95:26 | pa | provenance | | @@ -519,10 +525,10 @@ edges | complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | this [b_] | provenance | | | complex.cpp:10:20:10:21 | this [b_] | complex.cpp:10:20:10:21 | b_ | provenance | | | complex.cpp:11:17:11:17 | a | complex.cpp:11:22:11:27 | ... = ... | provenance | | -| complex.cpp:11:22:11:23 | this [post update] [a_] | complex.cpp:11:8:11:11 | this [Return] [a_] | provenance | | +| complex.cpp:11:22:11:23 | this [post update] [a_] | complex.cpp:11:8:11:11 | this [Reverse] [a_] | provenance | | | complex.cpp:11:22:11:27 | ... = ... | complex.cpp:11:22:11:23 | this [post update] [a_] | provenance | | | complex.cpp:12:17:12:17 | b | complex.cpp:12:22:12:27 | ... = ... | provenance | | -| complex.cpp:12:22:12:23 | this [post update] [b_] | complex.cpp:12:8:12:11 | this [Return] [b_] | provenance | | +| complex.cpp:12:22:12:23 | this [post update] [b_] | complex.cpp:12:8:12:11 | this [Reverse] [b_] | provenance | | | complex.cpp:12:22:12:27 | ... = ... | complex.cpp:12:22:12:23 | this [post update] [b_] | provenance | | | complex.cpp:40:17:40:17 | b [inner, f, a_] | complex.cpp:42:8:42:8 | b [inner, f, a_] | provenance | | | complex.cpp:40:17:40:17 | b [inner, f, b_] | complex.cpp:43:8:43:8 | b [inner, f, b_] | provenance | | @@ -585,9 +591,9 @@ edges | constructors.cpp:19:22:19:23 | this [b_] | constructors.cpp:19:22:19:23 | b_ | provenance | | | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:28:23:28 | a | provenance | | | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:35:23:35 | b | provenance | | -| constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | constructors.cpp:23:5:23:7 | this [Return] [a_] | provenance | | +| constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | constructors.cpp:23:5:23:7 | this [Reverse] [a_] | provenance | | | constructors.cpp:23:28:23:28 | a | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | provenance | | -| constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | constructors.cpp:23:5:23:7 | this [Return] [b_] | provenance | | +| constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | constructors.cpp:23:5:23:7 | this [Reverse] [b_] | provenance | | | constructors.cpp:23:35:23:35 | b | constructors.cpp:23:32:23:36 | constructor init of field b_ [post-this] [b_] | provenance | | | constructors.cpp:26:15:26:15 | f [a_] | constructors.cpp:28:10:28:10 | f [a_] | provenance | | | constructors.cpp:26:15:26:15 | f [b_] | constructors.cpp:29:10:29:10 | f [b_] | provenance | | @@ -612,51 +618,63 @@ edges | constructors.cpp:46:9:46:9 | h [a_] | constructors.cpp:26:15:26:15 | f [a_] | provenance | | | constructors.cpp:46:9:46:9 | h [b_] | constructors.cpp:26:15:26:15 | f [b_] | provenance | | | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:30:9:44 | ... = ... | provenance | | -| qualifiers.cpp:9:30:9:33 | this [post update] [a] | qualifiers.cpp:9:10:9:13 | this [Return] [a] | provenance | | +| qualifiers.cpp:9:30:9:33 | this [post update] [a] | qualifiers.cpp:9:10:9:13 | this [Reverse] [a] | provenance | | | qualifiers.cpp:9:30:9:44 | ... = ... | qualifiers.cpp:9:30:9:33 | this [post update] [a] | provenance | | | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:49:12:64 | ... = ... | provenance | | -| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [Return] [a] | provenance | | +| qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [Reverse] [a] | provenance | | | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | qualifiers.cpp:12:27:12:31 | inner [a] | provenance | | | qualifiers.cpp:12:49:12:64 | ... = ... | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | provenance | | | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:51:13:65 | ... = ... | provenance | | -| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [Return] [a] | provenance | | +| qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [Reverse] [a] | provenance | | | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | qualifiers.cpp:13:29:13:33 | inner [a] | provenance | | | qualifiers.cpp:13:51:13:65 | ... = ... | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | provenance | | +| qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | this [Reverse] [inner, a] | provenance | | +| qualifiers.cpp:18:32:18:36 | this [Reverse] [inner, a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | provenance | | | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | qualifiers.cpp:23:10:23:14 | outer [inner, a] | provenance | | | qualifiers.cpp:22:5:22:38 | ... = ... | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | provenance | | -| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:22:11:22:18 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:22:11:22:18 | call to getInner [Reverse] [a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | qualifiers.cpp:22:11:22:18 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:22:27:22:36 | call to user_input | qualifiers.cpp:22:5:22:38 | ... = ... | provenance | | | qualifiers.cpp:23:10:23:14 | outer [inner, a] | qualifiers.cpp:23:16:23:20 | inner [a] | provenance | | | qualifiers.cpp:23:16:23:20 | inner [a] | qualifiers.cpp:23:23:23:23 | a | provenance | | | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | qualifiers.cpp:28:10:28:14 | outer [inner, a] | provenance | | -| qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:27:11:27:18 | call to getInner [Reverse] [a] | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | qualifiers.cpp:27:11:27:18 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | provenance | | | qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | provenance | | | qualifiers.cpp:28:10:28:14 | outer [inner, a] | qualifiers.cpp:28:16:28:20 | inner [a] | provenance | | | qualifiers.cpp:28:16:28:20 | inner [a] | qualifiers.cpp:28:23:28:23 | a | provenance | | | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | qualifiers.cpp:33:10:33:14 | outer [inner, a] | provenance | | -| qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:32:23:32:30 | call to getInner [Reverse] [a] | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | qualifiers.cpp:32:23:32:30 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | provenance | | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | provenance | | | qualifiers.cpp:33:10:33:14 | outer [inner, a] | qualifiers.cpp:33:16:33:20 | inner [a] | provenance | | | qualifiers.cpp:33:16:33:20 | inner [a] | qualifiers.cpp:33:23:33:23 | a | provenance | | -| qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | provenance | | +| qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | qualifiers.cpp:37:26:37:33 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | qualifiers.cpp:38:10:38:14 | outer [inner, a] | provenance | | -| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:37:26:37:33 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:37:26:37:33 | call to getInner [Reverse] [a] | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | provenance | | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | provenance | | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | provenance | | | qualifiers.cpp:38:10:38:14 | outer [inner, a] | qualifiers.cpp:38:16:38:20 | inner [a] | provenance | | | qualifiers.cpp:38:16:38:20 | inner [a] | qualifiers.cpp:38:23:38:23 | a | provenance | | | qualifiers.cpp:42:5:42:40 | ... = ... | qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | provenance | | -| qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | provenance | | +| qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | qualifiers.cpp:42:13:42:20 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | qualifiers.cpp:43:10:43:14 | outer [inner, a] | provenance | | -| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | provenance | | +| qualifiers.cpp:42:13:42:20 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:42:13:42:20 | call to getInner [Reverse] [a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | provenance | | | qualifiers.cpp:42:29:42:38 | call to user_input | qualifiers.cpp:42:5:42:40 | ... = ... | provenance | | | qualifiers.cpp:43:10:43:14 | outer [inner, a] | qualifiers.cpp:43:16:43:20 | inner [a] | provenance | | | qualifiers.cpp:43:16:43:20 | inner [a] | qualifiers.cpp:43:23:43:23 | a | provenance | | | qualifiers.cpp:47:5:47:42 | ... = ... | qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | provenance | | | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | qualifiers.cpp:48:10:48:14 | outer [inner, a] | provenance | | -| qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | provenance | | +| qualifiers.cpp:47:15:47:22 | call to getInner [Reverse] [a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | provenance | | +| qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | qualifiers.cpp:47:15:47:22 | call to getInner [Reverse] [a] | provenance | | | qualifiers.cpp:47:31:47:40 | call to user_input | qualifiers.cpp:47:5:47:42 | ... = ... | provenance | | | qualifiers.cpp:48:10:48:14 | outer [inner, a] | qualifiers.cpp:48:16:48:20 | inner [a] | provenance | | | qualifiers.cpp:48:16:48:20 | inner [a] | qualifiers.cpp:48:23:48:23 | a | provenance | | @@ -687,10 +705,10 @@ edges | simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | this [b_] | provenance | | | simple.cpp:19:22:19:23 | this [b_] | simple.cpp:19:22:19:23 | b_ | provenance | | | simple.cpp:20:19:20:19 | a | simple.cpp:20:24:20:29 | ... = ... | provenance | | -| simple.cpp:20:24:20:25 | this [post update] [a_] | simple.cpp:20:10:20:13 | this [Return] [a_] | provenance | | +| simple.cpp:20:24:20:25 | this [post update] [a_] | simple.cpp:20:10:20:13 | this [Reverse] [a_] | provenance | | | simple.cpp:20:24:20:29 | ... = ... | simple.cpp:20:24:20:25 | this [post update] [a_] | provenance | | | simple.cpp:21:19:21:19 | b | simple.cpp:21:24:21:29 | ... = ... | provenance | | -| simple.cpp:21:24:21:25 | this [post update] [b_] | simple.cpp:21:10:21:13 | this [Return] [b_] | provenance | | +| simple.cpp:21:24:21:25 | this [post update] [b_] | simple.cpp:21:10:21:13 | this [Reverse] [b_] | provenance | | | simple.cpp:21:24:21:29 | ... = ... | simple.cpp:21:24:21:25 | this [post update] [b_] | provenance | | | simple.cpp:26:15:26:15 | f [a_] | simple.cpp:28:10:28:10 | f [a_] | provenance | | | simple.cpp:26:15:26:15 | f [b_] | simple.cpp:29:10:29:10 | f [b_] | provenance | | @@ -788,11 +806,11 @@ edges | struct_init.c:46:10:46:14 | outer [pointerAB, a] | struct_init.c:46:16:46:24 | pointerAB [a] | provenance | | | struct_init.c:46:16:46:24 | pointerAB [a] | struct_init.c:14:24:14:25 | ab [a] | provenance | | nodes -| A.cpp:23:5:23:5 | this [Return] [c] | semmle.label | this [Return] [c] | +| A.cpp:23:5:23:5 | this [Reverse] [c] | semmle.label | this [Reverse] [c] | | A.cpp:23:10:23:10 | c | semmle.label | c | | A.cpp:25:7:25:10 | this [post update] [c] | semmle.label | this [post update] [c] | | A.cpp:25:7:25:17 | ... = ... | semmle.label | ... = ... | -| A.cpp:27:10:27:12 | this [Return] [c] | semmle.label | this [Return] [c] | +| A.cpp:27:10:27:12 | this [Reverse] [c] | semmle.label | this [Reverse] [c] | | A.cpp:27:17:27:17 | c | semmle.label | c | | A.cpp:27:22:27:25 | this [post update] [c] | semmle.label | this [post update] [c] | | A.cpp:27:22:27:32 | ... = ... | semmle.label | ... = ... | @@ -845,18 +863,18 @@ nodes | A.cpp:107:16:107:16 | a | semmle.label | a | | A.cpp:120:12:120:13 | c1 [a] | semmle.label | c1 [a] | | A.cpp:120:16:120:16 | a | semmle.label | a | -| A.cpp:124:14:124:14 | b [Return] [c] | semmle.label | b [Return] [c] | +| A.cpp:124:14:124:14 | b [Reverse] [c] | semmle.label | b [Reverse] [c] | | A.cpp:124:14:124:14 | b [c] | semmle.label | b [c] | | A.cpp:126:5:126:5 | ref arg b [c] | semmle.label | ref arg b [c] | | A.cpp:126:12:126:18 | new | semmle.label | new | | A.cpp:131:8:131:8 | ref arg b [c] | semmle.label | ref arg b [c] | | A.cpp:132:10:132:10 | b [c] | semmle.label | b [c] | | A.cpp:132:13:132:13 | c | semmle.label | c | -| A.cpp:140:5:140:5 | this [Return] [b, c] | semmle.label | this [Return] [b, c] | -| A.cpp:140:5:140:5 | this [Return] [b] | semmle.label | this [Return] [b] | -| A.cpp:140:5:140:5 | this [Return] [b] | semmle.label | this [Return] [b] | +| A.cpp:140:5:140:5 | this [Reverse] [b, c] | semmle.label | this [Reverse] [b, c] | +| A.cpp:140:5:140:5 | this [Reverse] [b] | semmle.label | this [Reverse] [b] | +| A.cpp:140:5:140:5 | this [Reverse] [b] | semmle.label | this [Reverse] [b] | | A.cpp:140:13:140:13 | b | semmle.label | b | -| A.cpp:140:13:140:13 | b [Return] [c] | semmle.label | b [Return] [c] | +| A.cpp:140:13:140:13 | b [Reverse] [c] | semmle.label | b [Reverse] [c] | | A.cpp:140:13:140:13 | b [c] | semmle.label | b [c] | | A.cpp:142:7:142:7 | b [post update] [c] | semmle.label | b [post update] [c] | | A.cpp:142:7:142:20 | ... = ... | semmle.label | ... = ... | @@ -910,9 +928,9 @@ nodes | A.cpp:173:26:173:26 | o | semmle.label | o | | A.cpp:173:26:173:26 | o [c] | semmle.label | o [c] | | A.cpp:173:26:173:26 | o [c] | semmle.label | o [c] | -| A.cpp:181:5:181:10 | this [Return] [head] | semmle.label | this [Return] [head] | -| A.cpp:181:5:181:10 | this [Return] [next, head] | semmle.label | this [Return] [next, head] | -| A.cpp:181:5:181:10 | this [Return] [next, next, head] | semmle.label | this [Return] [next, next, head] | +| A.cpp:181:5:181:10 | this [Reverse] [head] | semmle.label | this [Reverse] [head] | +| A.cpp:181:5:181:10 | this [Reverse] [next, head] | semmle.label | this [Reverse] [next, head] | +| A.cpp:181:5:181:10 | this [Reverse] [next, next, head] | semmle.label | this [Reverse] [next, next, head] | | A.cpp:181:15:181:21 | newHead | semmle.label | newHead | | A.cpp:181:32:181:35 | next [head] | semmle.label | next [head] | | A.cpp:181:32:181:35 | next [next, head] | semmle.label | next [next, head] | @@ -938,16 +956,16 @@ nodes | B.cpp:19:10:19:11 | b2 [box1, elem2] | semmle.label | b2 [box1, elem2] | | B.cpp:19:14:19:17 | box1 [elem2] | semmle.label | box1 [elem2] | | B.cpp:19:20:19:24 | elem2 | semmle.label | elem2 | -| B.cpp:33:5:33:8 | this [Return] [elem1] | semmle.label | this [Return] [elem1] | -| B.cpp:33:5:33:8 | this [Return] [elem2] | semmle.label | this [Return] [elem2] | +| B.cpp:33:5:33:8 | this [Reverse] [elem1] | semmle.label | this [Reverse] [elem1] | +| B.cpp:33:5:33:8 | this [Reverse] [elem2] | semmle.label | this [Reverse] [elem2] | | B.cpp:33:16:33:17 | e1 | semmle.label | e1 | | B.cpp:33:26:33:27 | e2 | semmle.label | e2 | | B.cpp:35:7:35:10 | this [post update] [elem1] | semmle.label | this [post update] [elem1] | | B.cpp:35:7:35:22 | ... = ... | semmle.label | ... = ... | | B.cpp:36:7:36:10 | this [post update] [elem2] | semmle.label | this [post update] [elem2] | | B.cpp:36:7:36:22 | ... = ... | semmle.label | ... = ... | -| B.cpp:44:5:44:8 | this [Return] [box1, elem1] | semmle.label | this [Return] [box1, elem1] | -| B.cpp:44:5:44:8 | this [Return] [box1, elem2] | semmle.label | this [Return] [box1, elem2] | +| B.cpp:44:5:44:8 | this [Reverse] [box1, elem1] | semmle.label | this [Reverse] [box1, elem1] | +| B.cpp:44:5:44:8 | this [Reverse] [box1, elem2] | semmle.label | this [Reverse] [box1, elem2] | | B.cpp:44:16:44:17 | b1 [elem1] | semmle.label | b1 [elem1] | | B.cpp:44:16:44:17 | b1 [elem2] | semmle.label | b1 [elem2] | | B.cpp:46:7:46:10 | this [post update] [box1, elem1] | semmle.label | this [post update] [box1, elem1] | @@ -958,8 +976,8 @@ nodes | C.cpp:18:12:18:18 | call to C [s3] | semmle.label | call to C [s3] | | C.cpp:19:5:19:5 | c [s1] | semmle.label | c [s1] | | C.cpp:19:5:19:5 | c [s3] | semmle.label | c [s3] | -| C.cpp:22:3:22:3 | this [Return] [s1] | semmle.label | this [Return] [s1] | -| C.cpp:22:3:22:3 | this [Return] [s3] | semmle.label | this [Return] [s3] | +| C.cpp:22:3:22:3 | this [Reverse] [s1] | semmle.label | this [Reverse] [s1] | +| C.cpp:22:3:22:3 | this [Reverse] [s3] | semmle.label | this [Reverse] [s3] | | C.cpp:22:9:22:22 | constructor init of field s1 [post-this] [s1] | semmle.label | constructor init of field s1 [post-this] [s1] | | C.cpp:22:12:22:21 | new | semmle.label | new | | C.cpp:24:5:24:8 | this [post update] [s3] | semmle.label | this [post update] [s3] | @@ -974,12 +992,15 @@ nodes | D.cpp:10:11:10:17 | this [elem] | semmle.label | this [elem] | | D.cpp:10:30:10:33 | elem | semmle.label | elem | | D.cpp:10:30:10:33 | this [elem] | semmle.label | this [elem] | -| D.cpp:11:10:11:16 | this [Return] [elem] | semmle.label | this [Return] [elem] | +| D.cpp:11:10:11:16 | this [Reverse] [elem] | semmle.label | this [Reverse] [elem] | | D.cpp:11:24:11:24 | e | semmle.label | e | | D.cpp:11:29:11:32 | this [post update] [elem] | semmle.label | this [post update] [elem] | | D.cpp:11:29:11:36 | ... = ... | semmle.label | ... = ... | +| D.cpp:17:11:17:17 | this [Reverse] [box, elem] | semmle.label | this [Reverse] [box, elem] | | D.cpp:17:11:17:17 | this [box, elem] | semmle.label | this [box, elem] | +| D.cpp:17:30:17:32 | box [Reverse] [elem] | semmle.label | box [Reverse] [elem] | | D.cpp:17:30:17:32 | box [elem] | semmle.label | box [elem] | +| D.cpp:17:30:17:32 | this [Reverse] [box, elem] | semmle.label | this [Reverse] [box, elem] | | D.cpp:17:30:17:32 | this [box, elem] | semmle.label | this [box, elem] | | D.cpp:21:30:21:31 | b2 [box, elem] | semmle.label | b2 [box, elem] | | D.cpp:22:10:22:11 | b2 [box, elem] | semmle.label | b2 [box, elem] | @@ -998,10 +1019,12 @@ nodes | D.cpp:42:15:42:24 | new | semmle.label | new | | D.cpp:44:5:44:5 | ref arg b [box, elem] | semmle.label | ref arg b [box, elem] | | D.cpp:44:5:44:26 | ... = ... | semmle.label | ... = ... | +| D.cpp:44:8:44:14 | call to getBox1 [Reverse] [elem] | semmle.label | call to getBox1 [Reverse] [elem] | | D.cpp:44:8:44:14 | call to getBox1 [post update] [elem] | semmle.label | call to getBox1 [post update] [elem] | | D.cpp:45:14:45:14 | b [box, elem] | semmle.label | b [box, elem] | | D.cpp:49:15:49:24 | new | semmle.label | new | | D.cpp:51:5:51:5 | ref arg b [box, elem] | semmle.label | ref arg b [box, elem] | +| D.cpp:51:8:51:14 | call to getBox1 [Reverse] [elem] | semmle.label | call to getBox1 [Reverse] [elem] | | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | semmle.label | ref arg call to getBox1 [elem] | | D.cpp:51:27:51:27 | e | semmle.label | e | | D.cpp:52:14:52:14 | b [box, elem] | semmle.label | b [box, elem] | @@ -1031,12 +1054,12 @@ nodes | E.cpp:32:13:32:18 | buffer | semmle.label | buffer | | E.cpp:33:18:33:19 | & ... [data, buffer] | semmle.label | & ... [data, buffer] | | E.cpp:33:19:33:19 | p [data, buffer] | semmle.label | p [data, buffer] | -| aliasing.cpp:8:23:8:23 | s [Return] [m1] | semmle.label | s [Return] [m1] | +| aliasing.cpp:8:23:8:23 | s [Reverse] [m1] | semmle.label | s [Reverse] [m1] | | aliasing.cpp:8:23:8:23 | s [m1] | semmle.label | s [m1] | | aliasing.cpp:9:3:9:3 | s [post update] [m1] | semmle.label | s [post update] [m1] | | aliasing.cpp:9:3:9:22 | ... = ... | semmle.label | ... = ... | | aliasing.cpp:9:11:9:20 | call to user_input | semmle.label | call to user_input | -| aliasing.cpp:12:25:12:25 | s [Return] [m1] | semmle.label | s [Return] [m1] | +| aliasing.cpp:12:25:12:25 | s [Reverse] [m1] | semmle.label | s [Reverse] [m1] | | aliasing.cpp:12:25:12:25 | s [m1] | semmle.label | s [m1] | | aliasing.cpp:13:3:13:3 | s [post update] [m1] | semmle.label | s [post update] [m1] | | aliasing.cpp:13:3:13:21 | ... = ... | semmle.label | ... = ... | @@ -1060,7 +1083,7 @@ nodes | aliasing.cpp:93:10:93:10 | s [m1] | semmle.label | s [m1] | | aliasing.cpp:93:12:93:13 | m1 | semmle.label | m1 | | aliasing.cpp:105:23:105:24 | pa | semmle.label | pa | -| aliasing.cpp:105:23:105:24 | pa [Return] | semmle.label | pa [Return] | +| aliasing.cpp:105:23:105:24 | pa [Reverse] | semmle.label | pa [Reverse] | | aliasing.cpp:106:9:106:18 | call to user_input | semmle.label | call to user_input | | aliasing.cpp:158:15:158:15 | s [post update] [data] | semmle.label | s [post update] [data] | | aliasing.cpp:158:17:158:20 | ref arg data | semmle.label | ref arg data | @@ -1145,20 +1168,20 @@ nodes | arrays.cpp:44:10:44:17 | indirect [arr, data] | semmle.label | indirect [arr, data] | | arrays.cpp:44:20:44:22 | arr [data] | semmle.label | arr [data] | | arrays.cpp:44:27:44:30 | data | semmle.label | data | -| by_reference.cpp:11:39:11:39 | s [Return] [a] | semmle.label | s [Return] [a] | +| by_reference.cpp:11:39:11:39 | s [Reverse] [a] | semmle.label | s [Reverse] [a] | | by_reference.cpp:11:39:11:39 | s [a] | semmle.label | s [a] | | by_reference.cpp:11:48:11:52 | value | semmle.label | value | | by_reference.cpp:12:5:12:5 | s [post update] [a] | semmle.label | s [post update] [a] | | by_reference.cpp:12:5:12:16 | ... = ... | semmle.label | ... = ... | -| by_reference.cpp:15:8:15:18 | this [Return] [a] | semmle.label | this [Return] [a] | +| by_reference.cpp:15:8:15:18 | this [Reverse] [a] | semmle.label | this [Reverse] [a] | | by_reference.cpp:15:26:15:30 | value | semmle.label | value | | by_reference.cpp:16:5:16:8 | this [post update] [a] | semmle.label | this [post update] [a] | | by_reference.cpp:16:5:16:19 | ... = ... | semmle.label | ... = ... | -| by_reference.cpp:19:8:19:20 | this [Return] [a] | semmle.label | this [Return] [a] | +| by_reference.cpp:19:8:19:20 | this [Reverse] [a] | semmle.label | this [Reverse] [a] | | by_reference.cpp:19:28:19:32 | value | semmle.label | value | | by_reference.cpp:20:5:20:8 | ref arg this [a] | semmle.label | ref arg this [a] | | by_reference.cpp:20:23:20:27 | value | semmle.label | value | -| by_reference.cpp:23:8:23:26 | this [Return] [a] | semmle.label | this [Return] [a] | +| by_reference.cpp:23:8:23:26 | this [Reverse] [a] | semmle.label | this [Reverse] [a] | | by_reference.cpp:23:34:23:38 | value | semmle.label | value | | by_reference.cpp:24:19:24:22 | ref arg this [a] | semmle.label | ref arg this [a] | | by_reference.cpp:24:25:24:29 | value | semmle.label | value | @@ -1191,18 +1214,18 @@ nodes | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | semmle.label | call to nonMemberGetA | | by_reference.cpp:69:22:69:23 | & ... [a] | semmle.label | & ... [a] | | by_reference.cpp:69:23:69:23 | s [a] | semmle.label | s [a] | -| by_reference.cpp:83:31:83:35 | inner [Return] [a] | semmle.label | inner [Return] [a] | +| by_reference.cpp:83:31:83:35 | inner [Reverse] [a] | semmle.label | inner [Reverse] [a] | | by_reference.cpp:83:31:83:35 | inner [a] | semmle.label | inner [a] | | by_reference.cpp:84:3:84:7 | inner [post update] [a] | semmle.label | inner [post update] [a] | | by_reference.cpp:84:3:84:25 | ... = ... | semmle.label | ... = ... | | by_reference.cpp:84:14:84:23 | call to user_input | semmle.label | call to user_input | -| by_reference.cpp:87:31:87:35 | inner [Return] [a] | semmle.label | inner [Return] [a] | +| by_reference.cpp:87:31:87:35 | inner [Reverse] [a] | semmle.label | inner [Reverse] [a] | | by_reference.cpp:87:31:87:35 | inner [a] | semmle.label | inner [a] | | by_reference.cpp:88:3:88:7 | inner [post update] [a] | semmle.label | inner [post update] [a] | | by_reference.cpp:88:3:88:24 | ... = ... | semmle.label | ... = ... | | by_reference.cpp:88:13:88:22 | call to user_input | semmle.label | call to user_input | | by_reference.cpp:91:25:91:26 | pa | semmle.label | pa | -| by_reference.cpp:91:25:91:26 | pa [Return] | semmle.label | pa [Return] | +| by_reference.cpp:91:25:91:26 | pa [Reverse] | semmle.label | pa [Reverse] | | by_reference.cpp:92:9:92:18 | call to user_input | semmle.label | call to user_input | | by_reference.cpp:95:25:95:26 | pa | semmle.label | pa | | by_reference.cpp:96:8:96:17 | call to user_input | semmle.label | call to user_input | @@ -1319,11 +1342,11 @@ nodes | complex.cpp:10:7:10:7 | this [b_] | semmle.label | this [b_] | | complex.cpp:10:20:10:21 | b_ | semmle.label | b_ | | complex.cpp:10:20:10:21 | this [b_] | semmle.label | this [b_] | -| complex.cpp:11:8:11:11 | this [Return] [a_] | semmle.label | this [Return] [a_] | +| complex.cpp:11:8:11:11 | this [Reverse] [a_] | semmle.label | this [Reverse] [a_] | | complex.cpp:11:17:11:17 | a | semmle.label | a | | complex.cpp:11:22:11:23 | this [post update] [a_] | semmle.label | this [post update] [a_] | | complex.cpp:11:22:11:27 | ... = ... | semmle.label | ... = ... | -| complex.cpp:12:8:12:11 | this [Return] [b_] | semmle.label | this [Return] [b_] | +| complex.cpp:12:8:12:11 | this [Reverse] [b_] | semmle.label | this [Reverse] [b_] | | complex.cpp:12:17:12:17 | b | semmle.label | b | | complex.cpp:12:22:12:23 | this [post update] [b_] | semmle.label | this [post update] [b_] | | complex.cpp:12:22:12:27 | ... = ... | semmle.label | ... = ... | @@ -1389,8 +1412,8 @@ nodes | constructors.cpp:19:9:19:9 | this [b_] | semmle.label | this [b_] | | constructors.cpp:19:22:19:23 | b_ | semmle.label | b_ | | constructors.cpp:19:22:19:23 | this [b_] | semmle.label | this [b_] | -| constructors.cpp:23:5:23:7 | this [Return] [a_] | semmle.label | this [Return] [a_] | -| constructors.cpp:23:5:23:7 | this [Return] [b_] | semmle.label | this [Return] [b_] | +| constructors.cpp:23:5:23:7 | this [Reverse] [a_] | semmle.label | this [Reverse] [a_] | +| constructors.cpp:23:5:23:7 | this [Reverse] [b_] | semmle.label | this [Reverse] [b_] | | constructors.cpp:23:13:23:13 | a | semmle.label | a | | constructors.cpp:23:20:23:20 | b | semmle.label | b | | constructors.cpp:23:25:23:29 | constructor init of field a_ [post-this] [a_] | semmle.label | constructor init of field a_ [post-this] [a_] | @@ -1415,34 +1438,40 @@ nodes | constructors.cpp:43:9:43:9 | g [b_] | semmle.label | g [b_] | | constructors.cpp:46:9:46:9 | h [a_] | semmle.label | h [a_] | | constructors.cpp:46:9:46:9 | h [b_] | semmle.label | h [b_] | -| qualifiers.cpp:9:10:9:13 | this [Return] [a] | semmle.label | this [Return] [a] | +| qualifiers.cpp:9:10:9:13 | this [Reverse] [a] | semmle.label | this [Reverse] [a] | | qualifiers.cpp:9:21:9:25 | value | semmle.label | value | | qualifiers.cpp:9:30:9:33 | this [post update] [a] | semmle.label | this [post update] [a] | | qualifiers.cpp:9:30:9:44 | ... = ... | semmle.label | ... = ... | -| qualifiers.cpp:12:27:12:31 | inner [Return] [a] | semmle.label | inner [Return] [a] | +| qualifiers.cpp:12:27:12:31 | inner [Reverse] [a] | semmle.label | inner [Reverse] [a] | | qualifiers.cpp:12:27:12:31 | inner [a] | semmle.label | inner [a] | | qualifiers.cpp:12:40:12:44 | value | semmle.label | value | | qualifiers.cpp:12:49:12:53 | inner [post update] [a] | semmle.label | inner [post update] [a] | | qualifiers.cpp:12:49:12:64 | ... = ... | semmle.label | ... = ... | -| qualifiers.cpp:13:29:13:33 | inner [Return] [a] | semmle.label | inner [Return] [a] | +| qualifiers.cpp:13:29:13:33 | inner [Reverse] [a] | semmle.label | inner [Reverse] [a] | | qualifiers.cpp:13:29:13:33 | inner [a] | semmle.label | inner [a] | | qualifiers.cpp:13:42:13:46 | value | semmle.label | value | | qualifiers.cpp:13:51:13:55 | inner [post update] [a] | semmle.label | inner [post update] [a] | | qualifiers.cpp:13:51:13:65 | ... = ... | semmle.label | ... = ... | +| qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | semmle.label | this [Reverse] [inner, a] | +| qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | semmle.label | inner [Reverse] [a] | +| qualifiers.cpp:18:32:18:36 | this [Reverse] [inner, a] | semmle.label | this [Reverse] [inner, a] | | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | semmle.label | ref arg outer [inner, a] | | qualifiers.cpp:22:5:22:38 | ... = ... | semmle.label | ... = ... | +| qualifiers.cpp:22:11:22:18 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:22:11:22:18 | call to getInner [post update] [a] | semmle.label | call to getInner [post update] [a] | | qualifiers.cpp:22:27:22:36 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:23:10:23:14 | outer [inner, a] | semmle.label | outer [inner, a] | | qualifiers.cpp:23:16:23:20 | inner [a] | semmle.label | inner [a] | | qualifiers.cpp:23:23:23:23 | a | semmle.label | a | | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | semmle.label | ref arg outer [inner, a] | +| qualifiers.cpp:27:11:27:18 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | semmle.label | ref arg call to getInner [a] | | qualifiers.cpp:27:28:27:37 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:28:10:28:14 | outer [inner, a] | semmle.label | outer [inner, a] | | qualifiers.cpp:28:16:28:20 | inner [a] | semmle.label | inner [a] | | qualifiers.cpp:28:23:28:23 | a | semmle.label | a | | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | semmle.label | ref arg outer [inner, a] | +| qualifiers.cpp:32:23:32:30 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | semmle.label | ref arg call to getInner [a] | | qualifiers.cpp:32:35:32:44 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:33:10:33:14 | outer [inner, a] | semmle.label | outer [inner, a] | @@ -1450,7 +1479,7 @@ nodes | qualifiers.cpp:33:23:33:23 | a | semmle.label | a | | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | semmle.label | ref arg * ... [a] | | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | semmle.label | ref arg outer [inner, a] | -| qualifiers.cpp:37:26:37:33 | call to getInner [inner post update] [a] | semmle.label | call to getInner [inner post update] [a] | +| qualifiers.cpp:37:26:37:33 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:37:38:37:47 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:38:10:38:14 | outer [inner, a] | semmle.label | outer [inner, a] | | qualifiers.cpp:38:16:38:20 | inner [a] | semmle.label | inner [a] | @@ -1458,13 +1487,14 @@ nodes | qualifiers.cpp:42:5:42:40 | ... = ... | semmle.label | ... = ... | | qualifiers.cpp:42:6:42:22 | * ... [post update] [a] | semmle.label | * ... [post update] [a] | | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | semmle.label | ref arg outer [inner, a] | -| qualifiers.cpp:42:13:42:20 | call to getInner [inner post update] [a] | semmle.label | call to getInner [inner post update] [a] | +| qualifiers.cpp:42:13:42:20 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:42:29:42:38 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:43:10:43:14 | outer [inner, a] | semmle.label | outer [inner, a] | | qualifiers.cpp:43:16:43:20 | inner [a] | semmle.label | inner [a] | | qualifiers.cpp:43:23:43:23 | a | semmle.label | a | | qualifiers.cpp:47:5:47:42 | ... = ... | semmle.label | ... = ... | | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | semmle.label | ref arg & ... [inner, a] | +| qualifiers.cpp:47:15:47:22 | call to getInner [Reverse] [a] | semmle.label | call to getInner [Reverse] [a] | | qualifiers.cpp:47:15:47:22 | call to getInner [post update] [a] | semmle.label | call to getInner [post update] [a] | | qualifiers.cpp:47:31:47:40 | call to user_input | semmle.label | call to user_input | | qualifiers.cpp:48:10:48:14 | outer [inner, a] | semmle.label | outer [inner, a] | @@ -1498,11 +1528,11 @@ nodes | simple.cpp:19:9:19:9 | this [b_] | semmle.label | this [b_] | | simple.cpp:19:22:19:23 | b_ | semmle.label | b_ | | simple.cpp:19:22:19:23 | this [b_] | semmle.label | this [b_] | -| simple.cpp:20:10:20:13 | this [Return] [a_] | semmle.label | this [Return] [a_] | +| simple.cpp:20:10:20:13 | this [Reverse] [a_] | semmle.label | this [Reverse] [a_] | | simple.cpp:20:19:20:19 | a | semmle.label | a | | simple.cpp:20:24:20:25 | this [post update] [a_] | semmle.label | this [post update] [a_] | | simple.cpp:20:24:20:29 | ... = ... | semmle.label | ... = ... | -| simple.cpp:21:10:21:13 | this [Return] [b_] | semmle.label | this [Return] [b_] | +| simple.cpp:21:10:21:13 | this [Reverse] [b_] | semmle.label | this [Reverse] [b_] | | simple.cpp:21:19:21:19 | b | semmle.label | b | | simple.cpp:21:24:21:25 | this [post update] [b_] | semmle.label | this [post update] [b_] | | simple.cpp:21:24:21:29 | ... = ... | semmle.label | ... = ... | @@ -1595,71 +1625,79 @@ nodes | struct_init.c:46:10:46:14 | outer [pointerAB, a] | semmle.label | outer [pointerAB, a] | | struct_init.c:46:16:46:24 | pointerAB [a] | semmle.label | pointerAB [a] | subpaths -| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Return] [c] | A.cpp:31:14:31:21 | call to B [c] | +| A.cpp:31:20:31:20 | c | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Reverse] [c] | A.cpp:31:14:31:21 | call to B [c] | | A.cpp:48:20:48:20 | c | A.cpp:29:23:29:23 | c | A.cpp:31:14:31:21 | new [c] | A.cpp:48:12:48:18 | call to make [c] | -| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:55:5:55:5 | ref arg b [c] | +| A.cpp:55:12:55:19 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Reverse] [c] | A.cpp:55:5:55:5 | ref arg b [c] | | A.cpp:56:10:56:10 | b [c] | A.cpp:28:8:28:10 | this [c] | A.cpp:28:29:28:29 | c | A.cpp:56:13:56:15 | call to get | | A.cpp:57:11:57:24 | new [c] | A.cpp:28:8:28:10 | this [c] | A.cpp:28:29:28:29 | c | A.cpp:57:28:57:30 | call to get | -| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Return] [c] | A.cpp:57:11:57:24 | call to B [c] | +| A.cpp:57:17:57:23 | new | A.cpp:23:10:23:10 | c | A.cpp:23:5:23:5 | this [Reverse] [c] | A.cpp:57:11:57:24 | call to B [c] | | A.cpp:64:21:64:28 | new | A.cpp:85:26:85:26 | c | A.cpp:91:14:91:15 | b2 [c] | A.cpp:64:10:64:15 | call to setOnB [c] | | A.cpp:73:25:73:32 | new | A.cpp:78:27:78:27 | c | A.cpp:82:12:82:24 | ... ? ... : ... [c] | A.cpp:73:10:73:19 | call to setOnBWrap [c] | | A.cpp:81:21:81:21 | c | A.cpp:85:26:85:26 | c | A.cpp:91:14:91:15 | b2 [c] | A.cpp:81:10:81:15 | call to setOnB [c] | -| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:90:7:90:8 | ref arg b2 [c] | -| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Return] [c] | A.cpp:126:5:126:5 | ref arg b [c] | -| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | this [Return] [b] | A.cpp:151:12:151:24 | call to D [b] | +| A.cpp:90:15:90:15 | c | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Reverse] [c] | A.cpp:90:7:90:8 | ref arg b2 [c] | +| A.cpp:126:12:126:18 | new | A.cpp:27:17:27:17 | c | A.cpp:27:10:27:12 | this [Reverse] [c] | A.cpp:126:5:126:5 | ref arg b [c] | +| A.cpp:151:18:151:18 | b | A.cpp:140:13:140:13 | b | A.cpp:140:5:140:5 | this [Reverse] [b] | A.cpp:151:12:151:24 | call to D [b] | | A.cpp:152:13:152:13 | b [c] | A.cpp:173:26:173:26 | o [c] | A.cpp:173:26:173:26 | o [c] | A.cpp:152:13:152:13 | ref arg b [c] | -| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | this [Return] [head] | A.cpp:160:18:160:60 | call to MyList [head] | -| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | A.cpp:181:5:181:10 | this [Return] [next, head] | A.cpp:161:18:161:40 | call to MyList [next, head] | -| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | A.cpp:181:5:181:10 | this [Return] [next, next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | +| A.cpp:160:29:160:29 | b | A.cpp:181:15:181:21 | newHead | A.cpp:181:5:181:10 | this [Reverse] [head] | A.cpp:160:18:160:60 | call to MyList [head] | +| A.cpp:161:38:161:39 | l1 [head] | A.cpp:181:32:181:35 | next [head] | A.cpp:181:5:181:10 | this [Reverse] [next, head] | A.cpp:161:18:161:40 | call to MyList [next, head] | +| A.cpp:162:38:162:39 | l2 [next, head] | A.cpp:181:32:181:35 | next [next, head] | A.cpp:181:5:181:10 | this [Reverse] [next, next, head] | A.cpp:162:18:162:40 | call to MyList [next, next, head] | | A.cpp:165:26:165:29 | head | A.cpp:173:26:173:26 | o | A.cpp:173:26:173:26 | o | A.cpp:165:26:165:29 | ref arg head | -| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | this [Return] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] | -| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:44:5:44:8 | this [Return] [box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | -| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | this [Return] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] | -| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:44:5:44:8 | this [Return] [box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | +| B.cpp:7:25:7:25 | e | B.cpp:33:16:33:17 | e1 | B.cpp:33:5:33:8 | this [Reverse] [elem1] | B.cpp:7:16:7:35 | call to Box1 [elem1] | +| B.cpp:8:25:8:26 | b1 [elem1] | B.cpp:44:16:44:17 | b1 [elem1] | B.cpp:44:5:44:8 | this [Reverse] [box1, elem1] | B.cpp:8:16:8:27 | call to Box2 [box1, elem1] | +| B.cpp:16:37:16:37 | e | B.cpp:33:26:33:27 | e2 | B.cpp:33:5:33:8 | this [Reverse] [elem2] | B.cpp:16:16:16:38 | call to Box1 [elem2] | +| B.cpp:17:25:17:26 | b1 [elem2] | B.cpp:44:16:44:17 | b1 [elem2] | B.cpp:44:5:44:8 | this [Reverse] [box1, elem2] | B.cpp:17:16:17:27 | call to Box2 [box1, elem2] | | D.cpp:22:10:22:11 | b2 [box, elem] | D.cpp:17:11:17:17 | this [box, elem] | D.cpp:17:30:17:32 | box [elem] | D.cpp:22:14:22:20 | call to getBox1 [elem] | | D.cpp:22:14:22:20 | call to getBox1 [elem] | D.cpp:10:11:10:17 | this [elem] | D.cpp:10:30:10:33 | elem | D.cpp:22:25:22:31 | call to getElem | -| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Return] [elem] | D.cpp:37:8:37:10 | ref arg box [elem] | -| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Return] [elem] | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | +| D.cpp:37:21:37:21 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Reverse] [elem] | D.cpp:37:8:37:10 | ref arg box [elem] | +| D.cpp:44:8:44:14 | call to getBox1 [Reverse] [elem] | D.cpp:17:30:17:32 | box [Reverse] [elem] | D.cpp:17:11:17:17 | this [Reverse] [box, elem] | D.cpp:44:5:44:5 | ref arg b [box, elem] | +| D.cpp:51:8:51:14 | call to getBox1 [Reverse] [elem] | D.cpp:17:30:17:32 | box [Reverse] [elem] | D.cpp:17:11:17:17 | this [Reverse] [box, elem] | D.cpp:51:5:51:5 | ref arg b [box, elem] | +| D.cpp:51:27:51:27 | e | D.cpp:11:24:11:24 | e | D.cpp:11:10:11:16 | this [Reverse] [elem] | D.cpp:51:8:51:14 | ref arg call to getBox1 [elem] | | arrays.cpp:37:24:37:27 | data | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | arrays.cpp:37:24:37:27 | ref arg data | | arrays.cpp:43:27:43:30 | data | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | arrays.cpp:43:27:43:30 | ref arg data | -| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Return] [a] | by_reference.cpp:20:5:20:8 | ref arg this [a] | -| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Return] [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] | +| by_reference.cpp:20:23:20:27 | value | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Reverse] [a] | by_reference.cpp:20:5:20:8 | ref arg this [a] | +| by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Reverse] [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] | | by_reference.cpp:24:25:24:29 | value | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [a] | by_reference.cpp:24:19:24:22 | ref arg this [a] | | by_reference.cpp:40:12:40:15 | this [a] | by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:18:36:18 | a | by_reference.cpp:40:18:40:28 | call to getDirectly | | by_reference.cpp:44:26:44:29 | this [a] | by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:15:32:15 | a | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | -| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Return] [a] | by_reference.cpp:50:3:50:3 | ref arg s [a] | +| by_reference.cpp:50:17:50:26 | call to user_input | by_reference.cpp:15:26:15:30 | value | by_reference.cpp:15:8:15:18 | this [Reverse] [a] | by_reference.cpp:50:3:50:3 | ref arg s [a] | | by_reference.cpp:51:8:51:8 | s [a] | by_reference.cpp:35:9:35:19 | this [a] | by_reference.cpp:36:18:36:18 | a | by_reference.cpp:51:10:51:20 | call to getDirectly | -| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | this [Return] [a] | by_reference.cpp:56:3:56:3 | ref arg s [a] | +| by_reference.cpp:56:19:56:28 | call to user_input | by_reference.cpp:19:28:19:32 | value | by_reference.cpp:19:8:19:20 | this [Reverse] [a] | by_reference.cpp:56:3:56:3 | ref arg s [a] | | by_reference.cpp:57:8:57:8 | s [a] | by_reference.cpp:39:9:39:21 | this [a] | by_reference.cpp:40:18:40:28 | call to getDirectly | by_reference.cpp:57:10:57:22 | call to getIndirectly | -| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | this [Return] [a] | by_reference.cpp:62:3:62:3 | ref arg s [a] | +| by_reference.cpp:62:25:62:34 | call to user_input | by_reference.cpp:23:34:23:38 | value | by_reference.cpp:23:8:23:26 | this [Reverse] [a] | by_reference.cpp:62:3:62:3 | ref arg s [a] | | by_reference.cpp:63:8:63:8 | s [a] | by_reference.cpp:43:9:43:27 | this [a] | by_reference.cpp:44:12:44:24 | call to nonMemberGetA | by_reference.cpp:63:10:63:28 | call to getThroughNonMember | -| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Return] [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] | +| by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [Reverse] [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] | | by_reference.cpp:68:21:68:30 | call to user_input | by_reference.cpp:11:48:11:52 | value | by_reference.cpp:11:39:11:39 | s [a] | by_reference.cpp:68:17:68:18 | ref arg & ... [a] | | by_reference.cpp:69:22:69:23 | & ... [a] | by_reference.cpp:31:46:31:46 | s [a] | by_reference.cpp:32:15:32:15 | a | by_reference.cpp:69:8:69:20 | call to nonMemberGetA | | complex.cpp:42:16:42:16 | f [a_] | complex.cpp:9:7:9:7 | this [a_] | complex.cpp:9:20:9:21 | a_ | complex.cpp:42:18:42:18 | call to a | | complex.cpp:43:16:43:16 | f [b_] | complex.cpp:10:7:10:7 | this [b_] | complex.cpp:10:20:10:21 | b_ | complex.cpp:43:18:43:18 | call to b | -| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Return] [a_] | complex.cpp:53:12:53:12 | ref arg f [a_] | -| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Return] [b_] | complex.cpp:54:12:54:12 | ref arg f [b_] | -| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Return] [a_] | complex.cpp:55:12:55:12 | ref arg f [a_] | -| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Return] [b_] | complex.cpp:56:12:56:12 | ref arg f [b_] | +| complex.cpp:53:19:53:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Reverse] [a_] | complex.cpp:53:12:53:12 | ref arg f [a_] | +| complex.cpp:54:19:54:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Reverse] [b_] | complex.cpp:54:12:54:12 | ref arg f [b_] | +| complex.cpp:55:19:55:28 | call to user_input | complex.cpp:11:17:11:17 | a | complex.cpp:11:8:11:11 | this [Reverse] [a_] | complex.cpp:55:12:55:12 | ref arg f [a_] | +| complex.cpp:56:19:56:28 | call to user_input | complex.cpp:12:17:12:17 | b | complex.cpp:12:8:12:11 | this [Reverse] [b_] | complex.cpp:56:12:56:12 | ref arg f [b_] | | constructors.cpp:28:10:28:10 | f [a_] | constructors.cpp:18:9:18:9 | this [a_] | constructors.cpp:18:22:18:23 | a_ | constructors.cpp:28:12:28:12 | call to a | | constructors.cpp:29:10:29:10 | f [b_] | constructors.cpp:19:9:19:9 | this [b_] | constructors.cpp:19:22:19:23 | b_ | constructors.cpp:29:12:29:12 | call to b | -| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Return] [a_] | constructors.cpp:34:11:34:26 | call to Foo [a_] | -| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Return] [b_] | constructors.cpp:35:11:35:26 | call to Foo [b_] | -| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Return] [a_] | constructors.cpp:36:11:36:37 | call to Foo [a_] | -| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Return] [b_] | constructors.cpp:36:11:36:37 | call to Foo [b_] | -| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | this [Return] [a] | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | -| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | inner [Return] [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | +| constructors.cpp:34:11:34:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Reverse] [a_] | constructors.cpp:34:11:34:26 | call to Foo [a_] | +| constructors.cpp:35:14:35:23 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Reverse] [b_] | constructors.cpp:35:11:35:26 | call to Foo [b_] | +| constructors.cpp:36:11:36:20 | call to user_input | constructors.cpp:23:13:23:13 | a | constructors.cpp:23:5:23:7 | this [Reverse] [a_] | constructors.cpp:36:11:36:37 | call to Foo [a_] | +| constructors.cpp:36:25:36:34 | call to user_input | constructors.cpp:23:20:23:20 | b | constructors.cpp:23:5:23:7 | this [Reverse] [b_] | constructors.cpp:36:11:36:37 | call to Foo [b_] | +| qualifiers.cpp:22:11:22:18 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:22:5:22:9 | ref arg outer [inner, a] | +| qualifiers.cpp:27:11:27:18 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:27:5:27:9 | ref arg outer [inner, a] | +| qualifiers.cpp:27:28:27:37 | call to user_input | qualifiers.cpp:9:21:9:25 | value | qualifiers.cpp:9:10:9:13 | this [Reverse] [a] | qualifiers.cpp:27:11:27:18 | ref arg call to getInner [a] | +| qualifiers.cpp:32:23:32:30 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:32:17:32:21 | ref arg outer [inner, a] | +| qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | inner [Reverse] [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | | qualifiers.cpp:32:35:32:44 | call to user_input | qualifiers.cpp:12:40:12:44 | value | qualifiers.cpp:12:27:12:31 | inner [a] | qualifiers.cpp:32:23:32:30 | ref arg call to getInner [a] | -| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | inner [Return] [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | +| qualifiers.cpp:37:26:37:33 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:37:20:37:24 | ref arg outer [inner, a] | +| qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | inner [Reverse] [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | | qualifiers.cpp:37:38:37:47 | call to user_input | qualifiers.cpp:13:42:13:46 | value | qualifiers.cpp:13:29:13:33 | inner [a] | qualifiers.cpp:37:19:37:35 | ref arg * ... [a] | +| qualifiers.cpp:42:13:42:20 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:42:7:42:11 | ref arg outer [inner, a] | +| qualifiers.cpp:47:15:47:22 | call to getInner [Reverse] [a] | qualifiers.cpp:18:32:18:36 | inner [Reverse] [a] | qualifiers.cpp:18:12:18:19 | this [Reverse] [inner, a] | qualifiers.cpp:47:6:47:11 | ref arg & ... [inner, a] | | realistic.cpp:61:47:61:55 | bufferLen | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | realistic.cpp:61:47:61:55 | ref arg bufferLen | | simple.cpp:28:10:28:10 | f [a_] | simple.cpp:18:9:18:9 | this [a_] | simple.cpp:18:22:18:23 | a_ | simple.cpp:28:12:28:12 | call to a | | simple.cpp:29:10:29:10 | f [b_] | simple.cpp:19:9:19:9 | this [b_] | simple.cpp:19:22:19:23 | b_ | simple.cpp:29:12:29:12 | call to b | -| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Return] [a_] | simple.cpp:39:5:39:5 | ref arg f [a_] | -| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Return] [b_] | simple.cpp:40:5:40:5 | ref arg g [b_] | -| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Return] [a_] | simple.cpp:41:5:41:5 | ref arg h [a_] | -| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Return] [b_] | simple.cpp:42:5:42:5 | ref arg h [b_] | +| simple.cpp:39:12:39:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Reverse] [a_] | simple.cpp:39:5:39:5 | ref arg f [a_] | +| simple.cpp:40:12:40:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Reverse] [b_] | simple.cpp:40:5:40:5 | ref arg g [b_] | +| simple.cpp:41:12:41:21 | call to user_input | simple.cpp:20:19:20:19 | a | simple.cpp:20:10:20:13 | this [Reverse] [a_] | simple.cpp:41:5:41:5 | ref arg h [a_] | +| simple.cpp:42:12:42:21 | call to user_input | simple.cpp:21:19:21:19 | b | simple.cpp:21:10:21:13 | this [Reverse] [b_] | simple.cpp:42:5:42:5 | ref arg h [b_] | | simple.cpp:84:14:84:20 | this [f2, f1] | simple.cpp:78:9:78:15 | this [f2, f1] | simple.cpp:79:19:79:20 | f1 | simple.cpp:84:14:84:20 | call to getf2f1 | | struct_init.c:15:12:15:12 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:15:12:15:12 | ref arg a | | struct_init.c:22:11:22:11 | a | realistic.cpp:41:17:41:17 | o | realistic.cpp:41:17:41:17 | o | struct_init.c:22:11:22:11 | ref arg a | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected index 586aacd28196..c0589ba6bbca 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-078/semmle/ExecTainted/ExecTainted.expected @@ -51,8 +51,8 @@ edges | test.cpp:187:18:187:25 | *filename | test.cpp:187:11:187:15 | strncat output argument | provenance | TaintFunction | | test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command | provenance | | | test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command | provenance | | -| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Return] | provenance | | -| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Return] | provenance | | +| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Reverse] | provenance | | +| test.cpp:188:11:188:17 | strncat output argument | test.cpp:186:19:186:25 | *command [Reverse] | provenance | | | test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | Config | | test.cpp:188:20:188:24 | *flags | test.cpp:188:11:188:17 | strncat output argument | provenance | TaintFunction | | test.cpp:194:9:194:16 | fread output argument | test.cpp:196:26:196:33 | *filename | provenance | | @@ -127,8 +127,8 @@ nodes | test.cpp:183:32:183:38 | *command | semmle.label | *command | | test.cpp:186:19:186:25 | *command | semmle.label | *command | | test.cpp:186:19:186:25 | *command | semmle.label | *command | -| test.cpp:186:19:186:25 | *command [Return] | semmle.label | *command [Return] | -| test.cpp:186:19:186:25 | *command [Return] | semmle.label | *command [Return] | +| test.cpp:186:19:186:25 | *command [Reverse] | semmle.label | *command [Reverse] | +| test.cpp:186:19:186:25 | *command [Reverse] | semmle.label | *command [Reverse] | | test.cpp:186:47:186:54 | *filename | semmle.label | *filename | | test.cpp:187:11:187:15 | strncat output argument | semmle.label | strncat output argument | | test.cpp:187:11:187:15 | strncat output argument | semmle.label | strncat output argument | @@ -155,8 +155,8 @@ nodes subpaths | test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command | test.cpp:196:10:196:16 | concat output argument | | test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Return] | test.cpp:196:10:196:16 | concat output argument | -| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Return] | test.cpp:196:10:196:16 | concat output argument | +| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Reverse] | test.cpp:196:10:196:16 | concat output argument | +| test.cpp:196:26:196:33 | *filename | test.cpp:186:47:186:54 | *filename | test.cpp:186:19:186:25 | *command [Reverse] | test.cpp:196:10:196:16 | concat output argument | #select | test.cpp:23:12:23:19 | command1 | test.cpp:15:27:15:30 | **argv | test.cpp:23:12:23:19 | *command1 | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string). | test.cpp:15:27:15:30 | **argv | user input (a command-line argument) | test.cpp:22:13:22:20 | sprintf output argument | sprintf output argument | | test.cpp:51:10:51:16 | command | test.cpp:47:21:47:26 | *call to getenv | test.cpp:51:10:51:16 | *command | This argument to an OS command is derived from $@, dangerously concatenated into $@, and then passed to system(string). | test.cpp:47:21:47:26 | *call to getenv | user input (an environment variable) | test.cpp:50:11:50:17 | sprintf output argument | sprintf output argument | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected index 2f24a9a27cb5..0a6f92beb43b 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-119/SAMATE/OverrunWriteProductFlow.expected @@ -53,7 +53,7 @@ edges | test.cpp:228:27:228:54 | call to malloc | test.cpp:228:27:228:54 | call to malloc | provenance | | | test.cpp:228:27:228:54 | call to malloc | test.cpp:232:10:232:15 | buffer | provenance | | | test.cpp:235:40:235:45 | buffer | test.cpp:236:5:236:26 | ... = ... | provenance | | -| test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [Return] [string] | provenance | | +| test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [Reverse] [string] | provenance | | | test.cpp:236:5:236:9 | *p_str [post update] [string] | test.cpp:235:27:235:31 | *p_str [string] | provenance | | | test.cpp:236:5:236:26 | ... = ... | test.cpp:236:5:236:9 | *p_str [post update] [string] | provenance | | | test.cpp:241:20:241:38 | call to malloc | test.cpp:241:20:241:38 | call to malloc | provenance | | @@ -129,7 +129,7 @@ nodes | test.cpp:228:27:228:54 | call to malloc | semmle.label | call to malloc | | test.cpp:228:27:228:54 | call to malloc | semmle.label | call to malloc | | test.cpp:232:10:232:15 | buffer | semmle.label | buffer | -| test.cpp:235:27:235:31 | *p_str [Return] [string] | semmle.label | *p_str [Return] [string] | +| test.cpp:235:27:235:31 | *p_str [Reverse] [string] | semmle.label | *p_str [Reverse] [string] | | test.cpp:235:27:235:31 | *p_str [string] | semmle.label | *p_str [string] | | test.cpp:235:40:235:45 | buffer | semmle.label | buffer | | test.cpp:236:5:236:9 | *p_str [post update] [string] | semmle.label | *p_str [post update] [string] | @@ -152,7 +152,7 @@ nodes | test.cpp:264:13:264:30 | call to malloc | semmle.label | call to malloc | | test.cpp:266:12:266:12 | p | semmle.label | p | subpaths -| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:235:27:235:31 | *p_str [Return] [string] | test.cpp:242:16:242:19 | set_string output argument [string] | +| test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:235:27:235:31 | *p_str [Reverse] [string] | test.cpp:242:16:242:19 | set_string output argument [string] | | test.cpp:242:22:242:27 | buffer | test.cpp:235:40:235:45 | buffer | test.cpp:235:27:235:31 | *p_str [string] | test.cpp:242:16:242:19 | set_string output argument [string] | #select | test.cpp:42:5:42:11 | call to strncpy | test.cpp:18:19:18:24 | call to malloc | test.cpp:42:18:42:23 | string | This write may overflow $@ by 1 element. | test.cpp:42:18:42:23 | string | string | diff --git a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected index 4ae072c6ce48..7b2a11332e96 100644 --- a/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected +++ b/cpp/ql/test/query-tests/Security/CWE/CWE-497/semmle/tests/ExposedSystemData.expected @@ -12,7 +12,7 @@ edges | tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:14:111:19 | *ptr | provenance | | | tests2.cpp:111:14:111:15 | *c1 [*ptr] | tests2.cpp:111:17:111:19 | *ptr | provenance | | | tests2.cpp:111:17:111:19 | *ptr | tests2.cpp:111:14:111:19 | *ptr | provenance | | -| tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | provenance | | +| tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Reverse] | provenance | | | tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:138:23:138:34 | *message_data | provenance | | | tests2.cpp:134:2:134:30 | *... = ... | tests2.cpp:143:34:143:45 | *message_data | provenance | | | tests2.cpp:134:17:134:22 | *call to getenv | tests2.cpp:134:2:134:30 | *... = ... | provenance | | @@ -52,7 +52,7 @@ nodes | tests2.cpp:111:14:111:15 | *c1 [*ptr] | semmle.label | *c1 [*ptr] | | tests2.cpp:111:14:111:19 | *ptr | semmle.label | *ptr | | tests2.cpp:111:17:111:19 | *ptr | semmle.label | *ptr | -| tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | semmle.label | [summary param] *0 in zmq_msg_init_data [Return] | +| tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Reverse] | semmle.label | [summary param] *0 in zmq_msg_init_data [Reverse] | | tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | semmle.label | [summary param] *1 in zmq_msg_init_data | | tests2.cpp:134:2:134:30 | *... = ... | semmle.label | *... = ... | | tests2.cpp:134:17:134:22 | *call to getenv | semmle.label | *call to getenv | @@ -74,7 +74,7 @@ nodes | tests_sysconf.cpp:36:21:36:27 | confstr output argument | semmle.label | confstr output argument | | tests_sysconf.cpp:39:19:39:25 | *pathbuf | semmle.label | *pathbuf | subpaths -| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Return] | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | +| tests2.cpp:143:34:143:45 | *message_data | tests2.cpp:120:5:120:21 | [summary param] *1 in zmq_msg_init_data | tests2.cpp:120:5:120:21 | [summary param] *0 in zmq_msg_init_data [Reverse] | tests2.cpp:143:24:143:31 | zmq_msg_init_data output argument | #select | tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | tests2.cpp:63:13:63:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:63:13:63:26 | *call to getenv | *call to getenv | | tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | tests2.cpp:64:13:64:26 | *call to getenv | This operation exposes system data from $@. | tests2.cpp:64:13:64:26 | *call to getenv | *call to getenv | diff --git a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected index d6b79d7ae6b0..8e0eaffa2e08 100644 --- a/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/collections/CollectionFlow.expected @@ -253,7 +253,7 @@ edges | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | provenance | | | CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | CollectionFlow.cs:311:18:311:24 | access to property Key | provenance | | | CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | provenance | | -| CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | CollectionFlow.cs:328:23:328:27 | array [Return] : A[] [element] : A | provenance | | +| CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | CollectionFlow.cs:328:23:328:27 | array [Reverse] : A[] [element] : A | provenance | | | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | provenance | | | CollectionFlow.cs:332:13:332:13 | access to local variable a : A | CollectionFlow.cs:334:23:334:23 | access to local variable a : A | provenance | | | CollectionFlow.cs:332:17:332:23 | object creation of type A : A | CollectionFlow.cs:332:13:332:13 | access to local variable a : A | provenance | | @@ -267,7 +267,7 @@ edges | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | provenance | | | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:337:14:337:23 | call to method First | provenance | | | CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | provenance | | -| CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | CollectionFlow.cs:350:26:350:29 | list [Return] : List [element] : A | provenance | | +| CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | CollectionFlow.cs:350:26:350:29 | list [Reverse] : List [element] : A | provenance | | | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | provenance | MaD:3 | | CollectionFlow.cs:354:13:354:13 | access to local variable a : A | CollectionFlow.cs:356:23:356:23 | access to local variable a : A | provenance | | | CollectionFlow.cs:354:17:354:23 | object creation of type A : A | CollectionFlow.cs:354:13:354:13 | access to local variable a : A | provenance | | @@ -562,7 +562,7 @@ nodes | CollectionFlow.cs:309:21:309:23 | kvp : KeyValuePair [property Key] : A | semmle.label | kvp : KeyValuePair [property Key] : A | | CollectionFlow.cs:311:18:311:20 | access to parameter kvp : KeyValuePair [property Key] : A | semmle.label | access to parameter kvp : KeyValuePair [property Key] : A | | CollectionFlow.cs:311:18:311:24 | access to property Key | semmle.label | access to property Key | -| CollectionFlow.cs:328:23:328:27 | array [Return] : A[] [element] : A | semmle.label | array [Return] : A[] [element] : A | +| CollectionFlow.cs:328:23:328:27 | array [Reverse] : A[] [element] : A | semmle.label | array [Reverse] : A[] [element] : A | | CollectionFlow.cs:328:32:328:38 | element : A | semmle.label | element : A | | CollectionFlow.cs:328:44:328:48 | [post] access to parameter array : A[] [element] : A | semmle.label | [post] access to parameter array : A[] [element] : A | | CollectionFlow.cs:328:55:328:61 | access to parameter element : A | semmle.label | access to parameter element : A | @@ -575,7 +575,7 @@ nodes | CollectionFlow.cs:336:18:336:20 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | | CollectionFlow.cs:337:14:337:23 | call to method First | semmle.label | call to method First | | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | semmle.label | access to local variable as : A[] [element] : A | -| CollectionFlow.cs:350:26:350:29 | list [Return] : List [element] : A | semmle.label | list [Return] : List [element] : A | +| CollectionFlow.cs:350:26:350:29 | list [Reverse] : List [element] : A | semmle.label | list [Reverse] : List [element] : A | | CollectionFlow.cs:350:34:350:40 | element : A | semmle.label | element : A | | CollectionFlow.cs:350:46:350:49 | [post] access to parameter list : List [element] : A | semmle.label | [post] access to parameter list : List [element] : A | | CollectionFlow.cs:350:55:350:61 | access to parameter element : A | semmle.label | access to parameter element : A | @@ -684,9 +684,9 @@ subpaths | CollectionFlow.cs:222:27:222:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:222:14:222:31 | call to method DictFirstKey | | CollectionFlow.cs:240:28:240:31 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:58:32:61 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:32:67:32:83 | call to method First : A | CollectionFlow.cs:240:14:240:32 | call to method DictKeysFirst | | CollectionFlow.cs:241:27:241:30 | access to local variable dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:57:34:60 | dict : Dictionary [element, property Key] : A | CollectionFlow.cs:34:66:34:81 | access to property Key : A | CollectionFlow.cs:241:14:241:31 | call to method DictFirstKey | -| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:23:328:27 | array [Return] : A[] [element] : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | +| CollectionFlow.cs:334:23:334:23 | access to local variable a : A | CollectionFlow.cs:328:32:328:38 | element : A | CollectionFlow.cs:328:23:328:27 | array [Reverse] : A[] [element] : A | CollectionFlow.cs:334:18:334:20 | [post] access to local variable as : A[] [element] : A | | CollectionFlow.cs:337:20:337:22 | access to local variable as : A[] [element] : A | CollectionFlow.cs:22:34:22:35 | ts : A[] [element] : A | CollectionFlow.cs:22:41:22:45 | access to array element : A | CollectionFlow.cs:337:14:337:23 | call to method First | -| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:26:350:29 | list [Return] : List [element] : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | +| CollectionFlow.cs:356:23:356:23 | access to local variable a : A | CollectionFlow.cs:350:34:350:40 | element : A | CollectionFlow.cs:350:26:350:29 | list [Reverse] : List [element] : A | CollectionFlow.cs:356:17:356:20 | [post] access to local variable list : List [element] : A | | CollectionFlow.cs:359:24:359:27 | access to local variable list : List [element] : A | CollectionFlow.cs:24:43:24:46 | list : List [element] : A | CollectionFlow.cs:24:52:24:58 | access to indexer : A | CollectionFlow.cs:359:14:359:28 | call to method ListFirst | #select | CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:40:17:40:23 | object creation of type A : A | CollectionFlow.cs:14:52:14:56 | access to array element | $@ | CollectionFlow.cs:14:52:14:56 | access to array element | access to array element | diff --git a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected index 574ef53eae64..f6852e58572e 100644 --- a/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/constructors/ConstructorFlow.expected @@ -7,31 +7,31 @@ edges | Constructors.cs:10:13:10:13 | access to local variable c : C_no_ctor [field s1] : Object | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:13:21:13:22 | this : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | provenance | | | Constructors.cs:15:18:15:19 | this access : C_no_ctor [field s1] : Object | Constructors.cs:15:18:15:19 | access to field s1 | provenance | | -| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | Constructors.cs:29:16:29:26 | this [Reverse] : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:21:29:21:45 | call to method Source : Object | Constructors.cs:21:24:21:25 | [post] this access : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | provenance | | -| Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | +| Constructors.cs:29:16:29:26 | this [Reverse] : C_with_ctor [field s1] : Object | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | provenance | | | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | Constructors.cs:33:18:33:19 | access to field s1 | provenance | | | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:38:41:38 | access to parameter o : Object | provenance | | -| Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:41:16:41:17 | this [Return] : C1 [field Obj] : Object | provenance | | +| Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | Constructors.cs:41:16:41:17 | this [Reverse] : C1 [field Obj] : Object | provenance | | | Constructors.cs:41:38:41:38 | access to parameter o : Object | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | provenance | | | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | provenance | | | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | -| Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [parameter o22param] : Object | provenance | | -| Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | provenance | | +| Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:18:44:19 | this [Reverse] : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | Constructors.cs:44:18:44:19 | this [Reverse] : C2 [field Obj21] : Object | provenance | | | Constructors.cs:46:23:46:27 | this access : C2 [parameter o21param] : Object | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | provenance | | | Constructors.cs:46:31:46:38 | access to parameter o21param : Object | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | provenance | | | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | provenance | | | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | provenance | | | Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | provenance | | | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:54:13:54:20 | access to parameter o22param : Object | provenance | | -| Constructors.cs:54:13:54:20 | access to parameter o22param : Object | Constructors.cs:52:21:52:26 | this [Return] : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:54:13:54:20 | access to parameter o22param : Object | Constructors.cs:52:21:52:26 | this [Reverse] : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:14 | access to parameter o1 : Object | provenance | | | Constructors.cs:62:41:62:41 | o : Object | Constructors.cs:64:37:64:37 | access to parameter o : Object | provenance | | -| Constructors.cs:64:27:64:34 | access to parameter o22param : Object | Constructors.cs:62:21:62:32 | this [Return] : C2 [parameter o22param] : Object | provenance | | +| Constructors.cs:64:27:64:34 | access to parameter o22param : Object | Constructors.cs:62:21:62:32 | this [Reverse] : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | provenance | | | Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:64:27:64:34 | access to parameter o22param : Object | provenance | | | Constructors.cs:70:13:70:13 | access to local variable o : Object | Constructors.cs:71:25:71:25 | access to local variable o : Object | provenance | | @@ -73,7 +73,7 @@ edges | Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | provenance | | | Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | provenance | | -| Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:104:18:104:19 | this [Return] : C3 [parameter o31param] : Object | provenance | | +| Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:104:18:104:19 | this [Reverse] : C3 [parameter o31param] : Object | provenance | | | Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | access to parameter o31param : Object | provenance | | | Constructors.cs:111:13:111:15 | access to local variable o31 : Object | Constructors.cs:112:25:112:27 | access to local variable o31 : Object | provenance | | | Constructors.cs:111:19:111:35 | call to method Source : Object | Constructors.cs:111:13:111:15 | access to local variable o31 : Object | provenance | | @@ -85,9 +85,9 @@ edges | Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | Constructors.cs:113:14:113:21 | access to property Obj31 | provenance | | | Constructors.cs:121:26:121:28 | oc1 : Object | Constructors.cs:123:20:123:22 | access to parameter oc1 : Object | provenance | | | Constructors.cs:121:38:121:40 | oc2 : Object | Constructors.cs:124:20:124:22 | access to parameter oc2 : Object | provenance | | -| Constructors.cs:123:13:123:16 | [post] this access : C4 [property Obj1] : Object | Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj1] : Object | provenance | | +| Constructors.cs:123:13:123:16 | [post] this access : C4 [property Obj1] : Object | Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj1] : Object | provenance | | | Constructors.cs:123:20:123:22 | access to parameter oc1 : Object | Constructors.cs:123:13:123:16 | [post] this access : C4 [property Obj1] : Object | provenance | | -| Constructors.cs:124:13:124:16 | [post] this access : C4 [property Obj2] : Object | Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj2] : Object | provenance | | +| Constructors.cs:124:13:124:16 | [post] this access : C4 [property Obj2] : Object | Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj2] : Object | provenance | | | Constructors.cs:124:20:124:22 | access to parameter oc2 : Object | Constructors.cs:124:13:124:16 | [post] this access : C4 [property Obj2] : Object | provenance | | | Constructors.cs:130:13:130:14 | access to local variable o1 : Object | Constructors.cs:132:25:132:26 | access to local variable o1 : Object | provenance | | | Constructors.cs:130:18:130:34 | call to method Source : Object | Constructors.cs:130:13:130:14 | access to local variable o1 : Object | provenance | | @@ -103,8 +103,8 @@ edges | Constructors.cs:132:29:132:30 | access to local variable o2 : Object | Constructors.cs:132:18:132:31 | object creation of type C4 : C4 [property Obj2] : Object | provenance | | | Constructors.cs:133:14:133:15 | access to local variable c4 : C4 [property Obj1] : Object | Constructors.cs:133:14:133:20 | access to property Obj1 | provenance | | | Constructors.cs:134:14:134:15 | access to local variable c4 : C4 [property Obj2] : Object | Constructors.cs:134:14:134:20 | access to property Obj2 | provenance | | -| Constructors.cs:137:29:137:32 | Obj1 : Object | Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj1] : Object | provenance | | -| Constructors.cs:137:42:137:45 | Obj2 : Object | Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj2] : Object | provenance | | +| Constructors.cs:137:29:137:32 | Obj1 : Object | Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj1] : Object | provenance | | +| Constructors.cs:137:42:137:45 | Obj2 : Object | Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj2] : Object | provenance | | | Constructors.cs:141:13:141:14 | access to local variable o1 : Object | Constructors.cs:143:25:143:26 | access to local variable o1 : Object | provenance | | | Constructors.cs:141:18:141:34 | call to method Source : Object | Constructors.cs:141:13:141:14 | access to local variable o1 : Object | provenance | | | Constructors.cs:142:13:142:14 | access to local variable o2 : Object | Constructors.cs:143:29:143:30 | access to local variable o2 : Object | provenance | | @@ -133,16 +133,16 @@ nodes | Constructors.cs:25:25:25:25 | access to local variable c : C_with_ctor [field s1] : Object | semmle.label | access to local variable c : C_with_ctor [field s1] : Object | | Constructors.cs:25:29:25:45 | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | semmle.label | object creation of type C_with_ctor : C_with_ctor [field s1] : Object | | Constructors.cs:26:13:26:13 | access to local variable c : C_with_ctor [field s1] : Object | semmle.label | access to local variable c : C_with_ctor [field s1] : Object | -| Constructors.cs:29:16:29:26 | this [Return] : C_with_ctor [field s1] : Object | semmle.label | this [Return] : C_with_ctor [field s1] : Object | +| Constructors.cs:29:16:29:26 | this [Reverse] : C_with_ctor [field s1] : Object | semmle.label | this [Reverse] : C_with_ctor [field s1] : Object | | Constructors.cs:31:21:31:22 | this : C_with_ctor [field s1] : Object | semmle.label | this : C_with_ctor [field s1] : Object | | Constructors.cs:33:18:33:19 | access to field s1 | semmle.label | access to field s1 | | Constructors.cs:33:18:33:19 | this access : C_with_ctor [field s1] : Object | semmle.label | this access : C_with_ctor [field s1] : Object | -| Constructors.cs:41:16:41:17 | this [Return] : C1 [field Obj] : Object | semmle.label | this [Return] : C1 [field Obj] : Object | +| Constructors.cs:41:16:41:17 | this [Reverse] : C1 [field Obj] : Object | semmle.label | this [Reverse] : C1 [field Obj] : Object | | Constructors.cs:41:26:41:26 | o : Object | semmle.label | o : Object | | Constructors.cs:41:32:41:34 | [post] this access : C1 [field Obj] : Object | semmle.label | [post] this access : C1 [field Obj] : Object | | Constructors.cs:41:38:41:38 | access to parameter o : Object | semmle.label | access to parameter o : Object | -| Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | semmle.label | this [Return] : C2 [field Obj21] : Object | -| Constructors.cs:44:18:44:19 | this [Return] : C2 [parameter o22param] : Object | semmle.label | this [Return] : C2 [parameter o22param] : Object | +| Constructors.cs:44:18:44:19 | this [Reverse] : C2 [field Obj21] : Object | semmle.label | this [Reverse] : C2 [field Obj21] : Object | +| Constructors.cs:44:18:44:19 | this [Reverse] : C2 [parameter o22param] : Object | semmle.label | this [Reverse] : C2 [parameter o22param] : Object | | Constructors.cs:44:28:44:35 | o21param : Object | semmle.label | o21param : Object | | Constructors.cs:44:45:44:52 | o22param : Object | semmle.label | o22param : Object | | Constructors.cs:46:23:46:27 | [post] this access : C2 [field Obj21] : Object | semmle.label | [post] this access : C2 [field Obj21] : Object | @@ -153,12 +153,12 @@ nodes | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | semmle.label | access to field Obj21 : Object | | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | semmle.label | this : C2 [field Obj21] : Object | | Constructors.cs:50:32:50:36 | this access : C2 [field Obj21] : Object | semmle.label | this access : C2 [field Obj21] : Object | -| Constructors.cs:52:21:52:26 | this [Return] : C2 [parameter o22param] : Object | semmle.label | this [Return] : C2 [parameter o22param] : Object | +| Constructors.cs:52:21:52:26 | this [Reverse] : C2 [parameter o22param] : Object | semmle.label | this [Reverse] : C2 [parameter o22param] : Object | | Constructors.cs:52:35:52:35 | o : Object | semmle.label | o : Object | | Constructors.cs:54:13:54:20 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | | Constructors.cs:57:54:57:55 | o2 : Object | semmle.label | o2 : Object | | Constructors.cs:59:13:59:14 | access to parameter o1 : Object | semmle.label | access to parameter o1 : Object | -| Constructors.cs:62:21:62:32 | this [Return] : C2 [parameter o22param] : Object | semmle.label | this [Return] : C2 [parameter o22param] : Object | +| Constructors.cs:62:21:62:32 | this [Reverse] : C2 [parameter o22param] : Object | semmle.label | this [Reverse] : C2 [parameter o22param] : Object | | Constructors.cs:62:41:62:41 | o : Object | semmle.label | o : Object | | Constructors.cs:64:27:64:34 | access to parameter o22param : Object | semmle.label | access to parameter o22param : Object | | Constructors.cs:64:37:64:37 | access to parameter o : Object | semmle.label | access to parameter o : Object | @@ -197,7 +197,7 @@ nodes | Constructors.cs:100:25:100:29 | access to local variable taint : Object | semmle.label | access to local variable taint : Object | | Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | semmle.label | access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:101:14:101:21 | access to property Obj22 | semmle.label | access to property Obj22 | -| Constructors.cs:104:18:104:19 | this [Return] : C3 [parameter o31param] : Object | semmle.label | this [Return] : C3 [parameter o31param] : Object | +| Constructors.cs:104:18:104:19 | this [Reverse] : C3 [parameter o31param] : Object | semmle.label | this [Reverse] : C3 [parameter o31param] : Object | | Constructors.cs:104:28:104:35 | o31param : Object | semmle.label | o31param : Object | | Constructors.cs:106:32:106:39 | access to parameter o31param : Object | semmle.label | access to parameter o31param : Object | | Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | semmle.label | this : C3 [parameter o31param] : Object | @@ -208,8 +208,8 @@ nodes | Constructors.cs:112:25:112:27 | access to local variable o31 : Object | semmle.label | access to local variable o31 : Object | | Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | semmle.label | access to local variable c3 : C3 [parameter o31param] : Object | | Constructors.cs:113:14:113:21 | access to property Obj31 | semmle.label | access to property Obj31 | -| Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj1] : Object | semmle.label | this [Return] : C4 [property Obj1] : Object | -| Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj2] : Object | semmle.label | this [Return] : C4 [property Obj2] : Object | +| Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj1] : Object | semmle.label | this [Reverse] : C4 [property Obj1] : Object | +| Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj2] : Object | semmle.label | this [Reverse] : C4 [property Obj2] : Object | | Constructors.cs:121:26:121:28 | oc1 : Object | semmle.label | oc1 : Object | | Constructors.cs:121:38:121:40 | oc2 : Object | semmle.label | oc2 : Object | | Constructors.cs:123:13:123:16 | [post] this access : C4 [property Obj1] : Object | semmle.label | [post] this access : C4 [property Obj1] : Object | @@ -230,8 +230,8 @@ nodes | Constructors.cs:133:14:133:20 | access to property Obj1 | semmle.label | access to property Obj1 | | Constructors.cs:134:14:134:15 | access to local variable c4 : C4 [property Obj2] : Object | semmle.label | access to local variable c4 : C4 [property Obj2] : Object | | Constructors.cs:134:14:134:20 | access to property Obj2 | semmle.label | access to property Obj2 | -| Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj1] : Object | semmle.label | this [Return] : R1 [property Obj1] : Object | -| Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj2] : Object | semmle.label | this [Return] : R1 [property Obj2] : Object | +| Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj1] : Object | semmle.label | this [Reverse] : R1 [property Obj1] : Object | +| Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj2] : Object | semmle.label | this [Reverse] : R1 [property Obj2] : Object | | Constructors.cs:137:29:137:32 | Obj1 : Object | semmle.label | Obj1 : Object | | Constructors.cs:137:42:137:45 | Obj2 : Object | semmle.label | Obj2 : Object | | Constructors.cs:141:13:141:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | @@ -250,21 +250,21 @@ nodes | Constructors.cs:145:14:145:20 | access to property Obj2 | semmle.label | access to property Obj2 | subpaths | Constructors.cs:64:37:64:37 | access to parameter o : Object | Constructors.cs:57:54:57:55 | o2 : Object | Constructors.cs:59:13:59:14 | access to parameter o1 : Object | Constructors.cs:64:27:64:34 | access to parameter o22param : Object | -| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:16:41:17 | this [Return] : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | -| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | -| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:18:44:19 | this [Return] : C2 [parameter o22param] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | +| Constructors.cs:71:25:71:25 | access to local variable o : Object | Constructors.cs:41:26:41:26 | o : Object | Constructors.cs:41:16:41:17 | this [Reverse] : C1 [field Obj] : Object | Constructors.cs:71:18:71:26 | object creation of type C1 : C1 [field Obj] : Object | +| Constructors.cs:79:25:79:27 | access to local variable o21 : Object | Constructors.cs:44:28:44:35 | o21param : Object | Constructors.cs:44:18:44:19 | this [Reverse] : C2 [field Obj21] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [field Obj21] : Object | +| Constructors.cs:79:30:79:32 | access to local variable o22 : Object | Constructors.cs:44:45:44:52 | o22param : Object | Constructors.cs:44:18:44:19 | this [Reverse] : C2 [parameter o22param] : Object | Constructors.cs:79:18:79:33 | object creation of type C2 : C2 [parameter o22param] : Object | | Constructors.cs:81:14:81:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:81:14:81:21 | access to property Obj22 | | Constructors.cs:82:14:82:15 | access to local variable c2 : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | this : C2 [field Obj21] : Object | Constructors.cs:50:32:50:36 | access to field Obj21 : Object | Constructors.cs:82:14:82:21 | access to property Obj23 | -| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:52:21:52:26 | this [Return] : C2 [parameter o22param] : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:92:19:92:23 | access to local variable taint : Object | Constructors.cs:52:35:52:35 | o : Object | Constructors.cs:52:21:52:26 | this [Reverse] : C2 [parameter o22param] : Object | Constructors.cs:92:9:92:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:93:14:93:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:93:14:93:21 | access to property Obj22 | -| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:62:41:62:41 | o : Object | Constructors.cs:62:21:62:32 | this [Return] : C2 [parameter o22param] : Object | Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | +| Constructors.cs:100:25:100:29 | access to local variable taint : Object | Constructors.cs:62:41:62:41 | o : Object | Constructors.cs:62:21:62:32 | this [Reverse] : C2 [parameter o22param] : Object | Constructors.cs:100:9:100:10 | [post] access to local variable c2 : C2 [parameter o22param] : Object | | Constructors.cs:101:14:101:15 | access to local variable c2 : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | this : C2 [parameter o22param] : Object | Constructors.cs:48:32:48:39 | access to parameter o22param : Object | Constructors.cs:101:14:101:21 | access to property Obj22 | -| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:104:18:104:19 | this [Return] : C3 [parameter o31param] : Object | Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | +| Constructors.cs:112:25:112:27 | access to local variable o31 : Object | Constructors.cs:104:28:104:35 | o31param : Object | Constructors.cs:104:18:104:19 | this [Reverse] : C3 [parameter o31param] : Object | Constructors.cs:112:18:112:28 | object creation of type C3 : C3 [parameter o31param] : Object | | Constructors.cs:113:14:113:15 | access to local variable c3 : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | this : C3 [parameter o31param] : Object | Constructors.cs:106:32:106:39 | access to parameter o31param : Object | Constructors.cs:113:14:113:21 | access to property Obj31 | -| Constructors.cs:132:25:132:26 | access to local variable o1 : Object | Constructors.cs:121:26:121:28 | oc1 : Object | Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj1] : Object | Constructors.cs:132:18:132:31 | object creation of type C4 : C4 [property Obj1] : Object | -| Constructors.cs:132:29:132:30 | access to local variable o2 : Object | Constructors.cs:121:38:121:40 | oc2 : Object | Constructors.cs:121:16:121:17 | this [Return] : C4 [property Obj2] : Object | Constructors.cs:132:18:132:31 | object creation of type C4 : C4 [property Obj2] : Object | -| Constructors.cs:143:25:143:26 | access to local variable o1 : Object | Constructors.cs:137:29:137:32 | Obj1 : Object | Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj1] : Object | Constructors.cs:143:18:143:31 | object creation of type R1 : R1 [property Obj1] : Object | -| Constructors.cs:143:29:143:30 | access to local variable o2 : Object | Constructors.cs:137:42:137:45 | Obj2 : Object | Constructors.cs:137:19:137:20 | this [Return] : R1 [property Obj2] : Object | Constructors.cs:143:18:143:31 | object creation of type R1 : R1 [property Obj2] : Object | +| Constructors.cs:132:25:132:26 | access to local variable o1 : Object | Constructors.cs:121:26:121:28 | oc1 : Object | Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj1] : Object | Constructors.cs:132:18:132:31 | object creation of type C4 : C4 [property Obj1] : Object | +| Constructors.cs:132:29:132:30 | access to local variable o2 : Object | Constructors.cs:121:38:121:40 | oc2 : Object | Constructors.cs:121:16:121:17 | this [Reverse] : C4 [property Obj2] : Object | Constructors.cs:132:18:132:31 | object creation of type C4 : C4 [property Obj2] : Object | +| Constructors.cs:143:25:143:26 | access to local variable o1 : Object | Constructors.cs:137:29:137:32 | Obj1 : Object | Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj1] : Object | Constructors.cs:143:18:143:31 | object creation of type R1 : R1 [property Obj1] : Object | +| Constructors.cs:143:29:143:30 | access to local variable o2 : Object | Constructors.cs:137:42:137:45 | Obj2 : Object | Constructors.cs:137:19:137:20 | this [Reverse] : R1 [property Obj2] : Object | Constructors.cs:143:18:143:31 | object creation of type R1 : R1 [property Obj2] : Object | testFailures #select | Constructors.cs:15:18:15:19 | access to field s1 | Constructors.cs:5:29:5:45 | call to method Source : Object | Constructors.cs:15:18:15:19 | access to field s1 | $@ | Constructors.cs:5:29:5:45 | call to method Source : Object | call to method Source : Object | diff --git a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected index 3135ce254bdd..95f619c8e351 100644 --- a/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected +++ b/csharp/ql/test/library-tests/dataflow/fields/FieldFlow.expected @@ -84,10 +84,10 @@ edges | A.cs:60:22:60:22 | c : C1 [field a] : A | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | provenance | | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | provenance | | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | A.cs:64:18:64:26 | access to field a | provenance | | -| A.cs:81:22:81:22 | b [Return] : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | -| A.cs:81:22:81:22 | b [Return] : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:81:22:81:22 | b [Return] : B [field c] : C | provenance | | -| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:81:22:81:22 | b [Return] : B [field c] : C | provenance | | +| A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | provenance | | +| A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | provenance | | | A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | provenance | | | A.cs:83:15:83:26 | call to method Source : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | provenance | | | A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | provenance | | @@ -96,28 +96,28 @@ edges | A.cs:88:12:88:12 | [post] access to local variable b : B [field c] : C | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | provenance | | | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | provenance | | | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | A.cs:89:14:89:16 | access to field c | provenance | | -| A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | -| A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | +| A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | A.cs:105:17:105:29 | object creation of type D : D [field b, field c] : C | provenance | | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | provenance | | | A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | provenance | | | A.cs:95:20:95:20 | b : B | A.cs:97:13:97:13 | access to parameter b : B | provenance | | -| A.cs:95:20:95:20 | b [Return] : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | -| A.cs:95:20:95:20 | b [Return] : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:95:20:95:20 | b [Return] : B [field c] : C | provenance | | -| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:95:20:95:20 | b [Return] : B [field c] : C | provenance | | +| A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | A.cs:105:23:105:23 | [post] access to local variable b : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | provenance | | +| A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | provenance | | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | provenance | | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | A.cs:98:22:98:43 | ... ? ... : ... : B [field c] : C | provenance | | | A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | | A.cs:97:13:97:13 | access to parameter b : B | A.cs:98:22:98:43 | ... ? ... : ... : B | provenance | | | A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | provenance | | | A.cs:97:19:97:32 | call to method Source : C | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | provenance | | -| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b, field c] : C | A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | provenance | | +| A.cs:98:13:98:16 | [post] this access : D [field b] : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | provenance | | | A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | | A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | | A.cs:98:22:98:43 | ... ? ... : ... : B | A.cs:98:13:98:16 | [post] this access : D [field b] : B | provenance | | @@ -206,8 +206,8 @@ edges | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | A.cs:123:18:123:23 | access to field head | provenance | | | A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | provenance | | | A.cs:141:20:141:20 | c : C | A.cs:143:22:143:22 | access to parameter c : C | provenance | | -| A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | provenance | | -| A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | provenance | | +| A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | provenance | | +| A.cs:143:13:143:16 | [post] this access : B [field c] : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | provenance | | | A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | provenance | | | A.cs:143:22:143:22 | access to parameter c : C | A.cs:143:13:143:16 | [post] this access : B [field c] : C | provenance | | | A.cs:145:27:145:27 | c : C | A.cs:145:41:145:41 | access to parameter c : C | provenance | | @@ -216,12 +216,12 @@ edges | A.cs:145:27:145:27 | c : C1 | A.cs:145:41:145:41 | access to parameter c : C1 | provenance | | | A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | provenance | | | A.cs:145:27:145:27 | c : C2 | A.cs:145:41:145:41 | access to parameter c : C2 | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:145:21:145:23 | this [Return] : B [field c] : C | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:145:21:145:23 | this [Return] : B [field c] : C | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | provenance | | -| A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | provenance | | +| A.cs:145:32:145:35 | [post] this access : B [field c] : C2 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | provenance | | | A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | provenance | | | A.cs:145:41:145:41 | access to parameter c : C | A.cs:145:32:145:35 | [post] this access : B [field c] : C | provenance | | | A.cs:145:41:145:41 | access to parameter c : C1 | A.cs:145:32:145:35 | [post] this access : B [field c] : C1 | provenance | | @@ -248,14 +248,14 @@ edges | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | provenance | | | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | provenance | | | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | provenance | | -| A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | provenance | | -| A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | provenance | | +| A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | provenance | | +| A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | provenance | | | A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | provenance | | | A.cs:159:25:159:28 | access to parameter head : B | A.cs:159:13:159:16 | [post] this access : MyList [field head] : B | provenance | | -| A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | provenance | | -| A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | provenance | | -| A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | provenance | | -| A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | provenance | | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | provenance | | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | provenance | | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | provenance | | +| A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | provenance | | | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | provenance | | | A.cs:160:25:160:28 | access to parameter next : MyList [field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field head] : B | provenance | | | A.cs:160:25:160:28 | access to parameter next : MyList [field next, field head] : B | A.cs:160:13:160:16 | [post] this access : MyList [field next, field next, field head] : B | provenance | | @@ -312,38 +312,38 @@ edges | B.cs:29:26:29:27 | e1 : Elem | B.cs:31:26:31:27 | access to parameter e1 : Elem | provenance | | | B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | provenance | | | B.cs:29:35:29:36 | e2 : Elem | B.cs:32:26:32:27 | access to parameter e2 : Elem | provenance | | -| B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | provenance | | -| B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | provenance | | +| B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | provenance | | +| B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | provenance | | | B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | provenance | | | B.cs:31:26:31:27 | access to parameter e1 : Elem | B.cs:31:13:31:16 | [post] this access : Box1 [field elem1] : Elem | provenance | | -| B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | provenance | | -| B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | provenance | | +| B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | provenance | | +| B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | provenance | | | B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | provenance | | | B.cs:32:26:32:27 | access to parameter e2 : Elem | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | provenance | | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | provenance | | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | provenance | | | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | provenance | | | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | provenance | | -| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | provenance | | -| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | provenance | | -| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | provenance | | -| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | provenance | | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | provenance | | +| B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem1] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem1] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | | B.cs:41:25:41:26 | access to parameter b1 : Box1 [field elem2] : Elem | B.cs:41:13:41:16 | [post] this access : Box2 [field box1, field elem2] : Elem | provenance | | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | -| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | provenance | | +| C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | provenance | | | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | | C.cs:3:23:3:37 | call to method Source : Elem | C.cs:3:18:3:19 | [post] this access : C [field s1] : Elem | provenance | | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | -| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | provenance | | +| C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | provenance | | | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | | C.cs:4:32:4:46 | call to method Source : Elem | C.cs:4:27:4:28 | [post] this access : C [field s2] : Elem | provenance | | | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | | C.cs:6:30:6:44 | call to method Source : Elem | C.cs:26:14:26:15 | access to field s4 | provenance | | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | -| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | provenance | | +| C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | provenance | | | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | | C.cs:7:37:7:51 | call to method Source : Elem | C.cs:7:18:7:19 | [post] this access : C [property s5] : Elem | provenance | | | C.cs:8:30:8:44 | call to method Source : Elem | C.cs:28:14:28:15 | access to property s6 | provenance | | @@ -372,16 +372,16 @@ edges | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | C.cs:21:17:21:18 | this : C [field s3] : Elem | provenance | | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | C.cs:21:17:21:18 | this : C [property s5] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | -| C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | provenance | | -| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s1] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s2] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | C.cs:12:15:12:21 | object creation of type C : C [field s3] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | +| C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | C.cs:12:15:12:21 | object creation of type C : C [property s5] : Elem | provenance | | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | provenance | | +| C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | provenance | | | C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | provenance | | | C.cs:18:19:18:33 | call to method Source : Elem | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | provenance | | | C.cs:21:17:21:18 | this : C [field s1] : Elem | C.cs:23:14:23:15 | this access : C [field s1] : Elem | provenance | | @@ -406,8 +406,8 @@ edges | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | D.cs:8:22:8:42 | access to field trivialPropField : Object | provenance | | | D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | provenance | | | D.cs:9:9:9:11 | value : Object | D.cs:9:39:9:43 | access to parameter value : Object | provenance | | -| D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | provenance | | -| D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | provenance | | +| D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | provenance | | +| D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | provenance | | | D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | provenance | | | D.cs:9:39:9:43 | access to parameter value : Object | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | provenance | | | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | provenance | | @@ -416,8 +416,8 @@ edges | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | provenance | | | D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | provenance | | | D.cs:15:9:15:11 | value : Object | D.cs:15:34:15:38 | access to parameter value : Object | provenance | | -| D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | provenance | | -| D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | provenance | | +| D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | provenance | | +| D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | provenance | | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | provenance | | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | provenance | | | D.cs:15:34:15:38 | access to parameter value : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | provenance | | @@ -524,8 +524,8 @@ edges | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | E.cs:24:14:24:20 | access to field Field | provenance | | | E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | provenance | | | E.cs:43:46:43:46 | o : Object | E.cs:46:22:46:22 | access to parameter o : Object | provenance | | -| E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | provenance | | -| E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | provenance | | +| E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | provenance | | +| E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | provenance | | | E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | provenance | | | E.cs:46:22:46:22 | access to parameter o : Object | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | provenance | | | E.cs:54:13:54:17 | access to local variable taint : Object | E.cs:55:29:55:33 | access to local variable taint : Object | provenance | | @@ -636,8 +636,12 @@ edges | G.cs:23:18:23:32 | call to method Source : Elem | G.cs:23:14:23:14 | access to local variable e : Elem | provenance | | | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | -| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | -| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | provenance | | | G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | | G.cs:25:28:25:28 | access to local variable e : Elem | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:37:38:37:39 | b2 : Box2 [field Box1, field Elem] : Elem | provenance | | @@ -648,8 +652,12 @@ edges | G.cs:31:18:31:32 | call to method Source : Elem | G.cs:31:14:31:14 | access to local variable e : Elem | provenance | | | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | -| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | -| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | provenance | | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | provenance | | | G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | provenance | | @@ -694,14 +702,18 @@ edges | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | provenance | | | G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | provenance | | | G.cs:64:34:64:34 | e : Elem | G.cs:64:46:64:46 | access to parameter e : Elem | provenance | | -| G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | provenance | | -| G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | provenance | | +| G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | provenance | | +| G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | provenance | | | G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | provenance | | | G.cs:64:46:64:46 | access to parameter e : Elem | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | provenance | | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | provenance | | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | provenance | | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | provenance | | +| G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | provenance | | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | provenance | | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:16:22:16:22 | access to parameter a : A [field FieldA] : Object | provenance | | | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | provenance | | @@ -756,8 +768,8 @@ edges | H.cs:45:14:45:14 | access to local variable b : B [field FieldB] : Object | H.cs:45:14:45:21 | access to field FieldB | provenance | | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | provenance | | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | provenance | | -| H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | provenance | | -| H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | provenance | | +| H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | provenance | | +| H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | provenance | | | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | provenance | | | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | H.cs:55:21:55:28 | access to field FieldA : Object | provenance | | | H.cs:55:21:55:28 | access to field FieldA : Object | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | @@ -776,8 +788,8 @@ edges | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | H.cs:65:14:65:22 | access to field FieldB | provenance | | | H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | provenance | | | H.cs:77:30:77:30 | o : Object | H.cs:79:20:79:20 | access to parameter o : Object | provenance | | -| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | provenance | | -| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | provenance | | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | provenance | | +| H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | provenance | | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | provenance | | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | provenance | | | H.cs:79:20:79:20 | access to parameter o : Object | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | provenance | | @@ -786,8 +798,8 @@ edges | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | provenance | | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | | H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | provenance | | -| H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | provenance | | -| H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | provenance | | +| H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | provenance | | +| H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | provenance | | | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | provenance | | | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | H.cs:89:14:89:14 | access to local variable a : A [field FieldA] : Object | provenance | | | H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | provenance | | @@ -866,8 +878,8 @@ edges | H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | provenance | | | H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | provenance | | | H.cs:147:25:147:38 | call to method Source : A | H.cs:147:17:147:39 | call to method Through : A | provenance | | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA] : B | provenance | | | H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | provenance | | | H.cs:153:32:153:32 | o : Object | H.cs:156:20:156:20 | access to parameter o : Object | provenance | | | H.cs:155:13:155:13 | access to local variable b : B | H.cs:156:9:156:9 | access to local variable b : B | provenance | | @@ -880,10 +892,10 @@ edges | H.cs:156:9:156:9 | access to local variable b : B | H.cs:157:20:157:20 | access to local variable b : B | provenance | | | H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | | H.cs:156:20:156:20 | access to parameter o : Object | H.cs:156:9:156:9 | [post] access to local variable b : B [field FieldB] : Object | provenance | | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | provenance | | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | provenance | | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | provenance | | -| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | provenance | | +| H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | provenance | | | H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | provenance | | | H.cs:157:20:157:20 | access to local variable b : B | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA] : B | provenance | | | H.cs:157:20:157:20 | access to local variable b : B [field FieldB] : Object | H.cs:157:9:157:9 | [post] access to parameter a : A [field FieldA, field FieldB] : Object | provenance | | @@ -918,12 +930,12 @@ edges | H.cs:165:20:165:27 | access to field FieldA : Object [field FieldB] : Object | H.cs:165:17:165:27 | (...) ... : B [field FieldB] : Object | provenance | | | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | provenance | | | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | H.cs:167:14:167:21 | access to field FieldB | provenance | | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | provenance | | -| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | provenance | | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | I.cs:21:13:21:19 | object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | I.cs:26:13:26:37 | [pre-initializer] object creation of type I : I [field Field1] : Object | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | provenance | | +| I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | provenance | | | I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | provenance | | | I.cs:7:18:7:34 | call to method Source : Object | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | provenance | | | I.cs:13:13:13:13 | access to local variable o : Object | I.cs:15:20:15:20 | access to local variable o : Object | provenance | | @@ -972,18 +984,18 @@ edges | I.cs:39:9:39:9 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | provenance | | | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | provenance | | | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | I.cs:40:14:40:21 | access to field Field1 | provenance | | -| J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | provenance | | -| J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | provenance | | -| J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | provenance | | -| J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | provenance | | +| J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | provenance | | +| J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | provenance | | +| J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | provenance | | | J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | provenance | | | J.cs:14:26:14:30 | field : Object | J.cs:14:66:14:70 | access to parameter field : Object | provenance | | | J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | provenance | | | J.cs:14:40:14:43 | prop : Object | J.cs:14:73:14:76 | access to parameter prop : Object | provenance | | -| J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | provenance | | -| J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | provenance | | -| J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | provenance | | -| J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | provenance | | +| J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | provenance | | +| J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | provenance | | +| J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | provenance | | +| J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | provenance | | | J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | provenance | | | J.cs:14:66:14:70 | access to parameter field : Object | J.cs:14:50:14:54 | [post] this access : Struct [field Field] : Object | provenance | | | J.cs:14:73:14:76 | access to parameter prop : Object | J.cs:14:57:14:60 | [post] this access : Struct [property Prop] : Object | provenance | | @@ -1293,8 +1305,8 @@ nodes | A.cs:64:18:64:26 | access to field a | semmle.label | access to field a | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | semmle.label | (...) ... : C1 [field a] : A | | A.cs:64:19:64:23 | (...) ... : C1 [field a] : A | semmle.label | (...) ... : C1 [field a] : A | -| A.cs:81:22:81:22 | b [Return] : B [field c] : C | semmle.label | b [Return] : B [field c] : C | -| A.cs:81:22:81:22 | b [Return] : B [field c] : C | semmle.label | b [Return] : B [field c] : C | +| A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | semmle.label | b [Reverse] : B [field c] : C | +| A.cs:81:22:81:22 | b [Reverse] : B [field c] : C | semmle.label | b [Reverse] : B [field c] : C | | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:83:15:83:26 | call to method Source : C | semmle.label | call to method Source : C | @@ -1305,16 +1317,16 @@ nodes | A.cs:89:14:89:14 | access to local variable b : B [field c] : C | semmle.label | access to local variable b : B [field c] : C | | A.cs:89:14:89:16 | access to field c | semmle.label | access to field c | | A.cs:89:14:89:16 | access to field c | semmle.label | access to field c | -| A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | semmle.label | this [Return] : D [field b, field c] : C | -| A.cs:95:16:95:16 | this [Return] : D [field b, field c] : C | semmle.label | this [Return] : D [field b, field c] : C | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | semmle.label | this [Return] : D [field b] : B | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | semmle.label | this [Return] : D [field b] : B | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | semmle.label | this [Return] : D [field b] : B | -| A.cs:95:16:95:16 | this [Return] : D [field b] : B | semmle.label | this [Return] : D [field b] : B | +| A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | semmle.label | this [Reverse] : D [field b, field c] : C | +| A.cs:95:16:95:16 | this [Reverse] : D [field b, field c] : C | semmle.label | this [Reverse] : D [field b, field c] : C | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | semmle.label | this [Reverse] : D [field b] : B | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | semmle.label | this [Reverse] : D [field b] : B | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | semmle.label | this [Reverse] : D [field b] : B | +| A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | semmle.label | this [Reverse] : D [field b] : B | | A.cs:95:20:95:20 | b : B | semmle.label | b : B | | A.cs:95:20:95:20 | b : B | semmle.label | b : B | -| A.cs:95:20:95:20 | b [Return] : B [field c] : C | semmle.label | b [Return] : B [field c] : C | -| A.cs:95:20:95:20 | b [Return] : B [field c] : C | semmle.label | b [Return] : B [field c] : C | +| A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | semmle.label | b [Reverse] : B [field c] : C | +| A.cs:95:20:95:20 | b [Reverse] : B [field c] : C | semmle.label | b [Reverse] : B [field c] : C | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:97:13:97:13 | [post] access to parameter b : B [field c] : C | semmle.label | [post] access to parameter b : B [field c] : C | | A.cs:97:13:97:13 | access to parameter b : B | semmle.label | access to parameter b : B | @@ -1413,20 +1425,20 @@ nodes | A.cs:123:18:123:18 | access to local variable l : MyList [field head] : B | semmle.label | access to local variable l : MyList [field head] : B | | A.cs:123:18:123:23 | access to field head | semmle.label | access to field head | | A.cs:123:18:123:23 | access to field head | semmle.label | access to field head | -| A.cs:141:16:141:16 | this [Return] : B [field c] : C | semmle.label | this [Return] : B [field c] : C | -| A.cs:141:16:141:16 | this [Return] : B [field c] : C | semmle.label | this [Return] : B [field c] : C | +| A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | semmle.label | this [Reverse] : B [field c] : C | +| A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | semmle.label | this [Reverse] : B [field c] : C | | A.cs:141:20:141:20 | c : C | semmle.label | c : C | | A.cs:141:20:141:20 | c : C | semmle.label | c : C | | A.cs:143:13:143:16 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | | A.cs:143:13:143:16 | [post] this access : B [field c] : C | semmle.label | [post] this access : B [field c] : C | | A.cs:143:22:143:22 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:143:22:143:22 | access to parameter c : C | semmle.label | access to parameter c : C | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C | semmle.label | this [Return] : B [field c] : C | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C | semmle.label | this [Return] : B [field c] : C | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | semmle.label | this [Return] : B [field c] : C1 | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | semmle.label | this [Return] : B [field c] : C1 | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | semmle.label | this [Return] : B [field c] : C2 | -| A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | semmle.label | this [Return] : B [field c] : C2 | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | semmle.label | this [Reverse] : B [field c] : C | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | semmle.label | this [Reverse] : B [field c] : C | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | semmle.label | this [Reverse] : B [field c] : C1 | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | semmle.label | this [Reverse] : B [field c] : C1 | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | semmle.label | this [Reverse] : B [field c] : C2 | +| A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | semmle.label | this [Reverse] : B [field c] : C2 | | A.cs:145:27:145:27 | c : C | semmle.label | c : C | | A.cs:145:27:145:27 | c : C | semmle.label | c : C | | A.cs:145:27:145:27 | c : C1 | semmle.label | c : C1 | @@ -1463,12 +1475,12 @@ nodes | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | semmle.label | object creation of type B : B [field c] : C | | A.cs:149:26:149:26 | access to parameter c : C | semmle.label | access to parameter c : C | | A.cs:149:26:149:26 | access to parameter c : C | semmle.label | access to parameter c : C | -| A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | semmle.label | this [Return] : MyList [field head] : B | -| A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | semmle.label | this [Return] : MyList [field head] : B | -| A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | semmle.label | this [Return] : MyList [field next, field head] : B | -| A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | semmle.label | this [Return] : MyList [field next, field head] : B | -| A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | semmle.label | this [Return] : MyList [field next, field next, field head] : B | -| A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | semmle.label | this [Return] : MyList [field next, field next, field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | semmle.label | this [Reverse] : MyList [field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | semmle.label | this [Reverse] : MyList [field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | semmle.label | this [Reverse] : MyList [field next, field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | semmle.label | this [Reverse] : MyList [field next, field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | semmle.label | this [Reverse] : MyList [field next, field next, field head] : B | +| A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | semmle.label | this [Reverse] : MyList [field next, field next, field head] : B | | A.cs:157:25:157:28 | head : B | semmle.label | head : B | | A.cs:157:25:157:28 | head : B | semmle.label | head : B | | A.cs:157:38:157:41 | next : MyList [field head] : B | semmle.label | next : MyList [field head] : B | @@ -1531,10 +1543,10 @@ nodes | B.cs:18:14:18:20 | access to field box1 : Box1 [field elem2] : Elem | semmle.label | access to field box1 : Box1 [field elem2] : Elem | | B.cs:18:14:18:26 | access to field elem2 | semmle.label | access to field elem2 | | B.cs:18:14:18:26 | access to field elem2 | semmle.label | access to field elem2 | -| B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | semmle.label | this [Return] : Box1 [field elem1] : Elem | -| B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | semmle.label | this [Return] : Box1 [field elem1] : Elem | -| B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | semmle.label | this [Return] : Box1 [field elem2] : Elem | -| B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | semmle.label | this [Return] : Box1 [field elem2] : Elem | +| B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | semmle.label | this [Reverse] : Box1 [field elem1] : Elem | +| B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | semmle.label | this [Reverse] : Box1 [field elem1] : Elem | +| B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | semmle.label | this [Reverse] : Box1 [field elem2] : Elem | +| B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | semmle.label | this [Reverse] : Box1 [field elem2] : Elem | | B.cs:29:26:29:27 | e1 : Elem | semmle.label | e1 : Elem | | B.cs:29:26:29:27 | e1 : Elem | semmle.label | e1 : Elem | | B.cs:29:35:29:36 | e2 : Elem | semmle.label | e2 : Elem | @@ -1547,10 +1559,10 @@ nodes | B.cs:32:13:32:16 | [post] this access : Box1 [field elem2] : Elem | semmle.label | [post] this access : Box1 [field elem2] : Elem | | B.cs:32:26:32:27 | access to parameter e2 : Elem | semmle.label | access to parameter e2 : Elem | | B.cs:32:26:32:27 | access to parameter e2 : Elem | semmle.label | access to parameter e2 : Elem | -| B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | semmle.label | this [Return] : Box2 [field box1, field elem1] : Elem | -| B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | semmle.label | this [Return] : Box2 [field box1, field elem1] : Elem | -| B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | semmle.label | this [Return] : Box2 [field box1, field elem2] : Elem | -| B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | semmle.label | this [Return] : Box2 [field box1, field elem2] : Elem | +| B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | semmle.label | this [Reverse] : Box2 [field box1, field elem1] : Elem | +| B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | semmle.label | this [Reverse] : Box2 [field box1, field elem1] : Elem | +| B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | semmle.label | this [Reverse] : Box2 [field box1, field elem2] : Elem | +| B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | semmle.label | this [Reverse] : Box2 [field box1, field elem2] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | semmle.label | b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | semmle.label | b1 : Box1 [field elem1] : Elem | | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | semmle.label | b1 : Box1 [field elem2] : Elem | @@ -1603,14 +1615,14 @@ nodes | C.cs:13:9:13:9 | access to local variable c : C [field s3] : Elem | semmle.label | access to local variable c : C [field s3] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | | C.cs:13:9:13:9 | access to local variable c : C [property s5] : Elem | semmle.label | access to local variable c : C [property s5] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | semmle.label | this [Return] : C [field s1] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s1] : Elem | semmle.label | this [Return] : C [field s1] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | semmle.label | this [Return] : C [field s2] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s2] : Elem | semmle.label | this [Return] : C [field s2] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | semmle.label | this [Return] : C [field s3] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [field s3] : Elem | semmle.label | this [Return] : C [field s3] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | semmle.label | this [Return] : C [property s5] : Elem | -| C.cs:16:13:16:13 | this [Return] : C [property s5] : Elem | semmle.label | this [Return] : C [property s5] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | semmle.label | this [Reverse] : C [field s1] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s1] : Elem | semmle.label | this [Reverse] : C [field s1] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | semmle.label | this [Reverse] : C [field s2] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s2] : Elem | semmle.label | this [Reverse] : C [field s2] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | semmle.label | this [Reverse] : C [field s3] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [field s3] : Elem | semmle.label | this [Reverse] : C [field s3] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | semmle.label | this [Reverse] : C [property s5] : Elem | +| C.cs:16:13:16:13 | this [Reverse] : C [property s5] : Elem | semmle.label | this [Reverse] : C [property s5] : Elem | | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | semmle.label | [post] this access : C [field s3] : Elem | | C.cs:18:9:18:12 | [post] this access : C [field s3] : Elem | semmle.label | [post] this access : C [field s3] : Elem | | C.cs:18:19:18:33 | call to method Source : Elem | semmle.label | call to method Source : Elem | @@ -1649,8 +1661,8 @@ nodes | D.cs:8:22:8:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | | D.cs:8:22:8:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:8:22:8:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | -| D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | semmle.label | this [Return] : D [field trivialPropField] : Object | -| D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | semmle.label | this [Return] : D [field trivialPropField] : Object | +| D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | semmle.label | this [Reverse] : D [field trivialPropField] : Object | +| D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | semmle.label | this [Reverse] : D [field trivialPropField] : Object | | D.cs:9:9:9:11 | value : Object | semmle.label | value : Object | | D.cs:9:9:9:11 | value : Object | semmle.label | value : Object | | D.cs:9:15:9:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | @@ -1663,8 +1675,8 @@ nodes | D.cs:14:22:14:25 | this access : D [field trivialPropField] : Object | semmle.label | this access : D [field trivialPropField] : Object | | D.cs:14:22:14:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | | D.cs:14:22:14:42 | access to field trivialPropField : Object | semmle.label | access to field trivialPropField : Object | -| D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | semmle.label | this [Return] : D [field trivialPropField] : Object | -| D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | semmle.label | this [Return] : D [field trivialPropField] : Object | +| D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | semmle.label | this [Reverse] : D [field trivialPropField] : Object | +| D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | semmle.label | this [Reverse] : D [field trivialPropField] : Object | | D.cs:15:9:15:11 | value : Object | semmle.label | value : Object | | D.cs:15:9:15:11 | value : Object | semmle.label | value : Object | | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | semmle.label | [post] this access : D [field trivialPropField] : Object | @@ -1767,8 +1779,8 @@ nodes | E.cs:24:14:24:14 | access to local variable s : S [field Field] : Object | semmle.label | access to local variable s : S [field Field] : Object | | E.cs:24:14:24:20 | access to field Field | semmle.label | access to field Field | | E.cs:24:14:24:20 | access to field Field | semmle.label | access to field Field | -| E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | semmle.label | s [Return] : RefS [field RefField] : Object | -| E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | semmle.label | s [Return] : RefS [field RefField] : Object | +| E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | semmle.label | s [Reverse] : RefS [field RefField] : Object | +| E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | semmle.label | s [Reverse] : RefS [field RefField] : Object | | E.cs:43:46:43:46 | o : Object | semmle.label | o : Object | | E.cs:43:46:43:46 | o : Object | semmle.label | o : Object | | E.cs:46:9:46:9 | [post] access to parameter s : RefS [field RefField] : Object | semmle.label | [post] access to parameter s : RefS [field RefField] : Object | @@ -1893,6 +1905,8 @@ nodes | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:25:9:25:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | | G.cs:25:28:25:28 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:25:28:25:28 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:26:18:26:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | @@ -1905,6 +1919,8 @@ nodes | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | semmle.label | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:33:29:33:29 | access to local variable e : Elem | semmle.label | access to local variable e : Elem | | G.cs:34:18:34:18 | access to local variable b : Box2 [field Box1, field Elem] : Elem | semmle.label | access to local variable b : Box2 [field Box1, field Elem] : Elem | @@ -1947,8 +1963,8 @@ nodes | G.cs:63:34:63:37 | access to field Elem : Elem | semmle.label | access to field Elem : Elem | | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | semmle.label | this access : Box1 [field Elem] : Elem | | G.cs:63:34:63:37 | this access : Box1 [field Elem] : Elem | semmle.label | this access : Box1 [field Elem] : Elem | -| G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | semmle.label | this [Return] : Box1 [field Elem] : Elem | -| G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | semmle.label | this [Return] : Box1 [field Elem] : Elem | +| G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | semmle.label | this [Reverse] : Box1 [field Elem] : Elem | +| G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | semmle.label | this [Reverse] : Box1 [field Elem] : Elem | | G.cs:64:34:64:34 | e : Elem | semmle.label | e : Elem | | G.cs:64:34:64:34 | e : Elem | semmle.label | e : Elem | | G.cs:64:39:64:42 | [post] this access : Box1 [field Elem] : Elem | semmle.label | [post] this access : Box1 [field Elem] : Elem | @@ -1957,10 +1973,16 @@ nodes | G.cs:64:46:64:46 | access to parameter e : Elem | semmle.label | access to parameter e : Elem | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | semmle.label | this : Box2 [field Box1, field Elem] : Elem | | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | semmle.label | this : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | semmle.label | this [Reverse] : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | semmle.label | this [Reverse] : Box2 [field Box1, field Elem] : Elem | | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | semmle.label | access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | +| G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | semmle.label | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | semmle.label | this access : Box2 [field Box1, field Elem] : Elem | | G.cs:71:34:71:37 | this access : Box2 [field Box1, field Elem] : Elem | semmle.label | this access : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | semmle.label | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | +| G.cs:71:34:71:37 | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | semmle.label | this access [Reverse] : Box2 [field Box1, field Elem] : Elem | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:13:15:13:15 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:16:9:16:11 | [post] access to local variable ret : A [field FieldA] : Object | semmle.label | [post] access to local variable ret : A [field FieldA] : Object | @@ -2021,8 +2043,8 @@ nodes | H.cs:45:14:45:21 | access to field FieldB | semmle.label | access to field FieldB | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | | H.cs:53:25:53:25 | a : A [field FieldA] : Object | semmle.label | a : A [field FieldA] : Object | -| H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | semmle.label | b1 [Return] : B [field FieldB] : Object | -| H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | semmle.label | b1 [Return] : B [field FieldB] : Object | +| H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | semmle.label | b1 [Reverse] : B [field FieldB] : Object | +| H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | semmle.label | b1 [Reverse] : B [field FieldB] : Object | | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:55:9:55:10 | [post] access to parameter b1 : B [field FieldB] : Object | semmle.label | [post] access to parameter b1 : B [field FieldB] : Object | | H.cs:55:21:55:21 | access to parameter a : A [field FieldA] : Object | semmle.label | access to parameter a : A [field FieldA] : Object | @@ -2041,12 +2063,12 @@ nodes | H.cs:65:14:65:15 | access to local variable b1 : B [field FieldB] : Object | semmle.label | access to local variable b1 : B [field FieldB] : Object | | H.cs:65:14:65:22 | access to field FieldB | semmle.label | access to field FieldB | | H.cs:65:14:65:22 | access to field FieldB | semmle.label | access to field FieldB | -| H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | semmle.label | a [Return] : A [field FieldA] : Object | -| H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | semmle.label | a [Return] : A [field FieldA] : Object | +| H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | semmle.label | a [Reverse] : A [field FieldA] : Object | +| H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | semmle.label | a [Reverse] : A [field FieldA] : Object | | H.cs:77:30:77:30 | o : Object | semmle.label | o : Object | | H.cs:77:30:77:30 | o : Object | semmle.label | o : Object | -| H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | semmle.label | b1 [Return] : B [field FieldB] : Object | -| H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | semmle.label | b1 [Return] : B [field FieldB] : Object | +| H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | semmle.label | b1 [Reverse] : B [field FieldB] : Object | +| H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | semmle.label | b1 [Reverse] : B [field FieldB] : Object | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | semmle.label | [post] access to parameter a : A [field FieldA] : Object | | H.cs:79:9:79:9 | [post] access to parameter a : A [field FieldA] : Object | semmle.label | [post] access to parameter a : A [field FieldA] : Object | | H.cs:79:20:79:20 | access to parameter o : Object | semmle.label | access to parameter o : Object | @@ -2133,10 +2155,10 @@ nodes | H.cs:147:25:147:38 | call to method Source : A | semmle.label | call to method Source : A | | H.cs:148:14:148:14 | access to local variable a | semmle.label | access to local variable a | | H.cs:148:14:148:14 | access to local variable a | semmle.label | access to local variable a | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | semmle.label | a [Return] : A [field FieldA, field FieldB] : Object | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | semmle.label | a [Return] : A [field FieldA, field FieldB] : Object | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | semmle.label | a [Return] : A [field FieldA] : B | -| H.cs:153:22:153:22 | a [Return] : A [field FieldA] : B | semmle.label | a [Return] : A [field FieldA] : B | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | semmle.label | a [Reverse] : A [field FieldA, field FieldB] : Object | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | semmle.label | a [Reverse] : A [field FieldA, field FieldB] : Object | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | semmle.label | a [Reverse] : A [field FieldA] : B | +| H.cs:153:22:153:22 | a [Reverse] : A [field FieldA] : B | semmle.label | a [Reverse] : A [field FieldA] : B | | H.cs:153:32:153:32 | o : Object | semmle.label | o : Object | | H.cs:153:32:153:32 | o : Object | semmle.label | o : Object | | H.cs:155:13:155:13 | access to local variable b : B | semmle.label | access to local variable b : B | @@ -2189,8 +2211,8 @@ nodes | H.cs:167:14:167:14 | access to local variable b : B [field FieldB] : Object | semmle.label | access to local variable b : B [field FieldB] : Object | | H.cs:167:14:167:21 | access to field FieldB | semmle.label | access to field FieldB | | H.cs:167:14:167:21 | access to field FieldB | semmle.label | access to field FieldB | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | semmle.label | this [Return] : I [field Field1] : Object | -| I.cs:5:12:5:12 | this [Return] : I [field Field1] : Object | semmle.label | this [Return] : I [field Field1] : Object | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | semmle.label | this [Reverse] : I [field Field1] : Object | +| I.cs:5:12:5:12 | this [Reverse] : I [field Field1] : Object | semmle.label | this [Reverse] : I [field Field1] : Object | | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | semmle.label | [post] this access : I [field Field1] : Object | | I.cs:7:9:7:14 | [post] this access : I [field Field1] : Object | semmle.label | [post] this access : I [field Field1] : Object | | I.cs:7:18:7:34 | call to method Source : Object | semmle.label | call to method Source : Object | @@ -2249,18 +2271,18 @@ nodes | I.cs:40:14:40:14 | access to parameter i : I [field Field1] : Object | semmle.label | access to parameter i : I [field Field1] : Object | | I.cs:40:14:40:21 | access to field Field1 | semmle.label | access to field Field1 | | I.cs:40:14:40:21 | access to field Field1 | semmle.label | access to field Field1 | -| J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | semmle.label | this [Return] : RecordClass [property Prop1] : Object | -| J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | semmle.label | this [Return] : RecordClass [property Prop1] : Object | +| J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | semmle.label | this [Reverse] : RecordClass [property Prop1] : Object | +| J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | semmle.label | this [Reverse] : RecordClass [property Prop1] : Object | | J.cs:6:40:6:44 | Prop1 : Object | semmle.label | Prop1 : Object | | J.cs:6:40:6:44 | Prop1 : Object | semmle.label | Prop1 : Object | -| J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | semmle.label | this [Return] : RecordStruct [property Prop1] : Object | -| J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | semmle.label | this [Return] : RecordStruct [property Prop1] : Object | +| J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | semmle.label | this [Reverse] : RecordStruct [property Prop1] : Object | +| J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | semmle.label | this [Reverse] : RecordStruct [property Prop1] : Object | | J.cs:8:42:8:46 | Prop1 : Object | semmle.label | Prop1 : Object | | J.cs:8:42:8:46 | Prop1 : Object | semmle.label | Prop1 : Object | -| J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | semmle.label | this [Return] : Struct [field Field] : Object | -| J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | semmle.label | this [Return] : Struct [field Field] : Object | -| J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | semmle.label | this [Return] : Struct [property Prop] : Object | -| J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | semmle.label | this [Return] : Struct [property Prop] : Object | +| J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | semmle.label | this [Reverse] : Struct [field Field] : Object | +| J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | semmle.label | this [Reverse] : Struct [field Field] : Object | +| J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | semmle.label | this [Reverse] : Struct [property Prop] : Object | +| J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | semmle.label | this [Reverse] : Struct [property Prop] : Object | | J.cs:14:26:14:30 | field : Object | semmle.label | field : Object | | J.cs:14:26:14:30 | field : Object | semmle.label | field : Object | | J.cs:14:40:14:43 | prop : Object | semmle.label | prop : Object | @@ -2526,48 +2548,48 @@ nodes subpaths | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | | A.cs:6:24:6:24 | access to local variable c : C | A.cs:147:32:147:32 | c : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | A.cs:6:17:6:25 | call to method Make : B [field c] : C | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | -| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:21:145:23 | this [Return] : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | +| A.cs:13:15:13:29 | call to method Source : C1 | A.cs:145:27:145:27 | c : C1 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C1 | A.cs:13:9:13:9 | [post] access to local variable b : B [field c] : C1 | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | A.cs:14:14:14:20 | call to method Get | | A.cs:14:14:14:14 | access to local variable b : B [field c] : C1 | A.cs:146:18:146:20 | this : B [field c] : C1 | A.cs:146:33:146:38 | access to field c : C1 | A.cs:14:14:14:20 | call to method Get | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | A.cs:15:14:15:42 | call to method Get | | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | A.cs:146:18:146:20 | this : B [field c] : C | A.cs:146:33:146:38 | access to field c : C | A.cs:15:14:15:42 | call to method Get | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | -| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | +| A.cs:15:21:15:34 | call to method Source : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | A.cs:15:15:15:35 | object creation of type B : B [field c] : C | | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:22:25:22:37 | call to method Source : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:22:14:22:38 | call to method SetOnB : B [field c] : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | | A.cs:31:29:31:41 | call to method Source : C2 | A.cs:36:33:36:33 | c : C2 | A.cs:39:16:39:28 | ... ? ... : ... : B [field c] : C2 | A.cs:31:14:31:42 | call to method SetOnBWrap : B [field c] : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | | A.cs:38:29:38:29 | access to parameter c : C2 | A.cs:42:29:42:29 | c : C2 | A.cs:48:20:48:21 | access to local variable b2 : B [field c] : C2 | A.cs:38:18:38:30 | call to method SetOnB : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | -| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:21:145:23 | this [Return] : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:21:145:23 | this [Return] : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | -| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:21:145:23 | this [Return] : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:95:16:95:16 | this [Return] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | -| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:157:16:157:21 | this [Return] : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | -| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | -| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Return] : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | -| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Return] : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | -| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | -| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | -| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:29:16:29:19 | this [Return] : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | -| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:39:16:39:19 | this [Return] : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Return] : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | -| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:9:15:11 | this [Return] : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:47:20:47:20 | access to parameter c : C2 | A.cs:145:27:145:27 | c : C2 | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C2 | A.cs:47:13:47:14 | [post] access to local variable b2 : B [field c] : C2 | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | +| A.cs:83:15:83:26 | call to method Source : C | A.cs:145:27:145:27 | c : C | A.cs:145:21:145:23 | this [Reverse] : B [field c] : C | A.cs:83:9:83:9 | [post] access to parameter b : B [field c] : C | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:105:23:105:23 | access to local variable b : B | A.cs:95:20:95:20 | b : B | A.cs:95:16:95:16 | this [Reverse] : D [field b] : B | A.cs:105:17:105:29 | object creation of type D : D [field b] : B | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | +| A.cs:114:29:114:29 | access to local variable b : B | A.cs:157:25:157:28 | head : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field head] : B | A.cs:114:18:114:54 | object creation of type MyList : MyList [field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:115:35:115:36 | access to local variable l1 : MyList [field head] : B | A.cs:157:38:157:41 | next : MyList [field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field head] : B | A.cs:115:18:115:37 | object creation of type MyList : MyList [field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | +| A.cs:116:35:116:36 | access to local variable l2 : MyList [field next, field head] : B | A.cs:157:38:157:41 | next : MyList [field next, field head] : B | A.cs:157:16:157:21 | this [Reverse] : MyList [field next, field next, field head] : B | A.cs:116:18:116:37 | object creation of type MyList : MyList [field next, field next, field head] : B | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| A.cs:149:26:149:26 | access to parameter c : C | A.cs:141:20:141:20 | c : C | A.cs:141:16:141:16 | this [Reverse] : B [field c] : C | A.cs:149:20:149:27 | object creation of type B : B [field c] : C | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | +| B.cs:6:27:6:27 | access to local variable e : Elem | B.cs:29:26:29:27 | e1 : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem1] : Elem | B.cs:6:18:6:34 | object creation of type Box1 : Box1 [field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:7:27:7:28 | access to local variable b1 : Box1 [field elem1] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem1] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem1] : Elem | B.cs:7:18:7:29 | object creation of type Box2 : Box2 [field box1, field elem1] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:15:33:15:33 | access to local variable e : Elem | B.cs:29:35:29:36 | e2 : Elem | B.cs:29:16:29:19 | this [Reverse] : Box1 [field elem2] : Elem | B.cs:15:18:15:34 | object creation of type Box1 : Box1 [field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| B.cs:16:27:16:28 | access to local variable b1 : Box1 [field elem2] : Elem | B.cs:39:26:39:27 | b1 : Box1 [field elem2] : Elem | B.cs:39:16:39:19 | this [Reverse] : Box2 [field box1, field elem2] : Elem | B.cs:16:18:16:29 | object creation of type Box2 : Box2 [field box1, field elem2] : Elem | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | +| D.cs:15:34:15:38 | access to parameter value : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:15:15:15:18 | [post] this access : D [field trivialPropField] : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:22:27:22:28 | access to parameter o2 : Object | D.cs:9:9:9:11 | value : Object | D.cs:9:9:9:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:22:9:22:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | +| D.cs:23:27:23:28 | access to parameter o3 : Object | D.cs:15:9:15:11 | value : Object | D.cs:15:9:15:11 | this [Reverse] : D [field trivialPropField] : Object | D.cs:23:9:23:11 | [post] access to local variable ret : D [field trivialPropField] : Object | | D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | | D.cs:31:24:31:24 | access to local variable o : Object | D.cs:18:28:18:29 | o1 : Object | D.cs:24:16:24:18 | access to local variable ret : D [property AutoProp] : Object | D.cs:31:17:31:37 | call to method Create : D [property AutoProp] : Object | | D.cs:37:26:37:42 | call to method Source : Object | D.cs:18:39:18:40 | o2 : Object | D.cs:24:16:24:18 | access to local variable ret : D [field trivialPropField] : Object | D.cs:37:13:37:49 | call to method Create : D [field trivialPropField] : Object | @@ -2584,16 +2606,20 @@ subpaths | D.cs:47:14:47:14 | access to local variable d : D [field trivialPropField] : Object | D.cs:14:9:14:11 | this : D [field trivialPropField] : Object | D.cs:14:22:14:42 | access to field trivialPropField : Object | D.cs:47:14:47:26 | access to property ComplexProp | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | | E.cs:23:25:23:25 | access to local variable o : Object | E.cs:8:29:8:29 | o : Object | E.cs:12:16:12:18 | access to local variable ret : S [field Field] : Object | E.cs:23:17:23:26 | call to method CreateS : S [field Field] : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | -| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Return] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | +| E.cs:55:29:55:33 | access to local variable taint : Object | E.cs:43:46:43:46 | o : Object | E.cs:43:36:43:36 | s [Reverse] : RefS [field RefField] : Object | E.cs:55:23:55:26 | [post] access to local variable refs : RefS [field RefField] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | | F.cs:11:24:11:24 | access to local variable o : Object | F.cs:6:28:6:29 | o1 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field1] : Object | F.cs:11:17:11:31 | call to method Create : F [field Field1] : Object | | F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | | F.cs:15:26:15:42 | call to method Source : Object | F.cs:6:39:6:40 | o2 : Object | F.cs:6:46:6:81 | object creation of type F : F [field Field2] : Object | F.cs:15:13:15:43 | call to method Create : F [field Field2] : Object | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | -| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Return] : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:17:24:17:24 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | G.cs:17:9:17:14 | [post] access to field Box1 : Box1 [field Elem] : Elem | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:25:9:25:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:25:9:25:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:9:33:19 | call to method GetBox1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 [Reverse] : Box1 [field Elem] : Elem | G.cs:71:21:71:27 | this [Reverse] : Box2 [field Box1, field Elem] : Elem | G.cs:33:9:33:9 | [post] access to local variable b : Box2 [field Box1, field Elem] : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | +| G.cs:33:29:33:29 | access to local variable e : Elem | G.cs:64:34:64:34 | e : Elem | G.cs:64:21:64:27 | this [Reverse] : Box1 [field Elem] : Elem | G.cs:33:9:33:19 | [post] call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:39:14:39:15 | access to parameter b2 : Box2 [field Box1, field Elem] : Elem | G.cs:71:21:71:27 | this : Box2 [field Box1, field Elem] : Elem | G.cs:71:34:71:37 | access to field Box1 : Box1 [field Elem] : Elem | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | | G.cs:39:14:39:25 | call to method GetBox1 : Box1 [field Elem] : Elem | G.cs:63:21:63:27 | this : Box1 [field Elem] : Elem | G.cs:63:34:63:37 | access to field Elem : Elem | G.cs:39:14:39:35 | call to method GetElem | @@ -2602,14 +2628,14 @@ subpaths | H.cs:24:27:24:27 | access to local variable a : A [field FieldA] : Object | H.cs:13:15:13:15 | a : A [field FieldA] : Object | H.cs:17:16:17:18 | access to local variable ret : A [field FieldA] : Object | H.cs:24:21:24:28 | call to method Clone : A [field FieldA] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | | H.cs:44:27:44:27 | access to local variable a : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:44:17:44:28 | call to method Transform : B [field FieldB] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Return] : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:20:77:20 | a [Return] : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | -| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:35:77:36 | b1 [Return] : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:64:22:64:22 | access to local variable a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | H.cs:64:25:64:26 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:80:22:80:22 | access to parameter a : A [field FieldA] : Object | H.cs:53:25:53:25 | a : A [field FieldA] : Object | H.cs:53:30:53:31 | b1 [Reverse] : B [field FieldB] : Object | H.cs:80:25:80:26 | [post] access to parameter b1 : B [field FieldB] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:20:77:20 | a [Reverse] : A [field FieldA] : Object | H.cs:88:17:88:17 | [post] access to local variable a : A [field FieldA] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | +| H.cs:88:20:88:36 | call to method Source : Object | H.cs:77:30:77:30 | o : Object | H.cs:77:35:77:36 | b1 [Reverse] : B [field FieldB] : Object | H.cs:88:39:88:40 | [post] access to local variable b1 : B [field FieldB] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | | H.cs:106:26:106:39 | (...) ... : A [field FieldA] : Object | H.cs:33:19:33:19 | a : A [field FieldA] : Object | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | | H.cs:113:31:113:31 | access to local variable a : A [field FieldA] : Object | H.cs:102:23:102:23 | a : A [field FieldA] : Object | H.cs:106:16:106:40 | call to method Transform : B [field FieldB] : Object | H.cs:113:17:113:32 | call to method TransformWrap : B [field FieldB] : Object | @@ -2622,16 +2648,16 @@ subpaths | H.cs:142:26:142:26 | access to local variable a : A [field FieldA] : A | H.cs:33:19:33:19 | a : A [field FieldA] : A | H.cs:37:16:37:16 | access to local variable b : B [field FieldB] : A | H.cs:142:16:142:27 | call to method Transform : B [field FieldB] : A | | H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | H.cs:142:16:142:34 | access to field FieldB : A | H.cs:147:17:147:39 | call to method Through : A | | H.cs:147:25:147:38 | call to method Source : A | H.cs:138:27:138:27 | o : A | H.cs:142:16:142:34 | access to field FieldB : A | H.cs:147:17:147:39 | call to method Through : A | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | -| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:153:22:153:22 | a [Return] : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | -| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | -| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Return] : RecordClass [property Prop1] : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | -| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | -| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Return] : RecordStruct [property Prop1] : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | -| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:12:14:17 | this [Return] : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | -| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:12:14:17 | this [Return] : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | +| H.cs:164:22:164:22 | access to local variable o : Object | H.cs:153:32:153:32 | o : Object | H.cs:153:22:153:22 | a [Reverse] : A [field FieldA, field FieldB] : Object | H.cs:164:19:164:19 | [post] access to local variable a : A [field FieldA, field FieldB] : Object | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | +| J.cs:22:34:22:34 | access to local variable o : Object | J.cs:6:40:6:44 | Prop1 : Object | J.cs:6:21:6:31 | this [Reverse] : RecordClass [property Prop1] : Object | J.cs:22:18:22:41 | object creation of type RecordClass : RecordClass [property Prop1] : Object | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:42:35:42:35 | access to local variable o : Object | J.cs:8:42:8:46 | Prop1 : Object | J.cs:8:22:8:33 | this [Reverse] : RecordStruct [property Prop1] : Object | J.cs:42:18:42:42 | object creation of type RecordStruct : RecordStruct [property Prop1] : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | +| J.cs:62:29:62:29 | access to local variable o : Object | J.cs:14:26:14:30 | field : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [field Field] : Object | J.cs:62:18:62:36 | object creation of type Struct : Struct [field Field] : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | +| J.cs:80:35:80:35 | access to local variable o : Object | J.cs:14:40:14:43 | prop : Object | J.cs:14:12:14:17 | this [Reverse] : Struct [property Prop] : Object | J.cs:80:18:80:36 | object creation of type Struct : Struct [property Prop] : Object | testFailures #select | A.cs:7:14:7:16 | access to field c | A.cs:5:17:5:28 | call to method Source : C | A.cs:7:14:7:16 | access to field c | $@ | A.cs:5:17:5:28 | call to method Source : C | call to method Source : C | diff --git a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected index c5f00cd656f0..9b1aeb058703 100644 --- a/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/DataFlowPath.expected @@ -39,7 +39,8 @@ edges | Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:81:13:81:13 | [post] access to local function M : M [captured sink31] : String | provenance | | | Capture.cs:81:13:81:13 | [post] access to local function M : M [captured sink31] : String | Capture.cs:83:9:83:19 | [post] access to local function CaptureOut2 : CaptureOut2 [captured sink31] : String | provenance | | | Capture.cs:83:9:83:19 | [post] access to local function CaptureOut2 : CaptureOut2 [captured sink31] : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | MaD:3 | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | MaD:4 | | Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | heuristic-callback | | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | provenance | | @@ -96,7 +97,7 @@ edges | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | MaD:1 | | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | heuristic-callback | | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | Capture.cs:234:15:234:15 | access to local variable x | provenance | | -| Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | MaD:1 | | Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | heuristic-callback | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | @@ -141,8 +142,8 @@ edges | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | -| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | @@ -421,20 +422,20 @@ edges | GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | provenance | | | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | provenance | | | GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | provenance | | @@ -644,7 +645,7 @@ nodes | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | semmle.label | a [Return] : (...) => ... [captured sink40] : String | +| Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | semmle.label | a [Reverse] : (...) => ... [captured sink40] : String | | Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | @@ -877,7 +878,7 @@ nodes | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | semmle.label | access to parameter s | | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | semmle.label | access to parameter arg : String | | GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | semmle.label | "taint source" : String | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | semmle.label | sc [Return] : SimpleClass [field field] : String | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | semmle.label | sc [Reverse] : SimpleClass [field field] : String | | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | semmle.label | [post] access to parameter sc : SimpleClass [field field] : String | | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | semmle.label | [post] access to local variable x1 : SimpleClass [field field] : String | diff --git a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected index f90f71d1ea95..9a1f1e58b3c7 100644 --- a/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected +++ b/csharp/ql/test/library-tests/dataflow/global/TaintTrackingPath.expected @@ -49,7 +49,8 @@ edges | Capture.cs:79:26:79:39 | "taint source" : String | Capture.cs:81:13:81:13 | [post] access to local function M : M [captured sink31] : String | provenance | | | Capture.cs:81:13:81:13 | [post] access to local function M : M [captured sink31] : String | Capture.cs:83:9:83:19 | [post] access to local function CaptureOut2 : CaptureOut2 [captured sink31] : String | provenance | | | Capture.cs:83:9:83:19 | [post] access to local function CaptureOut2 : CaptureOut2 [captured sink31] : String | Capture.cs:84:15:84:20 | access to local variable sink31 | provenance | | -| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | MaD:5 | +| Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | MaD:6 | | Capture.cs:89:22:89:35 | "taint source" : String | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | provenance | heuristic-callback | | Capture.cs:92:30:92:40 | [post] access to local variable captureOut3 : (...) => ... [captured sink32] : String | Capture.cs:93:15:93:20 | access to local variable sink32 | provenance | | | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | Capture.cs:123:9:123:33 | [post] access to local function CaptureOutMultipleLambdas : CaptureOutMultipleLambdas [captured sink40] : String | provenance | | @@ -106,7 +107,7 @@ edges | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | MaD:1 | | Capture.cs:229:20:233:9 | (...) => ... : (...) => ... [captured x] : String | Capture.cs:231:19:231:19 | access to local variable x | provenance | heuristic-callback | | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | Capture.cs:234:15:234:15 | access to local variable x | provenance | | -| Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | | +| Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | MaD:1 | | Capture.cs:232:17:232:30 | "taint source" : String | Capture.cs:229:20:233:9 | [post] (...) => ... : (...) => ... [captured x] : String | provenance | heuristic-callback | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:249:9:249:9 | access to local variable a : Action [captured c, field Field] : String | provenance | | | Capture.cs:242:9:242:9 | [post] access to local variable c : Capture [field Field] : String | Capture.cs:251:15:251:15 | access to local variable c : Capture [field Field] : String | provenance | | @@ -151,8 +152,8 @@ edges | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | provenance | | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | provenance | | -| Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | -| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | Capture.cs:114:23:117:13 | [post] (...) => ... : (...) => ... [captured sink40] : String | provenance | | +| Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | Capture.cs:217:19:217:19 | access to parameter s | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:55:27:58:17 | (...) => ... : (...) => ... [captured sink39] : String | provenance | | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | Capture.cs:57:27:57:32 | access to parameter sink39 | provenance | | @@ -461,20 +462,20 @@ edges | GlobalDataFlow.cs:469:21:469:21 | s : String | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | provenance | | | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | GlobalDataFlow.cs:469:21:469:21 | s : String | provenance | | | GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | GlobalDataFlow.cs:466:53:466:55 | arg : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | -| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:31:497:32 | [post] access to local variable y1 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:36:497:37 | [post] access to local variable y2 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:497:42:497:43 | [post] access to local variable y3 : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:508:33:508:33 | [post] access to local variable x : SubSimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:20:515:20 | [post] access to parameter x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:515:25:515:25 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:527:20:527:20 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:528:20:528:20 | [post] access to local variable y : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:529:18:529:18 | [post] access to local variable z : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:538:20:538:21 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | GlobalDataFlow.cs:546:24:546:24 | [post] access to local variable x : SimpleClass [field field] : String | provenance | | +| GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | GlobalDataFlow.cs:491:15:491:16 | access to local variable x1 : SimpleClass [field field] : String | provenance | | | GlobalDataFlow.cs:490:30:490:31 | [post] access to local variable x2 : SimpleClass [field field] : String | GlobalDataFlow.cs:492:15:492:16 | access to local variable x2 : SimpleClass [field field] : String | provenance | | @@ -507,10 +508,10 @@ edges | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | provenance | | | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | provenance | | | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | provenance | | -| GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Return] : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Reverse] : StringBuilder | provenance | | | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | provenance | MaD:14 | | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | provenance | | -| GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Return] : StringBuilder | provenance | | +| GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Reverse] : StringBuilder | provenance | | | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | provenance | MaD:16 | | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:31:21:31:22 | access to local variable sb : StringBuilder | provenance | | | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | GlobalDataFlowStringBuilder.cs:35:20:35:21 | access to local variable sb : StringBuilder | provenance | | @@ -714,7 +715,7 @@ nodes | Capture.cs:350:34:350:34 | a : (...) => ... [captured s] : String | semmle.label | a : (...) => ... [captured s] : String | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | | Capture.cs:350:34:350:34 | a : (...) => ... [captured sink39] : String | semmle.label | a : (...) => ... [captured sink39] : String | -| Capture.cs:350:34:350:34 | a [Return] : (...) => ... [captured sink40] : String | semmle.label | a [Return] : (...) => ... [captured sink40] : String | +| Capture.cs:350:34:350:34 | a [Reverse] : (...) => ... [captured sink40] : String | semmle.label | a [Reverse] : (...) => ... [captured sink40] : String | | Capture.cs:352:9:352:9 | [post] access to parameter a : (...) => ... [captured sink40] : String | semmle.label | [post] access to parameter a : (...) => ... [captured sink40] : String | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured s] : String | semmle.label | access to parameter a : (...) => ... [captured s] : String | | Capture.cs:352:9:352:9 | access to parameter a : (...) => ... [captured sink39] : String | semmle.label | access to parameter a : (...) => ... [captured sink39] : String | @@ -978,7 +979,7 @@ nodes | GlobalDataFlow.cs:469:32:469:32 | access to parameter s | semmle.label | access to parameter s | | GlobalDataFlow.cs:470:15:470:17 | access to parameter arg : String | semmle.label | access to parameter arg : String | | GlobalDataFlow.cs:473:28:473:41 | "taint source" : String | semmle.label | "taint source" : String | -| GlobalDataFlow.cs:481:41:481:42 | sc [Return] : SimpleClass [field field] : String | semmle.label | sc [Return] : SimpleClass [field field] : String | +| GlobalDataFlow.cs:481:41:481:42 | sc [Reverse] : SimpleClass [field field] : String | semmle.label | sc [Reverse] : SimpleClass [field field] : String | | GlobalDataFlow.cs:483:9:483:10 | [post] access to parameter sc : SimpleClass [field field] : String | semmle.label | [post] access to parameter sc : SimpleClass [field field] : String | | GlobalDataFlow.cs:483:20:483:33 | "taint source" : String | semmle.label | "taint source" : String | | GlobalDataFlow.cs:490:25:490:26 | [post] access to local variable x1 : SimpleClass [field field] : String | semmle.label | [post] access to local variable x1 : SimpleClass [field field] : String | @@ -1024,11 +1025,11 @@ nodes | GlobalDataFlow.cs:556:27:556:27 | access to parameter e : null [element] : String | semmle.label | access to parameter e : null [element] : String | | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | semmle.label | delegate call : String | | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | semmle.label | access to local variable x : String | -| GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Return] : StringBuilder | semmle.label | sb [Return] : StringBuilder | +| GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Reverse] : StringBuilder | semmle.label | sb [Reverse] : StringBuilder | | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | semmle.label | s : String | | GlobalDataFlowStringBuilder.cs:19:9:19:10 | [post] access to parameter sb : StringBuilder | semmle.label | [post] access to parameter sb : StringBuilder | | GlobalDataFlowStringBuilder.cs:19:19:19:19 | access to parameter s : String | semmle.label | access to parameter s : String | -| GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Return] : StringBuilder | semmle.label | sb [Return] : StringBuilder | +| GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Reverse] : StringBuilder | semmle.label | sb [Reverse] : StringBuilder | | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | semmle.label | s : String | | GlobalDataFlowStringBuilder.cs:24:9:24:10 | [post] access to parameter sb : StringBuilder | semmle.label | [post] access to parameter sb : StringBuilder | | GlobalDataFlowStringBuilder.cs:24:19:24:26 | (...) ... : AppendInterpolatedStringHandler | semmle.label | (...) ... : AppendInterpolatedStringHandler | @@ -1133,8 +1134,8 @@ subpaths | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:298:26:298:26 | x : String | GlobalDataFlow.cs:301:16:301:41 | ... ? ... : ... : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:389:18:389:18 | access to parameter x : String | GlobalDataFlow.cs:300:27:300:28 | x0 : String | GlobalDataFlow.cs:300:33:300:34 | access to parameter x0 : String | GlobalDataFlow.cs:389:16:389:19 | delegate call : String | | GlobalDataFlow.cs:558:46:558:46 | access to local variable x : String | GlobalDataFlow.cs:81:79:81:79 | x : String | GlobalDataFlow.cs:81:84:81:84 | access to parameter x : String | GlobalDataFlow.cs:558:44:558:47 | delegate call : String | -| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Return] : StringBuilder | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | -| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Return] : StringBuilder | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | +| GlobalDataFlowStringBuilder.cs:30:35:30:48 | "taint source" : String | GlobalDataFlowStringBuilder.cs:17:64:17:64 | s : String | GlobalDataFlowStringBuilder.cs:17:53:17:54 | sb [Reverse] : StringBuilder | GlobalDataFlowStringBuilder.cs:30:31:30:32 | [post] access to local variable sb : StringBuilder | +| GlobalDataFlowStringBuilder.cs:48:47:48:60 | "taint source" : String | GlobalDataFlowStringBuilder.cs:22:76:22:76 | s : String | GlobalDataFlowStringBuilder.cs:22:65:22:66 | sb [Reverse] : StringBuilder | GlobalDataFlowStringBuilder.cs:48:43:48:44 | [post] access to local variable sb : StringBuilder | | Splitting.cs:8:24:8:30 | [b (line 3): false] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): false] call to method Return : String | | Splitting.cs:8:24:8:30 | [b (line 3): true] access to parameter tainted : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:8:17:8:31 | [b (line 3): true] call to method Return : String | | Splitting.cs:20:29:20:29 | access to parameter s : String | Splitting.cs:16:26:16:26 | x : String | Splitting.cs:16:32:16:32 | access to parameter x : String | Splitting.cs:20:22:20:30 | call to method Return : String | diff --git a/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.cs b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.cs new file mode 100644 index 000000000000..c131f58dc79e --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.cs @@ -0,0 +1,89 @@ +public class A +{ + public string Field; + + public A Nested; + + public void M1() + { + var a = new A(); + M2(a); + Sink(a.Nested.Field); // $ hasValueFlow=1 + } + + public void M2(A a) + { + var b = a.Nested; + M3(b); + } + + public void M3(A a) + { + a.Field = Source(1); + } + + public void M4() + { + this.M5(); + Sink(this.Nested.Field); // $ hasValueFlow=2 + } + + public void M5() + { + var b = this.Nested; + b.M6(); + } + + public void M6() + { + this.Field = Source(2); + } + + public void M7() + { + var a = new A(); + M8(a); + Sink(a.Field); // $ MISSING: hasValueFlow=3 + } + + public void M8(A a) + { + var b = new A(); + b.Nested = a; + M9(b); + } + + public void M9(A a) + { + a.Nested.Field = Source(3); + } + + public void M10() + { + var a = new A(); + Sink(a); + Sink(a.Nested.Nested.Field); + GetNestedNested(a).Field = Source(4); + Sink(a.Nested.Nested.Field); // $ hasValueFlow=4 + } + + public void M11(A a) + { + + } + + public void M12() + { + var a = new A(); + M11(a); + Sink(a.Field); + a.Field = Source(5); + Sink(a.Field); // $ hasValueFlow=5 + } + + public A GetNestedNested(A a) => a.Nested.Nested; + + public static void Sink(object o) { } + + static T Source(object source) => throw null; +} diff --git a/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.expected b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.expected new file mode 100644 index 000000000000..8196944216ee --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.expected @@ -0,0 +1,164 @@ +models +edges +| ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | ReverseFlow.cs:11:14:11:27 | access to field Field | provenance | | +| ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | ReverseFlow.cs:11:14:11:27 | access to field Field | provenance | | +| ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | provenance | | +| ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | provenance | | +| ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:22:19:22:35 | call to method Source : String | ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | provenance | | +| ReverseFlow.cs:22:19:22:35 | call to method Source : String | ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | provenance | | +| ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | ReverseFlow.cs:28:14:28:30 | access to field Field | provenance | | +| ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | ReverseFlow.cs:28:14:28:30 | access to field Field | provenance | | +| ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | provenance | | +| ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | provenance | | +| ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:39:22:39:38 | call to method Source : String | ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | provenance | | +| ReverseFlow.cs:39:22:39:38 | call to method Source : String | ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:66:36:66:52 | call to method Source : String | ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:36:66:52 | call to method Source : String | ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | provenance | | +| ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | provenance | | +| ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | ReverseFlow.cs:67:14:67:34 | access to field Field | provenance | | +| ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | ReverseFlow.cs:67:14:67:34 | access to field Field | provenance | | +| ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | provenance | | +| ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | provenance | | +| ReverseFlow.cs:80:19:80:35 | call to method Source : String | ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | provenance | | +| ReverseFlow.cs:80:19:80:35 | call to method Source : String | ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | provenance | | +| ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | ReverseFlow.cs:81:14:81:20 | access to field Field | provenance | | +| ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | ReverseFlow.cs:81:14:81:20 | access to field Field | provenance | | +| ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | provenance | | +| ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | provenance | | +nodes +| ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | semmle.label | [post] access to local variable a : A [field Nested, field Field] : String | +| ReverseFlow.cs:10:12:10:12 | [post] access to local variable a : A [field Nested, field Field] : String | semmle.label | [post] access to local variable a : A [field Nested, field Field] : String | +| ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | semmle.label | access to local variable a : A [field Nested, field Field] : String | +| ReverseFlow.cs:11:14:11:14 | access to local variable a : A [field Nested, field Field] : String | semmle.label | access to local variable a : A [field Nested, field Field] : String | +| ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:11:14:11:21 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:11:14:11:27 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:11:14:11:27 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | semmle.label | a [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:14:22:14:22 | a [Reverse] : A [field Nested, field Field] : String | semmle.label | a [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | semmle.label | access to local variable b [Reverse] : A [field Field] : String | +| ReverseFlow.cs:16:13:16:13 | access to local variable b [Reverse] : A [field Field] : String | semmle.label | access to local variable b [Reverse] : A [field Field] : String | +| ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | semmle.label | access to parameter a [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:16:17:16:17 | access to parameter a [Reverse] : A [field Nested, field Field] : String | semmle.label | access to parameter a [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:16:17:16:24 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | semmle.label | [post] access to local variable b : A [field Field] : String | +| ReverseFlow.cs:17:12:17:12 | [post] access to local variable b : A [field Field] : String | semmle.label | [post] access to local variable b : A [field Field] : String | +| ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | semmle.label | a [Reverse] : A [field Field] : String | +| ReverseFlow.cs:20:22:20:22 | a [Reverse] : A [field Field] : String | semmle.label | a [Reverse] : A [field Field] : String | +| ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | semmle.label | [post] access to parameter a : A [field Field] : String | +| ReverseFlow.cs:22:9:22:9 | [post] access to parameter a : A [field Field] : String | semmle.label | [post] access to parameter a : A [field Field] : String | +| ReverseFlow.cs:22:19:22:35 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:22:19:22:35 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | semmle.label | [post] this access : A [field Nested, field Field] : String | +| ReverseFlow.cs:27:9:27:12 | [post] this access : A [field Nested, field Field] : String | semmle.label | [post] this access : A [field Nested, field Field] : String | +| ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | semmle.label | this access : A [field Nested, field Field] : String | +| ReverseFlow.cs:28:14:28:17 | this access : A [field Nested, field Field] : String | semmle.label | this access : A [field Nested, field Field] : String | +| ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:28:14:28:24 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:28:14:28:30 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:28:14:28:30 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | semmle.label | this [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:31:17:31:18 | this [Reverse] : A [field Nested, field Field] : String | semmle.label | this [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | semmle.label | access to local variable b [Reverse] : A [field Field] : String | +| ReverseFlow.cs:33:13:33:13 | access to local variable b [Reverse] : A [field Field] : String | semmle.label | access to local variable b [Reverse] : A [field Field] : String | +| ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | semmle.label | this access [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:33:17:33:20 | this access [Reverse] : A [field Nested, field Field] : String | semmle.label | this access [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:33:17:33:27 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | semmle.label | [post] access to local variable b : A [field Field] : String | +| ReverseFlow.cs:34:9:34:9 | [post] access to local variable b : A [field Field] : String | semmle.label | [post] access to local variable b : A [field Field] : String | +| ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | semmle.label | this [Reverse] : A [field Field] : String | +| ReverseFlow.cs:37:17:37:18 | this [Reverse] : A [field Field] : String | semmle.label | this [Reverse] : A [field Field] : String | +| ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | semmle.label | [post] this access : A [field Field] : String | +| ReverseFlow.cs:39:9:39:12 | [post] this access : A [field Field] : String | semmle.label | [post] this access : A [field Field] : String | +| ReverseFlow.cs:39:22:39:38 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:39:22:39:38 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | semmle.label | [post] call to method GetNestedNested : A [field Field] : String | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | semmle.label | [post] call to method GetNestedNested : A [field Field] : String | +| ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | semmle.label | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | semmle.label | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:66:36:66:52 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:66:36:66:52 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | semmle.label | access to local variable a : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:67:14:67:14 | access to local variable a : A [field Nested, field Nested, field Field] : String | semmle.label | access to local variable a : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | semmle.label | access to field Nested : A [field Nested, field Field] : String | +| ReverseFlow.cs:67:14:67:21 | access to field Nested : A [field Nested, field Field] : String | semmle.label | access to field Nested : A [field Nested, field Field] : String | +| ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:67:14:67:28 | access to field Nested : A [field Field] : String | semmle.label | access to field Nested : A [field Field] : String | +| ReverseFlow.cs:67:14:67:34 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:67:14:67:34 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | semmle.label | [post] access to local variable a : A [field Field] : String | +| ReverseFlow.cs:80:9:80:9 | [post] access to local variable a : A [field Field] : String | semmle.label | [post] access to local variable a : A [field Field] : String | +| ReverseFlow.cs:80:19:80:35 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:80:19:80:35 | call to method Source : String | semmle.label | call to method Source : String | +| ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | semmle.label | access to local variable a : A [field Field] : String | +| ReverseFlow.cs:81:14:81:14 | access to local variable a : A [field Field] : String | semmle.label | access to local variable a : A [field Field] : String | +| ReverseFlow.cs:81:14:81:20 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:81:14:81:20 | access to field Field | semmle.label | access to field Field | +| ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | semmle.label | a [Reverse] : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | semmle.label | a [Reverse] : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | semmle.label | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:84:38:84:38 | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | semmle.label | access to parameter a [Reverse] : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:84:38:84:45 | access to field Nested [Reverse] : A [field Nested, field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Nested, field Field] : String | +| ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | semmle.label | access to field Nested [Reverse] : A [field Field] : String | +subpaths +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:84:38:84:52 | access to field Nested [Reverse] : A [field Field] : String | ReverseFlow.cs:84:32:84:32 | a [Reverse] : A [field Nested, field Nested, field Field] : String | ReverseFlow.cs:66:25:66:25 | [post] access to local variable a : A [field Nested, field Nested, field Field] : String | +testFailures +#select +| ReverseFlow.cs:11:14:11:27 | access to field Field | ReverseFlow.cs:22:19:22:35 | call to method Source : String | ReverseFlow.cs:11:14:11:27 | access to field Field | $@ | ReverseFlow.cs:22:19:22:35 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:11:14:11:27 | access to field Field | ReverseFlow.cs:22:19:22:35 | call to method Source : String | ReverseFlow.cs:11:14:11:27 | access to field Field | $@ | ReverseFlow.cs:22:19:22:35 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:28:14:28:30 | access to field Field | ReverseFlow.cs:39:22:39:38 | call to method Source : String | ReverseFlow.cs:28:14:28:30 | access to field Field | $@ | ReverseFlow.cs:39:22:39:38 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:28:14:28:30 | access to field Field | ReverseFlow.cs:39:22:39:38 | call to method Source : String | ReverseFlow.cs:28:14:28:30 | access to field Field | $@ | ReverseFlow.cs:39:22:39:38 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:67:14:67:34 | access to field Field | ReverseFlow.cs:66:36:66:52 | call to method Source : String | ReverseFlow.cs:67:14:67:34 | access to field Field | $@ | ReverseFlow.cs:66:36:66:52 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:67:14:67:34 | access to field Field | ReverseFlow.cs:66:36:66:52 | call to method Source : String | ReverseFlow.cs:67:14:67:34 | access to field Field | $@ | ReverseFlow.cs:66:36:66:52 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:81:14:81:20 | access to field Field | ReverseFlow.cs:80:19:80:35 | call to method Source : String | ReverseFlow.cs:81:14:81:20 | access to field Field | $@ | ReverseFlow.cs:80:19:80:35 | call to method Source : String | call to method Source : String | +| ReverseFlow.cs:81:14:81:20 | access to field Field | ReverseFlow.cs:80:19:80:35 | call to method Source : String | ReverseFlow.cs:81:14:81:20 | access to field Field | $@ | ReverseFlow.cs:80:19:80:35 | call to method Source : String | call to method Source : String | diff --git a/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.ql b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.ql new file mode 100644 index 000000000000..9ab95f59caf3 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import csharp +import utils.test.InlineFlowTest +import DefaultFlowTest +import PathGraph + +from PathNode source, PathNode sink +where flowPath(source, sink) +select sink, source, sink, "$@", source, source.toString() diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index 41ea12890262..bce8e57541ff 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -152,8 +152,8 @@ edges | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item1] : String | Tuples.cs:89:18:89:18 | access to local variable p | provenance | | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:87:18:87:35 | (..., ...) : ValueTuple [field Item2] : String | provenance | | -| Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | provenance | | -| Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | provenance | | +| Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | provenance | | +| Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | provenance | | | Tuples.cs:99:13:99:13 | access to local variable o : String | Tuples.cs:100:24:100:24 | access to local variable o : String | provenance | | | Tuples.cs:99:13:99:13 | access to local variable o : String | Tuples.cs:100:24:100:24 | access to local variable o : String | provenance | | | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:99:13:99:13 | access to local variable o : String | provenance | | @@ -381,8 +381,8 @@ nodes | Tuples.cs:89:18:89:18 | access to local variable p | semmle.label | access to local variable p | | Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | | Tuples.cs:90:18:90:18 | access to local variable r | semmle.label | access to local variable r | -| Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | semmle.label | this [Return] : R1 [property i] : String | -| Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | semmle.label | this [Return] : R1 [property i] : String | +| Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | semmle.label | this [Reverse] : R1 [property i] : String | +| Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | semmle.label | this [Reverse] : R1 [property i] : String | | Tuples.cs:95:22:95:22 | i : String | semmle.label | i : String | | Tuples.cs:95:22:95:22 | i : String | semmle.label | i : String | | Tuples.cs:99:13:99:13 | access to local variable o : String | semmle.label | access to local variable o : String | @@ -440,8 +440,8 @@ nodes | Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | | Tuples.cs:134:14:134:15 | access to local variable y4 | semmle.label | access to local variable y4 | subpaths -| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | -| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Reverse] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | testFailures #select | Tuples.cs:12:14:12:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:12:14:12:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | diff --git a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected index 8e113c12ef73..b5614b13a45c 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/GoMicro/LogInjection.expected @@ -1,12 +1,12 @@ edges -| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Return] | provenance | | +| main.go:18:46:18:48 | definition of req | main.go:18:46:18:48 | definition of req [Reverse] | provenance | | | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | | main.go:18:46:18:48 | definition of req | main.go:21:28:21:31 | name | provenance | | -| main.go:18:46:18:48 | definition of req [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | provenance | | +| main.go:18:46:18:48 | definition of req [Reverse] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Reverse] | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | proto/Hello.pb.micro.go:86:37:86:38 | in | provenance | | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Reverse] | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | | proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | | proto/Hello.pb.micro.go:86:37:86:38 | in | main.go:18:46:18:48 | definition of req | provenance | | | proto/Hello.pb.micro.go:86:37:86:38 | in | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | provenance | | @@ -14,11 +14,11 @@ edges nodes | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | | main.go:18:46:18:48 | definition of req | semmle.label | definition of req | -| main.go:18:46:18:48 | definition of req [Return] | semmle.label | definition of req [Return] | +| main.go:18:46:18:48 | definition of req [Reverse] | semmle.label | definition of req [Reverse] | | main.go:21:28:21:31 | name | semmle.label | name | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | | proto/Hello.pb.micro.go:85:53:85:54 | definition of in | semmle.label | definition of in | -| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Return] | semmle.label | definition of in [Return] | +| proto/Hello.pb.micro.go:85:53:85:54 | definition of in [Reverse] | semmle.label | definition of in [Reverse] | | proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | | proto/Hello.pb.micro.go:86:37:86:38 | in | semmle.label | in | subpaths diff --git a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected index 82c4c950c6e4..75b90ec5dc0a 100644 --- a/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected +++ b/go/ql/test/library-tests/semmle/go/frameworks/Twirp/RequestForgery.expected @@ -15,14 +15,14 @@ edges | rpc/notes/service.twirp.go:558:44:558:51 | typedReq | server/main.go:19:56:19:61 | definition of params | provenance | | | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | provenance | | | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | server/main.go:19:56:19:61 | definition of params | provenance | | -| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Return] | provenance | | +| server/main.go:19:56:19:61 | definition of params | server/main.go:19:56:19:61 | definition of params [Reverse] | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | | server/main.go:19:56:19:61 | definition of params | server/main.go:30:38:30:48 | selection of Text | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | client/main.go:16:35:16:78 | &... | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | -| server/main.go:19:56:19:61 | definition of params [Return] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params [Reverse] | client/main.go:16:35:16:78 | &... | provenance | | +| server/main.go:19:56:19:61 | definition of params [Reverse] | rpc/notes/service.twirp.go:473:6:473:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params [Reverse] | rpc/notes/service.twirp.go:493:2:493:2 | capture variable reqContent | provenance | | +| server/main.go:19:56:19:61 | definition of params [Reverse] | rpc/notes/service.twirp.go:554:6:554:13 | definition of typedReq | provenance | | +| server/main.go:19:56:19:61 | definition of params [Reverse] | rpc/notes/service.twirp.go:574:2:574:2 | capture variable reqContent | provenance | | models | 1 | Source: net/http; Request; true; Body; ; ; ; remote; manual | | 2 | Summary: google.golang.org/protobuf/proto; ; false; Unmarshal; ; ; Argument[0]; Argument[1]; taint; manual | @@ -43,6 +43,6 @@ nodes | rpc/notes/service.twirp.go:576:35:576:44 | reqContent | semmle.label | reqContent | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | | server/main.go:19:56:19:61 | definition of params | semmle.label | definition of params | -| server/main.go:19:56:19:61 | definition of params [Return] | semmle.label | definition of params [Return] | +| server/main.go:19:56:19:61 | definition of params [Reverse] | semmle.label | definition of params [Reverse] | | server/main.go:30:38:30:48 | selection of Text | semmle.label | selection of Text | subpaths diff --git a/java/ql/test/experimental/query-tests/security/CWE-299/DisabledRevocationChecking.expected b/java/ql/test/experimental/query-tests/security/CWE-299/DisabledRevocationChecking.expected index cbe6f7a17a42..40ed70b4aba1 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-299/DisabledRevocationChecking.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-299/DisabledRevocationChecking.expected @@ -1,13 +1,13 @@ edges -| DisabledRevocationChecking.java:16:15:16:39 | parameter this [Return] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | provenance | | -| DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:16:15:16:39 | parameter this [Return] : DisabledRevocationChecking [flag] : Boolean | provenance | | +| DisabledRevocationChecking.java:16:15:16:39 | parameter this [Reverse] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | provenance | | +| DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:16:15:16:39 | parameter this [Reverse] : DisabledRevocationChecking [flag] : Boolean | provenance | | | DisabledRevocationChecking.java:17:12:17:16 | false : Boolean | DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | provenance | | | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:22:5:22:31 | this <.method> : DisabledRevocationChecking [flag] : Boolean | provenance | | | DisabledRevocationChecking.java:22:5:22:31 | this <.method> : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:25:15:25:22 | parameter this : DisabledRevocationChecking [flag] : Boolean | provenance | | | DisabledRevocationChecking.java:25:15:25:22 | parameter this : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:28:33:28:36 | this <.field> : DisabledRevocationChecking [flag] : Boolean | provenance | | | DisabledRevocationChecking.java:28:33:28:36 | this <.field> : DisabledRevocationChecking [flag] : Boolean | DisabledRevocationChecking.java:28:33:28:36 | flag | provenance | | nodes -| DisabledRevocationChecking.java:16:15:16:39 | parameter this [Return] : DisabledRevocationChecking [flag] : Boolean | semmle.label | parameter this [Return] : DisabledRevocationChecking [flag] : Boolean | +| DisabledRevocationChecking.java:16:15:16:39 | parameter this [Reverse] : DisabledRevocationChecking [flag] : Boolean | semmle.label | parameter this [Reverse] : DisabledRevocationChecking [flag] : Boolean | | DisabledRevocationChecking.java:17:5:17:8 | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | semmle.label | this <.field> [post update] : DisabledRevocationChecking [flag] : Boolean | | DisabledRevocationChecking.java:17:12:17:16 | false : Boolean | semmle.label | false : Boolean | | DisabledRevocationChecking.java:21:5:21:31 | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | semmle.label | this <.method> [post update] : DisabledRevocationChecking [flag] : Boolean | diff --git a/java/ql/test/experimental/query-tests/security/CWE-400/LocalThreadResourceAbuse.expected b/java/ql/test/experimental/query-tests/security/CWE-400/LocalThreadResourceAbuse.expected index 704257add905..79b07a47d235 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-400/LocalThreadResourceAbuse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-400/LocalThreadResourceAbuse.expected @@ -6,7 +6,7 @@ edges | ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | provenance | | | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | provenance | | -| ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | provenance | | +| ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | waitTime | provenance | Sink:MaD:1 | @@ -16,7 +16,7 @@ nodes | ThreadResourceAbuse.java:37:25:37:73 | getInitParameter(...) : String | semmle.label | getInitParameter(...) : String | | ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | semmle.label | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | semmle.label | delayTime : Number | -| ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | semmle.label | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | +| ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | semmle.label | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | semmle.label | waitTime : Number | | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | semmle.label | this [post update] : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | semmle.label | waitTime : Number | @@ -24,4 +24,4 @@ nodes | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | semmle.label | this <.field> : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:74:18:74:25 | waitTime | semmle.label | waitTime | subpaths -| ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | +| ThreadResourceAbuse.java:40:28:40:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:40:4:40:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | diff --git a/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected b/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected index a17bcbd2c7e3..0627999ddb91 100644 --- a/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected +++ b/java/ql/test/experimental/query-tests/security/CWE-400/ThreadResourceAbuse.expected @@ -16,7 +16,7 @@ edges | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | provenance | | | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | provenance | | -| ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | provenance | | +| ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:71:15:71:17 | parameter this : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | provenance | | | ThreadResourceAbuse.java:74:18:74:25 | this <.field> : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:74:18:74:25 | waitTime | provenance | Sink:MaD:1 | @@ -32,7 +32,7 @@ edges | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | provenance | Config | | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | ThreadResourceAbuse.java:233:17:233:26 | retryAfter | provenance | Sink:MaD:1 | | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | provenance | | -| UploadListener.java:16:3:16:13 | this <.field> [post update] : UploadListener [slowUploads] : Number | UploadListener.java:15:9:15:22 | parameter this [Return] : UploadListener [slowUploads] : Number | provenance | | +| UploadListener.java:16:3:16:13 | this <.field> [post update] : UploadListener [slowUploads] : Number | UploadListener.java:15:9:15:22 | parameter this [Reverse] : UploadListener [slowUploads] : Number | provenance | | | UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | UploadListener.java:16:3:16:13 | this <.field> [post update] : UploadListener [slowUploads] : Number | provenance | | | UploadListener.java:28:14:28:19 | parameter this : UploadListener [slowUploads] : Number | UploadListener.java:29:3:29:11 | this <.field> : UploadListener [slowUploads] : Number | provenance | | | UploadListener.java:29:3:29:11 | this <.field> : UploadListener [slowUploads] : Number | UploadListener.java:30:3:30:15 | this <.field> : UploadListener [slowUploads] : Number | provenance | | @@ -54,7 +54,7 @@ nodes | ThreadResourceAbuse.java:29:82:29:114 | getParameter(...) : String | semmle.label | getParameter(...) : String | | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | semmle.label | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | semmle.label | delayTime : Number | -| ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | semmle.label | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | +| ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | semmle.label | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | semmle.label | waitTime : Number | | ThreadResourceAbuse.java:67:4:67:7 | this [post update] : UncheckedSyncAction [waitTime] : Number | semmle.label | this [post update] : UncheckedSyncAction [waitTime] : Number | | ThreadResourceAbuse.java:67:20:67:27 | waitTime : Number | semmle.label | waitTime : Number | @@ -75,7 +75,7 @@ nodes | ThreadResourceAbuse.java:230:3:230:12 | retryAfter : Number | semmle.label | retryAfter : Number | | ThreadResourceAbuse.java:230:3:230:20 | ...*=... : Number | semmle.label | ...*=... : Number | | ThreadResourceAbuse.java:233:17:233:26 | retryAfter | semmle.label | retryAfter | -| UploadListener.java:15:9:15:22 | parameter this [Return] : UploadListener [slowUploads] : Number | semmle.label | parameter this [Return] : UploadListener [slowUploads] : Number | +| UploadListener.java:15:9:15:22 | parameter this [Reverse] : UploadListener [slowUploads] : Number | semmle.label | parameter this [Reverse] : UploadListener [slowUploads] : Number | | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | semmle.label | sleepMilliseconds : Number | | UploadListener.java:16:3:16:13 | this <.field> [post update] : UploadListener [slowUploads] : Number | semmle.label | this <.field> [post update] : UploadListener [slowUploads] : Number | | UploadListener.java:16:17:16:33 | sleepMilliseconds : Number | semmle.label | sleepMilliseconds : Number | @@ -87,6 +87,6 @@ nodes | UploadListener.java:35:18:35:28 | slowUploads | semmle.label | slowUploads | | UploadListener.java:35:18:35:28 | this <.field> : UploadListener [slowUploads] : Number | semmle.label | this <.field> : UploadListener [slowUploads] : Number | subpaths -| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Return] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | -| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:15:9:15:22 | parameter this [Return] : UploadListener [slowUploads] : Number | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | +| ThreadResourceAbuse.java:21:28:21:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:21:4:21:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | +| ThreadResourceAbuse.java:30:28:30:36 | delayTime : Number | ThreadResourceAbuse.java:66:30:66:41 | waitTime : Number | ThreadResourceAbuse.java:66:10:66:28 | parameter this [Reverse] : UncheckedSyncAction [waitTime] : Number | ThreadResourceAbuse.java:30:4:30:37 | new UncheckedSyncAction(...) : UncheckedSyncAction [waitTime] : Number | +| ThreadResourceAbuse.java:209:49:209:59 | uploadDelay : Number | UploadListener.java:15:24:15:44 | sleepMilliseconds : Number | UploadListener.java:15:9:15:22 | parameter this [Reverse] : UploadListener [slowUploads] : Number | ThreadResourceAbuse.java:209:30:209:87 | new UploadListener(...) : UploadListener [slowUploads] : Number | diff --git a/java/ql/test/library-tests/dataflow/capture/inlinetest.expected b/java/ql/test/library-tests/dataflow/capture/inlinetest.expected index a336577503f2..52850a6e7ad2 100644 --- a/java/ql/test/library-tests/dataflow/capture/inlinetest.expected +++ b/java/ql/test/library-tests/dataflow/capture/inlinetest.expected @@ -15,12 +15,12 @@ edges | B.java:13:16:13:29 | ...->... [post update] : new Consumer(...) { ... } [List l2, ] : String | B.java:13:16:13:29 | List l2 : List [] : String | provenance | | | B.java:13:16:13:29 | List l2 : List [] : String | B.java:14:10:14:11 | l2 : List [] : String | provenance | | | B.java:13:21:13:22 | l2 [post update] : ArrayList [] : String | B.java:13:21:13:22 | this : new Consumer(...) { ... } [List l2, ] : String | provenance | | -| B.java:13:21:13:22 | this : new Consumer(...) { ... } [List l2, ] : String | B.java:13:16:13:29 | parameter this [Return] : new Consumer(...) { ... } [List l2, ] : String | provenance | | +| B.java:13:21:13:22 | this : new Consumer(...) { ... } [List l2, ] : String | B.java:13:16:13:29 | parameter this [Reverse] : new Consumer(...) { ... } [List l2, ] : String | provenance | | | B.java:13:28:13:28 | e : String | B.java:13:21:13:22 | l2 [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:14:10:14:11 | l2 : List [] : String | B.java:14:10:14:18 | get(...) | provenance | MaD:3 | | B.java:22:26:22:26 | x : String | B.java:22:68:22:68 | x : String | provenance | | | B.java:22:56:22:60 | other [post update] : B [bf1] : String | B.java:22:56:22:60 | this : new Consumer(...) { ... } [B other, bf1] : String | provenance | | -| B.java:22:56:22:60 | this : new Consumer(...) { ... } [B other, bf1] : String | B.java:22:26:22:71 | parameter this [Return] : new Consumer(...) { ... } [B other, bf1] : String | provenance | | +| B.java:22:56:22:60 | this : new Consumer(...) { ... } [B other, bf1] : String | B.java:22:26:22:71 | parameter this [Reverse] : new Consumer(...) { ... } [B other, bf1] : String | provenance | | | B.java:22:68:22:68 | x : String | B.java:22:56:22:60 | other [post update] : B [bf1] : String | provenance | | | B.java:30:5:30:5 | B other : B [bf1] : String | B.java:34:10:34:14 | other : B [bf1] : String | provenance | | | B.java:30:5:30:5 | f [post update] : new Consumer(...) { ... } [B other, bf1] : String | B.java:30:5:30:5 | B other : B [bf1] : String | provenance | | @@ -35,14 +35,14 @@ edges | B.java:39:5:39:7 | inp : HashMap [] : String | B.java:39:23:39:27 | value : String | provenance | MaD:5 | | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | out : Map [] : String | provenance | | | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | out : Map [] : String | provenance | | -| B.java:39:17:39:56 | out : Map [] : String | B.java:38:48:38:70 | out [Return] : Map [] : String | provenance | | -| B.java:39:17:39:56 | out : Map [] : String | B.java:38:48:38:70 | out [Return] : Map [] : String | provenance | | +| B.java:39:17:39:56 | out : Map [] : String | B.java:38:48:38:70 | out [Reverse] : Map [] : String | provenance | | +| B.java:39:17:39:56 | out : Map [] : String | B.java:38:48:38:70 | out [Reverse] : Map [] : String | provenance | | | B.java:39:18:39:20 | key : String | B.java:39:43:39:45 | key : String | provenance | | | B.java:39:23:39:27 | value : String | B.java:39:48:39:52 | value : String | provenance | | | B.java:39:35:39:37 | out [post update] : HashMap [] : String | B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | provenance | | | B.java:39:35:39:37 | out [post update] : HashMap [] : String | B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | provenance | | -| B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | provenance | | -| B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | provenance | | +| B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | provenance | | +| B.java:39:35:39:37 | this : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | provenance | | | B.java:39:43:39:45 | key : String | B.java:39:35:39:37 | out [post update] : HashMap [] : String | provenance | MaD:6 | | B.java:39:48:39:52 | value : String | B.java:39:35:39:37 | out [post update] : HashMap [] : String | provenance | MaD:7 | | B.java:45:5:45:6 | m1 [post update] : HashMap [] : String | B.java:46:13:46:14 | m1 : HashMap [] : String | provenance | | @@ -67,28 +67,28 @@ edges | B.java:66:5:66:5 | r : new Runnable(...) { ... } [param] : String | B.java:61:18:65:5 | parameter this : new Runnable(...) { ... } [param] : String | provenance | | | B.java:71:19:71:23 | other [post update] : B [elem] : String | B.java:74:10:74:14 | other : B [elem] : String | provenance | | | B.java:74:10:74:14 | other : B [elem] : String | B.java:74:10:74:19 | other.elem | provenance | | -| B.java:77:22:77:28 | param [Return] : B [elem] : String | B.java:71:19:71:23 | other [post update] : B [elem] : String | provenance | | -| B.java:78:18:81:5 | parameter this [Return] : new Runnable(...) { ... } [param, elem] : String | B.java:82:5:82:5 | r [post update] : new Runnable(...) { ... } [param, elem] : String | provenance | | +| B.java:77:22:77:28 | param [Reverse] : B [elem] : String | B.java:71:19:71:23 | other [post update] : B [elem] : String | provenance | | +| B.java:78:18:81:5 | parameter this [Reverse] : new Runnable(...) { ... } [param, elem] : String | B.java:82:5:82:5 | r [post update] : new Runnable(...) { ... } [param, elem] : String | provenance | | | B.java:80:7:80:11 | param [post update] : B [elem] : String | B.java:80:7:80:11 | this : new Runnable(...) { ... } [param, elem] : String | provenance | | -| B.java:80:7:80:11 | this : new Runnable(...) { ... } [param, elem] : String | B.java:78:18:81:5 | parameter this [Return] : new Runnable(...) { ... } [param, elem] : String | provenance | | +| B.java:80:7:80:11 | this : new Runnable(...) { ... } [param, elem] : String | B.java:78:18:81:5 | parameter this [Reverse] : new Runnable(...) { ... } [param, elem] : String | provenance | | | B.java:80:20:80:39 | source(...) : String | B.java:80:7:80:11 | param [post update] : B [elem] : String | provenance | | -| B.java:82:5:82:5 | param : B [elem] : String | B.java:77:22:77:28 | param [Return] : B [elem] : String | provenance | | +| B.java:82:5:82:5 | param : B [elem] : String | B.java:77:22:77:28 | param [Reverse] : B [elem] : String | provenance | | | B.java:82:5:82:5 | r [post update] : new Runnable(...) { ... } [param, elem] : String | B.java:82:5:82:5 | param : B [elem] : String | provenance | | | B.java:88:22:88:44 | parameter this : new Runnable(...) { ... } [B b, elem] : String | B.java:88:35:88:35 | this : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:88:35:88:35 | b : B [elem] : String | B.java:88:35:88:40 | b.elem | provenance | | | B.java:88:35:88:35 | this : new Runnable(...) { ... } [B b, elem] : String | B.java:88:35:88:35 | b : B [elem] : String | provenance | | -| B.java:89:20:89:52 | parameter this [Return] : new Runnable(...) { ... } [B b, elem] : String | B.java:96:5:96:5 | r [post update] : new Runnable(...) { ... } [B b, elem] : String | provenance | | +| B.java:89:20:89:52 | parameter this [Reverse] : new Runnable(...) { ... } [B b, elem] : String | B.java:96:5:96:5 | r [post update] : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:89:28:89:28 | b [post update] : B [elem] : String | B.java:89:28:89:28 | this : new Runnable(...) { ... } [B b, elem] : String | provenance | | -| B.java:89:28:89:28 | this : new Runnable(...) { ... } [B b, elem] : String | B.java:89:20:89:52 | parameter this [Return] : new Runnable(...) { ... } [B b, elem] : String | provenance | | +| B.java:89:28:89:28 | this : new Runnable(...) { ... } [B b, elem] : String | B.java:89:20:89:52 | parameter this [Reverse] : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:89:37:89:49 | source(...) : String | B.java:89:28:89:28 | b [post update] : B [elem] : String | provenance | | | B.java:91:11:91:13 | B b : B [elem] : String | B.java:92:11:92:15 | B b : B [elem] : String | provenance | | | B.java:91:11:91:13 | src [post update] : new Runnable(...) { ... } [B b, elem] : String | B.java:91:11:91:13 | B b : B [elem] : String | provenance | | | B.java:92:11:92:15 | B b : B [elem] : String | B.java:92:11:92:15 | sink2 : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:92:11:92:15 | sink2 : new Runnable(...) { ... } [B b, elem] : String | B.java:95:14:95:23 | r : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:95:14:95:23 | r : new Runnable(...) { ... } [B b, elem] : String | B.java:96:5:96:5 | r : new Runnable(...) { ... } [B b, elem] : String | provenance | | -| B.java:95:14:95:23 | r [Return] : new Runnable(...) { ... } [B b, elem] : String | B.java:91:11:91:13 | src [post update] : new Runnable(...) { ... } [B b, elem] : String | provenance | | +| B.java:95:14:95:23 | r [Reverse] : new Runnable(...) { ... } [B b, elem] : String | B.java:91:11:91:13 | src [post update] : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:96:5:96:5 | r : new Runnable(...) { ... } [B b, elem] : String | B.java:88:22:88:44 | parameter this : new Runnable(...) { ... } [B b, elem] : String | provenance | | -| B.java:96:5:96:5 | r [post update] : new Runnable(...) { ... } [B b, elem] : String | B.java:95:14:95:23 | r [Return] : new Runnable(...) { ... } [B b, elem] : String | provenance | | +| B.java:96:5:96:5 | r [post update] : new Runnable(...) { ... } [B b, elem] : String | B.java:95:14:95:23 | r [Reverse] : new Runnable(...) { ... } [B b, elem] : String | provenance | | | B.java:102:5:102:6 | l1 [post update] : ArrayList [] : String | B.java:103:12:103:13 | l1 : ArrayList [] : String | provenance | | | B.java:102:12:102:29 | source(...) : String | B.java:102:5:102:6 | l1 [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:103:5:103:6 | l2 [post update] : ArrayList [, ] : String | B.java:107:5:107:6 | l2 : ArrayList [, ] : String | provenance | | @@ -121,26 +121,26 @@ edges | B.java:107:31:111:5 | String s : String | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | provenance | | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:108:12:108:12 | this : new Consumer(...) { ... } [String s] : String | provenance | | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:110:16:110:16 | this : new Consumer(...) { ... } [String s] : String | provenance | | -| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | provenance | | -| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | provenance | | +| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out1, ] : String | provenance | | +| B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out2, ] : String | provenance | | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [String s] : String | B.java:107:31:111:5 | String s : String | provenance | | | B.java:108:12:108:12 | this : new Consumer(...) { ... } [String s] : String | B.java:108:12:108:12 | s | provenance | | | B.java:109:7:109:10 | out1 [post update] : ArrayList [] : String | B.java:109:7:109:10 | this : new Consumer(...) { ... } [List out1, ] : String | provenance | | -| B.java:109:7:109:10 | this : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | provenance | | +| B.java:109:7:109:10 | this : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out1, ] : String | provenance | | | B.java:109:16:109:16 | x : String | B.java:109:7:109:10 | out1 [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:110:7:110:10 | out2 [post update] : ArrayList [] : String | B.java:110:7:110:10 | this : new Consumer(...) { ... } [List out2, ] : String | provenance | | -| B.java:110:7:110:10 | this : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | provenance | | +| B.java:110:7:110:10 | this : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out2, ] : String | provenance | | | B.java:110:16:110:16 | s : String | B.java:110:7:110:10 | out2 [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:110:16:110:16 | this : new Consumer(...) { ... } [String s] : String | B.java:110:16:110:16 | s : String | provenance | | | B.java:112:10:112:13 | out1 : List [] : String | B.java:112:10:112:20 | get(...) | provenance | MaD:3 | | B.java:113:10:113:13 | out2 : List [] : String | B.java:113:10:113:20 | get(...) | provenance | MaD:3 | -| B.java:126:19:126:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l1, ] : String | B.java:136:5:136:5 | r [post update] : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | +| B.java:126:19:126:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l1, ] : String | B.java:136:5:136:5 | r [post update] : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | | B.java:127:9:127:10 | l1 [post update] : ArrayList [] : String | B.java:127:9:127:10 | this : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | -| B.java:127:9:127:10 | this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:126:19:126:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | +| B.java:127:9:127:10 | this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:126:19:126:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | | B.java:127:16:127:29 | source(...) : String | B.java:127:9:127:10 | l1 [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:131:16:131:17 | this : new TwoRuns(...) { ... } [List l1, ] : String | provenance | | | B.java:131:9:131:10 | l2 [post update] : ArrayList [] : String | B.java:131:9:131:10 | this : new TwoRuns(...) { ... } [List l2, ] : String | provenance | | -| B.java:131:9:131:10 | this : new TwoRuns(...) { ... } [List l2, ] : String | B.java:130:19:130:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l2, ] : String | provenance | | +| B.java:131:9:131:10 | this : new TwoRuns(...) { ... } [List l2, ] : String | B.java:130:19:130:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l2, ] : String | provenance | | | B.java:131:16:131:17 | l1 : ArrayList [] : String | B.java:131:16:131:24 | get(...) : String | provenance | MaD:3 | | B.java:131:16:131:17 | this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:131:16:131:17 | l1 : ArrayList [] : String | provenance | | | B.java:131:16:131:24 | get(...) : String | B.java:131:9:131:10 | l2 [post update] : ArrayList [] : String | provenance | MaD:2 | @@ -154,7 +154,7 @@ edges | B.java:138:10:138:11 | l2 : List [] : String | B.java:138:10:138:18 | get(...) | provenance | MaD:3 | | B.java:142:16:142:31 | source(...) : String | B.java:148:17:148:29 | String s : String | provenance | | | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | B.java:145:28:145:28 | this : MyLocal [String s] : String | provenance | | -| B.java:145:19:145:22 | this [post update] : MyLocal [f] : String | B.java:145:7:145:13 | parameter this [Return] : MyLocal [f] : String | provenance | | +| B.java:145:19:145:22 | this [post update] : MyLocal [f] : String | B.java:145:7:145:13 | parameter this [Reverse] : MyLocal [f] : String | provenance | | | B.java:145:28:145:28 | s : String | B.java:145:19:145:22 | this [post update] : MyLocal [f] : String | provenance | | | B.java:145:28:145:28 | this : MyLocal [String s] : String | B.java:145:28:145:28 | s : String | provenance | | | B.java:146:14:146:17 | parameter this : MyLocal [f] : String | B.java:146:30:146:33 | this : MyLocal [f] : String | provenance | | @@ -172,7 +172,7 @@ edges | B.java:158:7:158:13 | parameter this : MyLocal [String s1] : String | B.java:159:18:159:19 | this : MyLocal [String s1] : String | provenance | | | B.java:158:7:158:13 | parameter this : MyLocal [String s2] : String | B.java:160:14:160:15 | this : MyLocal [String s2] : String | provenance | | | B.java:158:7:158:13 | parameter this : MyLocal [String s2] : String | B.java:160:14:160:15 | this : MyLocal [String s2] : String | provenance | | -| B.java:159:9:159:12 | this [post update] : MyLocal [f] : String | B.java:158:7:158:13 | parameter this [Return] : MyLocal [f] : String | provenance | | +| B.java:159:9:159:12 | this [post update] : MyLocal [f] : String | B.java:158:7:158:13 | parameter this [Reverse] : MyLocal [f] : String | provenance | | | B.java:159:18:159:19 | s1 : String | B.java:159:9:159:12 | this [post update] : MyLocal [f] : String | provenance | | | B.java:159:18:159:19 | this : MyLocal [String s1] : String | B.java:159:18:159:19 | s1 : String | provenance | | | B.java:160:14:160:15 | this : MyLocal [String s2] : String | B.java:160:14:160:15 | s2 | provenance | | @@ -183,7 +183,7 @@ edges | B.java:164:14:164:15 | this : MyLocal [String s2] : String | B.java:164:14:164:15 | s2 | provenance | | | B.java:166:16:166:23 | s : String | B.java:167:15:167:15 | s : String | provenance | | | B.java:167:9:167:9 | l [post update] : ArrayList [] : String | B.java:167:9:167:9 | this : MyLocal [List l, ] : String | provenance | | -| B.java:167:9:167:9 | this : MyLocal [List l, ] : String | B.java:166:12:166:14 | parameter this [Return] : MyLocal [List l, ] : String | provenance | | +| B.java:167:9:167:9 | this : MyLocal [List l, ] : String | B.java:166:12:166:14 | parameter this [Reverse] : MyLocal [List l, ] : String | provenance | | | B.java:167:15:167:15 | s : String | B.java:167:9:167:9 | l [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:169:14:169:16 | parameter this : MyLocal [List l, ] : String | B.java:170:16:170:16 | this : MyLocal [List l, ] : String | provenance | | | B.java:170:16:170:16 | l : ArrayList [] : String | B.java:170:16:170:23 | get(...) : String | provenance | MaD:3 | @@ -215,18 +215,18 @@ edges | B.java:178:10:178:11 | m2 : MyLocal [List l, ] : String | B.java:178:10:178:17 | get(...) | provenance | MaD:3 | | B.java:203:16:203:42 | source(...) : String | B.java:212:5:212:6 | String s : String | provenance | | | B.java:205:19:208:5 | parameter this : new Runnable(...) { ... } [String s] : String | B.java:206:12:206:12 | this : new Runnable(...) { ... } [String s] : String | provenance | | -| B.java:205:19:208:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | B.java:210:7:210:8 | r1 [post update] : new Runnable(...) { ... } [List out, ] : String | provenance | | +| B.java:205:19:208:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | B.java:210:7:210:8 | r1 [post update] : new Runnable(...) { ... } [List out, ] : String | provenance | | | B.java:206:12:206:12 | this : new Runnable(...) { ... } [String s] : String | B.java:206:12:206:12 | s | provenance | | | B.java:207:7:207:9 | out [post update] : ArrayList [] : String | B.java:207:7:207:9 | this : new Runnable(...) { ... } [List out, ] : String | provenance | | -| B.java:207:7:207:9 | this : new Runnable(...) { ... } [List out, ] : String | B.java:205:19:208:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | provenance | | +| B.java:207:7:207:9 | this : new Runnable(...) { ... } [List out, ] : String | B.java:205:19:208:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | provenance | | | B.java:207:15:207:42 | source(...) : String | B.java:207:7:207:9 | out [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:209:19:211:5 | parameter this : new Runnable(...) { ... } [String s] : String | B.java:210:7:210:8 | this : new Runnable(...) { ... } [String s] : String | provenance | | -| B.java:209:19:211:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | B.java:212:5:212:6 | r2 [post update] : new Runnable(...) { ... } [List out, ] : String | provenance | | +| B.java:209:19:211:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | B.java:212:5:212:6 | r2 [post update] : new Runnable(...) { ... } [List out, ] : String | provenance | | | B.java:210:7:210:8 | List out : List [] : String | B.java:210:7:210:8 | this : new Runnable(...) { ... } [List out, ] : String | provenance | | | B.java:210:7:210:8 | String s : String | B.java:210:7:210:8 | r1 : new Runnable(...) { ... } [String s] : String | provenance | | | B.java:210:7:210:8 | r1 : new Runnable(...) { ... } [String s] : String | B.java:205:19:208:5 | parameter this : new Runnable(...) { ... } [String s] : String | provenance | | | B.java:210:7:210:8 | r1 [post update] : new Runnable(...) { ... } [List out, ] : String | B.java:210:7:210:8 | List out : List [] : String | provenance | | -| B.java:210:7:210:8 | this : new Runnable(...) { ... } [List out, ] : String | B.java:209:19:211:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | provenance | | +| B.java:210:7:210:8 | this : new Runnable(...) { ... } [List out, ] : String | B.java:209:19:211:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | provenance | | | B.java:210:7:210:8 | this : new Runnable(...) { ... } [String s] : String | B.java:210:7:210:8 | String s : String | provenance | | | B.java:212:5:212:6 | List out : List [] : String | B.java:213:10:213:12 | out : List [] : String | provenance | | | B.java:212:5:212:6 | String s : String | B.java:212:5:212:6 | r2 : new Runnable(...) { ... } [String s] : String | provenance | | @@ -236,12 +236,12 @@ edges | B.java:231:16:231:28 | source(...) : String | B.java:247:5:247:18 | String s : String | provenance | | | B.java:235:7:235:14 | parameter this : MyLocal2 [String s] : String | B.java:238:15:238:15 | this : MyLocal2 [String s] : String | provenance | | | B.java:238:9:238:9 | l [post update] : ArrayList [] : String | B.java:238:9:238:9 | this : MyLocal2 [List l, ] : String | provenance | | -| B.java:238:9:238:9 | this : MyLocal2 [List l, ] : String | B.java:235:7:235:14 | parameter this [Return] : MyLocal2 [List l, ] : String | provenance | | +| B.java:238:9:238:9 | this : MyLocal2 [List l, ] : String | B.java:235:7:235:14 | parameter this [Reverse] : MyLocal2 [List l, ] : String | provenance | | | B.java:238:15:238:15 | s : String | B.java:238:9:238:9 | l [post update] : ArrayList [] : String | provenance | MaD:2 | | B.java:238:15:238:15 | this : MyLocal2 [String s] : String | B.java:238:15:238:15 | s : String | provenance | | | B.java:240:12:240:14 | parameter this : MyLocal2 [List l, ] : String | B.java:241:16:241:16 | this : MyLocal2 [List l, ] : String | provenance | | | B.java:241:9:241:10 | l2 [post update] : ArrayList [] : String | B.java:241:9:241:10 | this : MyLocal2 [List l2, ] : String | provenance | | -| B.java:241:9:241:10 | this : MyLocal2 [List l2, ] : String | B.java:240:12:240:14 | parameter this [Return] : MyLocal2 [List l2, ] : String | provenance | | +| B.java:241:9:241:10 | this : MyLocal2 [List l2, ] : String | B.java:240:12:240:14 | parameter this [Reverse] : MyLocal2 [List l2, ] : String | provenance | | | B.java:241:16:241:16 | l : ArrayList [] : String | B.java:241:16:241:23 | get(...) : String | provenance | MaD:3 | | B.java:241:16:241:16 | this : MyLocal2 [List l, ] : String | B.java:241:16:241:16 | l : ArrayList [] : String | provenance | | | B.java:241:16:241:23 | get(...) : String | B.java:241:9:241:10 | l2 [post update] : ArrayList [] : String | provenance | MaD:2 | @@ -261,8 +261,8 @@ edges | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | B.java:256:18:256:18 | this : MyLocal3 [String s] : String | provenance | | | B.java:255:11:255:18 | this <.method> : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | provenance | | | B.java:255:11:255:18 | this <.method> : MyLocal3 [String s] : String | B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | provenance | | -| B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | provenance | | -| B.java:256:7:256:19 | this <.field> [post update] : MyLocal3 [f] : String | B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | provenance | | +| B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | provenance | | +| B.java:256:7:256:19 | this <.field> [post update] : MyLocal3 [f] : String | B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | provenance | | | B.java:256:18:256:18 | s : String | B.java:256:7:256:19 | this <.field> [post update] : MyLocal3 [f] : String | provenance | | | B.java:256:18:256:18 | this : MyLocal3 [String s] : String | B.java:256:18:256:18 | s : String | provenance | | | B.java:257:12:257:14 | parameter this : MyLocal3 [f] : String | B.java:258:14:258:17 | this : MyLocal3 [f] : String | provenance | | @@ -276,9 +276,9 @@ edges | B.java:269:7:269:14 | parameter this : MyLocal4 [String s] : String | B.java:270:9:270:17 | this : MyLocal4 [String s] : String | provenance | | | B.java:270:9:270:17 | this : MyLocal4 [String s] : String | B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | provenance | | | B.java:270:9:270:17 | this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | provenance | | -| B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | B.java:269:7:269:14 | parameter this [Return] : MyLocal4 [f] : String | provenance | | +| B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | B.java:269:7:269:14 | parameter this [Reverse] : MyLocal4 [f] : String | provenance | | | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | B.java:273:13:273:13 | this : MyLocal4 [String s] : String | provenance | | -| B.java:273:9:273:9 | this <.field> [post update] : MyLocal4 [f] : String | B.java:272:7:272:14 | parameter this [Return] : MyLocal4 [f] : String | provenance | | +| B.java:273:9:273:9 | this <.field> [post update] : MyLocal4 [f] : String | B.java:272:7:272:14 | parameter this [Reverse] : MyLocal4 [f] : String | provenance | | | B.java:273:13:273:13 | s : String | B.java:273:9:273:9 | this <.field> [post update] : MyLocal4 [f] : String | provenance | | | B.java:273:13:273:13 | this : MyLocal4 [String s] : String | B.java:273:13:273:13 | s : String | provenance | | | B.java:275:14:275:16 | parameter this : MyLocal4 [f] : String | B.java:276:16:276:19 | this : MyLocal4 [f] : String | provenance | | @@ -303,14 +303,14 @@ nodes | B.java:13:16:13:16 | e : String | semmle.label | e : String | | B.java:13:16:13:29 | ...->... [post update] : new Consumer(...) { ... } [List l2, ] : String | semmle.label | ...->... [post update] : new Consumer(...) { ... } [List l2, ] : String | | B.java:13:16:13:29 | List l2 : List [] : String | semmle.label | List l2 : List [] : String | -| B.java:13:16:13:29 | parameter this [Return] : new Consumer(...) { ... } [List l2, ] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [List l2, ] : String | +| B.java:13:16:13:29 | parameter this [Reverse] : new Consumer(...) { ... } [List l2, ] : String | semmle.label | parameter this [Reverse] : new Consumer(...) { ... } [List l2, ] : String | | B.java:13:21:13:22 | l2 [post update] : ArrayList [] : String | semmle.label | l2 [post update] : ArrayList [] : String | | B.java:13:21:13:22 | this : new Consumer(...) { ... } [List l2, ] : String | semmle.label | this : new Consumer(...) { ... } [List l2, ] : String | | B.java:13:28:13:28 | e : String | semmle.label | e : String | | B.java:14:10:14:11 | l2 : List [] : String | semmle.label | l2 : List [] : String | | B.java:14:10:14:18 | get(...) | semmle.label | get(...) | | B.java:22:26:22:26 | x : String | semmle.label | x : String | -| B.java:22:26:22:71 | parameter this [Return] : new Consumer(...) { ... } [B other, bf1] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [B other, bf1] : String | +| B.java:22:26:22:71 | parameter this [Reverse] : new Consumer(...) { ... } [B other, bf1] : String | semmle.label | parameter this [Reverse] : new Consumer(...) { ... } [B other, bf1] : String | | B.java:22:56:22:60 | other [post update] : B [bf1] : String | semmle.label | other [post update] : B [bf1] : String | | B.java:22:56:22:60 | this : new Consumer(...) { ... } [B other, bf1] : String | semmle.label | this : new Consumer(...) { ... } [B other, bf1] : String | | B.java:22:68:22:68 | x : String | semmle.label | x : String | @@ -321,16 +321,16 @@ nodes | B.java:34:10:34:18 | other.bf1 | semmle.label | other.bf1 | | B.java:38:23:38:45 | inp : HashMap [] : String | semmle.label | inp : HashMap [] : String | | B.java:38:23:38:45 | inp : HashMap [] : String | semmle.label | inp : HashMap [] : String | -| B.java:38:48:38:70 | out [Return] : Map [] : String | semmle.label | out [Return] : Map [] : String | -| B.java:38:48:38:70 | out [Return] : Map [] : String | semmle.label | out [Return] : Map [] : String | +| B.java:38:48:38:70 | out [Reverse] : Map [] : String | semmle.label | out [Reverse] : Map [] : String | +| B.java:38:48:38:70 | out [Reverse] : Map [] : String | semmle.label | out [Reverse] : Map [] : String | | B.java:39:5:39:7 | inp : HashMap [] : String | semmle.label | inp : HashMap [] : String | | B.java:39:5:39:7 | inp : HashMap [] : String | semmle.label | inp : HashMap [] : String | | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | | B.java:39:17:39:56 | out : Map [] : String | semmle.label | out : Map [] : String | | B.java:39:17:39:56 | out : Map [] : String | semmle.label | out : Map [] : String | -| B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | -| B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | +| B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | +| B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | semmle.label | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | | B.java:39:18:39:20 | key : String | semmle.label | key : String | | B.java:39:23:39:27 | value : String | semmle.label | value : String | | B.java:39:35:39:37 | out [post update] : HashMap [] : String | semmle.label | out [post update] : HashMap [] : String | @@ -363,8 +363,8 @@ nodes | B.java:71:19:71:23 | other [post update] : B [elem] : String | semmle.label | other [post update] : B [elem] : String | | B.java:74:10:74:14 | other : B [elem] : String | semmle.label | other : B [elem] : String | | B.java:74:10:74:19 | other.elem | semmle.label | other.elem | -| B.java:77:22:77:28 | param [Return] : B [elem] : String | semmle.label | param [Return] : B [elem] : String | -| B.java:78:18:81:5 | parameter this [Return] : new Runnable(...) { ... } [param, elem] : String | semmle.label | parameter this [Return] : new Runnable(...) { ... } [param, elem] : String | +| B.java:77:22:77:28 | param [Reverse] : B [elem] : String | semmle.label | param [Reverse] : B [elem] : String | +| B.java:78:18:81:5 | parameter this [Reverse] : new Runnable(...) { ... } [param, elem] : String | semmle.label | parameter this [Reverse] : new Runnable(...) { ... } [param, elem] : String | | B.java:80:7:80:11 | param [post update] : B [elem] : String | semmle.label | param [post update] : B [elem] : String | | B.java:80:7:80:11 | this : new Runnable(...) { ... } [param, elem] : String | semmle.label | this : new Runnable(...) { ... } [param, elem] : String | | B.java:80:20:80:39 | source(...) : String | semmle.label | source(...) : String | @@ -374,7 +374,7 @@ nodes | B.java:88:35:88:35 | b : B [elem] : String | semmle.label | b : B [elem] : String | | B.java:88:35:88:35 | this : new Runnable(...) { ... } [B b, elem] : String | semmle.label | this : new Runnable(...) { ... } [B b, elem] : String | | B.java:88:35:88:40 | b.elem | semmle.label | b.elem | -| B.java:89:20:89:52 | parameter this [Return] : new Runnable(...) { ... } [B b, elem] : String | semmle.label | parameter this [Return] : new Runnable(...) { ... } [B b, elem] : String | +| B.java:89:20:89:52 | parameter this [Reverse] : new Runnable(...) { ... } [B b, elem] : String | semmle.label | parameter this [Reverse] : new Runnable(...) { ... } [B b, elem] : String | | B.java:89:28:89:28 | b [post update] : B [elem] : String | semmle.label | b [post update] : B [elem] : String | | B.java:89:28:89:28 | this : new Runnable(...) { ... } [B b, elem] : String | semmle.label | this : new Runnable(...) { ... } [B b, elem] : String | | B.java:89:37:89:49 | source(...) : String | semmle.label | source(...) : String | @@ -383,7 +383,7 @@ nodes | B.java:92:11:92:15 | B b : B [elem] : String | semmle.label | B b : B [elem] : String | | B.java:92:11:92:15 | sink2 : new Runnable(...) { ... } [B b, elem] : String | semmle.label | sink2 : new Runnable(...) { ... } [B b, elem] : String | | B.java:95:14:95:23 | r : new Runnable(...) { ... } [B b, elem] : String | semmle.label | r : new Runnable(...) { ... } [B b, elem] : String | -| B.java:95:14:95:23 | r [Return] : new Runnable(...) { ... } [B b, elem] : String | semmle.label | r [Return] : new Runnable(...) { ... } [B b, elem] : String | +| B.java:95:14:95:23 | r [Reverse] : new Runnable(...) { ... } [B b, elem] : String | semmle.label | r [Reverse] : new Runnable(...) { ... } [B b, elem] : String | | B.java:96:5:96:5 | r : new Runnable(...) { ... } [B b, elem] : String | semmle.label | r : new Runnable(...) { ... } [B b, elem] : String | | B.java:96:5:96:5 | r [post update] : new Runnable(...) { ... } [B b, elem] : String | semmle.label | r [post update] : new Runnable(...) { ... } [B b, elem] : String | | B.java:102:5:102:6 | l1 [post update] : ArrayList [] : String | semmle.label | l1 [post update] : ArrayList [] : String | @@ -400,8 +400,8 @@ nodes | B.java:107:16:111:6 | List out2 : List [] : String | semmle.label | List out2 : List [] : String | | B.java:107:16:111:6 | String s : String | semmle.label | String s : String | | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer>(...) { ... } [String s] : String | -| B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | semmle.label | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | -| B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | +| B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out1, ] : String | semmle.label | parameter this [Reverse] : new Consumer>(...) { ... } [List out1, ] : String | +| B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | parameter this [Reverse] : new Consumer>(...) { ... } [List out2, ] : String | | B.java:107:21:107:21 | l : List [] : String | semmle.label | l : List [] : String | | B.java:107:31:107:31 | x : String | semmle.label | x : String | | B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | semmle.label | ...->... : new Consumer(...) { ... } [String s] : String | @@ -411,8 +411,8 @@ nodes | B.java:107:31:111:5 | List out2 : List [] : String | semmle.label | List out2 : List [] : String | | B.java:107:31:111:5 | String s : String | semmle.label | String s : String | | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | semmle.label | parameter this : new Consumer(...) { ... } [String s] : String | -| B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | -| B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | semmle.label | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | +| B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out1, ] : String | semmle.label | parameter this [Reverse] : new Consumer(...) { ... } [List out1, ] : String | +| B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out2, ] : String | semmle.label | parameter this [Reverse] : new Consumer(...) { ... } [List out2, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out1, ] : String | semmle.label | this : new Consumer>(...) { ... } [List out1, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [List out2, ] : String | semmle.label | this : new Consumer>(...) { ... } [List out2, ] : String | | B.java:107:31:111:5 | this : new Consumer>(...) { ... } [String s] : String | semmle.label | this : new Consumer>(...) { ... } [String s] : String | @@ -429,12 +429,12 @@ nodes | B.java:112:10:112:20 | get(...) | semmle.label | get(...) | | B.java:113:10:113:13 | out2 : List [] : String | semmle.label | out2 : List [] : String | | B.java:113:10:113:20 | get(...) | semmle.label | get(...) | -| B.java:126:19:126:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l1, ] : String | semmle.label | parameter this [Return] : new TwoRuns(...) { ... } [List l1, ] : String | +| B.java:126:19:126:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l1, ] : String | semmle.label | parameter this [Reverse] : new TwoRuns(...) { ... } [List l1, ] : String | | B.java:127:9:127:10 | l1 [post update] : ArrayList [] : String | semmle.label | l1 [post update] : ArrayList [] : String | | B.java:127:9:127:10 | this : new TwoRuns(...) { ... } [List l1, ] : String | semmle.label | this : new TwoRuns(...) { ... } [List l1, ] : String | | B.java:127:16:127:29 | source(...) : String | semmle.label | source(...) : String | | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | semmle.label | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | -| B.java:130:19:130:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l2, ] : String | semmle.label | parameter this [Return] : new TwoRuns(...) { ... } [List l2, ] : String | +| B.java:130:19:130:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l2, ] : String | semmle.label | parameter this [Reverse] : new TwoRuns(...) { ... } [List l2, ] : String | | B.java:131:9:131:10 | l2 [post update] : ArrayList [] : String | semmle.label | l2 [post update] : ArrayList [] : String | | B.java:131:9:131:10 | this : new TwoRuns(...) { ... } [List l2, ] : String | semmle.label | this : new TwoRuns(...) { ... } [List l2, ] : String | | B.java:131:16:131:17 | l1 : ArrayList [] : String | semmle.label | l1 : ArrayList [] : String | @@ -450,7 +450,7 @@ nodes | B.java:138:10:138:18 | get(...) | semmle.label | get(...) | | B.java:142:16:142:31 | source(...) : String | semmle.label | source(...) : String | | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | semmle.label | parameter this : MyLocal [String s] : String | -| B.java:145:7:145:13 | parameter this [Return] : MyLocal [f] : String | semmle.label | parameter this [Return] : MyLocal [f] : String | +| B.java:145:7:145:13 | parameter this [Reverse] : MyLocal [f] : String | semmle.label | parameter this [Reverse] : MyLocal [f] : String | | B.java:145:19:145:22 | this [post update] : MyLocal [f] : String | semmle.label | this [post update] : MyLocal [f] : String | | B.java:145:28:145:28 | s : String | semmle.label | s : String | | B.java:145:28:145:28 | this : MyLocal [String s] : String | semmle.label | this : MyLocal [String s] : String | @@ -467,7 +467,7 @@ nodes | B.java:158:7:158:13 | parameter this : MyLocal [String s1] : String | semmle.label | parameter this : MyLocal [String s1] : String | | B.java:158:7:158:13 | parameter this : MyLocal [String s2] : String | semmle.label | parameter this : MyLocal [String s2] : String | | B.java:158:7:158:13 | parameter this : MyLocal [String s2] : String | semmle.label | parameter this : MyLocal [String s2] : String | -| B.java:158:7:158:13 | parameter this [Return] : MyLocal [f] : String | semmle.label | parameter this [Return] : MyLocal [f] : String | +| B.java:158:7:158:13 | parameter this [Reverse] : MyLocal [f] : String | semmle.label | parameter this [Reverse] : MyLocal [f] : String | | B.java:159:9:159:12 | this [post update] : MyLocal [f] : String | semmle.label | this [post update] : MyLocal [f] : String | | B.java:159:18:159:19 | s1 : String | semmle.label | s1 : String | | B.java:159:18:159:19 | this : MyLocal [String s1] : String | semmle.label | this : MyLocal [String s1] : String | @@ -480,7 +480,7 @@ nodes | B.java:163:14:163:14 | this <.field> : MyLocal [f] : String | semmle.label | this <.field> : MyLocal [f] : String | | B.java:164:14:164:15 | s2 | semmle.label | s2 | | B.java:164:14:164:15 | this : MyLocal [String s2] : String | semmle.label | this : MyLocal [String s2] : String | -| B.java:166:12:166:14 | parameter this [Return] : MyLocal [List l, ] : String | semmle.label | parameter this [Return] : MyLocal [List l, ] : String | +| B.java:166:12:166:14 | parameter this [Reverse] : MyLocal [List l, ] : String | semmle.label | parameter this [Reverse] : MyLocal [List l, ] : String | | B.java:166:16:166:23 | s : String | semmle.label | s : String | | B.java:167:9:167:9 | l [post update] : ArrayList [] : String | semmle.label | l [post update] : ArrayList [] : String | | B.java:167:9:167:9 | this : MyLocal [List l, ] : String | semmle.label | this : MyLocal [List l, ] : String | @@ -511,14 +511,14 @@ nodes | B.java:178:10:178:17 | get(...) | semmle.label | get(...) | | B.java:203:16:203:42 | source(...) : String | semmle.label | source(...) : String | | B.java:205:19:208:5 | parameter this : new Runnable(...) { ... } [String s] : String | semmle.label | parameter this : new Runnable(...) { ... } [String s] : String | -| B.java:205:19:208:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | semmle.label | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | +| B.java:205:19:208:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | semmle.label | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | | B.java:206:12:206:12 | s | semmle.label | s | | B.java:206:12:206:12 | this : new Runnable(...) { ... } [String s] : String | semmle.label | this : new Runnable(...) { ... } [String s] : String | | B.java:207:7:207:9 | out [post update] : ArrayList [] : String | semmle.label | out [post update] : ArrayList [] : String | | B.java:207:7:207:9 | this : new Runnable(...) { ... } [List out, ] : String | semmle.label | this : new Runnable(...) { ... } [List out, ] : String | | B.java:207:15:207:42 | source(...) : String | semmle.label | source(...) : String | | B.java:209:19:211:5 | parameter this : new Runnable(...) { ... } [String s] : String | semmle.label | parameter this : new Runnable(...) { ... } [String s] : String | -| B.java:209:19:211:5 | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | semmle.label | parameter this [Return] : new Runnable(...) { ... } [List out, ] : String | +| B.java:209:19:211:5 | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | semmle.label | parameter this [Reverse] : new Runnable(...) { ... } [List out, ] : String | | B.java:210:7:210:8 | List out : List [] : String | semmle.label | List out : List [] : String | | B.java:210:7:210:8 | String s : String | semmle.label | String s : String | | B.java:210:7:210:8 | r1 : new Runnable(...) { ... } [String s] : String | semmle.label | r1 : new Runnable(...) { ... } [String s] : String | @@ -533,13 +533,13 @@ nodes | B.java:213:10:213:19 | get(...) | semmle.label | get(...) | | B.java:231:16:231:28 | source(...) : String | semmle.label | source(...) : String | | B.java:235:7:235:14 | parameter this : MyLocal2 [String s] : String | semmle.label | parameter this : MyLocal2 [String s] : String | -| B.java:235:7:235:14 | parameter this [Return] : MyLocal2 [List l, ] : String | semmle.label | parameter this [Return] : MyLocal2 [List l, ] : String | +| B.java:235:7:235:14 | parameter this [Reverse] : MyLocal2 [List l, ] : String | semmle.label | parameter this [Reverse] : MyLocal2 [List l, ] : String | | B.java:238:9:238:9 | l [post update] : ArrayList [] : String | semmle.label | l [post update] : ArrayList [] : String | | B.java:238:9:238:9 | this : MyLocal2 [List l, ] : String | semmle.label | this : MyLocal2 [List l, ] : String | | B.java:238:15:238:15 | s : String | semmle.label | s : String | | B.java:238:15:238:15 | this : MyLocal2 [String s] : String | semmle.label | this : MyLocal2 [String s] : String | | B.java:240:12:240:14 | parameter this : MyLocal2 [List l, ] : String | semmle.label | parameter this : MyLocal2 [List l, ] : String | -| B.java:240:12:240:14 | parameter this [Return] : MyLocal2 [List l2, ] : String | semmle.label | parameter this [Return] : MyLocal2 [List l2, ] : String | +| B.java:240:12:240:14 | parameter this [Reverse] : MyLocal2 [List l2, ] : String | semmle.label | parameter this [Reverse] : MyLocal2 [List l2, ] : String | | B.java:241:9:241:10 | l2 [post update] : ArrayList [] : String | semmle.label | l2 [post update] : ArrayList [] : String | | B.java:241:9:241:10 | this : MyLocal2 [List l2, ] : String | semmle.label | this : MyLocal2 [List l2, ] : String | | B.java:241:16:241:16 | l : ArrayList [] : String | semmle.label | l : ArrayList [] : String | @@ -558,8 +558,8 @@ nodes | B.java:254:16:254:29 | source(...) : String | semmle.label | source(...) : String | | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | semmle.label | parameter this : MyLocal3 [String s] : String | | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | semmle.label | parameter this : MyLocal3 [String s] : String | -| B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | semmle.label | parameter this [Return] : MyLocal3 [f] : String | -| B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | semmle.label | parameter this [Return] : MyLocal3 [f] : String | +| B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | semmle.label | parameter this [Reverse] : MyLocal3 [f] : String | +| B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | semmle.label | parameter this [Reverse] : MyLocal3 [f] : String | | B.java:255:11:255:18 | this <.method> : MyLocal3 [String s] : String | semmle.label | this <.method> : MyLocal3 [String s] : String | | B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | semmle.label | this <.method> [post update] : MyLocal3 [f] : String | | B.java:256:7:256:19 | this <.field> [post update] : MyLocal3 [f] : String | semmle.label | this <.field> [post update] : MyLocal3 [f] : String | @@ -573,11 +573,11 @@ nodes | B.java:261:5:261:18 | new MyLocal3(...) [pre constructor] : MyLocal3 [String s] : String | semmle.label | new MyLocal3(...) [pre constructor] : MyLocal3 [String s] : String | | B.java:266:16:266:29 | source(...) : String | semmle.label | source(...) : String | | B.java:269:7:269:14 | parameter this : MyLocal4 [String s] : String | semmle.label | parameter this : MyLocal4 [String s] : String | -| B.java:269:7:269:14 | parameter this [Return] : MyLocal4 [f] : String | semmle.label | parameter this [Return] : MyLocal4 [f] : String | +| B.java:269:7:269:14 | parameter this [Reverse] : MyLocal4 [f] : String | semmle.label | parameter this [Reverse] : MyLocal4 [f] : String | | B.java:270:9:270:17 | this : MyLocal4 [String s] : String | semmle.label | this : MyLocal4 [String s] : String | | B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | semmle.label | this [post update] : MyLocal4 [f] : String | | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | semmle.label | parameter this : MyLocal4 [String s] : String | -| B.java:272:7:272:14 | parameter this [Return] : MyLocal4 [f] : String | semmle.label | parameter this [Return] : MyLocal4 [f] : String | +| B.java:272:7:272:14 | parameter this [Reverse] : MyLocal4 [f] : String | semmle.label | parameter this [Reverse] : MyLocal4 [f] : String | | B.java:273:9:273:9 | this <.field> [post update] : MyLocal4 [f] : String | semmle.label | this <.field> [post update] : MyLocal4 [f] : String | | B.java:273:13:273:13 | s : String | semmle.label | s : String | | B.java:273:13:273:13 | this : MyLocal4 [String s] : String | semmle.label | this : MyLocal4 [String s] : String | @@ -595,29 +595,29 @@ nodes | B.java:280:10:280:24 | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | semmle.label | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | | B.java:280:10:280:30 | get(...) | semmle.label | get(...) | subpaths -| B.java:13:5:13:6 | l1 : ArrayList [] : String | B.java:13:16:13:16 | e : String | B.java:13:16:13:29 | parameter this [Return] : new Consumer(...) { ... } [List l2, ] : String | B.java:13:16:13:29 | ...->... [post update] : new Consumer(...) { ... } [List l2, ] : String | -| B.java:30:14:30:24 | source(...) : String | B.java:22:26:22:26 | x : String | B.java:22:26:22:71 | parameter this [Return] : new Consumer(...) { ... } [B other, bf1] : String | B.java:30:5:30:5 | f [post update] : new Consumer(...) { ... } [B other, bf1] : String | -| B.java:39:5:39:7 | inp : HashMap [] : String | B.java:39:18:39:20 | key : String | B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | -| B.java:39:5:39:7 | inp : HashMap [] : String | B.java:39:23:39:27 | value : String | B.java:39:17:39:56 | parameter this [Return] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | -| B.java:46:13:46:14 | m1 : HashMap [] : String | B.java:38:23:38:45 | inp : HashMap [] : String | B.java:38:48:38:70 | out [Return] : Map [] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [] : String | -| B.java:46:13:46:14 | m1 : HashMap [] : String | B.java:38:23:38:45 | inp : HashMap [] : String | B.java:38:48:38:70 | out [Return] : Map [] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [] : String | -| B.java:107:5:107:6 | l2 : ArrayList [, ] : String | B.java:107:16:107:16 | l : List [] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out1, ] : String | -| B.java:107:16:111:6 | ...->... : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Return] : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out2, ] : String | -| B.java:107:21:107:21 | l : List [] : String | B.java:107:31:107:31 | x : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | -| B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Return] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | -| B.java:137:5:137:5 | r : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this [Return] : new TwoRuns(...) { ... } [List l2, ] : String | B.java:137:5:137:5 | r [post update] : new TwoRuns(...) { ... } [List l2, ] : String | -| B.java:148:17:148:29 | new MyLocal(...) [pre constructor] : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this [Return] : MyLocal [f] : String | B.java:148:17:148:29 | new MyLocal(...) : MyLocal [f] : String | +| B.java:13:5:13:6 | l1 : ArrayList [] : String | B.java:13:16:13:16 | e : String | B.java:13:16:13:29 | parameter this [Reverse] : new Consumer(...) { ... } [List l2, ] : String | B.java:13:16:13:29 | ...->... [post update] : new Consumer(...) { ... } [List l2, ] : String | +| B.java:30:14:30:24 | source(...) : String | B.java:22:26:22:26 | x : String | B.java:22:26:22:71 | parameter this [Reverse] : new Consumer(...) { ... } [B other, bf1] : String | B.java:30:5:30:5 | f [post update] : new Consumer(...) { ... } [B other, bf1] : String | +| B.java:39:5:39:7 | inp : HashMap [] : String | B.java:39:18:39:20 | key : String | B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | +| B.java:39:5:39:7 | inp : HashMap [] : String | B.java:39:23:39:27 | value : String | B.java:39:17:39:56 | parameter this [Reverse] : new BiConsumer(...) { ... } [out, ] : String | B.java:39:17:39:56 | ...->... [post update] : new BiConsumer(...) { ... } [out, ] : String | +| B.java:46:13:46:14 | m1 : HashMap [] : String | B.java:38:23:38:45 | inp : HashMap [] : String | B.java:38:48:38:70 | out [Reverse] : Map [] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [] : String | +| B.java:46:13:46:14 | m1 : HashMap [] : String | B.java:38:23:38:45 | inp : HashMap [] : String | B.java:38:48:38:70 | out [Reverse] : Map [] : String | B.java:46:17:46:18 | m2 [post update] : HashMap [] : String | +| B.java:107:5:107:6 | l2 : ArrayList [, ] : String | B.java:107:16:107:16 | l : List [] : String | B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out1, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out1, ] : String | +| B.java:107:16:111:6 | ...->... : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this : new Consumer>(...) { ... } [String s] : String | B.java:107:16:111:6 | parameter this [Reverse] : new Consumer>(...) { ... } [List out2, ] : String | B.java:107:16:111:6 | ...->... [post update] : new Consumer>(...) { ... } [List out2, ] : String | +| B.java:107:21:107:21 | l : List [] : String | B.java:107:31:107:31 | x : String | B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out1, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out1, ] : String | +| B.java:107:31:111:5 | ...->... : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this : new Consumer(...) { ... } [String s] : String | B.java:107:31:111:5 | parameter this [Reverse] : new Consumer(...) { ... } [List out2, ] : String | B.java:107:31:111:5 | ...->... [post update] : new Consumer(...) { ... } [List out2, ] : String | +| B.java:137:5:137:5 | r : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this : new TwoRuns(...) { ... } [List l1, ] : String | B.java:130:19:130:22 | parameter this [Reverse] : new TwoRuns(...) { ... } [List l2, ] : String | B.java:137:5:137:5 | r [post update] : new TwoRuns(...) { ... } [List l2, ] : String | +| B.java:148:17:148:29 | new MyLocal(...) [pre constructor] : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this : MyLocal [String s] : String | B.java:145:7:145:13 | parameter this [Reverse] : MyLocal [f] : String | B.java:148:17:148:29 | new MyLocal(...) : MyLocal [f] : String | | B.java:149:10:149:10 | m : MyLocal [f] : String | B.java:146:14:146:17 | parameter this : MyLocal [f] : String | B.java:146:30:146:35 | this.f : String | B.java:149:10:149:17 | getF(...) | -| B.java:173:18:173:30 | new MyLocal(...) [pre constructor] : MyLocal [String s1] : String | B.java:158:7:158:13 | parameter this : MyLocal [String s1] : String | B.java:158:7:158:13 | parameter this [Return] : MyLocal [f] : String | B.java:173:18:173:30 | new MyLocal(...) : MyLocal [f] : String | -| B.java:177:12:177:27 | source(...) : String | B.java:166:16:166:23 | s : String | B.java:166:12:166:14 | parameter this [Return] : MyLocal [List l, ] : String | B.java:177:5:177:6 | m1 [post update] : MyLocal [List l, ] : String | +| B.java:173:18:173:30 | new MyLocal(...) [pre constructor] : MyLocal [String s1] : String | B.java:158:7:158:13 | parameter this : MyLocal [String s1] : String | B.java:158:7:158:13 | parameter this [Reverse] : MyLocal [f] : String | B.java:173:18:173:30 | new MyLocal(...) : MyLocal [f] : String | +| B.java:177:12:177:27 | source(...) : String | B.java:166:16:166:23 | s : String | B.java:166:12:166:14 | parameter this [Reverse] : MyLocal [List l, ] : String | B.java:177:5:177:6 | m1 [post update] : MyLocal [List l, ] : String | | B.java:178:10:178:11 | m2 : MyLocal [List l, ] : String | B.java:169:14:169:16 | parameter this : MyLocal [List l, ] : String | B.java:170:16:170:23 | get(...) : String | B.java:178:10:178:17 | get(...) | -| B.java:247:5:247:18 | new MyLocal2(...) : MyLocal2 [List l, ] : String | B.java:240:12:240:14 | parameter this : MyLocal2 [List l, ] : String | B.java:240:12:240:14 | parameter this [Return] : MyLocal2 [List l2, ] : String | B.java:247:5:247:18 | new MyLocal2(...) [post update] : MyLocal2 [List l2, ] : String | -| B.java:247:5:247:18 | new MyLocal2(...) [pre constructor] : MyLocal2 [String s] : String | B.java:235:7:235:14 | parameter this : MyLocal2 [String s] : String | B.java:235:7:235:14 | parameter this [Return] : MyLocal2 [List l, ] : String | B.java:247:5:247:18 | new MyLocal2(...) : MyLocal2 [List l, ] : String | -| B.java:255:11:255:18 | this <.method> : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | -| B.java:261:5:261:18 | new MyLocal3(...) [pre constructor] : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this [Return] : MyLocal3 [f] : String | B.java:261:5:261:18 | new MyLocal3(...) : MyLocal3 [f] : String | -| B.java:270:9:270:17 | this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this [Return] : MyLocal4 [f] : String | B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | +| B.java:247:5:247:18 | new MyLocal2(...) : MyLocal2 [List l, ] : String | B.java:240:12:240:14 | parameter this : MyLocal2 [List l, ] : String | B.java:240:12:240:14 | parameter this [Reverse] : MyLocal2 [List l2, ] : String | B.java:247:5:247:18 | new MyLocal2(...) [post update] : MyLocal2 [List l2, ] : String | +| B.java:247:5:247:18 | new MyLocal2(...) [pre constructor] : MyLocal2 [String s] : String | B.java:235:7:235:14 | parameter this : MyLocal2 [String s] : String | B.java:235:7:235:14 | parameter this [Reverse] : MyLocal2 [List l, ] : String | B.java:247:5:247:18 | new MyLocal2(...) : MyLocal2 [List l, ] : String | +| B.java:255:11:255:18 | this <.method> : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | B.java:255:11:255:18 | this <.method> [post update] : MyLocal3 [f] : String | +| B.java:261:5:261:18 | new MyLocal3(...) [pre constructor] : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this : MyLocal3 [String s] : String | B.java:255:11:255:18 | parameter this [Reverse] : MyLocal3 [f] : String | B.java:261:5:261:18 | new MyLocal3(...) : MyLocal3 [f] : String | +| B.java:270:9:270:17 | this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this [Reverse] : MyLocal4 [f] : String | B.java:270:9:270:17 | this [post update] : MyLocal4 [f] : String | | B.java:279:10:279:23 | new MyLocal4(...) : MyLocal4 [f] : String | B.java:275:14:275:16 | parameter this : MyLocal4 [f] : String | B.java:276:16:276:21 | this.f : String | B.java:279:10:279:29 | get(...) | -| B.java:279:10:279:23 | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | B.java:269:7:269:14 | parameter this : MyLocal4 [String s] : String | B.java:269:7:269:14 | parameter this [Return] : MyLocal4 [f] : String | B.java:279:10:279:23 | new MyLocal4(...) : MyLocal4 [f] : String | +| B.java:279:10:279:23 | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | B.java:269:7:269:14 | parameter this : MyLocal4 [String s] : String | B.java:269:7:269:14 | parameter this [Reverse] : MyLocal4 [f] : String | B.java:279:10:279:23 | new MyLocal4(...) : MyLocal4 [f] : String | | B.java:280:10:280:24 | new MyLocal4(...) : MyLocal4 [f] : String | B.java:275:14:275:16 | parameter this : MyLocal4 [f] : String | B.java:276:16:276:21 | this.f : String | B.java:280:10:280:30 | get(...) | -| B.java:280:10:280:24 | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this [Return] : MyLocal4 [f] : String | B.java:280:10:280:24 | new MyLocal4(...) : MyLocal4 [f] : String | +| B.java:280:10:280:24 | new MyLocal4(...) [pre constructor] : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this : MyLocal4 [String s] : String | B.java:272:7:272:14 | parameter this [Reverse] : MyLocal4 [f] : String | B.java:280:10:280:24 | new MyLocal4(...) : MyLocal4 [f] : String | testFailures diff --git a/java/ql/test/library-tests/dataflow/capture/test.expected b/java/ql/test/library-tests/dataflow/capture/test.expected index f18999a1d81f..dbdf5e01436e 100644 --- a/java/ql/test/library-tests/dataflow/capture/test.expected +++ b/java/ql/test/library-tests/dataflow/capture/test.expected @@ -3,6 +3,7 @@ | A.java:14:14:14:16 | "A" : String | A.java:15:16:15:22 | get(...) : String | | A.java:14:14:14:16 | "A" : String | A.java:18:8:18:15 | p : String | | A.java:14:14:14:16 | "A" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [p] | +| A.java:14:14:14:16 | "A" : String | A.java:28:11:38:5 | new (...) [pre constructor] [Reverse] : new A(...) { ... } [p] | | A.java:14:14:14:16 | "A" : String | A.java:28:11:38:5 | p : String | | A.java:14:14:14:16 | "A" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [p] | | A.java:14:14:14:16 | "A" : String | A.java:31:17:31:17 | this : new A(...) { ... } [p] | @@ -20,6 +21,7 @@ | A.java:21:11:21:13 | "B" : String | A.java:25:5:25:26 | phi(String s) : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | String s : String | | A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | +| A.java:21:11:21:13 | "B" : String | A.java:28:11:38:5 | new (...) [pre constructor] [Reverse] : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:31:17:31:17 | this : new A(...) { ... } [String s] | | A.java:21:11:21:13 | "B" : String | A.java:32:26:32:26 | this : new A(...) { ... } [String s] | @@ -36,6 +38,7 @@ | A.java:23:11:23:13 | "C" : String | A.java:25:5:25:26 | phi(String s) : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | String s : String | | A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [String s] | +| A.java:23:11:23:13 | "C" : String | A.java:28:11:38:5 | new (...) [pre constructor] [Reverse] : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:31:17:31:17 | this : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:32:26:32:26 | this : new A(...) { ... } [String s] | @@ -45,8 +48,10 @@ | A.java:23:11:23:13 | "C" : String | A.java:35:26:35:27 | this : new A(...) { ... } [String s] | | A.java:23:11:23:13 | "C" : String | A.java:39:12:39:12 | String s : String | | A.java:23:11:23:13 | "C" : String | A.java:39:12:39:12 | a : new A(...) { ... } [String s] | -| A.java:25:22:25:24 | "D" : String | A.java:4:5:4:7 | parameter this [Return] : Box [elem] | +| A.java:25:22:25:24 | "D" : String | A.java:4:5:4:7 | parameter this [Reverse] : Box [elem] | +| A.java:25:22:25:24 | "D" : String | A.java:4:5:4:7 | this [Reverse] : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:4:9:4:16 | e : String | +| A.java:25:22:25:24 | "D" : String | A.java:4:21:4:24 | this <.field> [Reverse] : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:4:21:4:24 | this <.field> [post update] : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:4:21:4:28 | ...=... : String | | A.java:25:22:25:24 | "D" : String | A.java:4:28:4:28 | e : String | @@ -57,8 +62,10 @@ | A.java:25:22:25:24 | "D" : String | A.java:15:16:15:16 | a : new A(...) { ... } [Box b1, ... (2)] | | A.java:25:22:25:24 | "D" : String | A.java:15:16:15:22 | get(...) : String | | A.java:25:22:25:24 | "D" : String | A.java:25:14:25:25 | new Box(...) : Box [elem] | +| A.java:25:22:25:24 | "D" : String | A.java:25:14:25:25 | new Box(...) [pre constructor] [Reverse] : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:28:11:38:5 | Box b1 : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [Box b1, ... (2)] | +| A.java:25:22:25:24 | "D" : String | A.java:28:11:38:5 | new (...) [pre constructor] [Reverse] : new A(...) { ... } [Box b1, ... (2)] | | A.java:25:22:25:24 | "D" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [Box b1, ... (2)] | | A.java:25:22:25:24 | "D" : String | A.java:31:17:31:17 | this : new A(...) { ... } [Box b1, ... (2)] | | A.java:25:22:25:24 | "D" : String | A.java:32:26:32:26 | this : new A(...) { ... } [Box b1, ... (2)] | @@ -69,8 +76,9 @@ | A.java:25:22:25:24 | "D" : String | A.java:35:26:35:27 | this : new A(...) { ... } [Box b1, ... (2)] | | A.java:25:22:25:24 | "D" : String | A.java:39:12:39:12 | Box b1 : Box [elem] | | A.java:25:22:25:24 | "D" : String | A.java:39:12:39:12 | a : new A(...) { ... } [Box b1, ... (2)] | -| A.java:27:16:27:18 | "E" : String | A.java:5:10:5:16 | parameter this [Return] : Box [elem] | +| A.java:27:16:27:18 | "E" : String | A.java:5:10:5:16 | parameter this [Reverse] : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:5:18:5:25 | e : String | +| A.java:27:16:27:18 | "E" : String | A.java:5:30:5:33 | this <.field> [Reverse] : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:5:30:5:33 | this <.field> [post update] : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:5:30:5:37 | ...=... : String | | A.java:27:16:27:18 | "E" : String | A.java:5:37:5:37 | e : String | @@ -80,9 +88,11 @@ | A.java:27:16:27:18 | "E" : String | A.java:14:11:14:20 | f2(...) : new A(...) { ... } [Box b2, ... (2)] | | A.java:27:16:27:18 | "E" : String | A.java:15:16:15:16 | a : new A(...) { ... } [Box b2, ... (2)] | | A.java:27:16:27:18 | "E" : String | A.java:15:16:15:22 | get(...) : String | +| A.java:27:16:27:18 | "E" : String | A.java:27:5:27:6 | b2 [Reverse] : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:27:5:27:6 | b2 [post update] : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:28:11:38:5 | Box b2 : Box [elem] | | A.java:27:16:27:18 | "E" : String | A.java:28:11:38:5 | new (...) : new A(...) { ... } [Box b2, ... (2)] | +| A.java:27:16:27:18 | "E" : String | A.java:28:11:38:5 | new (...) [pre constructor] [Reverse] : new A(...) { ... } [Box b2, ... (2)] | | A.java:27:16:27:18 | "E" : String | A.java:30:14:30:16 | parameter this : new A(...) { ... } [Box b2, ... (2)] | | A.java:27:16:27:18 | "E" : String | A.java:31:17:31:17 | this : new A(...) { ... } [Box b2, ... (2)] | | A.java:27:16:27:18 | "E" : String | A.java:32:26:32:26 | this : new A(...) { ... } [Box b2, ... (2)] | diff --git a/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected b/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected index 019dcde0ad7e..afc5cf8106ba 100644 --- a/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected +++ b/java/ql/test/library-tests/dataflow/fluent-methods/flow.expected @@ -1,72 +1,60 @@ models edges +| Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | Test.java:5:15:5:24 | parameter this [Reverse] : Test [field] : String | provenance | | | Test.java:23:25:23:32 | x : String | Test.java:24:18:24:18 | x : String | provenance | | -| Test.java:24:5:24:8 | this [post update] : Test [field] : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | provenance | | +| Test.java:24:5:24:8 | this [post update] : Test [field] : String | Test.java:23:15:23:23 | parameter this [Reverse] : Test [field] : String | provenance | | | Test.java:24:18:24:18 | x : String | Test.java:24:5:24:8 | this [post update] : Test [field] : String | provenance | | +| Test.java:29:12:29:12 | t [Reverse] : Test [field] : String | Test.java:28:31:28:36 | t [Reverse] : Test [field] : String | provenance | | | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | this <.field> : Test [field] : String | provenance | | | Test.java:33:12:33:16 | this <.field> : Test [field] : String | Test.java:33:12:33:16 | field : String | provenance | | -| Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | Test.java:45:10:45:10 | t : Test [field] : String | provenance | | +| Test.java:44:5:44:5 | t [post update] : Test [field] : String | Test.java:45:10:45:10 | t : Test [field] : String | provenance | | +| Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | Test.java:44:5:44:5 | t [post update] : Test [field] : String | provenance | | | Test.java:44:30:44:37 | source(...) : String | Test.java:23:25:23:32 | x : String | provenance | | | Test.java:44:30:44:37 | source(...) : String | Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | provenance | | | Test.java:45:10:45:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | provenance | | | Test.java:45:10:45:10 | t : Test [field] : String | Test.java:45:10:45:16 | get(...) | provenance | | -| Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | Test.java:51:10:51:10 | t : Test [field] : String | provenance | | +| Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | Test.java:29:12:29:12 | t [Reverse] : Test [field] : String | provenance | | +| Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | Test.java:50:19:50:19 | t [post update] : Test [field] : String | provenance | | +| Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | provenance | | +| Test.java:50:19:50:19 | t [post update] : Test [field] : String | Test.java:51:10:51:10 | t : Test [field] : String | provenance | | | Test.java:50:45:50:52 | source(...) : String | Test.java:23:25:23:32 | x : String | provenance | | | Test.java:50:45:50:52 | source(...) : String | Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | provenance | | | Test.java:51:10:51:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | provenance | | | Test.java:51:10:51:10 | t : Test [field] : String | Test.java:51:10:51:16 | get(...) | provenance | | -| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [post update] : Test [field] : String | Test.java:57:10:57:10 | t : Test [field] : String | provenance | | -| Test.java:56:40:56:47 | source(...) : String | Test.java:23:25:23:32 | x : String | provenance | | -| Test.java:56:40:56:47 | source(...) : String | Test.java:56:5:56:28 | indirectlyFluentNoop(...) [post update] : Test [field] : String | provenance | | -| Test.java:57:10:57:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | provenance | | -| Test.java:57:10:57:10 | t : Test [field] : String | Test.java:57:10:57:16 | get(...) | provenance | | -| Test.java:62:5:62:51 | modelledFluentMethod(...) [post update] : Test [field] : String | Test.java:63:10:63:10 | t : Test [field] : String | provenance | ValuePreservingMethod | -| Test.java:62:63:62:70 | source(...) : String | Test.java:23:25:23:32 | x : String | provenance | | -| Test.java:62:63:62:70 | source(...) : String | Test.java:62:5:62:51 | modelledFluentMethod(...) [post update] : Test [field] : String | provenance | | -| Test.java:63:10:63:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | provenance | | -| Test.java:63:10:63:10 | t : Test [field] : String | Test.java:63:10:63:16 | get(...) | provenance | | -| Test.java:68:5:68:74 | modelledFluentMethod(...) [post update] : Test [field] : String | Test.java:69:10:69:10 | t : Test [field] : String | provenance | ValuePreservingMethod | -| Test.java:68:86:68:93 | source(...) : String | Test.java:23:25:23:32 | x : String | provenance | | -| Test.java:68:86:68:93 | source(...) : String | Test.java:68:5:68:74 | modelledFluentMethod(...) [post update] : Test [field] : String | provenance | | -| Test.java:69:10:69:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | provenance | | -| Test.java:69:10:69:10 | t : Test [field] : String | Test.java:69:10:69:16 | get(...) | provenance | | nodes -| Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | semmle.label | parameter this [Return] : Test [field] : String | +| Test.java:5:15:5:24 | parameter this [Reverse] : Test [field] : String | semmle.label | parameter this [Reverse] : Test [field] : String | +| Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | semmle.label | this [Reverse] : Test [field] : String | +| Test.java:23:15:23:23 | parameter this [Reverse] : Test [field] : String | semmle.label | parameter this [Reverse] : Test [field] : String | | Test.java:23:25:23:32 | x : String | semmle.label | x : String | | Test.java:24:5:24:8 | this [post update] : Test [field] : String | semmle.label | this [post update] : Test [field] : String | | Test.java:24:18:24:18 | x : String | semmle.label | x : String | +| Test.java:28:31:28:36 | t [Reverse] : Test [field] : String | semmle.label | t [Reverse] : Test [field] : String | +| Test.java:29:12:29:12 | t [Reverse] : Test [field] : String | semmle.label | t [Reverse] : Test [field] : String | | Test.java:32:17:32:19 | parameter this : Test [field] : String | semmle.label | parameter this : Test [field] : String | | Test.java:33:12:33:16 | field : String | semmle.label | field : String | | Test.java:33:12:33:16 | this <.field> : Test [field] : String | semmle.label | this <.field> : Test [field] : String | +| Test.java:44:5:44:5 | t [post update] : Test [field] : String | semmle.label | t [post update] : Test [field] : String | | Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | semmle.label | fluentNoop(...) [post update] : Test [field] : String | | Test.java:44:30:44:37 | source(...) : String | semmle.label | source(...) : String | | Test.java:45:10:45:10 | t : Test [field] : String | semmle.label | t : Test [field] : String | | Test.java:45:10:45:16 | get(...) | semmle.label | get(...) | +| Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | semmle.label | identity(...) [post update] : Test [field] : String | | Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | semmle.label | fluentNoop(...) [post update] : Test [field] : String | +| Test.java:50:19:50:19 | t [post update] : Test [field] : String | semmle.label | t [post update] : Test [field] : String | | Test.java:50:45:50:52 | source(...) : String | semmle.label | source(...) : String | | Test.java:51:10:51:10 | t : Test [field] : String | semmle.label | t : Test [field] : String | | Test.java:51:10:51:16 | get(...) | semmle.label | get(...) | -| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [post update] : Test [field] : String | semmle.label | indirectlyFluentNoop(...) [post update] : Test [field] : String | -| Test.java:56:40:56:47 | source(...) : String | semmle.label | source(...) : String | -| Test.java:57:10:57:10 | t : Test [field] : String | semmle.label | t : Test [field] : String | -| Test.java:57:10:57:16 | get(...) | semmle.label | get(...) | -| Test.java:62:5:62:51 | modelledFluentMethod(...) [post update] : Test [field] : String | semmle.label | modelledFluentMethod(...) [post update] : Test [field] : String | -| Test.java:62:63:62:70 | source(...) : String | semmle.label | source(...) : String | -| Test.java:63:10:63:10 | t : Test [field] : String | semmle.label | t : Test [field] : String | -| Test.java:63:10:63:16 | get(...) | semmle.label | get(...) | -| Test.java:68:5:68:74 | modelledFluentMethod(...) [post update] : Test [field] : String | semmle.label | modelledFluentMethod(...) [post update] : Test [field] : String | -| Test.java:68:86:68:93 | source(...) : String | semmle.label | source(...) : String | -| Test.java:69:10:69:10 | t : Test [field] : String | semmle.label | t : Test [field] : String | -| Test.java:69:10:69:16 | get(...) | semmle.label | get(...) | subpaths -| Test.java:44:30:44:37 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | +| Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | Test.java:5:15:5:24 | parameter this [Reverse] : Test [field] : String | Test.java:44:5:44:5 | t [post update] : Test [field] : String | +| Test.java:44:30:44:37 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Reverse] : Test [field] : String | Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | | Test.java:45:10:45:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | field : String | Test.java:45:10:45:16 | get(...) | -| Test.java:50:45:50:52 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | +| Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | Test.java:29:12:29:12 | t [Reverse] : Test [field] : String | Test.java:28:31:28:36 | t [Reverse] : Test [field] : String | Test.java:50:19:50:19 | t [post update] : Test [field] : String | +| Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | Test.java:5:15:5:24 | parameter this [Reverse] : Test [field] : String | Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | +| Test.java:50:45:50:52 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Reverse] : Test [field] : String | Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | | Test.java:51:10:51:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | field : String | Test.java:51:10:51:16 | get(...) | -| Test.java:56:40:56:47 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | Test.java:56:5:56:28 | indirectlyFluentNoop(...) [post update] : Test [field] : String | -| Test.java:57:10:57:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | field : String | Test.java:57:10:57:16 | get(...) | -| Test.java:62:63:62:70 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | Test.java:62:5:62:51 | modelledFluentMethod(...) [post update] : Test [field] : String | -| Test.java:63:10:63:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | field : String | Test.java:63:10:63:16 | get(...) | -| Test.java:68:86:68:93 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Return] : Test [field] : String | Test.java:68:5:68:74 | modelledFluentMethod(...) [post update] : Test [field] : String | -| Test.java:69:10:69:10 | t : Test [field] : String | Test.java:32:17:32:19 | parameter this : Test [field] : String | Test.java:33:12:33:16 | field : String | Test.java:69:10:69:16 | get(...) | testFailures +| Test.java:57:20:57:35 | // $hasValueFlow | Missing result: hasValueFlow | +| Test.java:63:20:63:35 | // $hasValueFlow | Missing result: hasValueFlow | +| Test.java:69:20:69:35 | // $hasValueFlow | Missing result: hasValueFlow | diff --git a/java/ql/test/library-tests/dataflow/getter/getter.expected b/java/ql/test/library-tests/dataflow/getter/getter.expected index 9a36107f1983..fa3a5f10e56e 100644 --- a/java/ql/test/library-tests/dataflow/getter/getter.expected +++ b/java/ql/test/library-tests/dataflow/getter/getter.expected @@ -1,5 +1,3 @@ | A.java:5:12:5:15 | this | A.java:5:12:5:19 | this.foo | A.java:2:7:2:9 | foo | -| A.java:21:13:21:13 | a | A.java:21:13:21:22 | getFoo(...) | A.java:2:7:2:9 | foo | -| A.java:23:9:23:9 | a | A.java:23:9:23:19 | aGetter(...) | A.java:2:7:2:9 | foo | | A.java:45:12:45:38 | maybeIdWrap(...) | A.java:45:12:45:42 | maybeIdWrap(...).foo | A.java:2:7:2:9 | foo | | A.java:49:12:49:38 | maybeIdWrap(...) | A.java:49:12:49:42 | maybeIdWrap(...).foo | A.java:2:7:2:9 | foo | diff --git a/java/ql/test/library-tests/dataflow/getter/getter.ql b/java/ql/test/library-tests/dataflow/getter/getter.ql index 8a9a85f7f8b7..899a179714ba 100644 --- a/java/ql/test/library-tests/dataflow/getter/getter.ql +++ b/java/ql/test/library-tests/dataflow/getter/getter.ql @@ -5,9 +5,6 @@ import semmle.code.java.dataflow.internal.DataFlowImplSpecific::Private from Node n1, ContentSet f, Node n2 where - ( - readSet(n1, f, n2) or - getterStep(n1, f, n2) - ) and + readSet(n1, f, n2) and n1.getEnclosingCallable().fromSource() select n1, n2, f diff --git a/java/ql/test/library-tests/dataflow/partial/test.expected b/java/ql/test/library-tests/dataflow/partial/test.expected index ea7da3a96902..6c83f751f8af 100644 --- a/java/ql/test/library-tests/dataflow/partial/test.expected +++ b/java/ql/test/library-tests/dataflow/partial/test.expected @@ -1,4 +1,5 @@ edges +| A.java:12:5:12:5 | b [post update] : Box [elem] | A.java:12:5:12:5 | b [Reverse] : Box [elem] | | A.java:12:5:12:5 | b [post update] : Box [elem] | A.java:13:12:13:12 | b : Box [elem] | | A.java:12:14:12:18 | src(...) : Object | A.java:12:5:12:5 | b [post update] : Box [elem] | | A.java:12:14:12:18 | src(...) : Object | A.java:12:5:12:18 | ...=... : Object | @@ -6,6 +7,7 @@ edges | A.java:17:13:17:16 | f1(...) : Box [elem] | A.java:18:8:18:8 | b : Box [elem] | | A.java:18:8:18:8 | b : Box [elem] | A.java:21:11:21:15 | b : Box [elem] | #select +| 0 | A.java:12:5:12:5 | b [Reverse] : Box [elem] | | 0 | A.java:12:5:12:5 | b [post update] : Box [elem] | | 0 | A.java:12:5:12:18 | ...=... : Object | | 0 | A.java:13:12:13:12 | b : Box [elem] | diff --git a/java/ql/test/library-tests/dataflow/partial/testRev.expected b/java/ql/test/library-tests/dataflow/partial/testRev.expected index 15ce5d56acef..2f7d0eaafa5b 100644 --- a/java/ql/test/library-tests/dataflow/partial/testRev.expected +++ b/java/ql/test/library-tests/dataflow/partial/testRev.expected @@ -1,22 +1,30 @@ edges -| A.java:4:16:4:18 | parameter this [Return] [elem] | A.java:22:17:22:25 | new Box(...) [elem] | -| A.java:4:16:4:18 | this [post update] [elem] | A.java:4:16:4:18 | parameter this [Return] [elem] | +| A.java:4:16:4:18 | parameter this [Reverse] [elem] | A.java:22:17:22:25 | new Box(...) [elem] | +| A.java:4:16:4:18 | this [Reverse] [elem] | A.java:4:16:4:18 | parameter this [Reverse] [elem] | +| A.java:4:16:4:18 | this [Reverse] [elem] | A.java:4:16:4:18 | parameter this [Reverse] [elem] | +| A.java:4:16:4:18 | this [post update] [elem] | A.java:4:16:4:18 | this [Reverse] [elem] | | A.java:5:19:5:22 | elem | A.java:24:10:24:19 | other.elem | | A.java:22:17:22:25 | new Box(...) [elem] | A.java:23:13:23:17 | other [elem] | | A.java:23:13:23:17 | other [elem] | A.java:24:10:24:14 | other [elem] | | A.java:23:13:23:17 | other [post update] [elem] | A.java:24:10:24:14 | other [elem] | | A.java:24:10:24:14 | other [elem] | A.java:24:10:24:19 | other.elem | -| A.java:27:16:27:20 | b [Return] [elem] | A.java:23:13:23:17 | other [post update] [elem] | -| A.java:28:5:28:5 | b [post update] [elem] | A.java:27:16:27:20 | b [Return] [elem] | +| A.java:27:16:27:20 | b [Reverse] [elem] | A.java:23:13:23:17 | other [post update] [elem] | +| A.java:28:5:28:5 | b [Reverse] [elem] | A.java:27:16:27:20 | b [Reverse] [elem] | +| A.java:28:5:28:5 | b [Reverse] [elem] | A.java:27:16:27:20 | b [Reverse] [elem] | +| A.java:28:5:28:5 | b [post update] [elem] | A.java:28:5:28:5 | b [Reverse] [elem] | | A.java:28:14:28:25 | new Object(...) | A.java:28:5:28:5 | b [post update] [elem] | #select | 0 | A.java:22:17:22:25 | new Box(...) [elem] | | 0 | A.java:23:13:23:17 | other [elem] | | 0 | A.java:23:13:23:17 | other [post update] [elem] | | 0 | A.java:24:10:24:14 | other [elem] | -| 1 | A.java:4:16:4:18 | parameter this [Return] [elem] | +| 1 | A.java:4:16:4:18 | parameter this [Reverse] [elem] | +| 1 | A.java:4:16:4:18 | this [Reverse] [elem] | +| 1 | A.java:4:16:4:18 | this [Reverse] [elem] | | 1 | A.java:4:16:4:18 | this [post update] [elem] | | 1 | A.java:5:19:5:22 | elem | -| 1 | A.java:27:16:27:20 | b [Return] [elem] | +| 1 | A.java:27:16:27:20 | b [Reverse] [elem] | +| 1 | A.java:28:5:28:5 | b [Reverse] [elem] | +| 1 | A.java:28:5:28:5 | b [Reverse] [elem] | | 1 | A.java:28:5:28:5 | b [post update] [elem] | | 1 | A.java:28:14:28:25 | new Object(...) | diff --git a/java/ql/test/library-tests/frameworks/apache-collections/test.expected b/java/ql/test/library-tests/frameworks/apache-collections/test.expected index a75de01c6123..17e33880a21b 100644 --- a/java/ql/test/library-tests/frameworks/apache-collections/test.expected +++ b/java/ql/test/library-tests/frameworks/apache-collections/test.expected @@ -9387,10 +9387,10 @@ edges | Test.java:7043:22:7043:26 | key : String | Test.java:7044:10:7044:12 | key : String | provenance | | | Test.java:7043:29:7043:35 | value : Object | Test.java:7044:15:7044:19 | value : Object | provenance | | | Test.java:7043:29:7043:35 | value : String | Test.java:7044:15:7044:19 | value : String | provenance | | -| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | provenance | | -| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : String | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | provenance | | -| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | provenance | | -| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : String | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | provenance | | +| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | provenance | | +| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : String | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | provenance | | +| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | provenance | | +| Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : String | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | provenance | | | Test.java:7044:10:7044:12 | key : Object | Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | provenance | MaD:191 | | Test.java:7044:10:7044:12 | key : String | Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : String | provenance | MaD:191 | | Test.java:7044:15:7044:19 | value : Object | Test.java:7044:4:7044:21 | this [post update] : MyAbstractKeyValue [] : Object | provenance | MaD:192 | @@ -9398,29 +9398,29 @@ edges | Test.java:7047:5:7047:12 | parameter this : MyAbstractKeyValue [] : String | Test.java:7048:11:7048:15 | super : MyAbstractKeyValue [] : String | provenance | | | Test.java:7047:14:7047:24 | key : Object | Test.java:7048:24:7048:26 | key : Object | provenance | | | Test.java:7048:11:7048:15 | super : MyAbstractKeyValue [] : String | Test.java:7048:11:7048:27 | setKey(...) : String | provenance | MaD:194 | -| Test.java:7048:11:7048:15 | super [post update] : MyAbstractKeyValue [] : Object | Test.java:7047:5:7047:12 | parameter this [Return] : MyAbstractKeyValue [] : Object | provenance | | +| Test.java:7048:11:7048:15 | super [post update] : MyAbstractKeyValue [] : Object | Test.java:7047:5:7047:12 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | provenance | | | Test.java:7048:24:7048:26 | key : Object | Test.java:7048:11:7048:15 | super [post update] : MyAbstractKeyValue [] : Object | provenance | MaD:193 | | Test.java:7051:5:7051:14 | parameter this : MyAbstractKeyValue [] : String | Test.java:7052:11:7052:15 | super : MyAbstractKeyValue [] : String | provenance | | | Test.java:7051:16:7051:28 | value : Object | Test.java:7052:26:7052:30 | value : Object | provenance | | | Test.java:7052:11:7052:15 | super : MyAbstractKeyValue [] : String | Test.java:7052:11:7052:31 | setValue(...) : String | provenance | MaD:196 | -| Test.java:7052:11:7052:15 | super [post update] : MyAbstractKeyValue [] : Object | Test.java:7051:5:7051:14 | parameter this [Return] : MyAbstractKeyValue [] : Object | provenance | | +| Test.java:7052:11:7052:15 | super [post update] : MyAbstractKeyValue [] : Object | Test.java:7051:5:7051:14 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | provenance | | | Test.java:7052:26:7052:30 | value : Object | Test.java:7052:11:7052:15 | super [post update] : MyAbstractKeyValue [] : Object | provenance | MaD:195 | | Test.java:7057:22:7057:32 | key : Object | Test.java:7058:10:7058:12 | key : Object | provenance | | | Test.java:7057:22:7057:32 | key : String | Test.java:7058:10:7058:12 | key : String | provenance | | | Test.java:7057:35:7057:47 | value : Object | Test.java:7058:15:7058:19 | value : Object | provenance | | | Test.java:7057:35:7057:47 | value : String | Test.java:7058:15:7058:19 | value : String | provenance | | -| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | provenance | | -| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | provenance | | -| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | provenance | | -| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | provenance | | +| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | provenance | | +| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | provenance | | +| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | provenance | | +| Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | provenance | | | Test.java:7058:10:7058:12 | key : Object | Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | provenance | MaD:197 | | Test.java:7058:10:7058:12 | key : String | Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | provenance | MaD:197 | | Test.java:7058:15:7058:19 | value : Object | Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : Object | provenance | MaD:198 | | Test.java:7058:15:7058:19 | value : String | Test.java:7058:4:7058:21 | this [post update] : MyAbstractMapEntry [] : String | provenance | MaD:198 | | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7068:10:7068:14 | entry : MyAbstractMapEntry [] : String | provenance | | | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7068:10:7068:14 | entry : MyAbstractMapEntry [] : String | provenance | | -| Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | provenance | | -| Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | provenance | | +| Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | provenance | | +| Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | provenance | | | Test.java:7068:10:7068:14 | entry : MyAbstractMapEntry [] : String | Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | provenance | MaD:199 | | Test.java:7068:10:7068:14 | entry : MyAbstractMapEntry [] : String | Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | provenance | MaD:200 | | Test.java:7071:19:7071:31 | parameter this : MyAbstractMapEntryDecorator [] : String | Test.java:7072:11:7072:15 | super : MyAbstractMapEntryDecorator [] : String | provenance | | @@ -9431,37 +9431,37 @@ edges | Test.java:7082:43:7082:58 | this <.method> : MySetView [] : String | Test.java:7082:43:7082:58 | createIterator(...) : Iterator [] : String | provenance | MaD:789 | | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | provenance | | | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | provenance | | -| Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | provenance | | -| Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | provenance | | +| Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | provenance | | +| Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | provenance | | | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | provenance | MaD:54 | | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | provenance | MaD:55 | | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | provenance | | | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | provenance | | -| Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | provenance | | -| Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | provenance | | +| Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | provenance | | +| Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | provenance | | | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | provenance | MaD:273 | | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | provenance | MaD:274 | | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7099:10:7099:12 | map : TreeMap [] : String | provenance | | | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7099:10:7099:12 | map : TreeMap [] : String | provenance | | -| Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | provenance | | -| Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | provenance | | +| Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | provenance | | +| Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | provenance | | | Test.java:7099:10:7099:12 | map : TreeMap [] : String | Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | provenance | MaD:275 | | Test.java:7099:10:7099:12 | map : TreeMap [] : String | Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | provenance | MaD:276 | | Test.java:7104:33:7104:48 | bag : TreeBag [] : String | Test.java:7105:10:7105:12 | bag : TreeBag [] : String | provenance | | -| Test.java:7105:4:7105:14 | this [post update] : MyAbstractBagDecorator [] : String | Test.java:7104:10:7104:31 | parameter this [Return] : MyAbstractBagDecorator [] : String | provenance | | +| Test.java:7105:4:7105:14 | this [post update] : MyAbstractBagDecorator [] : String | Test.java:7104:10:7104:31 | parameter this [Reverse] : MyAbstractBagDecorator [] : String | provenance | | | Test.java:7105:10:7105:12 | bag : TreeBag [] : String | Test.java:7105:4:7105:14 | this [post update] : MyAbstractBagDecorator [] : String | provenance | MaD:26 | | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7111:10:7111:12 | map : Map [] : String | provenance | | -| Test.java:7111:4:7111:14 | this [post update] : MyAbstractMapBag [] : String | Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [] : String | provenance | | +| Test.java:7111:4:7111:14 | this [post update] : MyAbstractMapBag [] : String | Test.java:7110:10:7110:25 | parameter this [Reverse] : MyAbstractMapBag [] : String | provenance | | | Test.java:7111:10:7111:12 | map : Map [] : String | Test.java:7111:4:7111:14 | this [post update] : MyAbstractMapBag [] : String | provenance | MaD:27 | | Test.java:7113:33:7113:40 | parameter this : MyAbstractMapBag [] : String | Test.java:7114:11:7114:15 | super : MyAbstractMapBag [] : String | provenance | | | Test.java:7114:11:7114:15 | super : MyAbstractMapBag [] : String | Test.java:7114:11:7114:24 | getMap(...) : Map [] : String | provenance | MaD:28 | | Test.java:7119:39:7119:60 | bag : TreeBag [] : String | Test.java:7120:10:7120:12 | bag : TreeBag [] : String | provenance | | -| Test.java:7120:4:7120:14 | this [post update] : MyAbstractSortedBagDecorator [] : String | Test.java:7119:10:7119:37 | parameter this [Return] : MyAbstractSortedBagDecorator [] : String | provenance | | +| Test.java:7120:4:7120:14 | this [post update] : MyAbstractSortedBagDecorator [] : String | Test.java:7119:10:7119:37 | parameter this [Reverse] : MyAbstractSortedBagDecorator [] : String | provenance | | | Test.java:7120:10:7120:12 | bag : TreeBag [] : String | Test.java:7120:4:7120:14 | this [post update] : MyAbstractSortedBagDecorator [] : String | provenance | MaD:29 | | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | provenance | | | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | provenance | | -| Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | provenance | | -| Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | provenance | | +| Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | provenance | | +| Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | provenance | | | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | provenance | MaD:44 | | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | provenance | MaD:45 | | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | Test.java:7135:10:7135:18 | normalMap : DualTreeBidiMap [] : String | provenance | | @@ -9470,12 +9470,12 @@ edges | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | Test.java:7135:21:7135:30 | reverseMap : DualTreeBidiMap [] : String | provenance | | | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7135:33:7135:46 | inverseBidiMap : DualTreeBidiMap [] : String | provenance | | | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7135:33:7135:46 | inverseBidiMap : DualTreeBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | -| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | +| Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | provenance | | | Test.java:7135:10:7135:18 | normalMap : DualTreeBidiMap [] : String | Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | provenance | MaD:46 | | Test.java:7135:10:7135:18 | normalMap : DualTreeBidiMap [] : String | Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | provenance | MaD:47 | | Test.java:7135:21:7135:30 | reverseMap : DualTreeBidiMap [] : String | Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | provenance | MaD:48 | @@ -9484,30 +9484,30 @@ edges | Test.java:7135:33:7135:46 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7135:4:7135:48 | this [post update] : MyAbstractDualBidiMap [] : String | provenance | MaD:51 | | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | provenance | | | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | provenance | | -| Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | | -| Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | | +| Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | | +| Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | | | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | MaD:52 | | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | provenance | MaD:53 | | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7150:10:7150:13 | coll : TreeBag [] : String | provenance | | -| Test.java:7150:4:7150:15 | this [post update] : MyAbstractCollectionDecorator [] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | provenance | | +| Test.java:7150:4:7150:15 | this [post update] : MyAbstractCollectionDecorator [] : String | Test.java:7149:10:7149:38 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | provenance | | | Test.java:7150:10:7150:13 | coll : TreeBag [] : String | Test.java:7150:4:7150:15 | this [post update] : MyAbstractCollectionDecorator [] : String | provenance | MaD:76 | | Test.java:7152:24:7152:34 | parameter this : MyAbstractCollectionDecorator [] : String | Test.java:7153:11:7153:15 | super : MyAbstractCollectionDecorator [] : String | provenance | | | Test.java:7153:11:7153:15 | super : MyAbstractCollectionDecorator [] : String | Test.java:7153:11:7153:27 | decorated(...) : Collection [] : String | provenance | MaD:77 | | Test.java:7155:31:7155:54 | coll : TreeBag [] : String | Test.java:7156:24:7156:27 | coll : TreeBag [] : String | provenance | | -| Test.java:7156:4:7156:8 | super [post update] : MyAbstractCollectionDecorator [] : String | Test.java:7155:15:7155:29 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | provenance | | +| Test.java:7156:4:7156:8 | super [post update] : MyAbstractCollectionDecorator [] : String | Test.java:7155:15:7155:29 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | provenance | | | Test.java:7156:24:7156:27 | coll : TreeBag [] : String | Test.java:7156:4:7156:8 | super [post update] : MyAbstractCollectionDecorator [] : String | provenance | MaD:78 | | Test.java:7161:38:7161:63 | iterator : ListIterator [] : String | Test.java:7162:10:7162:17 | iterator : ListIterator [] : String | provenance | | -| Test.java:7162:4:7162:19 | this [post update] : MyAbstractIteratorDecorator [] : String | Test.java:7161:10:7161:36 | parameter this [Return] : MyAbstractIteratorDecorator [] : String | provenance | | +| Test.java:7162:4:7162:19 | this [post update] : MyAbstractIteratorDecorator [] : String | Test.java:7161:10:7161:36 | parameter this [Reverse] : MyAbstractIteratorDecorator [] : String | provenance | | | Test.java:7162:10:7162:17 | iterator : ListIterator [] : String | Test.java:7162:4:7162:19 | this [post update] : MyAbstractIteratorDecorator [] : String | provenance | MaD:116 | | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | Test.java:7168:10:7168:17 | iterator : ListIterator [] : String | provenance | | -| Test.java:7168:4:7168:19 | this [post update] : MyAbstractListIteratorDecorator [] : String | Test.java:7167:10:7167:40 | parameter this [Return] : MyAbstractListIteratorDecorator [] : String | provenance | | +| Test.java:7168:4:7168:19 | this [post update] : MyAbstractListIteratorDecorator [] : String | Test.java:7167:10:7167:40 | parameter this [Reverse] : MyAbstractListIteratorDecorator [] : String | provenance | | | Test.java:7168:10:7168:17 | iterator : ListIterator [] : String | Test.java:7168:4:7168:19 | this [post update] : MyAbstractListIteratorDecorator [] : String | provenance | MaD:117 | | Test.java:7170:26:7170:42 | parameter this : MyAbstractListIteratorDecorator [] : String | Test.java:7171:11:7171:15 | super : MyAbstractListIteratorDecorator [] : String | provenance | | | Test.java:7171:11:7171:15 | super : MyAbstractListIteratorDecorator [] : String | Test.java:7171:11:7171:33 | getListIterator(...) : ListIterator [] : String | provenance | MaD:118 | | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7177:10:7177:17 | iterator : OrderedMapIterator [] : String | provenance | | | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7177:10:7177:17 | iterator : OrderedMapIterator [] : String | provenance | | -| Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | provenance | | -| Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | provenance | | +| Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | provenance | | +| Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | provenance | | | Test.java:7177:10:7177:17 | iterator : OrderedMapIterator [] : String | Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | provenance | MaD:119 | | Test.java:7177:10:7177:17 | iterator : OrderedMapIterator [] : String | Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | provenance | MaD:120 | | Test.java:7179:28:7179:43 | parameter this : MyAbstractMapIteratorDecorator [] : String | Test.java:7180:11:7180:15 | super : MyAbstractMapIteratorDecorator [] : String | provenance | | @@ -9516,8 +9516,8 @@ edges | Test.java:7180:11:7180:15 | super : MyAbstractMapIteratorDecorator [] : String | Test.java:7180:11:7180:32 | getMapIterator(...) : MapIterator [] : String | provenance | MaD:122 | | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7186:10:7186:17 | iterator : OrderedMapIterator [] : String | provenance | | | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7186:10:7186:17 | iterator : OrderedMapIterator [] : String | provenance | | -| Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | | -| Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | | +| Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | | +| Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | | | Test.java:7186:10:7186:17 | iterator : OrderedMapIterator [] : String | Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | MaD:123 | | Test.java:7186:10:7186:17 | iterator : OrderedMapIterator [] : String | Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | MaD:124 | | Test.java:7188:35:7188:57 | parameter this : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7189:11:7189:15 | super : MyAbstractOrderedMapIteratorDecorator [] : String | provenance | | @@ -9525,35 +9525,35 @@ edges | Test.java:7189:11:7189:15 | super : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:125 | | Test.java:7189:11:7189:15 | super : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | provenance | MaD:126 | | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | Test.java:7195:10:7195:17 | iterator : ListIterator [] : String | provenance | | -| Test.java:7195:4:7195:19 | this [post update] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7194:10:7194:43 | parameter this [Return] : MyAbstractUntypedIteratorDecorator [] : String | provenance | | +| Test.java:7195:4:7195:19 | this [post update] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7194:10:7194:43 | parameter this [Reverse] : MyAbstractUntypedIteratorDecorator [] : String | provenance | | | Test.java:7195:10:7195:17 | iterator : ListIterator [] : String | Test.java:7195:4:7195:19 | this [post update] : MyAbstractUntypedIteratorDecorator [] : String | provenance | MaD:127 | | Test.java:7197:22:7197:34 | parameter this : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7198:11:7198:15 | super : MyAbstractUntypedIteratorDecorator [] : String | provenance | | | Test.java:7198:11:7198:15 | super : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7198:11:7198:29 | getIterator(...) : Iterator [] : String | provenance | MaD:128 | | Test.java:7204:31:7204:64 | coll : TreeBag [] : String | Test.java:7205:10:7205:13 | coll : TreeBag [] : String | provenance | | -| Test.java:7205:4:7205:15 | this [post update] : MyAbstractLinkedList [] : String | Test.java:7204:10:7204:29 | parameter this [Return] : MyAbstractLinkedList [] : String | provenance | | +| Test.java:7205:4:7205:15 | this [post update] : MyAbstractLinkedList [] : String | Test.java:7204:10:7204:29 | parameter this [Reverse] : MyAbstractLinkedList [] : String | provenance | | | Test.java:7205:10:7205:13 | coll : TreeBag [] : String | Test.java:7205:4:7205:15 | this [post update] : MyAbstractLinkedList [] : String | provenance | MaD:243 | | Test.java:7210:34:7210:51 | list : List [] : String | Test.java:7211:10:7211:13 | list : List [] : String | provenance | | -| Test.java:7211:4:7211:15 | this [post update] : MyAbstractListDecorator [] : String | Test.java:7210:10:7210:32 | parameter this [Return] : MyAbstractListDecorator [] : String | provenance | | +| Test.java:7211:4:7211:15 | this [post update] : MyAbstractListDecorator [] : String | Test.java:7210:10:7210:32 | parameter this [Reverse] : MyAbstractListDecorator [] : String | provenance | | | Test.java:7211:10:7211:13 | list : List [] : String | Test.java:7211:4:7211:15 | this [post update] : MyAbstractListDecorator [] : String | provenance | MaD:250 | | Test.java:7216:46:7216:63 | list : List [] : String | Test.java:7217:10:7217:13 | list : List [] : String | provenance | | -| Test.java:7217:4:7217:15 | this [post update] : MyAbstractSerializableListDecorator [] : String | Test.java:7216:10:7216:44 | parameter this [Return] : MyAbstractSerializableListDecorator [] : String | provenance | | +| Test.java:7217:4:7217:15 | this [post update] : MyAbstractSerializableListDecorator [] : String | Test.java:7216:10:7216:44 | parameter this [Reverse] : MyAbstractSerializableListDecorator [] : String | provenance | | | Test.java:7217:10:7217:13 | list : List [] : String | Test.java:7217:4:7217:15 | this [post update] : MyAbstractSerializableListDecorator [] : String | provenance | MaD:251 | | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7223:10:7223:12 | map : Map [] : String | provenance | | | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7223:10:7223:12 | map : Map [] : String | provenance | | -| Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | provenance | | -| Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | provenance | | +| Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | provenance | | +| Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | provenance | | | Test.java:7223:10:7223:12 | map : Map [] : String | Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | provenance | MaD:265 | | Test.java:7223:10:7223:12 | map : Map [] : String | Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | provenance | MaD:266 | | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7229:10:7229:12 | map : Map [] : String | provenance | | | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7229:10:7229:12 | map : Map [] : String | provenance | | -| Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | provenance | | -| Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | provenance | | +| Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | provenance | | +| Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | provenance | | | Test.java:7229:10:7229:12 | map : Map [] : String | Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | provenance | MaD:267 | | Test.java:7229:10:7229:12 | map : Map [] : String | Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | provenance | MaD:268 | | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7235:10:7235:12 | map : Map [] : String | provenance | | | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7235:10:7235:12 | map : Map [] : String | provenance | | -| Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | provenance | | -| Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | provenance | | +| Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | provenance | | +| Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | provenance | | | Test.java:7235:10:7235:12 | map : Map [] : String | Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | provenance | MaD:269 | | Test.java:7235:10:7235:12 | map : Map [] : String | Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | provenance | MaD:270 | | Test.java:7237:20:7237:30 | parameter this : MyAbstractMapDecorator [] : String | Test.java:7238:11:7238:15 | super : MyAbstractMapDecorator [] : String | provenance | | @@ -9561,13 +9561,13 @@ edges | Test.java:7238:11:7238:15 | super : MyAbstractMapDecorator [] : String | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | provenance | MaD:271 | | Test.java:7238:11:7238:15 | super : MyAbstractMapDecorator [] : String | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | provenance | MaD:272 | | Test.java:7243:42:7243:66 | set : TreeSet [] : String | Test.java:7244:10:7244:12 | set : TreeSet [] : String | provenance | | -| Test.java:7244:4:7244:14 | this [post update] : MyAbstractNavigableSetDecorator [] : String | Test.java:7243:10:7243:40 | parameter this [Return] : MyAbstractNavigableSetDecorator [] : String | provenance | | +| Test.java:7244:4:7244:14 | this [post update] : MyAbstractNavigableSetDecorator [] : String | Test.java:7243:10:7243:40 | parameter this [Reverse] : MyAbstractNavigableSetDecorator [] : String | provenance | | | Test.java:7244:10:7244:12 | set : TreeSet [] : String | Test.java:7244:4:7244:14 | this [post update] : MyAbstractNavigableSetDecorator [] : String | provenance | MaD:423 | | Test.java:7249:33:7249:48 | set : ListOrderedSet [] : String | Test.java:7250:10:7250:12 | set : ListOrderedSet [] : String | provenance | | -| Test.java:7250:4:7250:14 | this [post update] : MyAbstractSetDecorator [] : String | Test.java:7249:10:7249:31 | parameter this [Return] : MyAbstractSetDecorator [] : String | provenance | | +| Test.java:7250:4:7250:14 | this [post update] : MyAbstractSetDecorator [] : String | Test.java:7249:10:7249:31 | parameter this [Reverse] : MyAbstractSetDecorator [] : String | provenance | | | Test.java:7250:10:7250:12 | set : ListOrderedSet [] : String | Test.java:7250:4:7250:14 | this [post update] : MyAbstractSetDecorator [] : String | provenance | MaD:424 | | Test.java:7255:39:7255:54 | set : ListOrderedSet [] : String | Test.java:7256:10:7256:12 | set : ListOrderedSet [] : String | provenance | | -| Test.java:7256:4:7256:14 | this [post update] : MyAbstractSortedSetDecorator [] : String | Test.java:7255:10:7255:37 | parameter this [Return] : MyAbstractSortedSetDecorator [] : String | provenance | | +| Test.java:7256:4:7256:14 | this [post update] : MyAbstractSortedSetDecorator [] : String | Test.java:7255:10:7255:37 | parameter this [Reverse] : MyAbstractSortedSetDecorator [] : String | provenance | | | Test.java:7256:10:7256:12 | set : ListOrderedSet [] : String | Test.java:7256:4:7256:14 | this [post update] : MyAbstractSortedSetDecorator [] : String | provenance | MaD:425 | nodes | Test.java:228:18:228:29 | map : AbstractMapDecorator [] : Object | semmle.label | map : AbstractMapDecorator [] : Object | @@ -17480,10 +17480,10 @@ nodes | Test.java:7036:44:7036:45 | in : PatriciaTrie [] : String | semmle.label | in : PatriciaTrie [] : String | | Test.java:7037:9:7037:24 | getMapValue(...) | semmle.label | getMapValue(...) | | Test.java:7037:21:7037:23 | out : Trie [] : String | semmle.label | out : Trie [] : String | -| Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : Object | -| Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : String | -| Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : Object | -| Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : String | +| Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : Object | +| Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : String | +| Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : Object | +| Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : String | | Test.java:7043:22:7043:26 | key : Object | semmle.label | key : Object | | Test.java:7043:22:7043:26 | key : String | semmle.label | key : String | | Test.java:7043:29:7043:35 | value : Object | semmle.label | value : Object | @@ -17497,23 +17497,23 @@ nodes | Test.java:7044:15:7044:19 | value : Object | semmle.label | value : Object | | Test.java:7044:15:7044:19 | value : String | semmle.label | value : String | | Test.java:7047:5:7047:12 | parameter this : MyAbstractKeyValue [] : String | semmle.label | parameter this : MyAbstractKeyValue [] : String | -| Test.java:7047:5:7047:12 | parameter this [Return] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : Object | +| Test.java:7047:5:7047:12 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : Object | | Test.java:7047:14:7047:24 | key : Object | semmle.label | key : Object | | Test.java:7048:11:7048:15 | super : MyAbstractKeyValue [] : String | semmle.label | super : MyAbstractKeyValue [] : String | | Test.java:7048:11:7048:15 | super [post update] : MyAbstractKeyValue [] : Object | semmle.label | super [post update] : MyAbstractKeyValue [] : Object | | Test.java:7048:11:7048:27 | setKey(...) : String | semmle.label | setKey(...) : String | | Test.java:7048:24:7048:26 | key : Object | semmle.label | key : Object | | Test.java:7051:5:7051:14 | parameter this : MyAbstractKeyValue [] : String | semmle.label | parameter this : MyAbstractKeyValue [] : String | -| Test.java:7051:5:7051:14 | parameter this [Return] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Return] : MyAbstractKeyValue [] : Object | +| Test.java:7051:5:7051:14 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | semmle.label | parameter this [Reverse] : MyAbstractKeyValue [] : Object | | Test.java:7051:16:7051:28 | value : Object | semmle.label | value : Object | | Test.java:7052:11:7052:15 | super : MyAbstractKeyValue [] : String | semmle.label | super : MyAbstractKeyValue [] : String | | Test.java:7052:11:7052:15 | super [post update] : MyAbstractKeyValue [] : Object | semmle.label | super [post update] : MyAbstractKeyValue [] : Object | | Test.java:7052:11:7052:31 | setValue(...) : String | semmle.label | setValue(...) : String | | Test.java:7052:26:7052:30 | value : Object | semmle.label | value : Object | -| Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | semmle.label | parameter this [Return] : MyAbstractMapEntry [] : Object | -| Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | semmle.label | parameter this [Return] : MyAbstractMapEntry [] : String | -| Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | semmle.label | parameter this [Return] : MyAbstractMapEntry [] : Object | -| Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | semmle.label | parameter this [Return] : MyAbstractMapEntry [] : String | +| Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | semmle.label | parameter this [Reverse] : MyAbstractMapEntry [] : Object | +| Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapEntry [] : String | +| Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | semmle.label | parameter this [Reverse] : MyAbstractMapEntry [] : Object | +| Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapEntry [] : String | | Test.java:7057:22:7057:32 | key : Object | semmle.label | key : Object | | Test.java:7057:22:7057:32 | key : String | semmle.label | key : String | | Test.java:7057:35:7057:47 | value : Object | semmle.label | value : Object | @@ -17526,8 +17526,8 @@ nodes | Test.java:7058:10:7058:12 | key : String | semmle.label | key : String | | Test.java:7058:15:7058:19 | value : Object | semmle.label | value : Object | | Test.java:7058:15:7058:19 | value : String | semmle.label | value : String | -| Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | -| Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | +| Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | +| Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | semmle.label | entry : MyAbstractMapEntry [] : String | | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | semmle.label | entry : MyAbstractMapEntry [] : String | | Test.java:7068:4:7068:16 | this [post update] : MyAbstractMapEntryDecorator [] : String | semmle.label | this [post update] : MyAbstractMapEntryDecorator [] : String | @@ -17543,59 +17543,59 @@ nodes | Test.java:7082:15:7082:30 | parameter this : MySetView [] : String | semmle.label | parameter this : MySetView [] : String | | Test.java:7082:43:7082:58 | createIterator(...) : Iterator [] : String | semmle.label | createIterator(...) : Iterator [] : String | | Test.java:7082:43:7082:58 | this <.method> : MySetView [] : String | semmle.label | this <.method> : MySetView [] : String | -| Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | -| Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | +| Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | +| Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | | Test.java:7087:4:7087:14 | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedBidiMapDecorator [] : String | | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7087:10:7087:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | -| Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | -| Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | +| Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | +| Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | semmle.label | map : ListOrderedMap [] : String | | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | semmle.label | map : ListOrderedMap [] : String | | Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | semmle.label | this [post update] : MyAbstractOrderedMapDecorator [] : String | | Test.java:7093:4:7093:14 | this [post update] : MyAbstractOrderedMapDecorator [] : String | semmle.label | this [post update] : MyAbstractOrderedMapDecorator [] : String | | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | semmle.label | map : ListOrderedMap [] : String | | Test.java:7093:10:7093:12 | map : ListOrderedMap [] : String | semmle.label | map : ListOrderedMap [] : String | -| Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | -| Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | +| Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | +| Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | | Test.java:7098:39:7098:63 | map : TreeMap [] : String | semmle.label | map : TreeMap [] : String | | Test.java:7098:39:7098:63 | map : TreeMap [] : String | semmle.label | map : TreeMap [] : String | | Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedMapDecorator [] : String | | Test.java:7099:4:7099:14 | this [post update] : MyAbstractSortedMapDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedMapDecorator [] : String | | Test.java:7099:10:7099:12 | map : TreeMap [] : String | semmle.label | map : TreeMap [] : String | | Test.java:7099:10:7099:12 | map : TreeMap [] : String | semmle.label | map : TreeMap [] : String | -| Test.java:7104:10:7104:31 | parameter this [Return] : MyAbstractBagDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractBagDecorator [] : String | +| Test.java:7104:10:7104:31 | parameter this [Reverse] : MyAbstractBagDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractBagDecorator [] : String | | Test.java:7104:33:7104:48 | bag : TreeBag [] : String | semmle.label | bag : TreeBag [] : String | | Test.java:7105:4:7105:14 | this [post update] : MyAbstractBagDecorator [] : String | semmle.label | this [post update] : MyAbstractBagDecorator [] : String | | Test.java:7105:10:7105:12 | bag : TreeBag [] : String | semmle.label | bag : TreeBag [] : String | -| Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [] : String | semmle.label | parameter this [Return] : MyAbstractMapBag [] : String | +| Test.java:7110:10:7110:25 | parameter this [Reverse] : MyAbstractMapBag [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapBag [] : String | | Test.java:7110:27:7110:58 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7111:4:7111:14 | this [post update] : MyAbstractMapBag [] : String | semmle.label | this [post update] : MyAbstractMapBag [] : String | | Test.java:7111:10:7111:12 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7113:33:7113:40 | parameter this : MyAbstractMapBag [] : String | semmle.label | parameter this : MyAbstractMapBag [] : String | | Test.java:7114:11:7114:15 | super : MyAbstractMapBag [] : String | semmle.label | super : MyAbstractMapBag [] : String | | Test.java:7114:11:7114:24 | getMap(...) : Map [] : String | semmle.label | getMap(...) : Map [] : String | -| Test.java:7119:10:7119:37 | parameter this [Return] : MyAbstractSortedBagDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedBagDecorator [] : String | +| Test.java:7119:10:7119:37 | parameter this [Reverse] : MyAbstractSortedBagDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedBagDecorator [] : String | | Test.java:7119:39:7119:60 | bag : TreeBag [] : String | semmle.label | bag : TreeBag [] : String | | Test.java:7120:4:7120:14 | this [post update] : MyAbstractSortedBagDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedBagDecorator [] : String | | Test.java:7120:10:7120:12 | bag : TreeBag [] : String | semmle.label | bag : TreeBag [] : String | -| Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | -| Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | +| Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | +| Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractBidiMapDecorator [] : String | | Test.java:7126:4:7126:14 | this [post update] : MyAbstractBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractBidiMapDecorator [] : String | | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7126:10:7126:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | -| Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Return] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | +| Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | semmle.label | normalMap : DualTreeBidiMap [] : String | | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | semmle.label | normalMap : DualTreeBidiMap [] : String | | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | semmle.label | reverseMap : DualTreeBidiMap [] : String | @@ -17614,38 +17614,38 @@ nodes | Test.java:7135:21:7135:30 | reverseMap : DualTreeBidiMap [] : String | semmle.label | reverseMap : DualTreeBidiMap [] : String | | Test.java:7135:33:7135:46 | inverseBidiMap : DualTreeBidiMap [] : String | semmle.label | inverseBidiMap : DualTreeBidiMap [] : String | | Test.java:7135:33:7135:46 | inverseBidiMap : DualTreeBidiMap [] : String | semmle.label | inverseBidiMap : DualTreeBidiMap [] : String | -| Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | -| Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | +| Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | +| Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | | Test.java:7144:4:7144:14 | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | semmle.label | this [post update] : MyAbstractOrderedBidiMapDecorator [] : String | | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | | Test.java:7144:10:7144:12 | map : DualTreeBidiMap [] : String | semmle.label | map : DualTreeBidiMap [] : String | -| Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractCollectionDecorator [] : String | +| Test.java:7149:10:7149:38 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | | Test.java:7150:4:7150:15 | this [post update] : MyAbstractCollectionDecorator [] : String | semmle.label | this [post update] : MyAbstractCollectionDecorator [] : String | | Test.java:7150:10:7150:13 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | | Test.java:7152:24:7152:34 | parameter this : MyAbstractCollectionDecorator [] : String | semmle.label | parameter this : MyAbstractCollectionDecorator [] : String | | Test.java:7153:11:7153:15 | super : MyAbstractCollectionDecorator [] : String | semmle.label | super : MyAbstractCollectionDecorator [] : String | | Test.java:7153:11:7153:27 | decorated(...) : Collection [] : String | semmle.label | decorated(...) : Collection [] : String | -| Test.java:7155:15:7155:29 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractCollectionDecorator [] : String | +| Test.java:7155:15:7155:29 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | | Test.java:7155:31:7155:54 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | | Test.java:7156:4:7156:8 | super [post update] : MyAbstractCollectionDecorator [] : String | semmle.label | super [post update] : MyAbstractCollectionDecorator [] : String | | Test.java:7156:24:7156:27 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | -| Test.java:7161:10:7161:36 | parameter this [Return] : MyAbstractIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractIteratorDecorator [] : String | +| Test.java:7161:10:7161:36 | parameter this [Reverse] : MyAbstractIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractIteratorDecorator [] : String | | Test.java:7161:38:7161:63 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | | Test.java:7162:4:7162:19 | this [post update] : MyAbstractIteratorDecorator [] : String | semmle.label | this [post update] : MyAbstractIteratorDecorator [] : String | | Test.java:7162:10:7162:17 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | -| Test.java:7167:10:7167:40 | parameter this [Return] : MyAbstractListIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractListIteratorDecorator [] : String | +| Test.java:7167:10:7167:40 | parameter this [Reverse] : MyAbstractListIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractListIteratorDecorator [] : String | | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | | Test.java:7168:4:7168:19 | this [post update] : MyAbstractListIteratorDecorator [] : String | semmle.label | this [post update] : MyAbstractListIteratorDecorator [] : String | | Test.java:7168:10:7168:17 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | | Test.java:7170:26:7170:42 | parameter this : MyAbstractListIteratorDecorator [] : String | semmle.label | parameter this : MyAbstractListIteratorDecorator [] : String | | Test.java:7171:11:7171:15 | super : MyAbstractListIteratorDecorator [] : String | semmle.label | super : MyAbstractListIteratorDecorator [] : String | | Test.java:7171:11:7171:33 | getListIterator(...) : ListIterator [] : String | semmle.label | getListIterator(...) : ListIterator [] : String | -| Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | -| Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | +| Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | +| Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | semmle.label | iterator : OrderedMapIterator [] : String | | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | semmle.label | iterator : OrderedMapIterator [] : String | | Test.java:7177:4:7177:19 | this [post update] : MyAbstractMapIteratorDecorator [] : String | semmle.label | this [post update] : MyAbstractMapIteratorDecorator [] : String | @@ -17658,8 +17658,8 @@ nodes | Test.java:7180:11:7180:15 | super : MyAbstractMapIteratorDecorator [] : String | semmle.label | super : MyAbstractMapIteratorDecorator [] : String | | Test.java:7180:11:7180:32 | getMapIterator(...) : MapIterator [] : String | semmle.label | getMapIterator(...) : MapIterator [] : String | | Test.java:7180:11:7180:32 | getMapIterator(...) : MapIterator [] : String | semmle.label | getMapIterator(...) : MapIterator [] : String | -| Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | -| Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | semmle.label | iterator : OrderedMapIterator [] : String | | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | semmle.label | iterator : OrderedMapIterator [] : String | | Test.java:7186:4:7186:19 | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | this [post update] : MyAbstractOrderedMapIteratorDecorator [] : String | @@ -17672,43 +17672,43 @@ nodes | Test.java:7189:11:7189:15 | super : MyAbstractOrderedMapIteratorDecorator [] : String | semmle.label | super : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | semmle.label | getOrderedMapIterator(...) : OrderedMapIterator [] : String | | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | semmle.label | getOrderedMapIterator(...) : OrderedMapIterator [] : String | -| Test.java:7194:10:7194:43 | parameter this [Return] : MyAbstractUntypedIteratorDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractUntypedIteratorDecorator [] : String | +| Test.java:7194:10:7194:43 | parameter this [Reverse] : MyAbstractUntypedIteratorDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | | Test.java:7195:4:7195:19 | this [post update] : MyAbstractUntypedIteratorDecorator [] : String | semmle.label | this [post update] : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:7195:10:7195:17 | iterator : ListIterator [] : String | semmle.label | iterator : ListIterator [] : String | | Test.java:7197:22:7197:34 | parameter this : MyAbstractUntypedIteratorDecorator [] : String | semmle.label | parameter this : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:7198:11:7198:15 | super : MyAbstractUntypedIteratorDecorator [] : String | semmle.label | super : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:7198:11:7198:29 | getIterator(...) : Iterator [] : String | semmle.label | getIterator(...) : Iterator [] : String | -| Test.java:7204:10:7204:29 | parameter this [Return] : MyAbstractLinkedList [] : String | semmle.label | parameter this [Return] : MyAbstractLinkedList [] : String | +| Test.java:7204:10:7204:29 | parameter this [Reverse] : MyAbstractLinkedList [] : String | semmle.label | parameter this [Reverse] : MyAbstractLinkedList [] : String | | Test.java:7204:31:7204:64 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | | Test.java:7205:4:7205:15 | this [post update] : MyAbstractLinkedList [] : String | semmle.label | this [post update] : MyAbstractLinkedList [] : String | | Test.java:7205:10:7205:13 | coll : TreeBag [] : String | semmle.label | coll : TreeBag [] : String | -| Test.java:7210:10:7210:32 | parameter this [Return] : MyAbstractListDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractListDecorator [] : String | +| Test.java:7210:10:7210:32 | parameter this [Reverse] : MyAbstractListDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractListDecorator [] : String | | Test.java:7210:34:7210:51 | list : List [] : String | semmle.label | list : List [] : String | | Test.java:7211:4:7211:15 | this [post update] : MyAbstractListDecorator [] : String | semmle.label | this [post update] : MyAbstractListDecorator [] : String | | Test.java:7211:10:7211:13 | list : List [] : String | semmle.label | list : List [] : String | -| Test.java:7216:10:7216:44 | parameter this [Return] : MyAbstractSerializableListDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSerializableListDecorator [] : String | +| Test.java:7216:10:7216:44 | parameter this [Reverse] : MyAbstractSerializableListDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSerializableListDecorator [] : String | | Test.java:7216:46:7216:63 | list : List [] : String | semmle.label | list : List [] : String | | Test.java:7217:4:7217:15 | this [post update] : MyAbstractSerializableListDecorator [] : String | semmle.label | this [post update] : MyAbstractSerializableListDecorator [] : String | | Test.java:7217:10:7217:13 | list : List [] : String | semmle.label | list : List [] : String | -| Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | semmle.label | parameter this [Return] : MyAbstractHashedMap [] : String | -| Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | semmle.label | parameter this [Return] : MyAbstractHashedMap [] : String | +| Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractHashedMap [] : String | +| Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractHashedMap [] : String | | Test.java:7222:30:7222:68 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7222:30:7222:68 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | semmle.label | this [post update] : MyAbstractHashedMap [] : String | | Test.java:7223:4:7223:14 | this [post update] : MyAbstractHashedMap [] : String | semmle.label | this [post update] : MyAbstractHashedMap [] : String | | Test.java:7223:10:7223:12 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7223:10:7223:12 | map : Map [] : String | semmle.label | map : Map [] : String | -| Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | semmle.label | parameter this [Return] : MyAbstractLinkedMap [] : String | -| Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | semmle.label | parameter this [Return] : MyAbstractLinkedMap [] : String | +| Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractLinkedMap [] : String | +| Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | semmle.label | parameter this [Reverse] : MyAbstractLinkedMap [] : String | | Test.java:7228:30:7228:68 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7228:30:7228:68 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | semmle.label | this [post update] : MyAbstractLinkedMap [] : String | | Test.java:7229:4:7229:14 | this [post update] : MyAbstractLinkedMap [] : String | semmle.label | this [post update] : MyAbstractLinkedMap [] : String | | Test.java:7229:10:7229:12 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7229:10:7229:12 | map : Map [] : String | semmle.label | map : Map [] : String | -| Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapDecorator [] : String | -| Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractMapDecorator [] : String | +| Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapDecorator [] : String | +| Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractMapDecorator [] : String | | Test.java:7234:33:7234:51 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7234:33:7234:51 | map : Map [] : String | semmle.label | map : Map [] : String | | Test.java:7235:4:7235:14 | this [post update] : MyAbstractMapDecorator [] : String | semmle.label | this [post update] : MyAbstractMapDecorator [] : String | @@ -17721,15 +17721,15 @@ nodes | Test.java:7238:11:7238:15 | super : MyAbstractMapDecorator [] : String | semmle.label | super : MyAbstractMapDecorator [] : String | | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | semmle.label | decorated(...) : Map [] : String | | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | semmle.label | decorated(...) : Map [] : String | -| Test.java:7243:10:7243:40 | parameter this [Return] : MyAbstractNavigableSetDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractNavigableSetDecorator [] : String | +| Test.java:7243:10:7243:40 | parameter this [Reverse] : MyAbstractNavigableSetDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractNavigableSetDecorator [] : String | | Test.java:7243:42:7243:66 | set : TreeSet [] : String | semmle.label | set : TreeSet [] : String | | Test.java:7244:4:7244:14 | this [post update] : MyAbstractNavigableSetDecorator [] : String | semmle.label | this [post update] : MyAbstractNavigableSetDecorator [] : String | | Test.java:7244:10:7244:12 | set : TreeSet [] : String | semmle.label | set : TreeSet [] : String | -| Test.java:7249:10:7249:31 | parameter this [Return] : MyAbstractSetDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSetDecorator [] : String | +| Test.java:7249:10:7249:31 | parameter this [Reverse] : MyAbstractSetDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSetDecorator [] : String | | Test.java:7249:33:7249:48 | set : ListOrderedSet [] : String | semmle.label | set : ListOrderedSet [] : String | | Test.java:7250:4:7250:14 | this [post update] : MyAbstractSetDecorator [] : String | semmle.label | this [post update] : MyAbstractSetDecorator [] : String | | Test.java:7250:10:7250:12 | set : ListOrderedSet [] : String | semmle.label | set : ListOrderedSet [] : String | -| Test.java:7255:10:7255:37 | parameter this [Return] : MyAbstractSortedSetDecorator [] : String | semmle.label | parameter this [Return] : MyAbstractSortedSetDecorator [] : String | +| Test.java:7255:10:7255:37 | parameter this [Reverse] : MyAbstractSortedSetDecorator [] : String | semmle.label | parameter this [Reverse] : MyAbstractSortedSetDecorator [] : String | | Test.java:7255:39:7255:54 | set : ListOrderedSet [] : String | semmle.label | set : ListOrderedSet [] : String | | Test.java:7256:4:7256:14 | this [post update] : MyAbstractSortedSetDecorator [] : String | semmle.label | this [post update] : MyAbstractSortedSetDecorator [] : String | | Test.java:7256:10:7256:12 | set : ListOrderedSet [] : String | semmle.label | set : ListOrderedSet [] : String | @@ -17743,21 +17743,21 @@ subpaths | Test.java:259:90:259:96 | element : String | Test.java:269:37:269:45 | element : String | Test.java:269:103:269:103 | v : Vector [] : String | Test.java:259:69:259:97 | newVectorWithElement(...) : Vector [] : String | | Test.java:262:83:262:124 | entrySet(...) : Set [, ] : String | Test.java:230:19:230:32 | it : Set [, ] : String | Test.java:230:44:230:63 | next(...) : Object [] : String | Test.java:262:72:262:125 | getElement(...) : Entry [] : String | | Test.java:262:106:262:112 | element : String | Test.java:263:41:263:49 | element : String | Test.java:263:119:263:119 | h : HashMultiSet [] : String | Test.java:262:83:262:113 | newMultiSetWithElement(...) : HashMultiSet [] : String | -| Test.java:280:102:280:104 | key : String | Test.java:7057:22:7057:32 | key : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | -| Test.java:281:121:281:142 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | +| Test.java:280:102:280:104 | key : String | Test.java:7057:22:7057:32 | key : String | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | +| Test.java:281:121:281:142 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:281:139:281:141 | key : String | Test.java:280:53:280:57 | key : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:281:121:281:142 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | -| Test.java:282:102:282:104 | key : String | Test.java:7043:22:7043:26 | key : String | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | Test.java:282:69:282:110 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | -| Test.java:299:111:299:115 | value : String | Test.java:7043:29:7043:35 | value : String | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : String | Test.java:299:73:299:116 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | -| Test.java:300:111:300:115 | value : String | Test.java:7057:35:7057:47 | value : String | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : String | Test.java:300:73:300:116 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | -| Test.java:301:125:301:150 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:301:83:301:151 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | +| Test.java:282:102:282:104 | key : String | Test.java:7043:22:7043:26 | key : String | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | Test.java:282:69:282:110 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | +| Test.java:299:111:299:115 | value : String | Test.java:7043:29:7043:35 | value : String | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : String | Test.java:299:73:299:116 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | +| Test.java:300:111:300:115 | value : String | Test.java:7057:35:7057:47 | value : String | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : String | Test.java:300:73:300:116 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | +| Test.java:301:125:301:150 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | Test.java:301:83:301:151 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:301:145:301:149 | value : String | Test.java:300:55:300:61 | value : String | Test.java:300:73:300:116 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:301:125:301:150 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | | Test.java:305:116:305:120 | value : String | Test.java:304:49:304:55 | value : String | Test.java:304:127:304:127 | m : TreeMap [] : String | Test.java:305:93:305:121 | newTreeMapWithMapValue(...) : TreeMap [] : String | -| Test.java:319:33:319:34 | in : Object | Test.java:7043:22:7043:26 | key : Object | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | Test.java:319:10:319:41 | new MyAbstractKeyValue<>(...) : MyAbstractKeyValue [] : Object | +| Test.java:319:33:319:34 | in : Object | Test.java:7043:22:7043:26 | key : Object | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | Test.java:319:10:319:41 | new MyAbstractKeyValue<>(...) : MyAbstractKeyValue [] : Object | | Test.java:320:19:320:21 | out : MyAbstractKeyValue [] : Object | Test.java:237:18:237:48 | container : MyAbstractKeyValue [] : Object | Test.java:237:60:237:77 | getKey(...) : Object | Test.java:320:9:320:22 | getMapKey(...) | -| Test.java:326:39:326:40 | in : Object | Test.java:7043:29:7043:35 | value : Object | Test.java:7043:3:7043:20 | parameter this [Return] : MyAbstractKeyValue [] : Object | Test.java:326:10:326:41 | new MyAbstractKeyValue<>(...) : MyAbstractKeyValue [] : Object | +| Test.java:326:39:326:40 | in : Object | Test.java:7043:29:7043:35 | value : Object | Test.java:7043:3:7043:20 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | Test.java:326:10:326:41 | new MyAbstractKeyValue<>(...) : MyAbstractKeyValue [] : Object | | Test.java:327:21:327:23 | out : MyAbstractKeyValue [] : Object | Test.java:243:20:243:50 | container : MyAbstractKeyValue [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:327:9:327:24 | getMapValue(...) | | Test.java:334:19:334:21 | out : DefaultKeyValue [] : Object | Test.java:237:18:237:48 | container : DefaultKeyValue [] : Object | Test.java:237:60:237:77 | getKey(...) : Object | Test.java:334:9:334:22 | getMapKey(...) | -| Test.java:340:17:340:18 | in : Object | Test.java:7047:14:7047:24 | key : Object | Test.java:7047:5:7047:12 | parameter this [Return] : MyAbstractKeyValue [] : Object | Test.java:340:4:340:6 | out [post update] : MyAbstractKeyValue [] : Object | +| Test.java:340:17:340:18 | in : Object | Test.java:7047:14:7047:24 | key : Object | Test.java:7047:5:7047:12 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | Test.java:340:4:340:6 | out [post update] : MyAbstractKeyValue [] : Object | | Test.java:341:19:341:21 | out : MyAbstractKeyValue [] : Object | Test.java:237:18:237:48 | container : MyAbstractKeyValue [] : Object | Test.java:237:60:237:77 | getKey(...) : Object | Test.java:341:9:341:22 | getMapKey(...) | | Test.java:346:42:346:57 | (...)... : String | Test.java:273:49:273:53 | key : String | Test.java:273:65:273:103 | new DefaultKeyValue(...) : DefaultKeyValue [] : String | Test.java:346:25:346:58 | newDKVWithMapKey(...) : DefaultKeyValue [] : String | | Test.java:353:46:353:61 | (...)... : String | Test.java:282:53:282:57 | key : String | Test.java:282:69:282:110 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | Test.java:353:28:353:62 | newMAKVWithMapKey(...) : MyAbstractKeyValue [] : String | @@ -17765,7 +17765,7 @@ subpaths | Test.java:362:21:362:23 | out : UnmodifiableMapEntry [] : Object | Test.java:243:20:243:50 | container : UnmodifiableMapEntry [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:362:9:362:24 | getMapValue(...) | | Test.java:369:21:369:23 | out : DefaultKeyValue [] : Object | Test.java:243:20:243:50 | container : DefaultKeyValue [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:369:9:369:24 | getMapValue(...) | | Test.java:376:21:376:23 | out : AbstractMapEntry [] : Object | Test.java:243:20:243:50 | container : AbstractMapEntry [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:376:9:376:24 | getMapValue(...) | -| Test.java:382:19:382:20 | in : Object | Test.java:7051:16:7051:28 | value : Object | Test.java:7051:5:7051:14 | parameter this [Return] : MyAbstractKeyValue [] : Object | Test.java:382:4:382:6 | out [post update] : MyAbstractKeyValue [] : Object | +| Test.java:382:19:382:20 | in : Object | Test.java:7051:16:7051:28 | value : Object | Test.java:7051:5:7051:14 | parameter this [Reverse] : MyAbstractKeyValue [] : Object | Test.java:382:4:382:6 | out [post update] : MyAbstractKeyValue [] : Object | | Test.java:383:21:383:23 | out : MyAbstractKeyValue [] : Object | Test.java:243:20:243:50 | container : MyAbstractKeyValue [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:383:9:383:24 | getMapValue(...) | | Test.java:388:49:388:64 | (...)... : String | Test.java:308:56:308:62 | value : String | Test.java:308:74:308:119 | new UnmodifiableMapEntry(...) : UnmodifiableMapEntry [] : String | Test.java:388:30:388:65 | newUMEWithMapValue(...) : UnmodifiableMapEntry [] : String | | Test.java:395:44:395:59 | (...)... : String | Test.java:291:51:291:57 | value : String | Test.java:291:69:291:109 | new DefaultKeyValue(...) : DefaultKeyValue [] : String | Test.java:395:25:395:60 | newDKVWithMapValue(...) : DefaultKeyValue [] : String | @@ -17775,15 +17775,15 @@ subpaths | Test.java:417:10:417:11 | in : MyAbstractKeyValue [] : String | Test.java:7051:5:7051:14 | parameter this : MyAbstractKeyValue [] : String | Test.java:7052:11:7052:31 | setValue(...) : String | Test.java:417:10:417:28 | mySetValue(...) : String | | Test.java:423:48:423:63 | (...)... : String | Test.java:299:55:299:61 | value : String | Test.java:299:73:299:116 | new MyAbstractKeyValue(...) : MyAbstractKeyValue [] : String | Test.java:423:28:423:64 | newMAKVWithMapValue(...) : MyAbstractKeyValue [] : String | | Test.java:424:10:424:11 | in : MyAbstractKeyValue [] : String | Test.java:7051:5:7051:14 | parameter this : MyAbstractKeyValue [] : String | Test.java:7052:11:7052:31 | setValue(...) : String | Test.java:424:10:424:36 | mySetValue(...) : String | -| Test.java:431:33:431:34 | in : Object | Test.java:7057:22:7057:32 | key : Object | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | Test.java:431:10:431:41 | new MyAbstractMapEntry<>(...) : MyAbstractMapEntry [] : Object | +| Test.java:431:33:431:34 | in : Object | Test.java:7057:22:7057:32 | key : Object | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | Test.java:431:10:431:41 | new MyAbstractMapEntry<>(...) : MyAbstractMapEntry [] : Object | | Test.java:432:19:432:21 | out : MyAbstractMapEntry [] : Object | Test.java:237:18:237:48 | container : MyAbstractMapEntry [] : Object | Test.java:237:60:237:77 | getKey(...) : Object | Test.java:432:9:432:22 | getMapKey(...) | -| Test.java:438:39:438:40 | in : Object | Test.java:7057:35:7057:47 | value : Object | Test.java:7057:3:7057:20 | parameter this [Return] : MyAbstractMapEntry [] : Object | Test.java:438:10:438:41 | new MyAbstractMapEntry<>(...) : MyAbstractMapEntry [] : Object | +| Test.java:438:39:438:40 | in : Object | Test.java:7057:35:7057:47 | value : Object | Test.java:7057:3:7057:20 | parameter this [Reverse] : MyAbstractMapEntry [] : Object | Test.java:438:10:438:41 | new MyAbstractMapEntry<>(...) : MyAbstractMapEntry [] : Object | | Test.java:439:21:439:23 | out : MyAbstractMapEntry [] : Object | Test.java:243:20:243:50 | container : MyAbstractMapEntry [] : Object | Test.java:243:62:243:81 | getValue(...) : Object | Test.java:439:9:439:24 | getMapValue(...) | | Test.java:444:52:444:67 | (...)... : String | Test.java:280:53:280:57 | key : String | Test.java:280:69:280:110 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:444:34:444:68 | newMAMEWithMapKey(...) : MyAbstractMapEntry [] : String | -| Test.java:445:42:445:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:445:10:445:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | +| Test.java:445:42:445:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | Test.java:445:10:445:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:446:19:446:21 | out : MyAbstractMapEntryDecorator [] : String | Test.java:239:18:239:57 | container : MyAbstractMapEntryDecorator [] : String | Test.java:239:69:239:86 | getKey(...) : String | Test.java:446:9:446:22 | getMapKey(...) | | Test.java:451:54:451:69 | (...)... : String | Test.java:300:55:300:61 | value : String | Test.java:300:73:300:116 | new MyAbstractMapEntry(...) : MyAbstractMapEntry [] : String | Test.java:451:34:451:70 | newMAMEWithMapValue(...) : MyAbstractMapEntry [] : String | -| Test.java:452:42:452:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Return] : MyAbstractMapEntryDecorator [] : String | Test.java:452:10:452:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | +| Test.java:452:42:452:43 | in : MyAbstractMapEntry [] : String | Test.java:7067:31:7067:57 | entry : MyAbstractMapEntry [] : String | Test.java:7067:3:7067:29 | parameter this [Reverse] : MyAbstractMapEntryDecorator [] : String | Test.java:452:10:452:44 | new MyAbstractMapEntryDecorator<>(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:453:21:453:23 | out : MyAbstractMapEntryDecorator [] : String | Test.java:245:20:245:59 | container : MyAbstractMapEntryDecorator [] : String | Test.java:245:71:245:90 | getValue(...) : String | Test.java:453:9:453:24 | getMapValue(...) | | Test.java:458:56:458:71 | (...)... : String | Test.java:281:63:281:67 | key : String | Test.java:281:79:281:143 | new MyAbstractMapEntryDecorator(...) : MyAbstractMapEntryDecorator [] : String | Test.java:458:37:458:72 | newMAMEDWithMapKey(...) : MyAbstractMapEntryDecorator [] : String | | Test.java:459:10:459:11 | in : MyAbstractMapEntryDecorator [] : String | Test.java:7071:19:7071:31 | parameter this : MyAbstractMapEntryDecorator [] : String | Test.java:7072:11:7072:29 | getMapEntry(...) : Entry [] : String | Test.java:459:10:459:27 | myGetMapEntry(...) : Entry [] : String | @@ -18644,15 +18644,15 @@ subpaths | Test.java:3792:42:3792:57 | (...)... : String | Test.java:307:50:307:56 | value : String | Test.java:307:129:307:129 | m : PatriciaTrie [] : String | Test.java:3792:14:3792:58 | newPatriciaTrieWithMapValue(...) : PatriciaTrie [] : String | | Test.java:3794:21:3794:23 | out : Trie [] : String | Test.java:232:20:232:31 | map : Trie [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3794:9:3794:24 | getMapValue(...) | | Test.java:3799:35:3799:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3799:13:3799:51 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3800:37:3800:38 | in : TreeBag [] : String | Test.java:7104:33:7104:48 | bag : TreeBag [] : String | Test.java:7104:10:7104:31 | parameter this [Return] : MyAbstractBagDecorator [] : String | Test.java:3800:10:3800:39 | new MyAbstractBagDecorator<>(...) : MyAbstractBagDecorator [] : String | +| Test.java:3800:37:3800:38 | in : TreeBag [] : String | Test.java:7104:33:7104:48 | bag : TreeBag [] : String | Test.java:7104:10:7104:31 | parameter this [Reverse] : MyAbstractBagDecorator [] : String | Test.java:3800:10:3800:39 | new MyAbstractBagDecorator<>(...) : MyAbstractBagDecorator [] : String | | Test.java:3801:20:3801:22 | out : MyAbstractBagDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractBagDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3801:9:3801:23 | getElement(...) | -| Test.java:3807:31:3807:32 | in : Map [] : String | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [] : String | Test.java:3807:10:3807:33 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [] : String | +| Test.java:3807:31:3807:32 | in : Map [] : String | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7110:10:7110:25 | parameter this [Reverse] : MyAbstractMapBag [] : String | Test.java:3807:10:3807:33 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [] : String | | Test.java:3808:20:3808:22 | out : MyAbstractMapBag [] : String | Test.java:230:19:230:32 | it : MyAbstractMapBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3808:9:3808:23 | getElement(...) | -| Test.java:3813:47:3813:76 | of(...) : Map [] : String | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7110:10:7110:25 | parameter this [Return] : MyAbstractMapBag [] : String | Test.java:3813:26:3813:77 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [] : String | +| Test.java:3813:47:3813:76 | of(...) : Map [] : String | Test.java:7110:27:7110:58 | map : Map [] : String | Test.java:7110:10:7110:25 | parameter this [Reverse] : MyAbstractMapBag [] : String | Test.java:3813:26:3813:77 | new MyAbstractMapBag<>(...) : MyAbstractMapBag [] : String | | Test.java:3814:10:3814:11 | in : MyAbstractMapBag [] : String | Test.java:7113:33:7113:40 | parameter this : MyAbstractMapBag [] : String | Test.java:7114:11:7114:24 | getMap(...) : Map [] : String | Test.java:3814:10:3814:22 | myGetMap(...) : Map [] : String | | Test.java:3815:19:3815:21 | out : Map [] : String | Test.java:228:18:228:29 | map : Map [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3815:9:3815:22 | getMapKey(...) | | Test.java:3820:41:3820:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3820:19:3820:57 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:3821:43:3821:44 | in : TreeBag [] : String | Test.java:7119:39:7119:60 | bag : TreeBag [] : String | Test.java:7119:10:7119:37 | parameter this [Return] : MyAbstractSortedBagDecorator [] : String | Test.java:3821:10:3821:45 | new MyAbstractSortedBagDecorator<>(...) : MyAbstractSortedBagDecorator [] : String | +| Test.java:3821:43:3821:44 | in : TreeBag [] : String | Test.java:7119:39:7119:60 | bag : TreeBag [] : String | Test.java:7119:10:7119:37 | parameter this [Reverse] : MyAbstractSortedBagDecorator [] : String | Test.java:3821:10:3821:45 | new MyAbstractSortedBagDecorator<>(...) : MyAbstractSortedBagDecorator [] : String | | Test.java:3822:20:3822:22 | out : MyAbstractSortedBagDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractSortedBagDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3822:9:3822:23 | getElement(...) | | Test.java:3827:35:3827:50 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3827:13:3827:51 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3829:20:3829:22 | out : CollectionBag [] : String | Test.java:230:19:230:32 | it : CollectionBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3829:9:3829:23 | getElement(...) | @@ -18683,40 +18683,40 @@ subpaths | Test.java:3918:41:3918:56 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:3918:19:3918:57 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:3920:20:3920:22 | out : SortedBag [] : String | Test.java:230:19:230:32 | it : SortedBag [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:3920:9:3920:23 | getElement(...) | | Test.java:3925:46:3925:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3925:17:3925:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3926:41:3926:42 | in : DualTreeBidiMap [] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | Test.java:3926:10:3926:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [] : String | +| Test.java:3926:41:3926:42 | in : DualTreeBidiMap [] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | Test.java:3926:10:3926:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [] : String | | Test.java:3927:19:3927:21 | out : MyAbstractBidiMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractBidiMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3927:9:3927:22 | getMapKey(...) | | Test.java:3932:48:3932:63 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3932:17:3932:64 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:3933:41:3933:42 | in : DualTreeBidiMap [] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7125:10:7125:35 | parameter this [Return] : MyAbstractBidiMapDecorator [] : String | Test.java:3933:10:3933:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [] : String | +| Test.java:3933:41:3933:42 | in : DualTreeBidiMap [] : String | Test.java:7125:37:7125:59 | map : DualTreeBidiMap [] : String | Test.java:7125:10:7125:35 | parameter this [Reverse] : MyAbstractBidiMapDecorator [] : String | Test.java:3933:10:3933:43 | new MyAbstractBidiMapDecorator<>(...) : MyAbstractBidiMapDecorator [] : String | | Test.java:3934:21:3934:23 | out : MyAbstractBidiMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractBidiMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3934:9:3934:24 | getMapValue(...) | | Test.java:3939:46:3939:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3939:17:3939:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3940:36:3940:37 | in : DualTreeBidiMap [] : String | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3940:10:3940:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3940:36:3940:37 | in : DualTreeBidiMap [] : String | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3940:10:3940:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3941:19:3941:21 | out : MyAbstractDualBidiMap [] : String | Test.java:228:18:228:29 | map : MyAbstractDualBidiMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3941:9:3941:22 | getMapKey(...) | | Test.java:3946:46:3946:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3946:17:3946:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3947:42:3947:43 | in : DualTreeBidiMap [] : String | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3947:10:3947:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3947:42:3947:43 | in : DualTreeBidiMap [] : String | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3947:10:3947:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3948:21:3948:23 | out : MyAbstractDualBidiMap [] : String | Test.java:232:20:232:31 | map : MyAbstractDualBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3948:9:3948:24 | getMapValue(...) | | Test.java:3953:46:3953:61 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3953:17:3953:62 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3954:48:3954:49 | in : DualTreeBidiMap [] : String | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3954:10:3954:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3954:48:3954:49 | in : DualTreeBidiMap [] : String | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3954:10:3954:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3955:21:3955:23 | out : MyAbstractDualBidiMap [] : String | Test.java:232:20:232:31 | map : MyAbstractDualBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3955:9:3955:24 | getMapValue(...) | | Test.java:3960:48:3960:63 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3960:17:3960:64 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:3961:36:3961:37 | in : DualTreeBidiMap [] : String | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3961:10:3961:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3961:36:3961:37 | in : DualTreeBidiMap [] : String | Test.java:7134:32:7134:56 | normalMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3961:10:3961:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3962:21:3962:23 | out : MyAbstractDualBidiMap [] : String | Test.java:232:20:232:31 | map : MyAbstractDualBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3962:9:3962:24 | getMapValue(...) | | Test.java:3967:48:3967:63 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3967:17:3967:64 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:3968:42:3968:43 | in : DualTreeBidiMap [] : String | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3968:10:3968:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3968:42:3968:43 | in : DualTreeBidiMap [] : String | Test.java:7134:59:7134:84 | reverseMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3968:10:3968:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3969:19:3969:21 | out : MyAbstractDualBidiMap [] : String | Test.java:228:18:228:29 | map : MyAbstractDualBidiMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3969:9:3969:22 | getMapKey(...) | | Test.java:3974:48:3974:63 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3974:17:3974:64 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:3975:48:3975:49 | in : DualTreeBidiMap [] : String | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Return] : MyAbstractDualBidiMap [] : String | Test.java:3975:10:3975:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | +| Test.java:3975:48:3975:49 | in : DualTreeBidiMap [] : String | Test.java:7134:87:7134:120 | inverseBidiMap : DualTreeBidiMap [] : String | Test.java:7134:10:7134:30 | parameter this [Reverse] : MyAbstractDualBidiMap [] : String | Test.java:3975:10:3975:50 | new MyAbstractDualBidiMap<>(...) : MyAbstractDualBidiMap [] : String | | Test.java:3976:19:3976:21 | out : MyAbstractDualBidiMap [] : String | Test.java:228:18:228:29 | map : MyAbstractDualBidiMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3976:9:3976:22 | getMapKey(...) | | Test.java:3981:53:3981:68 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3981:24:3981:69 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3982:48:3982:49 | in : DualTreeBidiMap [] : String | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:3982:10:3982:50 | new MyAbstractOrderedBidiMapDecorator<>(...) : MyAbstractOrderedBidiMapDecorator [] : String | +| Test.java:3982:48:3982:49 | in : DualTreeBidiMap [] : String | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:3982:10:3982:50 | new MyAbstractOrderedBidiMapDecorator<>(...) : MyAbstractOrderedBidiMapDecorator [] : String | | Test.java:3983:19:3983:21 | out : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3983:9:3983:22 | getMapKey(...) | | Test.java:3988:55:3988:70 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3988:24:3988:71 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:3989:48:3989:49 | in : DualTreeBidiMap [] : String | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7143:10:7143:42 | parameter this [Return] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:3989:10:3989:50 | new MyAbstractOrderedBidiMapDecorator<>(...) : MyAbstractOrderedBidiMapDecorator [] : String | +| Test.java:3989:48:3989:49 | in : DualTreeBidiMap [] : String | Test.java:7143:44:7143:73 | map : DualTreeBidiMap [] : String | Test.java:7143:10:7143:42 | parameter this [Reverse] : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:3989:10:3989:50 | new MyAbstractOrderedBidiMapDecorator<>(...) : MyAbstractOrderedBidiMapDecorator [] : String | | Test.java:3990:21:3990:23 | out : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractOrderedBidiMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:3990:9:3990:24 | getMapValue(...) | | Test.java:3995:52:3995:67 | (...)... : String | Test.java:274:61:274:65 | key : String | Test.java:274:77:274:124 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:3995:23:3995:68 | newDualTreeBidiMapWithMapKey(...) : DualTreeBidiMap [] : String | -| Test.java:3996:47:3996:48 | in : DualTreeBidiMap [] : String | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:3996:10:3996:49 | new MyAbstractSortedBidiMapDecorator<>(...) : MyAbstractSortedBidiMapDecorator [] : String | +| Test.java:3996:47:3996:48 | in : DualTreeBidiMap [] : String | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:3996:10:3996:49 | new MyAbstractSortedBidiMapDecorator<>(...) : MyAbstractSortedBidiMapDecorator [] : String | | Test.java:3997:19:3997:21 | out : MyAbstractSortedBidiMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractSortedBidiMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:3997:9:3997:22 | getMapKey(...) | | Test.java:4002:54:4002:69 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:4002:23:4002:70 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | -| Test.java:4003:47:4003:48 | in : DualTreeBidiMap [] : String | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7086:10:7086:41 | parameter this [Return] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:4003:10:4003:49 | new MyAbstractSortedBidiMapDecorator<>(...) : MyAbstractSortedBidiMapDecorator [] : String | +| Test.java:4003:47:4003:48 | in : DualTreeBidiMap [] : String | Test.java:7086:43:7086:71 | map : DualTreeBidiMap [] : String | Test.java:7086:10:7086:41 | parameter this [Reverse] : MyAbstractSortedBidiMapDecorator [] : String | Test.java:4003:10:4003:49 | new MyAbstractSortedBidiMapDecorator<>(...) : MyAbstractSortedBidiMapDecorator [] : String | | Test.java:4004:21:4004:23 | out : MyAbstractSortedBidiMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractSortedBidiMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:4004:9:4004:24 | getMapValue(...) | | Test.java:4011:19:4011:21 | out : DualHashBidiMap [] : String | Test.java:228:18:228:29 | map : DualHashBidiMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:4011:9:4011:22 | getMapKey(...) | | Test.java:4018:21:4018:23 | out : DualHashBidiMap [] : String | Test.java:232:20:232:31 | map : DualHashBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:4018:9:4018:24 | getMapValue(...) | @@ -18751,14 +18751,14 @@ subpaths | Test.java:4142:54:4142:69 | (...)... : String | Test.java:292:63:292:69 | value : String | Test.java:292:81:292:130 | new DualTreeBidiMap(...) : DualTreeBidiMap [] : String | Test.java:4142:23:4142:70 | newDualTreeBidiMapWithMapValue(...) : DualTreeBidiMap [] : String | | Test.java:4144:21:4144:23 | out : SortedBidiMap [] : String | Test.java:232:20:232:31 | map : SortedBidiMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:4144:9:4144:24 | getMapValue(...) | | Test.java:4149:42:4149:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4149:20:4149:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4150:44:4150:45 | in : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4150:10:4150:46 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | +| Test.java:4150:44:4150:45 | in : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | Test.java:4150:10:4150:46 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | | Test.java:4151:20:4151:22 | out : MyAbstractCollectionDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4151:9:4151:23 | getElement(...) | -| Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4156:39:4156:112 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | +| Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | Test.java:7149:40:7149:63 | coll : TreeBag [] : String | Test.java:7149:10:7149:38 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | Test.java:4156:39:4156:112 | new MyAbstractCollectionDecorator<>(...) : MyAbstractCollectionDecorator [] : String | | Test.java:4156:95:4156:110 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4156:73:4156:111 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4157:10:4157:11 | in : MyAbstractCollectionDecorator [] : String | Test.java:7152:24:7152:34 | parameter this : MyAbstractCollectionDecorator [] : String | Test.java:7153:11:7153:27 | decorated(...) : Collection [] : String | Test.java:4157:10:4157:25 | myDecorated(...) : Collection [] : String | | Test.java:4158:20:4158:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4158:9:4158:23 | getElement(...) | | Test.java:4163:42:4163:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4163:20:4163:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:4164:24:4164:25 | in : TreeBag [] : String | Test.java:7155:31:7155:54 | coll : TreeBag [] : String | Test.java:7155:15:7155:29 | parameter this [Return] : MyAbstractCollectionDecorator [] : String | Test.java:4164:4:4164:6 | out [post update] : MyAbstractCollectionDecorator [] : String | +| Test.java:4164:24:4164:25 | in : TreeBag [] : String | Test.java:7155:31:7155:54 | coll : TreeBag [] : String | Test.java:7155:15:7155:29 | parameter this [Reverse] : MyAbstractCollectionDecorator [] : String | Test.java:4164:4:4164:6 | out [post update] : MyAbstractCollectionDecorator [] : String | | Test.java:4165:20:4165:22 | out : MyAbstractCollectionDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractCollectionDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4165:9:4165:23 | getElement(...) | | Test.java:4173:20:4173:22 | out : CompositeCollection [] : Object | Test.java:230:19:230:32 | it : CompositeCollection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4173:9:4173:23 | getElement(...) | | Test.java:4181:20:4181:34 | getElement(...) : Collection [] : Object | Test.java:230:19:230:32 | it : Collection [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:4181:9:4181:35 | getElement(...) | @@ -18844,47 +18844,47 @@ subpaths | Test.java:4473:42:4473:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:4473:20:4473:58 | newTreeBagWithElement(...) : TreeBag [] : String | | Test.java:4475:20:4475:22 | out : Collection [] : String | Test.java:230:19:230:32 | it : Collection [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:4475:9:4475:23 | getElement(...) | | Test.java:4480:45:4480:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4480:18:4480:61 | newListIteratorWithElement(...) : ListIterator [] : String | -| Test.java:4481:42:4481:43 | in : ListIterator [] : String | Test.java:7161:38:7161:63 | iterator : ListIterator [] : String | Test.java:7161:10:7161:36 | parameter this [Return] : MyAbstractIteratorDecorator [] : String | Test.java:4481:10:4481:44 | new MyAbstractIteratorDecorator<>(...) : MyAbstractIteratorDecorator [] : String | +| Test.java:4481:42:4481:43 | in : ListIterator [] : String | Test.java:7161:38:7161:63 | iterator : ListIterator [] : String | Test.java:7161:10:7161:36 | parameter this [Reverse] : MyAbstractIteratorDecorator [] : String | Test.java:4481:10:4481:44 | new MyAbstractIteratorDecorator<>(...) : MyAbstractIteratorDecorator [] : String | | Test.java:4482:20:4482:22 | out : MyAbstractIteratorDecorator [] : String | Test.java:231:19:231:32 | it : MyAbstractIteratorDecorator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4482:9:4482:23 | getElement(...) | | Test.java:4487:49:4487:64 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4487:22:4487:65 | newListIteratorWithElement(...) : ListIterator [] : String | -| Test.java:4488:46:4488:47 | in : ListIterator [] : String | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | Test.java:7167:10:7167:40 | parameter this [Return] : MyAbstractListIteratorDecorator [] : String | Test.java:4488:10:4488:48 | new MyAbstractListIteratorDecorator<>(...) : MyAbstractListIteratorDecorator [] : String | +| Test.java:4488:46:4488:47 | in : ListIterator [] : String | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | Test.java:7167:10:7167:40 | parameter this [Reverse] : MyAbstractListIteratorDecorator [] : String | Test.java:4488:10:4488:48 | new MyAbstractListIteratorDecorator<>(...) : MyAbstractListIteratorDecorator [] : String | | Test.java:4489:20:4489:22 | out : MyAbstractListIteratorDecorator [] : String | Test.java:231:19:231:32 | it : MyAbstractListIteratorDecorator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4489:9:4489:23 | getElement(...) | -| Test.java:4494:77:4494:120 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | Test.java:7167:10:7167:40 | parameter this [Return] : MyAbstractListIteratorDecorator [] : String | Test.java:4494:41:4494:121 | new MyAbstractListIteratorDecorator<>(...) : MyAbstractListIteratorDecorator [] : String | +| Test.java:4494:77:4494:120 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:7167:42:7167:71 | iterator : ListIterator [] : String | Test.java:7167:10:7167:40 | parameter this [Reverse] : MyAbstractListIteratorDecorator [] : String | Test.java:4494:41:4494:121 | new MyAbstractListIteratorDecorator<>(...) : MyAbstractListIteratorDecorator [] : String | | Test.java:4494:104:4494:119 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4494:77:4494:120 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4495:10:4495:11 | in : MyAbstractListIteratorDecorator [] : String | Test.java:7170:26:7170:42 | parameter this : MyAbstractListIteratorDecorator [] : String | Test.java:7171:11:7171:33 | getListIterator(...) : ListIterator [] : String | Test.java:4495:10:4495:31 | myGetListIterator(...) : ListIterator [] : String | | Test.java:4496:20:4496:22 | out : ListIterator [] : String | Test.java:231:19:231:32 | it : ListIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4496:9:4496:23 | getElement(...) | | Test.java:4501:44:4501:59 | (...)... : String | Test.java:276:49:276:53 | key : String | Test.java:276:65:276:106 | new LinkedMap(...) : LinkedMap [] : String | Test.java:4501:21:4501:60 | newLinkedMapWithMapKey(...) : LinkedMap [] : String | -| Test.java:4502:45:4502:46 | in : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | Test.java:4502:10:4502:47 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | +| Test.java:4502:45:4502:46 | in : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | Test.java:4502:10:4502:47 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | | Test.java:4503:20:4503:22 | out : MyAbstractMapIteratorDecorator [] : String | Test.java:231:19:231:32 | it : MyAbstractMapIteratorDecorator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4503:9:4503:23 | getElement(...) | | Test.java:4508:46:4508:61 | (...)... : String | Test.java:295:51:295:57 | value : String | Test.java:295:69:295:112 | new LinkedMap(...) : LinkedMap [] : String | Test.java:4508:21:4508:62 | newLinkedMapWithMapValue(...) : LinkedMap [] : String | -| Test.java:4509:45:4509:46 | in : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | Test.java:4509:10:4509:47 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | +| Test.java:4509:45:4509:46 | in : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | Test.java:4509:10:4509:47 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | | Test.java:4510:21:4510:23 | out : MyAbstractMapIteratorDecorator [] : String | Test.java:246:20:246:47 | mapIterator : MyAbstractMapIteratorDecorator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:4510:9:4510:24 | getMapValue(...) | -| Test.java:4515:75:4515:128 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | Test.java:4515:40:4515:129 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | +| Test.java:4515:75:4515:128 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | Test.java:4515:40:4515:129 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | | Test.java:4515:98:4515:113 | (...)... : String | Test.java:276:49:276:53 | key : String | Test.java:276:65:276:106 | new LinkedMap(...) : LinkedMap [] : String | Test.java:4515:75:4515:114 | newLinkedMapWithMapKey(...) : LinkedMap [] : String | | Test.java:4516:10:4516:11 | in : MyAbstractMapIteratorDecorator [] : String | Test.java:7179:28:7179:43 | parameter this : MyAbstractMapIteratorDecorator [] : String | Test.java:7180:11:7180:32 | getMapIterator(...) : MapIterator [] : String | Test.java:4516:10:4516:30 | myGetMapIterator(...) : MapIterator [] : String | | Test.java:4517:20:4517:22 | out : MapIterator [] : String | Test.java:231:19:231:32 | it : MapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4517:9:4517:23 | getElement(...) | -| Test.java:4522:75:4522:130 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Return] : MyAbstractMapIteratorDecorator [] : String | Test.java:4522:40:4522:131 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | +| Test.java:4522:75:4522:130 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7176:41:7176:72 | iterator : OrderedMapIterator [] : String | Test.java:7176:10:7176:39 | parameter this [Reverse] : MyAbstractMapIteratorDecorator [] : String | Test.java:4522:40:4522:131 | new MyAbstractMapIteratorDecorator<>(...) : MyAbstractMapIteratorDecorator [] : String | | Test.java:4522:100:4522:115 | (...)... : String | Test.java:295:51:295:57 | value : String | Test.java:295:69:295:112 | new LinkedMap(...) : LinkedMap [] : String | Test.java:4522:75:4522:116 | newLinkedMapWithMapValue(...) : LinkedMap [] : String | | Test.java:4523:10:4523:11 | in : MyAbstractMapIteratorDecorator [] : String | Test.java:7179:28:7179:43 | parameter this : MyAbstractMapIteratorDecorator [] : String | Test.java:7180:11:7180:32 | getMapIterator(...) : MapIterator [] : String | Test.java:4523:10:4523:30 | myGetMapIterator(...) : MapIterator [] : String | | Test.java:4524:21:4524:23 | out : MapIterator [] : String | Test.java:246:20:246:47 | mapIterator : MapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:4524:9:4524:24 | getMapValue(...) | | Test.java:4529:56:4529:71 | (...)... : String | Test.java:277:59:277:63 | key : String | Test.java:277:75:277:132 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:4529:28:4529:72 | newListOrderedMapWithMapKey(...) : ListOrderedMap [] : String | -| Test.java:4530:52:4530:53 | in : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4530:10:4530:54 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:4530:52:4530:53 | in : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4530:10:4530:54 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:4531:20:4531:22 | out : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:231:19:231:32 | it : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4531:9:4531:23 | getElement(...) | | Test.java:4536:58:4536:73 | (...)... : String | Test.java:296:61:296:67 | value : String | Test.java:296:79:296:138 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:4536:28:4536:74 | newListOrderedMapWithMapValue(...) : ListOrderedMap [] : String | -| Test.java:4537:52:4537:53 | in : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4537:10:4537:54 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:4537:52:4537:53 | in : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4537:10:4537:54 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:4538:21:4538:23 | out : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:246:20:246:47 | mapIterator : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:4538:9:4538:24 | getMapValue(...) | -| Test.java:4543:89:4543:147 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4543:47:4543:148 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:4543:89:4543:147 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4543:47:4543:148 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:4543:117:4543:132 | (...)... : String | Test.java:277:59:277:63 | key : String | Test.java:277:75:277:132 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:4543:89:4543:133 | newListOrderedMapWithMapKey(...) : ListOrderedMap [] : String | | Test.java:4544:10:4544:11 | in : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7188:35:7188:57 | parameter this : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | Test.java:4544:10:4544:37 | myGetOrderedMapIterator(...) : OrderedMapIterator [] : String | | Test.java:4545:20:4545:22 | out : OrderedMapIterator [] : String | Test.java:231:19:231:32 | it : OrderedMapIterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4545:9:4545:23 | getElement(...) | -| Test.java:4550:89:4550:149 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Return] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4550:47:4550:150 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | +| Test.java:4550:89:4550:149 | mapIterator(...) : OrderedMapIterator [] : String | Test.java:7185:48:7185:86 | iterator : OrderedMapIterator [] : String | Test.java:7185:10:7185:46 | parameter this [Reverse] : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:4550:47:4550:150 | new MyAbstractOrderedMapIteratorDecorator<>(...) : MyAbstractOrderedMapIteratorDecorator [] : String | | Test.java:4550:119:4550:134 | (...)... : String | Test.java:296:61:296:67 | value : String | Test.java:296:79:296:138 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:4550:89:4550:135 | newListOrderedMapWithMapValue(...) : ListOrderedMap [] : String | | Test.java:4551:10:4551:11 | in : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7188:35:7188:57 | parameter this : MyAbstractOrderedMapIteratorDecorator [] : String | Test.java:7189:11:7189:39 | getOrderedMapIterator(...) : OrderedMapIterator [] : String | Test.java:4551:10:4551:37 | myGetOrderedMapIterator(...) : OrderedMapIterator [] : String | | Test.java:4552:21:4552:23 | out : OrderedMapIterator [] : String | Test.java:246:20:246:47 | mapIterator : OrderedMapIterator [] : String | Test.java:246:59:246:80 | getValue(...) : String | Test.java:4552:9:4552:24 | getMapValue(...) | | Test.java:4557:45:4557:60 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4557:18:4557:61 | newListIteratorWithElement(...) : ListIterator [] : String | -| Test.java:4558:49:4558:50 | in : ListIterator [] : String | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | Test.java:7194:10:7194:43 | parameter this [Return] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:4558:10:4558:51 | new MyAbstractUntypedIteratorDecorator<>(...) : MyAbstractUntypedIteratorDecorator [] : String | +| Test.java:4558:49:4558:50 | in : ListIterator [] : String | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | Test.java:7194:10:7194:43 | parameter this [Reverse] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:4558:10:4558:51 | new MyAbstractUntypedIteratorDecorator<>(...) : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:4559:20:4559:22 | out : MyAbstractUntypedIteratorDecorator [] : String | Test.java:231:19:231:32 | it : MyAbstractUntypedIteratorDecorator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4559:9:4559:23 | getElement(...) | -| Test.java:4564:83:4564:126 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | Test.java:7194:10:7194:43 | parameter this [Return] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:4564:44:4564:127 | new MyAbstractUntypedIteratorDecorator<>(...) : MyAbstractUntypedIteratorDecorator [] : String | +| Test.java:4564:83:4564:126 | newListIteratorWithElement(...) : ListIterator [] : String | Test.java:7194:45:7194:70 | iterator : ListIterator [] : String | Test.java:7194:10:7194:43 | parameter this [Reverse] : MyAbstractUntypedIteratorDecorator [] : String | Test.java:4564:44:4564:127 | new MyAbstractUntypedIteratorDecorator<>(...) : MyAbstractUntypedIteratorDecorator [] : String | | Test.java:4564:110:4564:125 | (...)... : String | Test.java:259:49:259:57 | element : String | Test.java:259:69:259:112 | listIterator(...) : ListIterator [] : String | Test.java:4564:83:4564:126 | newListIteratorWithElement(...) : ListIterator [] : String | | Test.java:4565:10:4565:11 | in : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7197:22:7197:34 | parameter this : MyAbstractUntypedIteratorDecorator [] : String | Test.java:7198:11:7198:29 | getIterator(...) : Iterator [] : String | Test.java:4565:10:4565:27 | myGetIterator(...) : Iterator [] : String | | Test.java:4566:20:4566:22 | out : Iterator [] : String | Test.java:231:19:231:32 | it : Iterator [] : String | Test.java:231:44:231:52 | next(...) : String | Test.java:4566:9:4566:23 | getElement(...) | @@ -19043,7 +19043,7 @@ subpaths | Test.java:5208:41:5208:56 | (...)... : String | Test.java:261:41:261:49 | element : String | Test.java:261:61:261:93 | new MultiKey(...) : MultiKey [] : String | Test.java:5208:18:5208:57 | newMultiKeyWithElement(...) : MultiKey [] : String | | Test.java:5210:25:5210:27 | out : Object[] [[]] : String | Test.java:229:24:229:32 | array : Object[] [[]] : String | Test.java:229:44:229:51 | ...[...] : String | Test.java:5210:9:5210:28 | getArrayElement(...) | | Test.java:5215:42:5215:57 | (...)... : String | Test.java:267:39:267:47 | element : String | Test.java:267:107:267:107 | b : TreeBag [] : String | Test.java:5215:20:5215:58 | newTreeBagWithElement(...) : TreeBag [] : String | -| Test.java:5216:35:5216:36 | in : TreeBag [] : String | Test.java:7204:31:7204:64 | coll : TreeBag [] : String | Test.java:7204:10:7204:29 | parameter this [Return] : MyAbstractLinkedList [] : String | Test.java:5216:10:5216:37 | new MyAbstractLinkedList<>(...) : MyAbstractLinkedList [] : String | +| Test.java:5216:35:5216:36 | in : TreeBag [] : String | Test.java:7204:31:7204:64 | coll : TreeBag [] : String | Test.java:7204:10:7204:29 | parameter this [Reverse] : MyAbstractLinkedList [] : String | Test.java:5216:10:5216:37 | new MyAbstractLinkedList<>(...) : MyAbstractLinkedList [] : String | | Test.java:5217:20:5217:22 | out : MyAbstractLinkedList [] : String | Test.java:230:19:230:32 | it : MyAbstractLinkedList [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5217:9:5217:23 | getElement(...) | | Test.java:5224:20:5224:22 | out : AbstractLinkedList [] : Object | Test.java:230:19:230:32 | it : AbstractLinkedList [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:5224:9:5224:23 | getElement(...) | | Test.java:5231:20:5231:22 | out : AbstractLinkedList [] : Object | Test.java:230:19:230:32 | it : AbstractLinkedList [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:5231:9:5231:23 | getElement(...) | @@ -19051,9 +19051,9 @@ subpaths | Test.java:5243:63:5243:78 | (...)... : String | Test.java:255:65:255:73 | element : String | Test.java:255:159:255:159 | x : CursorableLinkedList [] : String | Test.java:5243:28:5243:79 | newCursorableLinkedListWithElement(...) : CursorableLinkedList [] : String | | Test.java:5250:63:5250:78 | (...)... : String | Test.java:255:65:255:73 | element : String | Test.java:255:159:255:159 | x : CursorableLinkedList [] : String | Test.java:5250:28:5250:79 | newCursorableLinkedListWithElement(...) : CursorableLinkedList [] : String | | Test.java:5257:63:5257:78 | (...)... : String | Test.java:255:65:255:73 | element : String | Test.java:255:159:255:159 | x : CursorableLinkedList [] : String | Test.java:5257:28:5257:79 | newCursorableLinkedListWithElement(...) : CursorableLinkedList [] : String | -| Test.java:5265:38:5265:39 | in : List [] : String | Test.java:7210:34:7210:51 | list : List [] : String | Test.java:7210:10:7210:32 | parameter this [Return] : MyAbstractListDecorator [] : String | Test.java:5265:10:5265:40 | new MyAbstractListDecorator<>(...) : MyAbstractListDecorator [] : String | +| Test.java:5265:38:5265:39 | in : List [] : String | Test.java:7210:34:7210:51 | list : List [] : String | Test.java:7210:10:7210:32 | parameter this [Reverse] : MyAbstractListDecorator [] : String | Test.java:5265:10:5265:40 | new MyAbstractListDecorator<>(...) : MyAbstractListDecorator [] : String | | Test.java:5266:20:5266:22 | out : MyAbstractListDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractListDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5266:9:5266:23 | getElement(...) | -| Test.java:5272:50:5272:51 | in : List [] : String | Test.java:7216:46:7216:63 | list : List [] : String | Test.java:7216:10:7216:44 | parameter this [Return] : MyAbstractSerializableListDecorator [] : String | Test.java:5272:10:5272:52 | new MyAbstractSerializableListDecorator<>(...) : MyAbstractSerializableListDecorator [] : String | +| Test.java:5272:50:5272:51 | in : List [] : String | Test.java:7216:46:7216:63 | list : List [] : String | Test.java:7216:10:7216:44 | parameter this [Reverse] : MyAbstractSerializableListDecorator [] : String | Test.java:5272:10:5272:52 | new MyAbstractSerializableListDecorator<>(...) : MyAbstractSerializableListDecorator [] : String | | Test.java:5273:20:5273:22 | out : MyAbstractSerializableListDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractSerializableListDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5273:9:5273:23 | getElement(...) | | Test.java:5280:20:5280:22 | out : CursorableLinkedList [] : String | Test.java:230:19:230:32 | it : CursorableLinkedList [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5280:9:5280:23 | getElement(...) | | Test.java:5285:65:5285:80 | (...)... : String | Test.java:255:65:255:73 | element : String | Test.java:255:159:255:159 | x : CursorableLinkedList [] : String | Test.java:5285:30:5285:81 | newCursorableLinkedListWithElement(...) : CursorableLinkedList [] : String | @@ -19072,35 +19072,35 @@ subpaths | Test.java:5364:20:5364:22 | out : TreeList [] : String | Test.java:230:19:230:32 | it : TreeList [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5364:9:5364:23 | getElement(...) | | Test.java:5371:20:5371:22 | out : UnmodifiableList [] : String | Test.java:230:19:230:32 | it : UnmodifiableList [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5371:9:5371:23 | getElement(...) | | Test.java:5378:20:5378:22 | out : List [] : String | Test.java:230:19:230:32 | it : List [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:5378:9:5378:23 | getElement(...) | -| Test.java:5384:34:5384:35 | in : Map [] : String | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | Test.java:5384:10:5384:36 | new MyAbstractHashedMap<>(...) : MyAbstractHashedMap [] : String | +| Test.java:5384:34:5384:35 | in : Map [] : String | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | Test.java:5384:10:5384:36 | new MyAbstractHashedMap<>(...) : MyAbstractHashedMap [] : String | | Test.java:5385:19:5385:21 | out : MyAbstractHashedMap [] : String | Test.java:228:18:228:29 | map : MyAbstractHashedMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5385:9:5385:22 | getMapKey(...) | -| Test.java:5391:34:5391:35 | in : Map [] : String | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7222:10:7222:28 | parameter this [Return] : MyAbstractHashedMap [] : String | Test.java:5391:10:5391:36 | new MyAbstractHashedMap<>(...) : MyAbstractHashedMap [] : String | +| Test.java:5391:34:5391:35 | in : Map [] : String | Test.java:7222:30:7222:68 | map : Map [] : String | Test.java:7222:10:7222:28 | parameter this [Reverse] : MyAbstractHashedMap [] : String | Test.java:5391:10:5391:36 | new MyAbstractHashedMap<>(...) : MyAbstractHashedMap [] : String | | Test.java:5392:21:5392:23 | out : MyAbstractHashedMap [] : String | Test.java:232:20:232:31 | map : MyAbstractHashedMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5392:9:5392:24 | getMapValue(...) | -| Test.java:5398:34:5398:35 | in : Map [] : String | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | Test.java:5398:10:5398:36 | new MyAbstractLinkedMap<>(...) : MyAbstractLinkedMap [] : String | +| Test.java:5398:34:5398:35 | in : Map [] : String | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | Test.java:5398:10:5398:36 | new MyAbstractLinkedMap<>(...) : MyAbstractLinkedMap [] : String | | Test.java:5399:19:5399:21 | out : MyAbstractLinkedMap [] : String | Test.java:228:18:228:29 | map : MyAbstractLinkedMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5399:9:5399:22 | getMapKey(...) | -| Test.java:5405:34:5405:35 | in : Map [] : String | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7228:10:7228:28 | parameter this [Return] : MyAbstractLinkedMap [] : String | Test.java:5405:10:5405:36 | new MyAbstractLinkedMap<>(...) : MyAbstractLinkedMap [] : String | +| Test.java:5405:34:5405:35 | in : Map [] : String | Test.java:7228:30:7228:68 | map : Map [] : String | Test.java:7228:10:7228:28 | parameter this [Reverse] : MyAbstractLinkedMap [] : String | Test.java:5405:10:5405:36 | new MyAbstractLinkedMap<>(...) : MyAbstractLinkedMap [] : String | | Test.java:5406:21:5406:23 | out : MyAbstractLinkedMap [] : String | Test.java:232:20:232:31 | map : MyAbstractLinkedMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5406:9:5406:24 | getMapValue(...) | -| Test.java:5412:37:5412:38 | in : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | Test.java:5412:10:5412:39 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | +| Test.java:5412:37:5412:38 | in : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | Test.java:5412:10:5412:39 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | | Test.java:5413:19:5413:21 | out : MyAbstractMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5413:9:5413:22 | getMapKey(...) | -| Test.java:5419:37:5419:38 | in : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | Test.java:5419:10:5419:39 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | +| Test.java:5419:37:5419:38 | in : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | Test.java:5419:10:5419:39 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | | Test.java:5420:21:5420:23 | out : MyAbstractMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5420:9:5420:24 | getMapValue(...) | -| Test.java:5425:59:5425:88 | of(...) : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | Test.java:5425:32:5425:89 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | +| Test.java:5425:59:5425:88 | of(...) : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | Test.java:5425:32:5425:89 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | | Test.java:5426:10:5426:11 | in : MyAbstractMapDecorator [] : String | Test.java:7237:20:7237:30 | parameter this : MyAbstractMapDecorator [] : String | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | Test.java:5426:10:5426:25 | myDecorated(...) : Map [] : String | | Test.java:5427:19:5427:21 | out : Map [] : String | Test.java:228:18:228:29 | map : Map [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5427:9:5427:22 | getMapKey(...) | -| Test.java:5432:59:5432:88 | of(...) : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Return] : MyAbstractMapDecorator [] : String | Test.java:5432:32:5432:89 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | +| Test.java:5432:59:5432:88 | of(...) : Map [] : String | Test.java:7234:33:7234:51 | map : Map [] : String | Test.java:7234:10:7234:31 | parameter this [Reverse] : MyAbstractMapDecorator [] : String | Test.java:5432:32:5432:89 | new MyAbstractMapDecorator<>(...) : MyAbstractMapDecorator [] : String | | Test.java:5433:10:5433:11 | in : MyAbstractMapDecorator [] : String | Test.java:7237:20:7237:30 | parameter this : MyAbstractMapDecorator [] : String | Test.java:7238:11:7238:27 | decorated(...) : Map [] : String | Test.java:5433:10:5433:25 | myDecorated(...) : Map [] : String | | Test.java:5434:21:5434:23 | out : Map [] : String | Test.java:232:20:232:31 | map : Map [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5434:9:5434:24 | getMapValue(...) | | Test.java:5439:48:5439:63 | (...)... : String | Test.java:277:59:277:63 | key : String | Test.java:277:75:277:132 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:5439:20:5439:64 | newListOrderedMapWithMapKey(...) : ListOrderedMap [] : String | -| Test.java:5440:44:5440:45 | in : ListOrderedMap [] : String | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | Test.java:5440:10:5440:46 | new MyAbstractOrderedMapDecorator<>(...) : MyAbstractOrderedMapDecorator [] : String | +| Test.java:5440:44:5440:45 | in : ListOrderedMap [] : String | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | Test.java:5440:10:5440:46 | new MyAbstractOrderedMapDecorator<>(...) : MyAbstractOrderedMapDecorator [] : String | | Test.java:5441:19:5441:21 | out : MyAbstractOrderedMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractOrderedMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5441:9:5441:22 | getMapKey(...) | | Test.java:5446:50:5446:65 | (...)... : String | Test.java:296:61:296:67 | value : String | Test.java:296:79:296:138 | listOrderedMap(...) : ListOrderedMap [] : String | Test.java:5446:20:5446:66 | newListOrderedMapWithMapValue(...) : ListOrderedMap [] : String | -| Test.java:5447:44:5447:45 | in : ListOrderedMap [] : String | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7092:10:7092:38 | parameter this [Return] : MyAbstractOrderedMapDecorator [] : String | Test.java:5447:10:5447:46 | new MyAbstractOrderedMapDecorator<>(...) : MyAbstractOrderedMapDecorator [] : String | +| Test.java:5447:44:5447:45 | in : ListOrderedMap [] : String | Test.java:7092:40:7092:65 | map : ListOrderedMap [] : String | Test.java:7092:10:7092:38 | parameter this [Reverse] : MyAbstractOrderedMapDecorator [] : String | Test.java:5447:10:5447:46 | new MyAbstractOrderedMapDecorator<>(...) : MyAbstractOrderedMapDecorator [] : String | | Test.java:5448:21:5448:23 | out : MyAbstractOrderedMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractOrderedMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5448:9:5448:24 | getMapValue(...) | | Test.java:5453:40:5453:55 | (...)... : String | Test.java:285:47:285:51 | key : String | Test.java:285:121:285:121 | m : TreeMap [] : String | Test.java:5453:19:5453:56 | newTreeMapWithMapKey(...) : TreeMap [] : String | -| Test.java:5454:43:5454:44 | in : TreeMap [] : String | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | Test.java:5454:10:5454:45 | new MyAbstractSortedMapDecorator<>(...) : MyAbstractSortedMapDecorator [] : String | +| Test.java:5454:43:5454:44 | in : TreeMap [] : String | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | Test.java:5454:10:5454:45 | new MyAbstractSortedMapDecorator<>(...) : MyAbstractSortedMapDecorator [] : String | | Test.java:5455:19:5455:21 | out : MyAbstractSortedMapDecorator [] : String | Test.java:228:18:228:29 | map : MyAbstractSortedMapDecorator [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5455:9:5455:22 | getMapKey(...) | | Test.java:5460:42:5460:57 | (...)... : String | Test.java:304:49:304:55 | value : String | Test.java:304:127:304:127 | m : TreeMap [] : String | Test.java:5460:19:5460:58 | newTreeMapWithMapValue(...) : TreeMap [] : String | -| Test.java:5461:43:5461:44 | in : TreeMap [] : String | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7098:10:7098:37 | parameter this [Return] : MyAbstractSortedMapDecorator [] : String | Test.java:5461:10:5461:45 | new MyAbstractSortedMapDecorator<>(...) : MyAbstractSortedMapDecorator [] : String | +| Test.java:5461:43:5461:44 | in : TreeMap [] : String | Test.java:7098:39:7098:63 | map : TreeMap [] : String | Test.java:7098:10:7098:37 | parameter this [Reverse] : MyAbstractSortedMapDecorator [] : String | Test.java:5461:10:5461:45 | new MyAbstractSortedMapDecorator<>(...) : MyAbstractSortedMapDecorator [] : String | | Test.java:5462:21:5462:23 | out : MyAbstractSortedMapDecorator [] : String | Test.java:232:20:232:31 | map : MyAbstractSortedMapDecorator [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5462:9:5462:24 | getMapValue(...) | | Test.java:5469:19:5469:21 | out : CaseInsensitiveMap [] : String | Test.java:228:18:228:29 | map : CaseInsensitiveMap [] : String | Test.java:228:41:228:70 | next(...) : String | Test.java:5469:9:5469:22 | getMapKey(...) | | Test.java:5476:21:5476:23 | out : CaseInsensitiveMap [] : String | Test.java:232:20:232:31 | map : CaseInsensitiveMap [] : String | Test.java:232:43:232:55 | get(...) : String | Test.java:5476:9:5476:24 | getMapValue(...) | @@ -19373,13 +19373,13 @@ subpaths | Test.java:6723:47:6723:62 | (...)... : String | Test.java:253:59:253:67 | element : String | Test.java:253:147:253:147 | x : CircularFifoQueue [] : String | Test.java:6723:15:6723:63 | newCircularFifoQueueWithElement(...) : CircularFifoQueue [] : String | | Test.java:6725:20:6725:22 | out : Queue [] : String | Test.java:230:19:230:32 | it : Queue [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6725:9:6725:23 | getElement(...) | | Test.java:6730:44:6730:59 | (...)... : String | Test.java:268:39:268:47 | element : String | Test.java:268:107:268:107 | h : TreeSet [] : String | Test.java:6730:22:6730:60 | newTreeSetWithElement(...) : TreeSet [] : String | -| Test.java:6731:46:6731:47 | in : TreeSet [] : String | Test.java:7243:42:7243:66 | set : TreeSet [] : String | Test.java:7243:10:7243:40 | parameter this [Return] : MyAbstractNavigableSetDecorator [] : String | Test.java:6731:10:6731:48 | new MyAbstractNavigableSetDecorator<>(...) : MyAbstractNavigableSetDecorator [] : String | +| Test.java:6731:46:6731:47 | in : TreeSet [] : String | Test.java:7243:42:7243:66 | set : TreeSet [] : String | Test.java:7243:10:7243:40 | parameter this [Reverse] : MyAbstractNavigableSetDecorator [] : String | Test.java:6731:10:6731:48 | new MyAbstractNavigableSetDecorator<>(...) : MyAbstractNavigableSetDecorator [] : String | | Test.java:6732:20:6732:22 | out : MyAbstractNavigableSetDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractNavigableSetDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6732:9:6732:23 | getElement(...) | | Test.java:6737:42:6737:57 | (...)... : String | Test.java:260:53:260:61 | element : String | Test.java:260:135:260:135 | x : ListOrderedSet [] : String | Test.java:6737:13:6737:58 | newListOrderedSetWithElement(...) : ListOrderedSet [] : String | -| Test.java:6738:37:6738:38 | in : ListOrderedSet [] : String | Test.java:7249:33:7249:48 | set : ListOrderedSet [] : String | Test.java:7249:10:7249:31 | parameter this [Return] : MyAbstractSetDecorator [] : String | Test.java:6738:10:6738:39 | new MyAbstractSetDecorator<>(...) : MyAbstractSetDecorator [] : String | +| Test.java:6738:37:6738:38 | in : ListOrderedSet [] : String | Test.java:7249:33:7249:48 | set : ListOrderedSet [] : String | Test.java:7249:10:7249:31 | parameter this [Reverse] : MyAbstractSetDecorator [] : String | Test.java:6738:10:6738:39 | new MyAbstractSetDecorator<>(...) : MyAbstractSetDecorator [] : String | | Test.java:6739:20:6739:22 | out : MyAbstractSetDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractSetDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6739:9:6739:23 | getElement(...) | | Test.java:6744:42:6744:57 | (...)... : String | Test.java:260:53:260:61 | element : String | Test.java:260:135:260:135 | x : ListOrderedSet [] : String | Test.java:6744:13:6744:58 | newListOrderedSetWithElement(...) : ListOrderedSet [] : String | -| Test.java:6745:43:6745:44 | in : ListOrderedSet [] : String | Test.java:7255:39:7255:54 | set : ListOrderedSet [] : String | Test.java:7255:10:7255:37 | parameter this [Return] : MyAbstractSortedSetDecorator [] : String | Test.java:6745:10:6745:45 | new MyAbstractSortedSetDecorator<>(...) : MyAbstractSortedSetDecorator [] : String | +| Test.java:6745:43:6745:44 | in : ListOrderedSet [] : String | Test.java:7255:39:7255:54 | set : ListOrderedSet [] : String | Test.java:7255:10:7255:37 | parameter this [Reverse] : MyAbstractSortedSetDecorator [] : String | Test.java:6745:10:6745:45 | new MyAbstractSortedSetDecorator<>(...) : MyAbstractSortedSetDecorator [] : String | | Test.java:6746:20:6746:22 | out : MyAbstractSortedSetDecorator [] : String | Test.java:230:19:230:32 | it : MyAbstractSortedSetDecorator [] : String | Test.java:230:44:230:63 | next(...) : String | Test.java:6746:9:6746:23 | getElement(...) | | Test.java:6754:20:6754:22 | out : CompositeSet [] : Object | Test.java:230:19:230:32 | it : CompositeSet [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6754:9:6754:23 | getElement(...) | | Test.java:6762:20:6762:34 | getElement(...) : Set [] : Object | Test.java:230:19:230:32 | it : Set [] : Object | Test.java:230:44:230:63 | next(...) : Object | Test.java:6762:9:6762:35 | getElement(...) | diff --git a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected index 4ecf1896c571..d2dfd9258397 100644 --- a/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected +++ b/java/ql/test/library-tests/frameworks/apache-commons-lang3/flow.expected @@ -1252,12 +1252,18 @@ edges | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:93 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTest.java:135:14:135:93 | toString(...) | provenance | MaD:119 | | StrBuilderTest.java:135:51:135:57 | taint(...) : String | StrBuilderTest.java:135:14:135:58 | append(...) : StrBuilder | provenance | MaD:40+MaD:51 | -| StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | MaD:51 | +| StrBuilderTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | | +| StrBuilderTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | provenance | MaD:51 | +| StrBuilderTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | ValuePreservingMethod | | StrBuilderTest.java:138:54:138:60 | taint(...) : String | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | provenance | MaD:40 | | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTest.java:139:14:139:42 | toString(...) | provenance | MaD:5 | | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTest.java:139:14:139:42 | toString(...) | provenance | MaD:119 | -| StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | MaD:51 | +| StrBuilderTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | | +| StrBuilderTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | provenance | MaD:51 | +| StrBuilderTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | ValuePreservingMethod | | StrBuilderTest.java:143:55:143:61 | taint(...) : String | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | provenance | MaD:40 | | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTest.java:144:14:144:43 | toString(...) | provenance | MaD:5 | @@ -1641,7 +1647,760 @@ edges | StrBuilderTest.java:148:14:172:34 | setNewLineText(...) : StrBuilder | StrBuilderTest.java:148:14:174:15 | trim(...) | provenance | ValuePreservingMethod | | StrBuilderTest.java:148:14:173:28 | setNullText(...) : StrBuilder | StrBuilderTest.java:148:14:174:15 | trim(...) | provenance | MaD:122 | | StrBuilderTest.java:148:14:173:28 | setNullText(...) : StrBuilder | StrBuilderTest.java:148:14:174:15 | trim(...) | provenance | ValuePreservingMethod | -| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | MaD:122 | +| StrBuilderTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | | +| StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | provenance | MaD:51 | +| StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | provenance | MaD:55 | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | provenance | MaD:57 | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | provenance | MaD:59 | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | provenance | MaD:85 | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | provenance | MaD:60 | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | provenance | MaD:61 | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | provenance | MaD:62 | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | provenance | MaD:66 | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | provenance | MaD:72 | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | provenance | MaD:89 | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | provenance | MaD:90 | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | provenance | MaD:91 | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | provenance | MaD:92 | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | provenance | MaD:93 | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | provenance | MaD:98 | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | provenance | MaD:101 | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | provenance | MaD:105 | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | provenance | MaD:107 | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | provenance | MaD:109 | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | provenance | MaD:110 | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | provenance | MaD:112 | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | provenance | MaD:113 | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | provenance | MaD:114 | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | provenance | MaD:115 | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | provenance | MaD:122 | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | provenance | ValuePreservingMethod | +| StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | ValuePreservingMethod | | StrBuilderTest.java:205:17:205:23 | taint(...) : String | StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | provenance | MaD:40 | | StrBuilderTextTest.java:17:28:17:50 | new StrBuilder(...) : StrBuilder | StrBuilderTextTest.java:17:58:17:62 | cons1 : StrBuilder | provenance | | @@ -1978,11 +2737,15 @@ edges | StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:93 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | StrBuilderTextTest.java:135:14:135:93 | toString(...) | provenance | MaD:503 | | StrBuilderTextTest.java:135:51:135:57 | taint(...) : String | StrBuilderTextTest.java:135:14:135:58 | append(...) : StrBuilder | provenance | MaD:424+MaD:435 | -| StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | MaD:435 | +| StrBuilderTextTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | provenance | | +| StrBuilderTextTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | provenance | MaD:435 | +| StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTextTest.java:138:54:138:60 | taint(...) : String | StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | provenance | MaD:424 | | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTextTest.java:139:14:139:42 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | StrBuilderTextTest.java:139:14:139:42 | toString(...) | provenance | MaD:503 | -| StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | MaD:435 | +| StrBuilderTextTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | provenance | | +| StrBuilderTextTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | provenance | MaD:435 | +| StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTextTest.java:143:55:143:61 | taint(...) : String | StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | provenance | MaD:424 | | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTextTest.java:144:14:144:43 | toString(...) | provenance | MaD:5 | | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | StrBuilderTextTest.java:144:14:144:43 | toString(...) | provenance | MaD:503 | @@ -2014,7 +2777,59 @@ edges | StrBuilderTextTest.java:148:14:171:23 | setLength(...) : StrBuilder | StrBuilderTextTest.java:148:14:172:34 | setNewLineText(...) : StrBuilder | provenance | MaD:498 | | StrBuilderTextTest.java:148:14:172:34 | setNewLineText(...) : StrBuilder | StrBuilderTextTest.java:148:14:173:28 | setNullText(...) : StrBuilder | provenance | MaD:499 | | StrBuilderTextTest.java:148:14:173:28 | setNullText(...) : StrBuilder | StrBuilderTextTest.java:148:14:174:15 | trim(...) | provenance | MaD:506 | -| StrBuilderTextTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTextTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | MaD:506 | +| StrBuilderTextTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | StrBuilderTextTest.java:206:14:206:34 | fluentAllMethodsTest2 | provenance | | +| StrBuilderTextTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | provenance | MaD:435 | +| StrBuilderTextTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | provenance | MaD:439 | +| StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | provenance | MaD:441 | +| StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | provenance | MaD:443 | +| StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | provenance | MaD:469 | +| StrBuilderTextTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | provenance | MaD:444 | +| StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | provenance | MaD:445 | +| StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | provenance | MaD:446 | +| StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | provenance | MaD:450 | +| StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | provenance | MaD:456 | +| StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | provenance | MaD:473 | +| StrBuilderTextTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | provenance | MaD:474 | +| StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | provenance | MaD:475 | +| StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | provenance | MaD:476 | +| StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | provenance | MaD:477 | +| StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | provenance | MaD:482 | +| StrBuilderTextTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | provenance | MaD:485 | +| StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | provenance | MaD:489 | +| StrBuilderTextTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | provenance | MaD:491 | +| StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | provenance | MaD:493 | +| StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | provenance | MaD:494 | +| StrBuilderTextTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | provenance | MaD:496 | +| StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | provenance | MaD:497 | +| StrBuilderTextTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | provenance | MaD:498 | +| StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | provenance | MaD:499 | +| StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | provenance | | +| StrBuilderTextTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | provenance | MaD:506 | +| StrBuilderTextTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | StrBuilderTextTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | provenance | | | StrBuilderTextTest.java:205:17:205:23 | taint(...) : String | StrBuilderTextTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | provenance | MaD:424 | | StrLookupTest.java:12:7:12:9 | map [post update] : HashMap [] : String | StrLookupTest.java:13:54:13:56 | map : HashMap [] : String | provenance | | | StrLookupTest.java:12:22:12:28 | taint(...) : String | StrLookupTest.java:12:7:12:9 | map [post update] : HashMap [] : String | provenance | MaD:18 | @@ -3095,11 +3910,15 @@ edges | TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:93 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | TextStringBuilderTest.java:136:14:136:93 | toString(...) | provenance | MaD:646 | | TextStringBuilderTest.java:136:51:136:57 | taint(...) : String | TextStringBuilderTest.java:136:14:136:58 | append(...) : TextStringBuilder | provenance | MaD:567+MaD:578 | -| TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | provenance | MaD:578 | +| TextStringBuilderTest.java:139:9:139:26 | fluentBackflowTest [post update] : TextStringBuilder | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:139:9:139:45 | append(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:139:9:139:26 | fluentBackflowTest [post update] : TextStringBuilder | provenance | MaD:578 | +| TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:139:9:139:45 | append(...) [Reverse] : TextStringBuilder | provenance | | | TextStringBuilderTest.java:139:54:139:60 | taint(...) : String | TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | provenance | MaD:567 | | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | TextStringBuilderTest.java:140:14:140:42 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | TextStringBuilderTest.java:140:14:140:42 | toString(...) | provenance | MaD:646 | -| TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | provenance | MaD:578 | +| TextStringBuilderTest.java:144:9:144:27 | fluentBackflowTest2 [post update] : TextStringBuilder | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:144:9:144:46 | append(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:144:9:144:27 | fluentBackflowTest2 [post update] : TextStringBuilder | provenance | MaD:578 | +| TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:144:9:144:46 | append(...) [Reverse] : TextStringBuilder | provenance | | | TextStringBuilderTest.java:144:55:144:61 | taint(...) : String | TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | provenance | MaD:567 | | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | TextStringBuilderTest.java:145:14:145:43 | toString(...) | provenance | MaD:5 | | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | TextStringBuilderTest.java:145:14:145:43 | toString(...) | provenance | MaD:646 | @@ -3131,7 +3950,59 @@ edges | TextStringBuilderTest.java:149:14:172:23 | setLength(...) : TextStringBuilder | TextStringBuilderTest.java:149:14:173:34 | setNewLineText(...) : TextStringBuilder | provenance | MaD:641 | | TextStringBuilderTest.java:149:14:173:34 | setNewLineText(...) : TextStringBuilder | TextStringBuilderTest.java:149:14:174:28 | setNullText(...) : TextStringBuilder | provenance | MaD:642 | | TextStringBuilderTest.java:149:14:174:28 | setNullText(...) : TextStringBuilder | TextStringBuilderTest.java:149:14:175:15 | trim(...) | provenance | MaD:649 | -| TextStringBuilderTest.java:179:9:205:15 | trim(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:207:14:207:34 | fluentAllMethodsTest2 | provenance | MaD:649 | +| TextStringBuilderTest.java:179:9:179:29 | fluentAllMethodsTest2 [post update] : TextStringBuilder | TextStringBuilderTest.java:207:14:207:34 | fluentAllMethodsTest2 | provenance | | +| TextStringBuilderTest.java:179:9:180:23 | append(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:179:29 | fluentAllMethodsTest2 [post update] : TextStringBuilder | provenance | MaD:578 | +| TextStringBuilderTest.java:179:9:180:23 | append(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:180:23 | append(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:180:23 | append(...) [post update] : TextStringBuilder | provenance | MaD:582 | +| TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [post update] : TextStringBuilder | provenance | MaD:584 | +| TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [post update] : TextStringBuilder | provenance | MaD:586 | +| TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:184:25 | appendln(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [post update] : TextStringBuilder | provenance | MaD:612 | +| TextStringBuilderTest.java:179:9:184:25 | appendln(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:184:25 | appendln(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:184:25 | appendln(...) [post update] : TextStringBuilder | provenance | MaD:587 | +| TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [post update] : TextStringBuilder | provenance | MaD:588 | +| TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [post update] : TextStringBuilder | provenance | MaD:589 | +| TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [post update] : TextStringBuilder | provenance | MaD:593 | +| TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [post update] : TextStringBuilder | provenance | MaD:599 | +| TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:190:21 | delete(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [post update] : TextStringBuilder | provenance | MaD:616 | +| TextStringBuilderTest.java:179:9:190:21 | delete(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:190:21 | delete(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:190:21 | delete(...) [post update] : TextStringBuilder | provenance | MaD:617 | +| TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [post update] : TextStringBuilder | provenance | MaD:618 | +| TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [post update] : TextStringBuilder | provenance | MaD:619 | +| TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [post update] : TextStringBuilder | provenance | MaD:620 | +| TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:195:30 | insert(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [post update] : TextStringBuilder | provenance | MaD:625 | +| TextStringBuilderTest.java:179:9:195:30 | insert(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:195:30 | insert(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:195:30 | insert(...) [post update] : TextStringBuilder | provenance | MaD:628 | +| TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:197:37 | replace(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [post update] : TextStringBuilder | provenance | MaD:632 | +| TextStringBuilderTest.java:179:9:197:37 | replace(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:197:37 | replace(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:197:37 | replace(...) [post update] : TextStringBuilder | provenance | MaD:634 | +| TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [post update] : TextStringBuilder | provenance | MaD:636 | +| TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:200:18 | reverse(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [post update] : TextStringBuilder | provenance | MaD:637 | +| TextStringBuilderTest.java:179:9:200:18 | reverse(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:200:18 | reverse(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:200:18 | reverse(...) [post update] : TextStringBuilder | provenance | MaD:639 | +| TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:202:23 | setLength(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [post update] : TextStringBuilder | provenance | MaD:640 | +| TextStringBuilderTest.java:179:9:202:23 | setLength(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:202:23 | setLength(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:202:23 | setLength(...) [post update] : TextStringBuilder | provenance | MaD:641 | +| TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [post update] : TextStringBuilder | provenance | MaD:642 | +| TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [Reverse] : TextStringBuilder | provenance | | +| TextStringBuilderTest.java:179:9:205:15 | trim(...) [Reverse] : TextStringBuilder | TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [post update] : TextStringBuilder | provenance | MaD:649 | +| TextStringBuilderTest.java:179:9:205:15 | trim(...) [post update] : TextStringBuilder | TextStringBuilderTest.java:179:9:205:15 | trim(...) [Reverse] : TextStringBuilder | provenance | | | TextStringBuilderTest.java:206:17:206:23 | taint(...) : String | TextStringBuilderTest.java:179:9:205:15 | trim(...) [post update] : TextStringBuilder | provenance | MaD:567 | | ToStringBuilderTest.java:10:58:10:60 | sb1 [post update] : ToStringBuilder | ToStringBuilderTest.java:10:92:10:94 | sb1 : ToStringBuilder | provenance | | | ToStringBuilderTest.java:10:69:10:83 | (...)... : String | ToStringBuilderTest.java:10:58:10:60 | sb1 [post update] : ToStringBuilder | provenance | MaD:19 | @@ -3176,10 +4047,14 @@ edges | ToStringBuilderTest.java:25:14:25:58 | append(...) : ToStringBuilder | ToStringBuilderTest.java:25:14:25:82 | append(...) : ToStringBuilder | provenance | MaD:25 | | ToStringBuilderTest.java:25:14:25:82 | append(...) : ToStringBuilder | ToStringBuilderTest.java:25:14:25:93 | toString(...) | provenance | MaD:30 | | ToStringBuilderTest.java:25:51:25:57 | taint(...) : String | ToStringBuilderTest.java:25:14:25:58 | append(...) : ToStringBuilder | provenance | MaD:19+MaD:25 | -| ToStringBuilderTest.java:28:9:28:45 | append(...) [post update] : ToStringBuilder | ToStringBuilderTest.java:29:14:29:31 | fluentBackflowTest : ToStringBuilder | provenance | MaD:25 | +| ToStringBuilderTest.java:28:9:28:26 | fluentBackflowTest [post update] : ToStringBuilder | ToStringBuilderTest.java:29:14:29:31 | fluentBackflowTest : ToStringBuilder | provenance | | +| ToStringBuilderTest.java:28:9:28:45 | append(...) [Reverse] : ToStringBuilder | ToStringBuilderTest.java:28:9:28:26 | fluentBackflowTest [post update] : ToStringBuilder | provenance | MaD:25 | +| ToStringBuilderTest.java:28:9:28:45 | append(...) [post update] : ToStringBuilder | ToStringBuilderTest.java:28:9:28:45 | append(...) [Reverse] : ToStringBuilder | provenance | | | ToStringBuilderTest.java:28:54:28:60 | taint(...) : String | ToStringBuilderTest.java:28:9:28:45 | append(...) [post update] : ToStringBuilder | provenance | MaD:19 | | ToStringBuilderTest.java:29:14:29:31 | fluentBackflowTest : ToStringBuilder | ToStringBuilderTest.java:29:14:29:42 | toString(...) | provenance | MaD:30 | -| ToStringBuilderTest.java:33:9:33:46 | append(...) [post update] : ToStringBuilder | ToStringBuilderTest.java:34:14:34:32 | fluentBackflowTest2 : ToStringBuilder | provenance | MaD:25 | +| ToStringBuilderTest.java:33:9:33:27 | fluentBackflowTest2 [post update] : ToStringBuilder | ToStringBuilderTest.java:34:14:34:32 | fluentBackflowTest2 : ToStringBuilder | provenance | | +| ToStringBuilderTest.java:33:9:33:46 | append(...) [Reverse] : ToStringBuilder | ToStringBuilderTest.java:33:9:33:27 | fluentBackflowTest2 [post update] : ToStringBuilder | provenance | MaD:25 | +| ToStringBuilderTest.java:33:9:33:46 | append(...) [post update] : ToStringBuilder | ToStringBuilderTest.java:33:9:33:46 | append(...) [Reverse] : ToStringBuilder | provenance | | | ToStringBuilderTest.java:33:55:33:61 | taint(...) : String | ToStringBuilderTest.java:33:9:33:46 | append(...) [post update] : ToStringBuilder | provenance | MaD:19 | | ToStringBuilderTest.java:34:14:34:32 | fluentBackflowTest2 : ToStringBuilder | ToStringBuilderTest.java:34:14:34:43 | toString(...) | provenance | MaD:30 | | TripleTest.java:16:61:16:118 | of(...) : ImmutableTriple [left] : String | TripleTest.java:21:12:21:22 | taintedLeft : ImmutableTriple [left] : String | provenance | | @@ -3976,10 +4851,14 @@ nodes | StrBuilderTest.java:135:14:135:82 | append(...) : StrBuilder | semmle.label | append(...) : StrBuilder | | StrBuilderTest.java:135:14:135:93 | toString(...) | semmle.label | toString(...) | | StrBuilderTest.java:135:51:135:57 | taint(...) : String | semmle.label | taint(...) : String | +| StrBuilderTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | semmle.label | fluentBackflowTest [post update] : StrBuilder | +| StrBuilderTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | | StrBuilderTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | | StrBuilderTest.java:138:54:138:60 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | semmle.label | fluentBackflowTest : StrBuilder | | StrBuilderTest.java:139:14:139:42 | toString(...) | semmle.label | toString(...) | +| StrBuilderTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | semmle.label | fluentBackflowTest2 [post update] : StrBuilder | +| StrBuilderTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | | StrBuilderTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | | StrBuilderTest.java:143:55:143:61 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | semmle.label | fluentBackflowTest2 : StrBuilder | @@ -4013,6 +4892,58 @@ nodes | StrBuilderTest.java:148:14:172:34 | setNewLineText(...) : StrBuilder | semmle.label | setNewLineText(...) : StrBuilder | | StrBuilderTest.java:148:14:173:28 | setNullText(...) : StrBuilder | semmle.label | setNullText(...) : StrBuilder | | StrBuilderTest.java:148:14:174:15 | trim(...) | semmle.label | trim(...) | +| StrBuilderTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | semmle.label | fluentAllMethodsTest2 [post update] : StrBuilder | +| StrBuilderTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | semmle.label | appendAll(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | semmle.label | appendAll(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | semmle.label | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | semmle.label | appendFixedWidthPadLeft(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | semmle.label | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | semmle.label | appendFixedWidthPadRight(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | semmle.label | appendln(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | semmle.label | appendln(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | semmle.label | appendNewLine(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | semmle.label | appendNewLine(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | semmle.label | appendNull(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | semmle.label | appendNull(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | semmle.label | appendPadding(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | semmle.label | appendPadding(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | semmle.label | appendSeparator(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | semmle.label | appendSeparator(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | semmle.label | appendWithSeparators(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | semmle.label | appendWithSeparators(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | semmle.label | delete(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | semmle.label | delete(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | semmle.label | deleteAll(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | semmle.label | deleteAll(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | semmle.label | deleteCharAt(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | semmle.label | deleteCharAt(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | semmle.label | deleteFirst(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | semmle.label | deleteFirst(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | semmle.label | ensureCapacity(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | semmle.label | ensureCapacity(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | semmle.label | insert(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | semmle.label | insert(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | semmle.label | minimizeCapacity(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | semmle.label | minimizeCapacity(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | semmle.label | replace(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | semmle.label | replace(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | semmle.label | replaceAll(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | semmle.label | replaceAll(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | semmle.label | replaceFirst(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | semmle.label | replaceFirst(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | semmle.label | reverse(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | semmle.label | reverse(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | semmle.label | setCharAt(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | semmle.label | setCharAt(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | semmle.label | setLength(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | semmle.label | setLength(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | semmle.label | setNewLineText(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | semmle.label | setNewLineText(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | semmle.label | setNullText(...) [Reverse] : StrBuilder | +| StrBuilderTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | semmle.label | setNullText(...) [post update] : StrBuilder | +| StrBuilderTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | semmle.label | trim(...) [Reverse] : StrBuilder | | StrBuilderTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | semmle.label | trim(...) [post update] : StrBuilder | | StrBuilderTest.java:205:17:205:23 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTest.java:206:14:206:34 | fluentAllMethodsTest2 | semmle.label | fluentAllMethodsTest2 | @@ -4360,10 +5291,14 @@ nodes | StrBuilderTextTest.java:135:14:135:82 | append(...) : StrBuilder | semmle.label | append(...) : StrBuilder | | StrBuilderTextTest.java:135:14:135:93 | toString(...) | semmle.label | toString(...) | | StrBuilderTextTest.java:135:51:135:57 | taint(...) : String | semmle.label | taint(...) : String | +| StrBuilderTextTest.java:138:9:138:26 | fluentBackflowTest [post update] : StrBuilder | semmle.label | fluentBackflowTest [post update] : StrBuilder | +| StrBuilderTextTest.java:138:9:138:45 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | | StrBuilderTextTest.java:138:9:138:45 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | | StrBuilderTextTest.java:138:54:138:60 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTextTest.java:139:14:139:31 | fluentBackflowTest : StrBuilder | semmle.label | fluentBackflowTest : StrBuilder | | StrBuilderTextTest.java:139:14:139:42 | toString(...) | semmle.label | toString(...) | +| StrBuilderTextTest.java:143:9:143:27 | fluentBackflowTest2 [post update] : StrBuilder | semmle.label | fluentBackflowTest2 [post update] : StrBuilder | +| StrBuilderTextTest.java:143:9:143:46 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | | StrBuilderTextTest.java:143:9:143:46 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | | StrBuilderTextTest.java:143:55:143:61 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTextTest.java:144:14:144:32 | fluentBackflowTest2 : StrBuilder | semmle.label | fluentBackflowTest2 : StrBuilder | @@ -4397,6 +5332,58 @@ nodes | StrBuilderTextTest.java:148:14:172:34 | setNewLineText(...) : StrBuilder | semmle.label | setNewLineText(...) : StrBuilder | | StrBuilderTextTest.java:148:14:173:28 | setNullText(...) : StrBuilder | semmle.label | setNullText(...) : StrBuilder | | StrBuilderTextTest.java:148:14:174:15 | trim(...) | semmle.label | trim(...) | +| StrBuilderTextTest.java:178:9:178:29 | fluentAllMethodsTest2 [post update] : StrBuilder | semmle.label | fluentAllMethodsTest2 [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:179:23 | append(...) [Reverse] : StrBuilder | semmle.label | append(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:179:23 | append(...) [post update] : StrBuilder | semmle.label | append(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [Reverse] : StrBuilder | semmle.label | appendAll(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:180:26 | appendAll(...) [post update] : StrBuilder | semmle.label | appendAll(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | semmle.label | appendFixedWidthPadLeft(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:181:48 | appendFixedWidthPadLeft(...) [post update] : StrBuilder | semmle.label | appendFixedWidthPadLeft(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | semmle.label | appendFixedWidthPadRight(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:182:49 | appendFixedWidthPadRight(...) [post update] : StrBuilder | semmle.label | appendFixedWidthPadRight(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:183:25 | appendln(...) [Reverse] : StrBuilder | semmle.label | appendln(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:183:25 | appendln(...) [post update] : StrBuilder | semmle.label | appendln(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [Reverse] : StrBuilder | semmle.label | appendNewLine(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:184:24 | appendNewLine(...) [post update] : StrBuilder | semmle.label | appendNewLine(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [Reverse] : StrBuilder | semmle.label | appendNull(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:185:21 | appendNull(...) [post update] : StrBuilder | semmle.label | appendNull(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [Reverse] : StrBuilder | semmle.label | appendPadding(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:186:30 | appendPadding(...) [post update] : StrBuilder | semmle.label | appendPadding(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [Reverse] : StrBuilder | semmle.label | appendSeparator(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:187:29 | appendSeparator(...) [post update] : StrBuilder | semmle.label | appendSeparator(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [Reverse] : StrBuilder | semmle.label | appendWithSeparators(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:188:52 | appendWithSeparators(...) [post update] : StrBuilder | semmle.label | appendWithSeparators(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:189:21 | delete(...) [Reverse] : StrBuilder | semmle.label | delete(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:189:21 | delete(...) [post update] : StrBuilder | semmle.label | delete(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [Reverse] : StrBuilder | semmle.label | deleteAll(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:190:23 | deleteAll(...) [post update] : StrBuilder | semmle.label | deleteAll(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [Reverse] : StrBuilder | semmle.label | deleteCharAt(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:191:24 | deleteCharAt(...) [post update] : StrBuilder | semmle.label | deleteCharAt(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [Reverse] : StrBuilder | semmle.label | deleteFirst(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:192:29 | deleteFirst(...) [post update] : StrBuilder | semmle.label | deleteFirst(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [Reverse] : StrBuilder | semmle.label | ensureCapacity(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:193:28 | ensureCapacity(...) [post update] : StrBuilder | semmle.label | ensureCapacity(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:194:30 | insert(...) [Reverse] : StrBuilder | semmle.label | insert(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:194:30 | insert(...) [post update] : StrBuilder | semmle.label | insert(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [Reverse] : StrBuilder | semmle.label | minimizeCapacity(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:195:27 | minimizeCapacity(...) [post update] : StrBuilder | semmle.label | minimizeCapacity(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:196:37 | replace(...) [Reverse] : StrBuilder | semmle.label | replace(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:196:37 | replace(...) [post update] : StrBuilder | semmle.label | replace(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [Reverse] : StrBuilder | semmle.label | replaceAll(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:197:38 | replaceAll(...) [post update] : StrBuilder | semmle.label | replaceAll(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [Reverse] : StrBuilder | semmle.label | replaceFirst(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:198:40 | replaceFirst(...) [post update] : StrBuilder | semmle.label | replaceFirst(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:199:18 | reverse(...) [Reverse] : StrBuilder | semmle.label | reverse(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:199:18 | reverse(...) [post update] : StrBuilder | semmle.label | reverse(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [Reverse] : StrBuilder | semmle.label | setCharAt(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:200:26 | setCharAt(...) [post update] : StrBuilder | semmle.label | setCharAt(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:201:23 | setLength(...) [Reverse] : StrBuilder | semmle.label | setLength(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:201:23 | setLength(...) [post update] : StrBuilder | semmle.label | setLength(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [Reverse] : StrBuilder | semmle.label | setNewLineText(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:202:34 | setNewLineText(...) [post update] : StrBuilder | semmle.label | setNewLineText(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [Reverse] : StrBuilder | semmle.label | setNullText(...) [Reverse] : StrBuilder | +| StrBuilderTextTest.java:178:9:203:28 | setNullText(...) [post update] : StrBuilder | semmle.label | setNullText(...) [post update] : StrBuilder | +| StrBuilderTextTest.java:178:9:204:15 | trim(...) [Reverse] : StrBuilder | semmle.label | trim(...) [Reverse] : StrBuilder | | StrBuilderTextTest.java:178:9:204:15 | trim(...) [post update] : StrBuilder | semmle.label | trim(...) [post update] : StrBuilder | | StrBuilderTextTest.java:205:17:205:23 | taint(...) : String | semmle.label | taint(...) : String | | StrBuilderTextTest.java:206:14:206:34 | fluentAllMethodsTest2 | semmle.label | fluentAllMethodsTest2 | @@ -5725,10 +6712,14 @@ nodes | TextStringBuilderTest.java:136:14:136:82 | append(...) : TextStringBuilder | semmle.label | append(...) : TextStringBuilder | | TextStringBuilderTest.java:136:14:136:93 | toString(...) | semmle.label | toString(...) | | TextStringBuilderTest.java:136:51:136:57 | taint(...) : String | semmle.label | taint(...) : String | +| TextStringBuilderTest.java:139:9:139:26 | fluentBackflowTest [post update] : TextStringBuilder | semmle.label | fluentBackflowTest [post update] : TextStringBuilder | +| TextStringBuilderTest.java:139:9:139:45 | append(...) [Reverse] : TextStringBuilder | semmle.label | append(...) [Reverse] : TextStringBuilder | | TextStringBuilderTest.java:139:9:139:45 | append(...) [post update] : TextStringBuilder | semmle.label | append(...) [post update] : TextStringBuilder | | TextStringBuilderTest.java:139:54:139:60 | taint(...) : String | semmle.label | taint(...) : String | | TextStringBuilderTest.java:140:14:140:31 | fluentBackflowTest : TextStringBuilder | semmle.label | fluentBackflowTest : TextStringBuilder | | TextStringBuilderTest.java:140:14:140:42 | toString(...) | semmle.label | toString(...) | +| TextStringBuilderTest.java:144:9:144:27 | fluentBackflowTest2 [post update] : TextStringBuilder | semmle.label | fluentBackflowTest2 [post update] : TextStringBuilder | +| TextStringBuilderTest.java:144:9:144:46 | append(...) [Reverse] : TextStringBuilder | semmle.label | append(...) [Reverse] : TextStringBuilder | | TextStringBuilderTest.java:144:9:144:46 | append(...) [post update] : TextStringBuilder | semmle.label | append(...) [post update] : TextStringBuilder | | TextStringBuilderTest.java:144:55:144:61 | taint(...) : String | semmle.label | taint(...) : String | | TextStringBuilderTest.java:145:14:145:32 | fluentBackflowTest2 : TextStringBuilder | semmle.label | fluentBackflowTest2 : TextStringBuilder | @@ -5762,6 +6753,58 @@ nodes | TextStringBuilderTest.java:149:14:173:34 | setNewLineText(...) : TextStringBuilder | semmle.label | setNewLineText(...) : TextStringBuilder | | TextStringBuilderTest.java:149:14:174:28 | setNullText(...) : TextStringBuilder | semmle.label | setNullText(...) : TextStringBuilder | | TextStringBuilderTest.java:149:14:175:15 | trim(...) | semmle.label | trim(...) | +| TextStringBuilderTest.java:179:9:179:29 | fluentAllMethodsTest2 [post update] : TextStringBuilder | semmle.label | fluentAllMethodsTest2 [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:180:23 | append(...) [Reverse] : TextStringBuilder | semmle.label | append(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:180:23 | append(...) [post update] : TextStringBuilder | semmle.label | append(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [Reverse] : TextStringBuilder | semmle.label | appendAll(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:181:26 | appendAll(...) [post update] : TextStringBuilder | semmle.label | appendAll(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [Reverse] : TextStringBuilder | semmle.label | appendFixedWidthPadLeft(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:182:48 | appendFixedWidthPadLeft(...) [post update] : TextStringBuilder | semmle.label | appendFixedWidthPadLeft(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [Reverse] : TextStringBuilder | semmle.label | appendFixedWidthPadRight(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:183:49 | appendFixedWidthPadRight(...) [post update] : TextStringBuilder | semmle.label | appendFixedWidthPadRight(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:184:25 | appendln(...) [Reverse] : TextStringBuilder | semmle.label | appendln(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:184:25 | appendln(...) [post update] : TextStringBuilder | semmle.label | appendln(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [Reverse] : TextStringBuilder | semmle.label | appendNewLine(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:185:24 | appendNewLine(...) [post update] : TextStringBuilder | semmle.label | appendNewLine(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [Reverse] : TextStringBuilder | semmle.label | appendNull(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:186:21 | appendNull(...) [post update] : TextStringBuilder | semmle.label | appendNull(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [Reverse] : TextStringBuilder | semmle.label | appendPadding(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:187:30 | appendPadding(...) [post update] : TextStringBuilder | semmle.label | appendPadding(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [Reverse] : TextStringBuilder | semmle.label | appendSeparator(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:188:29 | appendSeparator(...) [post update] : TextStringBuilder | semmle.label | appendSeparator(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [Reverse] : TextStringBuilder | semmle.label | appendWithSeparators(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:189:52 | appendWithSeparators(...) [post update] : TextStringBuilder | semmle.label | appendWithSeparators(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:190:21 | delete(...) [Reverse] : TextStringBuilder | semmle.label | delete(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:190:21 | delete(...) [post update] : TextStringBuilder | semmle.label | delete(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [Reverse] : TextStringBuilder | semmle.label | deleteAll(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:191:23 | deleteAll(...) [post update] : TextStringBuilder | semmle.label | deleteAll(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [Reverse] : TextStringBuilder | semmle.label | deleteCharAt(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:192:24 | deleteCharAt(...) [post update] : TextStringBuilder | semmle.label | deleteCharAt(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [Reverse] : TextStringBuilder | semmle.label | deleteFirst(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:193:29 | deleteFirst(...) [post update] : TextStringBuilder | semmle.label | deleteFirst(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [Reverse] : TextStringBuilder | semmle.label | ensureCapacity(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:194:28 | ensureCapacity(...) [post update] : TextStringBuilder | semmle.label | ensureCapacity(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:195:30 | insert(...) [Reverse] : TextStringBuilder | semmle.label | insert(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:195:30 | insert(...) [post update] : TextStringBuilder | semmle.label | insert(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [Reverse] : TextStringBuilder | semmle.label | minimizeCapacity(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:196:27 | minimizeCapacity(...) [post update] : TextStringBuilder | semmle.label | minimizeCapacity(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:197:37 | replace(...) [Reverse] : TextStringBuilder | semmle.label | replace(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:197:37 | replace(...) [post update] : TextStringBuilder | semmle.label | replace(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [Reverse] : TextStringBuilder | semmle.label | replaceAll(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:198:38 | replaceAll(...) [post update] : TextStringBuilder | semmle.label | replaceAll(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [Reverse] : TextStringBuilder | semmle.label | replaceFirst(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:199:40 | replaceFirst(...) [post update] : TextStringBuilder | semmle.label | replaceFirst(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:200:18 | reverse(...) [Reverse] : TextStringBuilder | semmle.label | reverse(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:200:18 | reverse(...) [post update] : TextStringBuilder | semmle.label | reverse(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [Reverse] : TextStringBuilder | semmle.label | setCharAt(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:201:26 | setCharAt(...) [post update] : TextStringBuilder | semmle.label | setCharAt(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:202:23 | setLength(...) [Reverse] : TextStringBuilder | semmle.label | setLength(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:202:23 | setLength(...) [post update] : TextStringBuilder | semmle.label | setLength(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [Reverse] : TextStringBuilder | semmle.label | setNewLineText(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:203:34 | setNewLineText(...) [post update] : TextStringBuilder | semmle.label | setNewLineText(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [Reverse] : TextStringBuilder | semmle.label | setNullText(...) [Reverse] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:204:28 | setNullText(...) [post update] : TextStringBuilder | semmle.label | setNullText(...) [post update] : TextStringBuilder | +| TextStringBuilderTest.java:179:9:205:15 | trim(...) [Reverse] : TextStringBuilder | semmle.label | trim(...) [Reverse] : TextStringBuilder | | TextStringBuilderTest.java:179:9:205:15 | trim(...) [post update] : TextStringBuilder | semmle.label | trim(...) [post update] : TextStringBuilder | | TextStringBuilderTest.java:206:17:206:23 | taint(...) : String | semmle.label | taint(...) : String | | TextStringBuilderTest.java:207:14:207:34 | fluentAllMethodsTest2 | semmle.label | fluentAllMethodsTest2 | @@ -5819,10 +6862,14 @@ nodes | ToStringBuilderTest.java:25:14:25:82 | append(...) : ToStringBuilder | semmle.label | append(...) : ToStringBuilder | | ToStringBuilderTest.java:25:14:25:93 | toString(...) | semmle.label | toString(...) | | ToStringBuilderTest.java:25:51:25:57 | taint(...) : String | semmle.label | taint(...) : String | +| ToStringBuilderTest.java:28:9:28:26 | fluentBackflowTest [post update] : ToStringBuilder | semmle.label | fluentBackflowTest [post update] : ToStringBuilder | +| ToStringBuilderTest.java:28:9:28:45 | append(...) [Reverse] : ToStringBuilder | semmle.label | append(...) [Reverse] : ToStringBuilder | | ToStringBuilderTest.java:28:9:28:45 | append(...) [post update] : ToStringBuilder | semmle.label | append(...) [post update] : ToStringBuilder | | ToStringBuilderTest.java:28:54:28:60 | taint(...) : String | semmle.label | taint(...) : String | | ToStringBuilderTest.java:29:14:29:31 | fluentBackflowTest : ToStringBuilder | semmle.label | fluentBackflowTest : ToStringBuilder | | ToStringBuilderTest.java:29:14:29:42 | toString(...) | semmle.label | toString(...) | +| ToStringBuilderTest.java:33:9:33:27 | fluentBackflowTest2 [post update] : ToStringBuilder | semmle.label | fluentBackflowTest2 [post update] : ToStringBuilder | +| ToStringBuilderTest.java:33:9:33:46 | append(...) [Reverse] : ToStringBuilder | semmle.label | append(...) [Reverse] : ToStringBuilder | | ToStringBuilderTest.java:33:9:33:46 | append(...) [post update] : ToStringBuilder | semmle.label | append(...) [post update] : ToStringBuilder | | ToStringBuilderTest.java:33:55:33:61 | taint(...) : String | semmle.label | taint(...) : String | | ToStringBuilderTest.java:34:14:34:32 | fluentBackflowTest2 : ToStringBuilder | semmle.label | fluentBackflowTest2 : ToStringBuilder | diff --git a/java/ql/test/library-tests/frameworks/spring/cache/test.expected b/java/ql/test/library-tests/frameworks/spring/cache/test.expected index b2624ed1822f..7340cbee0b73 100644 --- a/java/ql/test/library-tests/frameworks/spring/cache/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/cache/test.expected @@ -19,7 +19,7 @@ models | 18 | Summary: org.springframework.cache; Cache; true; putIfAbsent; ; ; Argument[this].MapValue; ReturnValue.MapValue; value; manual | edges | Test.java:13:16:13:29 | element : Object | Test.java:15:19:15:25 | element : Object | provenance | | -| Test.java:15:4:15:7 | this [post update] : ValueWrapper [] : Object | Test.java:13:3:13:14 | parameter this [Return] : ValueWrapper [] : Object | provenance | | +| Test.java:15:4:15:7 | this [post update] : ValueWrapper [] : Object | Test.java:13:3:13:14 | parameter this [Reverse] : ValueWrapper [] : Object | provenance | | | Test.java:15:19:15:25 | element : Object | Test.java:15:4:15:7 | this [post update] : ValueWrapper [] : Object | provenance | MaD:5 | | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:35 | this : ValueWrapper [] : Object | provenance | | | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:35 | this : ValueWrapper [] : Object | provenance | | @@ -27,8 +27,8 @@ edges | Test.java:18:32:18:35 | this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | provenance | MaD:3 | | Test.java:22:14:22:23 | key : Object | Test.java:23:13:23:15 | key : Object | provenance | | | Test.java:22:26:22:37 | value : Object | Test.java:23:18:23:22 | value : Object | provenance | | -| Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | provenance | | -| Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | provenance | | +| Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | provenance | | +| Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | provenance | | | Test.java:23:13:23:15 | key : Object | Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | provenance | MaD:14 | | Test.java:23:18:23:22 | value : Object | Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | provenance | MaD:15 | | Test.java:39:19:39:57 | container : ValueRetrievalException [] : Object | Test.java:39:69:39:77 | container : ValueRetrievalException [] : Object | provenance | | @@ -122,7 +122,7 @@ edges | Test.java:137:21:137:23 | out : ValueWrapper [] : Object | Test.java:137:9:137:24 | getMapValue(...) | provenance | MaD:3 | | Test.java:137:21:137:23 | out : ValueWrapper [] : Object | Test.java:137:9:137:24 | getMapValue(...) | provenance | MaD:8 | nodes -| Test.java:13:3:13:14 | parameter this [Return] : ValueWrapper [] : Object | semmle.label | parameter this [Return] : ValueWrapper [] : Object | +| Test.java:13:3:13:14 | parameter this [Reverse] : ValueWrapper [] : Object | semmle.label | parameter this [Reverse] : ValueWrapper [] : Object | | Test.java:13:16:13:29 | element : Object | semmle.label | element : Object | | Test.java:15:4:15:7 | this [post update] : ValueWrapper [] : Object | semmle.label | this [post update] : ValueWrapper [] : Object | | Test.java:15:19:15:25 | element : Object | semmle.label | element : Object | @@ -132,8 +132,8 @@ nodes | Test.java:18:32:18:35 | this : ValueWrapper [] : Object | semmle.label | this : ValueWrapper [] : Object | | Test.java:18:32:18:45 | get(...) : Object | semmle.label | get(...) : Object | | Test.java:18:32:18:45 | get(...) : Object | semmle.label | get(...) : Object | -| Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | semmle.label | parameter this [Return] : DummyCache [] : Object | -| Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | semmle.label | parameter this [Return] : DummyCache [] : Object | +| Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | semmle.label | parameter this [Reverse] : DummyCache [] : Object | +| Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | semmle.label | parameter this [Reverse] : DummyCache [] : Object | | Test.java:22:14:22:23 | key : Object | semmle.label | key : Object | | Test.java:22:26:22:37 | value : Object | semmle.label | value : Object | | Test.java:23:4:23:7 | this [post update] : DummyCache [] : Object | semmle.label | this [post update] : DummyCache [] : Object | @@ -228,20 +228,20 @@ nodes subpaths | Test.java:42:60:42:68 | container : ValueWrapper [] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:42:60:42:74 | get(...) : Object | | Test.java:53:19:53:21 | out : ValueRetrievalException [] : Object | Test.java:39:19:39:57 | container : ValueRetrievalException [] : Object | Test.java:39:69:39:86 | getKey(...) : Object | Test.java:53:9:53:22 | getMapKey(...) | -| Test.java:65:45:65:52 | source(...) : Object | Test.java:13:16:13:29 | element : Object | Test.java:13:3:13:14 | parameter this [Return] : ValueWrapper [] : Object | Test.java:65:28:65:53 | new ValueWrapper(...) : ValueWrapper [] : Object | +| Test.java:65:45:65:52 | source(...) : Object | Test.java:13:16:13:29 | element : Object | Test.java:13:3:13:14 | parameter this [Reverse] : ValueWrapper [] : Object | Test.java:65:28:65:53 | new ValueWrapper(...) : ValueWrapper [] : Object | | Test.java:66:10:66:11 | in : ValueWrapper [] : Object | Test.java:18:17:18:19 | parameter this : ValueWrapper [] : Object | Test.java:18:32:18:45 | get(...) : Object | Test.java:66:10:66:17 | get(...) : Object | -| Test.java:72:36:72:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:72:15:72:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:72:36:72:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:72:15:72:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:74:21:74:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:74:9:74:24 | getMapValue(...) | -| Test.java:79:36:79:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:79:15:79:44 | new DummyCache(...) : DummyCache [] : Object | -| Test.java:86:36:86:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:86:15:86:44 | new DummyCache(...) : DummyCache [] : Object | -| Test.java:93:30:93:37 | source(...) : Object | Test.java:22:14:22:23 | key : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:93:15:93:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:79:36:79:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:79:15:79:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:86:36:86:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:86:15:86:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:93:30:93:37 | source(...) : Object | Test.java:22:14:22:23 | key : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:93:15:93:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:95:19:95:28 | (...)... : Cache [] : Object | Test.java:40:19:40:33 | container : Cache [] : Object | Test.java:40:45:40:104 | next(...) : Object | Test.java:95:9:95:29 | getMapKey(...) | -| Test.java:100:36:100:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:100:15:100:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:100:36:100:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:100:15:100:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:102:21:102:30 | (...)... : Cache [] : Object | Test.java:41:21:41:35 | container : Cache [] : Object | Test.java:41:47:41:78 | get(...) : Object | Test.java:102:9:102:31 | getMapValue(...) | | Test.java:109:19:109:21 | out : Cache [] : Object | Test.java:40:19:40:33 | container : Cache [] : Object | Test.java:40:45:40:104 | next(...) : Object | Test.java:109:9:109:22 | getMapKey(...) | | Test.java:116:21:116:23 | out : Cache [] : Object | Test.java:41:21:41:35 | container : Cache [] : Object | Test.java:41:47:41:78 | get(...) : Object | Test.java:116:9:116:24 | getMapValue(...) | | Test.java:123:19:123:21 | out : Cache [] : Object | Test.java:40:19:40:33 | container : Cache [] : Object | Test.java:40:45:40:104 | next(...) : Object | Test.java:123:9:123:22 | getMapKey(...) | | Test.java:130:21:130:23 | out : Cache [] : Object | Test.java:41:21:41:35 | container : Cache [] : Object | Test.java:41:47:41:78 | get(...) : Object | Test.java:130:9:130:24 | getMapValue(...) | -| Test.java:135:36:135:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Return] : DummyCache [] : Object | Test.java:135:15:135:44 | new DummyCache(...) : DummyCache [] : Object | +| Test.java:135:36:135:43 | source(...) : Object | Test.java:22:26:22:37 | value : Object | Test.java:22:3:22:12 | parameter this [Reverse] : DummyCache [] : Object | Test.java:135:15:135:44 | new DummyCache(...) : DummyCache [] : Object | | Test.java:137:21:137:23 | out : ValueWrapper [] : Object | Test.java:42:21:42:48 | container : ValueWrapper [] : Object | Test.java:42:60:42:74 | get(...) : Object | Test.java:137:9:137:24 | getMapValue(...) | testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/data/test.expected b/java/ql/test/library-tests/frameworks/spring/data/test.expected index 587bb38c6ce8..b41e5b85ab3a 100644 --- a/java/ql/test/library-tests/frameworks/spring/data/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/data/test.expected @@ -2,7 +2,7 @@ models | 1 | Summary: org.springframework.data.repository; CrudRepository; true; save; ; ; Argument[0]; ReturnValue; value; manual | edges | Test.java:5:17:5:24 | f : String | Test.java:6:18:6:18 | f : String | provenance | | -| Test.java:6:5:6:8 | this [post update] : Struct [field] : String | Test.java:5:10:5:15 | parameter this [Return] : Struct [field] : String | provenance | | +| Test.java:6:5:6:8 | this [post update] : Struct [field] : String | Test.java:5:10:5:15 | parameter this [Reverse] : Struct [field] : String | provenance | | | Test.java:6:18:6:18 | f : String | Test.java:6:5:6:8 | this [post update] : Struct [field] : String | provenance | | | Test.java:15:16:15:35 | new Struct(...) : Struct [field] : String | Test.java:16:17:16:17 | s : Struct [field] : String | provenance | | | Test.java:15:27:15:34 | source(...) : String | Test.java:5:17:5:24 | f : String | provenance | | @@ -11,7 +11,7 @@ edges | Test.java:16:17:16:17 | s : Struct [field] : String | Test.java:16:9:16:18 | save(...) : Struct [field] : String | provenance | MaD:1 | | Test.java:17:10:17:10 | s : Struct [field] : String | Test.java:17:10:17:16 | s.field | provenance | | nodes -| Test.java:5:10:5:15 | parameter this [Return] : Struct [field] : String | semmle.label | parameter this [Return] : Struct [field] : String | +| Test.java:5:10:5:15 | parameter this [Reverse] : Struct [field] : String | semmle.label | parameter this [Reverse] : Struct [field] : String | | Test.java:5:17:5:24 | f : String | semmle.label | f : String | | Test.java:6:5:6:8 | this [post update] : Struct [field] : String | semmle.label | this [post update] : Struct [field] : String | | Test.java:6:18:6:18 | f : String | semmle.label | f : String | @@ -22,5 +22,5 @@ nodes | Test.java:17:10:17:10 | s : Struct [field] : String | semmle.label | s : Struct [field] : String | | Test.java:17:10:17:16 | s.field | semmle.label | s.field | subpaths -| Test.java:15:27:15:34 | source(...) : String | Test.java:5:17:5:24 | f : String | Test.java:5:10:5:15 | parameter this [Return] : Struct [field] : String | Test.java:15:16:15:35 | new Struct(...) : Struct [field] : String | +| Test.java:15:27:15:34 | source(...) : String | Test.java:5:17:5:24 | f : String | Test.java:5:10:5:15 | parameter this [Reverse] : Struct [field] : String | Test.java:15:16:15:35 | new Struct(...) : Struct [field] : String | testFailures diff --git a/java/ql/test/library-tests/frameworks/spring/webutil/test.expected b/java/ql/test/library-tests/frameworks/spring/webutil/test.expected index dd5e222d69c4..0be97f8c942f 100644 --- a/java/ql/test/library-tests/frameworks/spring/webutil/test.expected +++ b/java/ql/test/library-tests/frameworks/spring/webutil/test.expected @@ -167,7 +167,7 @@ models | 166 | Summary: org.springframework.web.util; WebUtils; false; setSessionAttribute; ; ; Argument[2]; Argument[0]; taint; manual | edges | Test.java:44:30:44:34 | m : Map [] : Object | Test.java:44:45:44:45 | m : Map [] : Object | provenance | | -| Test.java:44:39:44:47 | this [post update] : StubUriTemplateVariables [] : Object | Test.java:44:5:44:28 | parameter this [Return] : StubUriTemplateVariables [] : Object | provenance | | +| Test.java:44:39:44:47 | this [post update] : StubUriTemplateVariables [] : Object | Test.java:44:5:44:28 | parameter this [Reverse] : StubUriTemplateVariables [] : Object | provenance | | | Test.java:44:45:44:45 | m : Map [] : Object | Test.java:44:39:44:47 | this [post update] : StubUriTemplateVariables [] : Object | provenance | MaD:2 | | Test.java:46:19:46:26 | parameter this : StubUriTemplateVariables [] : Object | Test.java:46:50:46:53 | this : StubUriTemplateVariables [] : Object | provenance | | | Test.java:46:50:46:53 | this : StubUriTemplateVariables [] : Object | Test.java:46:50:46:63 | get(...) : Object | provenance | MaD:7 | @@ -1650,7 +1650,7 @@ edges | Test.java:2565:33:2565:35 | out [post update] : HttpServletRequest | Test.java:2566:9:2566:11 | out | provenance | | | Test.java:2565:44:2565:45 | in : Object | Test.java:2565:33:2565:35 | out [post update] : HttpServletRequest | provenance | MaD:166 | nodes -| Test.java:44:5:44:28 | parameter this [Return] : StubUriTemplateVariables [] : Object | semmle.label | parameter this [Return] : StubUriTemplateVariables [] : Object | +| Test.java:44:5:44:28 | parameter this [Reverse] : StubUriTemplateVariables [] : Object | semmle.label | parameter this [Reverse] : StubUriTemplateVariables [] : Object | | Test.java:44:30:44:34 | m : Map [] : Object | semmle.label | m : Map [] : Object | | Test.java:44:39:44:47 | this [post update] : StubUriTemplateVariables [] : Object | semmle.label | this [post update] : StubUriTemplateVariables [] : Object | | Test.java:44:45:44:45 | m : Map [] : Object | semmle.label | m : Map [] : Object | @@ -3438,10 +3438,10 @@ subpaths | Test.java:1146:47:1146:54 | source(...) : Object | Test.java:54:40:54:53 | element : Object | Test.java:54:65:54:110 | new LinkedMultiValueMap<>(...) : LinkedMultiValueMap [] : Object | Test.java:1146:23:1146:55 | newMultiValueMapWithKey(...) : LinkedMultiValueMap [] : Object | | Test.java:1154:49:1154:56 | source(...) : Object | Test.java:55:42:55:55 | element : Object | Test.java:55:134:55:134 | m : LinkedMultiValueMap [] : Object | Test.java:1154:23:1154:57 | newMultiValueMapWithValue(...) : LinkedMultiValueMap [] : Object | | Test.java:1162:49:1162:56 | source(...) : Object | Test.java:55:42:55:55 | element : Object | Test.java:55:134:55:134 | m : LinkedMultiValueMap [] : Object | Test.java:1162:23:1162:57 | newMultiValueMapWithValue(...) : LinkedMultiValueMap [] : Object | -| Test.java:1302:73:1302:94 | of(...) : Map [] : Object | Test.java:44:30:44:34 | m : Map [] : Object | Test.java:44:5:44:28 | parameter this [Return] : StubUriTemplateVariables [] : Object | Test.java:1302:44:1302:95 | new StubUriTemplateVariables(...) : StubUriTemplateVariables [] : Object | +| Test.java:1302:73:1302:94 | of(...) : Map [] : Object | Test.java:44:30:44:34 | m : Map [] : Object | Test.java:44:5:44:28 | parameter this [Reverse] : StubUriTemplateVariables [] : Object | Test.java:1302:44:1302:95 | new StubUriTemplateVariables(...) : StubUriTemplateVariables [] : Object | | Test.java:1303:10:1303:11 | in : StubUriTemplateVariables [] : Object | Test.java:46:19:46:26 | parameter this : StubUriTemplateVariables [] : Object | Test.java:46:50:46:63 | get(...) : Object | Test.java:1303:10:1303:26 | getValue(...) : Object | | Test.java:1337:29:1337:36 | source(...) : Object | Test.java:53:22:53:35 | element : Object | Test.java:53:47:53:67 | of(...) : Map [] : Object | Test.java:1337:13:1337:37 | newMapWithValue(...) : Map [] : Object | -| Test.java:1353:73:1353:94 | of(...) : Map [] : Object | Test.java:44:30:44:34 | m : Map [] : Object | Test.java:44:5:44:28 | parameter this [Return] : StubUriTemplateVariables [] : Object | Test.java:1353:44:1353:95 | new StubUriTemplateVariables(...) : StubUriTemplateVariables [] : Object | +| Test.java:1353:73:1353:94 | of(...) : Map [] : Object | Test.java:44:30:44:34 | m : Map [] : Object | Test.java:44:5:44:28 | parameter this [Reverse] : StubUriTemplateVariables [] : Object | Test.java:1353:44:1353:95 | new StubUriTemplateVariables(...) : StubUriTemplateVariables [] : Object | | Test.java:1398:20:1398:41 | (...)... : List [] : Object | Test.java:49:20:49:39 | container : List [] : Object | Test.java:49:51:49:77 | next(...) : Object | Test.java:1398:9:1398:42 | getElement(...) | | Test.java:1398:38:1398:40 | out : MultiValueMap [, ] : Object | Test.java:51:20:51:29 | m : MultiValueMap [, ] : Object | Test.java:51:41:51:51 | get(...) : Object [] : Object | Test.java:1398:26:1398:41 | getMapValue(...) : Object [] : Object | | Test.java:1405:19:1405:21 | out : MultiValueMap [] : Object | Test.java:50:18:50:27 | m : MultiValueMap [] : Object | Test.java:50:39:50:66 | next(...) : Object | Test.java:1405:9:1405:22 | getMapKey(...) | diff --git a/java/ql/test/library-tests/frameworks/stream/test.expected b/java/ql/test/library-tests/frameworks/stream/test.expected index 185ec01a6a70..6c0ba180ca87 100644 --- a/java/ql/test/library-tests/frameworks/stream/test.expected +++ b/java/ql/test/library-tests/frameworks/stream/test.expected @@ -299,25 +299,25 @@ edges | Test.java:232:33:232:33 | x : Object | Test.java:232:44:232:44 | x | provenance | | | Test.java:238:18:238:18 | a : Object[] [[]] : Object | Test.java:238:32:238:32 | a : Object[] [[]] : Object | provenance | | | Test.java:238:32:238:32 | a : Object[] [[]] : Object | Test.java:238:32:238:35 | ...[...] | provenance | | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | -| Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:14+MaD:12 | +| Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:240:29:240:47 | source(...) : Object | Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | provenance | | -| Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:241:29:241:47 | source(...) : Object | Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | provenance | | | Test.java:248:28:257:18 | collect(...) : Object[] [[]] : Object | Test.java:258:18:258:20 | out : Object[] [[]] : Object | provenance | | | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:11 | @@ -333,18 +333,18 @@ edges | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | Test.java:249:23:249:58 | new Object[] : Object[] [[]] : Object | provenance | | | Test.java:249:38:249:56 | source(...) : Object | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | provenance | | | Test.java:250:18:250:18 | a : Object[] [[]] : Object | Test.java:251:26:251:26 | a : Object[] [[]] : Object | provenance | | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:12+MaD:14 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:248:28:257:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:248:28:257:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:13 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:12+MaD:14 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:238:18:238:18 | a : Object[] [[]] : Object | provenance | MaD:12+MaD:14 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:248:28:257:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:248:28:257:18 | collect(...) : Object[] [[]] : Object | provenance | MaD:13 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:250:18:250:18 | a : Object[] [[]] : Object | provenance | MaD:12+MaD:14 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | provenance | MaD:12 | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:12 | | Test.java:251:26:251:26 | a : Object[] [[]] : Object | Test.java:251:26:251:29 | ...[...] | provenance | | -| Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | provenance | | +| Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:252:28:252:46 | source(...) : Object | Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | provenance | | | Test.java:254:18:254:19 | a1 : Object[] [[]] : Object | Test.java:255:26:255:27 | a1 : Object[] [[]] : Object | provenance | | | Test.java:254:22:254:23 | a2 : Object[] [[]] : Object | Test.java:256:26:256:27 | a2 : Object[] [[]] : Object | provenance | | @@ -359,14 +359,14 @@ edges | Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | provenance | MaD:15 | | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | Test.java:269:18:269:20 | out : Object[] [[]] : Object | provenance | | | Test.java:264:21:264:21 | x : Object | Test.java:264:36:264:36 | x : Object | provenance | | -| Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | provenance | | +| Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | Test.java:264:18:264:18 | a [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:264:36:264:36 | x : Object | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | provenance | | | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | provenance | | | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | provenance | | -| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | Test.java:266:29:266:33 | ...[...] : Object | provenance | | | Test.java:266:29:266:33 | ...[...] : Object | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | provenance | | -| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | provenance | | +| Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Reverse] : Object[] [[]] : Object | provenance | | | Test.java:267:29:267:30 | a1 : Object[] [[]] : Object | Test.java:267:29:267:33 | ...[...] : Object | provenance | | | Test.java:267:29:267:33 | ...[...] : Object | Test.java:267:21:267:22 | a2 [post update] : Object[] [[]] : Object | provenance | | | Test.java:269:18:269:20 | out : Object[] [[]] : Object | Test.java:269:18:269:23 | ...[...] | provenance | | @@ -776,8 +776,8 @@ nodes | Test.java:238:18:238:18 | a : Object[] [[]] : Object | semmle.label | a : Object[] [[]] : Object | | Test.java:238:32:238:32 | a : Object[] [[]] : Object | semmle.label | a : Object[] [[]] : Object | | Test.java:238:32:238:35 | ...[...] | semmle.label | ...[...] | -| Test.java:239:18:239:19 | a1 [Return] : Object[] [[]] : Object | semmle.label | a1 [Return] : Object[] [[]] : Object | -| Test.java:239:22:239:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object | +| Test.java:239:18:239:19 | a1 [Reverse] : Object[] [[]] : Object | semmle.label | a1 [Reverse] : Object[] [[]] : Object | +| Test.java:239:22:239:23 | a2 [Reverse] : Object[] [[]] : Object | semmle.label | a2 [Reverse] : Object[] [[]] : Object | | Test.java:240:21:240:22 | a1 [post update] : Object[] [[]] : Object | semmle.label | a1 [post update] : Object[] [[]] : Object | | Test.java:240:29:240:47 | source(...) : Object | semmle.label | source(...) : Object | | Test.java:241:21:241:22 | a2 [post update] : Object[] [[]] : Object | semmle.label | a2 [post update] : Object[] [[]] : Object | @@ -787,7 +787,7 @@ nodes | Test.java:249:23:249:58 | {...} : Object[] [[]] : Object | semmle.label | {...} : Object[] [[]] : Object | | Test.java:249:38:249:56 | source(...) : Object | semmle.label | source(...) : Object | | Test.java:250:18:250:18 | a : Object[] [[]] : Object | semmle.label | a : Object[] [[]] : Object | -| Test.java:250:18:250:18 | a [Return] : Object[] [[]] : Object | semmle.label | a [Return] : Object[] [[]] : Object | +| Test.java:250:18:250:18 | a [Reverse] : Object[] [[]] : Object | semmle.label | a [Reverse] : Object[] [[]] : Object | | Test.java:251:26:251:26 | a : Object[] [[]] : Object | semmle.label | a : Object[] [[]] : Object | | Test.java:251:26:251:29 | ...[...] | semmle.label | ...[...] | | Test.java:252:21:252:21 | a [post update] : Object[] [[]] : Object | semmle.label | a [post update] : Object[] [[]] : Object | @@ -804,14 +804,14 @@ nodes | Test.java:261:43:261:61 | source(...) : Object | semmle.label | source(...) : Object | | Test.java:262:28:262:29 | in : Stream [] : Object | semmle.label | in : Stream [] : Object | | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | semmle.label | collect(...) : Object[] [[]] : Object | -| Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | semmle.label | a [Return] : Object[] [[]] : Object | +| Test.java:264:18:264:18 | a [Reverse] : Object[] [[]] : Object | semmle.label | a [Reverse] : Object[] [[]] : Object | | Test.java:264:21:264:21 | x : Object | semmle.label | x : Object | | Test.java:264:29:264:29 | a [post update] : Object[] [[]] : Object | semmle.label | a [post update] : Object[] [[]] : Object | | Test.java:264:36:264:36 | x : Object | semmle.label | x : Object | | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | semmle.label | a1 : Object[] [[]] : Object | -| Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | semmle.label | a1 [Return] : Object[] [[]] : Object | +| Test.java:265:18:265:19 | a1 [Reverse] : Object[] [[]] : Object | semmle.label | a1 [Reverse] : Object[] [[]] : Object | | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | -| Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | semmle.label | a2 [Return] : Object[] [[]] : Object | +| Test.java:265:22:265:23 | a2 [Reverse] : Object[] [[]] : Object | semmle.label | a2 [Reverse] : Object[] [[]] : Object | | Test.java:266:21:266:22 | a1 [post update] : Object[] [[]] : Object | semmle.label | a1 [post update] : Object[] [[]] : Object | | Test.java:266:29:266:30 | a2 : Object[] [[]] : Object | semmle.label | a2 : Object[] [[]] : Object | | Test.java:266:29:266:33 | ...[...] : Object | semmle.label | ...[...] : Object | @@ -1037,9 +1037,9 @@ subpaths | Test.java:201:34:201:36 | out : Object[] [[]] : Object | Test.java:16:27:16:35 | array : Object[] [[]] : Object | Test.java:16:47:16:54 | ...[...] : Object | Test.java:201:18:201:37 | getArrayElement(...) | | Test.java:208:34:208:36 | out : Object[] [[]] : Object | Test.java:16:27:16:35 | array : Object[] [[]] : Object | Test.java:16:47:16:54 | ...[...] : Object | Test.java:208:18:208:37 | getArrayElement(...) | | Test.java:215:29:215:31 | out : List [] : Object | Test.java:18:22:18:35 | it : List [] : Object | Test.java:18:47:18:66 | next(...) : Object | Test.java:215:18:215:32 | getElement(...) | -| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:264:21:264:21 | x : Object | Test.java:264:18:264:18 | a [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | -| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | -| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Return] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:264:21:264:21 | x : Object | Test.java:264:18:264:18 | a [Reverse] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:18:265:19 | a1 : Object[] [[]] : Object | Test.java:265:22:265:23 | a2 [Reverse] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | +| Test.java:262:28:262:29 | in : Stream [] : Object | Test.java:265:22:265:23 | a2 : Object[] [[]] : Object | Test.java:265:18:265:19 | a1 [Reverse] : Object[] [[]] : Object | Test.java:262:28:268:18 | collect(...) : Object[] [[]] : Object | | Test.java:289:29:289:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:289:18:289:32 | getElement(...) | | Test.java:319:29:319:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:319:18:319:32 | getElement(...) | | Test.java:335:29:335:31 | out : Stream [] : Object | Test.java:17:22:17:38 | s : Stream [] : Object | Test.java:17:50:17:68 | next(...) : Object | Test.java:335:18:335:32 | getElement(...) | diff --git a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected index f7277e3079c7..fbc2c51ef55b 100644 --- a/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected +++ b/java/ql/test/query-tests/security/CWE-190/semmle/tests/ArithmeticTainted.expected @@ -47,7 +47,7 @@ edges | ArithmeticTainted.java:133:27:133:34 | data : Number | ArithmeticTainted.java:135:3:135:6 | data | provenance | | | ArithmeticTainted.java:137:27:137:34 | data : Number | ArithmeticTainted.java:139:5:139:8 | data | provenance | | | Holder.java:12:22:12:26 | d : Number | Holder.java:13:9:13:9 | d : Number | provenance | | -| Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | Holder.java:12:14:12:20 | parameter this [Return] : Holder [dat] : Number | provenance | | +| Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | Holder.java:12:14:12:20 | parameter this [Reverse] : Holder [dat] : Number | provenance | | | Holder.java:13:9:13:9 | d : Number | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | provenance | | | Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | Holder.java:17:10:17:12 | this <.field> : Holder [dat] : Number | provenance | | | Holder.java:17:10:17:12 | this <.field> : Holder [dat] : Number | Holder.java:17:10:17:12 | dat : Number | provenance | | @@ -94,7 +94,7 @@ nodes | ArithmeticTainted.java:135:3:135:6 | data | semmle.label | data | | ArithmeticTainted.java:137:27:137:34 | data : Number | semmle.label | data : Number | | ArithmeticTainted.java:139:5:139:8 | data | semmle.label | data | -| Holder.java:12:14:12:20 | parameter this [Return] : Holder [dat] : Number | semmle.label | parameter this [Return] : Holder [dat] : Number | +| Holder.java:12:14:12:20 | parameter this [Reverse] : Holder [dat] : Number | semmle.label | parameter this [Reverse] : Holder [dat] : Number | | Holder.java:12:22:12:26 | d : Number | semmle.label | d : Number | | Holder.java:13:3:13:5 | this <.field> [post update] : Holder [dat] : Number | semmle.label | this <.field> [post update] : Holder [dat] : Number | | Holder.java:13:9:13:9 | d : Number | semmle.label | d : Number | @@ -102,5 +102,5 @@ nodes | Holder.java:17:10:17:12 | dat : Number | semmle.label | dat : Number | | Holder.java:17:10:17:12 | this <.field> : Holder [dat] : Number | semmle.label | this <.field> : Holder [dat] : Number | subpaths -| ArithmeticTainted.java:64:20:64:23 | data : Number | Holder.java:12:22:12:26 | d : Number | Holder.java:12:14:12:20 | parameter this [Return] : Holder [dat] : Number | ArithmeticTainted.java:64:4:64:10 | tainted [post update] : Holder [dat] : Number | +| ArithmeticTainted.java:64:20:64:23 | data : Number | Holder.java:12:22:12:26 | d : Number | Holder.java:12:14:12:20 | parameter this [Reverse] : Holder [dat] : Number | ArithmeticTainted.java:64:4:64:10 | tainted [post update] : Holder [dat] : Number | | ArithmeticTainted.java:66:18:66:24 | tainted : Holder [dat] : Number | Holder.java:16:13:16:19 | parameter this : Holder [dat] : Number | Holder.java:17:10:17:12 | dat : Number | ArithmeticTainted.java:66:18:66:34 | getData(...) : Number | diff --git a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected index 3899a648b45f..685819bb06ab 100644 --- a/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/array-flow/array-flow.expected @@ -2293,12 +2293,14 @@ edges | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1623:10:1623:10 | a [element, element 0] | provenance | | | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1626:10:1626:10 | a [element, element 0] | provenance | | | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | array_flow.rb:1627:10:1627:10 | a [element, element 0] | provenance | | -| array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | provenance | | +| array_flow.rb:1622:5:1622:8 | ...[...] [Reverse] [element 0] | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | provenance | | +| array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | array_flow.rb:1622:5:1622:8 | ...[...] [Reverse] [element 0] | provenance | | | array_flow.rb:1622:15:1622:27 | call to source | array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | provenance | | | array_flow.rb:1623:10:1623:10 | a [element, element 0] | array_flow.rb:1623:10:1623:13 | ...[...] [element 0] | provenance | | | array_flow.rb:1623:10:1623:13 | ...[...] [element 0] | array_flow.rb:1623:10:1623:16 | ...[...] | provenance | | | array_flow.rb:1625:5:1625:5 | [post] a [element 1, element 0] | array_flow.rb:1626:10:1626:10 | a [element 1, element 0] | provenance | | -| array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | array_flow.rb:1625:5:1625:5 | [post] a [element 1, element 0] | provenance | | +| array_flow.rb:1625:5:1625:8 | ...[...] [Reverse] [element 0] | array_flow.rb:1625:5:1625:5 | [post] a [element 1, element 0] | provenance | | +| array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | array_flow.rb:1625:5:1625:8 | ...[...] [Reverse] [element 0] | provenance | | | array_flow.rb:1625:15:1625:27 | call to source | array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | provenance | | | array_flow.rb:1626:10:1626:10 | a [element 1, element 0] | array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | provenance | | | array_flow.rb:1626:10:1626:10 | a [element, element 0] | array_flow.rb:1626:10:1626:13 | ...[...] [element 0] | provenance | | @@ -4792,12 +4794,14 @@ nodes | array_flow.rb:1617:10:1617:10 | c [element] | semmle.label | c [element] | | array_flow.rb:1617:10:1617:13 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1622:5:1622:5 | [post] a [element, element 0] | semmle.label | [post] a [element, element 0] | +| array_flow.rb:1622:5:1622:8 | ...[...] [Reverse] [element 0] | semmle.label | ...[...] [Reverse] [element 0] | | array_flow.rb:1622:5:1622:8 | [post] ...[...] [element 0] | semmle.label | [post] ...[...] [element 0] | | array_flow.rb:1622:15:1622:27 | call to source | semmle.label | call to source | | array_flow.rb:1623:10:1623:10 | a [element, element 0] | semmle.label | a [element, element 0] | | array_flow.rb:1623:10:1623:13 | ...[...] [element 0] | semmle.label | ...[...] [element 0] | | array_flow.rb:1623:10:1623:16 | ...[...] | semmle.label | ...[...] | | array_flow.rb:1625:5:1625:5 | [post] a [element 1, element 0] | semmle.label | [post] a [element 1, element 0] | +| array_flow.rb:1625:5:1625:8 | ...[...] [Reverse] [element 0] | semmle.label | ...[...] [Reverse] [element 0] | | array_flow.rb:1625:5:1625:8 | [post] ...[...] [element 0] | semmle.label | [post] ...[...] [element 0] | | array_flow.rb:1625:15:1625:27 | call to source | semmle.label | call to source | | array_flow.rb:1626:10:1626:10 | a [element 1, element 0] | semmle.label | a [element 1, element 0] | diff --git a/ruby/ql/test/library-tests/dataflow/erb/erb.expected b/ruby/ql/test/library-tests/dataflow/erb/erb.expected index eb507279c0b7..1b18ffad377c 100644 --- a/ruby/ql/test/library-tests/dataflow/erb/erb.expected +++ b/ruby/ql/test/library-tests/dataflow/erb/erb.expected @@ -29,16 +29,16 @@ edges | view1.rb:9:5:11:7 | self in foo [@x] | view1.rb:10:14:10:15 | self [@x] | provenance | | | view1.rb:10:14:10:15 | self [@x] | view1.rb:10:14:10:15 | @x | provenance | | | view1.rb:13:13:13:13 | x | view1.rb:14:14:14:14 | x | provenance | | -| view1.rb:14:9:14:10 | [post] self [@x] | view1.rb:13:5:15:7 | self in set [Return] [@x] | provenance | | +| view1.rb:14:9:14:10 | [post] self [@x] | view1.rb:13:5:15:7 | self in set [Reverse] [@x] | provenance | | | view1.rb:14:14:14:14 | x | view1.rb:14:9:14:10 | [post] self [@x] | provenance | | -| view2.html.erb:3:1:3:14 | [post] self [@x] | view2.html.erb:3:1:4:1 | self in view2.html.erb [Return] [@x] | provenance | | -| view2.html.erb:3:1:4:1 | self in view2.html.erb [Return] [@x] | main.rb:10:16:10:19 | [post] view [@x] | provenance | | +| view2.html.erb:3:1:3:14 | [post] self [@x] | view2.html.erb:3:1:4:1 | self in view2.html.erb [Reverse] [@x] | provenance | | +| view2.html.erb:3:1:4:1 | self in view2.html.erb [Reverse] [@x] | main.rb:10:16:10:19 | [post] view [@x] | provenance | | | view2.html.erb:3:5:3:13 | call to source | view2.html.erb:3:1:3:14 | [post] self [@x] | provenance | | | view2.html.erb:3:5:3:13 | call to source | view2.rb:6:13:6:13 | x | provenance | | | view2.rb:2:5:4:7 | self in foo [@x] | view2.rb:3:14:3:15 | self [@x] | provenance | | | view2.rb:3:14:3:15 | self [@x] | view2.rb:3:14:3:15 | @x | provenance | | | view2.rb:6:13:6:13 | x | view2.rb:7:14:7:14 | x | provenance | | -| view2.rb:7:9:7:10 | [post] self [@x] | view2.rb:6:5:8:7 | self in set [Return] [@x] | provenance | | +| view2.rb:7:9:7:10 | [post] self [@x] | view2.rb:6:5:8:7 | self in set [Reverse] [@x] | provenance | | | view2.rb:7:14:7:14 | x | view2.rb:7:9:7:10 | [post] self [@x] | provenance | | | view3.html.erb:3:1:4:1 | self in view3.html.erb [@x] | view3.html.erb:3:6:3:8 | self [@x] | provenance | | | view3.html.erb:3:6:3:8 | self [@x] | view3.html.erb:3:6:3:8 | call to get | provenance | | @@ -74,17 +74,17 @@ nodes | view1.rb:9:5:11:7 | self in foo [@x] | semmle.label | self in foo [@x] | | view1.rb:10:14:10:15 | @x | semmle.label | @x | | view1.rb:10:14:10:15 | self [@x] | semmle.label | self [@x] | -| view1.rb:13:5:15:7 | self in set [Return] [@x] | semmle.label | self in set [Return] [@x] | +| view1.rb:13:5:15:7 | self in set [Reverse] [@x] | semmle.label | self in set [Reverse] [@x] | | view1.rb:13:13:13:13 | x | semmle.label | x | | view1.rb:14:9:14:10 | [post] self [@x] | semmle.label | [post] self [@x] | | view1.rb:14:14:14:14 | x | semmle.label | x | | view2.html.erb:3:1:3:14 | [post] self [@x] | semmle.label | [post] self [@x] | -| view2.html.erb:3:1:4:1 | self in view2.html.erb [Return] [@x] | semmle.label | self in view2.html.erb [Return] [@x] | +| view2.html.erb:3:1:4:1 | self in view2.html.erb [Reverse] [@x] | semmle.label | self in view2.html.erb [Reverse] [@x] | | view2.html.erb:3:5:3:13 | call to source | semmle.label | call to source | | view2.rb:2:5:4:7 | self in foo [@x] | semmle.label | self in foo [@x] | | view2.rb:3:14:3:15 | @x | semmle.label | @x | | view2.rb:3:14:3:15 | self [@x] | semmle.label | self [@x] | -| view2.rb:6:5:8:7 | self in set [Return] [@x] | semmle.label | self in set [Return] [@x] | +| view2.rb:6:5:8:7 | self in set [Reverse] [@x] | semmle.label | self in set [Reverse] [@x] | | view2.rb:6:13:6:13 | x | semmle.label | x | | view2.rb:7:9:7:10 | [post] self [@x] | semmle.label | [post] self [@x] | | view2.rb:7:14:7:14 | x | semmle.label | x | @@ -100,8 +100,8 @@ nodes subpaths | main.rb:4:26:4:26 | x | view1.rb:5:20:5:20 | x | view1.rb:6:9:6:10 | [post] self [@x] | main.rb:4:16:4:27 | call to new [@x] | | main.rb:16:26:16:26 | x | view3.rb:2:20:2:20 | x | view3.rb:3:9:3:10 | [post] self [@x] | main.rb:16:16:16:27 | call to new [@x] | -| view1.html.erb:6:5:6:13 | call to source | view1.rb:13:13:13:13 | x | view1.rb:13:5:15:7 | self in set [Return] [@x] | view1.html.erb:6:1:6:14 | [post] self [@x] | -| view2.html.erb:3:5:3:13 | call to source | view2.rb:6:13:6:13 | x | view2.rb:6:5:8:7 | self in set [Return] [@x] | view2.html.erb:3:1:3:14 | [post] self [@x] | +| view1.html.erb:6:5:6:13 | call to source | view1.rb:13:13:13:13 | x | view1.rb:13:5:15:7 | self in set [Reverse] [@x] | view1.html.erb:6:1:6:14 | [post] self [@x] | +| view2.html.erb:3:5:3:13 | call to source | view2.rb:6:13:6:13 | x | view2.rb:6:5:8:7 | self in set [Reverse] [@x] | view2.html.erb:3:1:3:14 | [post] self [@x] | | view3.html.erb:3:6:3:8 | self [@x] | view3.rb:6:5:8:7 | self in get [@x] | view3.rb:7:9:7:10 | @x | view3.html.erb:3:6:3:8 | call to get | testFailures #select diff --git a/ruby/ql/test/library-tests/dataflow/global/Flow.expected b/ruby/ql/test/library-tests/dataflow/global/Flow.expected index 1bdf43dbb644..824c3db4dcfa 100644 --- a/ruby/ql/test/library-tests/dataflow/global/Flow.expected +++ b/ruby/ql/test/library-tests/dataflow/global/Flow.expected @@ -33,7 +33,7 @@ edges | captured_variables.rb:51:9:51:16 | call to taint | captured_variables.rb:49:16:52:3 | [post] do ... end [captured x] | provenance | | | captured_variables.rb:51:9:51:16 | call to taint | captured_variables.rb:49:16:52:3 | [post] do ... end [captured x] | provenance | heuristic-callback | | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:58:18:58:18 | x | provenance | | -| captured_variables.rb:58:9:58:14 | [post] self [@field] | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | provenance | | +| captured_variables.rb:58:9:58:14 | [post] self [@field] | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | provenance | | | captured_variables.rb:58:18:58:18 | x | captured_variables.rb:58:9:58:14 | [post] self [@field] | provenance | | | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:16:61:21 | self [@field] | provenance | | | captured_variables.rb:61:16:61:21 | @field | captured_variables.rb:61:9:61:21 | return | provenance | | @@ -98,8 +98,8 @@ edges | captured_variables.rb:168:18:170:11 | do ... end [captured self, @x] | captured_variables.rb:163:5:165:7 | &block [captured self, @x] | provenance | | | captured_variables.rb:169:18:169:19 | self [@x] | captured_variables.rb:169:18:169:19 | @x | provenance | | | captured_variables.rb:174:1:174:24 | call to new [@x] | captured_variables.rb:167:5:171:7 | self in baz [@x] | provenance | | -| captured_variables.rb:177:5:179:7 | self in foo [Return] [@x] | captured_variables.rb:193:1:193:1 | [post] c [@x] | provenance | | -| captured_variables.rb:178:9:178:10 | [post] self [@x] | captured_variables.rb:177:5:179:7 | self in foo [Return] [@x] | provenance | | +| captured_variables.rb:177:5:179:7 | self in foo [Reverse] [@x] | captured_variables.rb:193:1:193:1 | [post] c [@x] | provenance | | +| captured_variables.rb:178:9:178:10 | [post] self [@x] | captured_variables.rb:177:5:179:7 | self in foo [Reverse] [@x] | provenance | | | captured_variables.rb:178:14:178:22 | call to taint | captured_variables.rb:178:9:178:10 | [post] self [@x] | provenance | | | captured_variables.rb:181:5:183:7 | &block [captured self, @x] | captured_variables.rb:187:18:187:19 | self [@x] | provenance | | | captured_variables.rb:185:5:189:7 | self in baz [@x] | captured_variables.rb:186:18:188:11 | do ... end [captured self, @x] | provenance | | @@ -114,7 +114,7 @@ edges | captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:223:13:223:13 | x | provenance | | | captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | provenance | | | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:11:18:11:18 | x | provenance | | -| instance_variables.rb:11:9:11:14 | [post] self [@field] | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | provenance | | +| instance_variables.rb:11:9:11:14 | [post] self [@field] | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | provenance | | | instance_variables.rb:11:18:11:18 | x | instance_variables.rb:11:9:11:14 | [post] self [@field] | provenance | | | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:16:14:21 | self [@field] | provenance | | | instance_variables.rb:14:16:14:21 | @field | instance_variables.rb:14:9:14:21 | return | provenance | | @@ -125,11 +125,11 @@ edges | instance_variables.rb:19:12:19:21 | call to taint | instance_variables.rb:19:5:19:8 | [post] self [@foo] | provenance | | | instance_variables.rb:20:10:20:13 | self [@foo] | instance_variables.rb:20:10:20:13 | @foo | provenance | | | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:18:23:22 | field | provenance | | -| instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:22:5:25:7 | self in initialize [Return] [@field] | provenance | | +| instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:22:5:25:7 | self in initialize [Reverse] [@field] | provenance | | | instance_variables.rb:23:18:23:22 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | provenance | | | instance_variables.rb:24:9:24:17 | call to taint | instance_variables.rb:28:9:28:25 | call to initialize | provenance | | | instance_variables.rb:27:25:27:29 | field | instance_variables.rb:28:20:28:24 | field | provenance | | -| instance_variables.rb:28:9:28:25 | [post] self [@field] | instance_variables.rb:27:5:29:7 | self in call_initialize [Return] [@field] | provenance | | +| instance_variables.rb:28:9:28:25 | [post] self [@field] | instance_variables.rb:27:5:29:7 | self in call_initialize [Reverse] [@field] | provenance | | | instance_variables.rb:28:9:28:25 | call to initialize | instance_variables.rb:119:6:119:37 | call to call_initialize | provenance | | | instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | provenance | | | instance_variables.rb:28:20:28:24 | field | instance_variables.rb:28:9:28:25 | [post] self [@field] | provenance | | @@ -221,10 +221,10 @@ edges | instance_variables.rb:97:6:97:10 | foo10 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | provenance | | | instance_variables.rb:97:6:97:10 | foo10 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | provenance | | | instance_variables.rb:97:6:97:10 | foo10 [@field] | instance_variables.rb:97:6:97:20 | call to get_field | provenance | | -| instance_variables.rb:99:18:99:18 | x [Return] [@field] | instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | provenance | | -| instance_variables.rb:99:18:99:18 | x [Return] [@field] | instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | provenance | | -| instance_variables.rb:99:18:99:18 | x [Return] [@field] | instance_variables.rb:113:22:113:26 | [post] foo13 [@field] | provenance | | -| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:99:18:99:18 | x [Return] [@field] | provenance | | +| instance_variables.rb:99:18:99:18 | x [Reverse] [@field] | instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | provenance | | +| instance_variables.rb:99:18:99:18 | x [Reverse] [@field] | instance_variables.rb:108:15:108:19 | [post] foo12 [@field] | provenance | | +| instance_variables.rb:99:18:99:18 | x [Reverse] [@field] | instance_variables.rb:113:22:113:26 | [post] foo13 [@field] | provenance | | +| instance_variables.rb:100:5:100:5 | [post] x [@field] | instance_variables.rb:99:18:99:18 | x [Reverse] [@field] | provenance | | | instance_variables.rb:100:17:100:25 | call to taint | captured_variables.rb:57:19:57:19 | x | provenance | | | instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:10:19:10:19 | x | provenance | | | instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:100:5:100:5 | [post] x [@field] | provenance | | @@ -294,7 +294,7 @@ nodes | captured_variables.rb:50:10:50:10 | x | semmle.label | x | | captured_variables.rb:51:9:51:16 | call to taint | semmle.label | call to taint | | captured_variables.rb:54:6:54:6 | x | semmle.label | x | -| captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | semmle.label | self in set_field [Return] [@field] | +| captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | semmle.label | self in set_field [Reverse] [@field] | | captured_variables.rb:57:19:57:19 | x | semmle.label | x | | captured_variables.rb:58:9:58:14 | [post] self [@field] | semmle.label | [post] self [@field] | | captured_variables.rb:58:18:58:18 | x | semmle.label | x | @@ -355,7 +355,7 @@ nodes | captured_variables.rb:169:18:169:19 | @x | semmle.label | @x | | captured_variables.rb:169:18:169:19 | self [@x] | semmle.label | self [@x] | | captured_variables.rb:174:1:174:24 | call to new [@x] | semmle.label | call to new [@x] | -| captured_variables.rb:177:5:179:7 | self in foo [Return] [@x] | semmle.label | self in foo [Return] [@x] | +| captured_variables.rb:177:5:179:7 | self in foo [Reverse] [@x] | semmle.label | self in foo [Reverse] [@x] | | captured_variables.rb:178:9:178:10 | [post] self [@x] | semmle.label | [post] self [@x] | | captured_variables.rb:178:14:178:22 | call to taint | semmle.label | call to taint | | captured_variables.rb:181:5:183:7 | &block [captured self, @x] | semmle.label | &block [captured self, @x] | @@ -374,7 +374,7 @@ nodes | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | semmle.label | [post] fn1 [captured y] | | captured_variables.rb:226:5:226:7 | fn1 [captured x] | semmle.label | fn1 [captured x] | | captured_variables.rb:227:10:227:10 | y | semmle.label | y | -| instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | semmle.label | self in set_field [Return] [@field] | +| instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | semmle.label | self in set_field [Reverse] [@field] | | instance_variables.rb:10:19:10:19 | x | semmle.label | x | | instance_variables.rb:11:9:11:14 | [post] self [@field] | semmle.label | [post] self [@field] | | instance_variables.rb:11:18:11:18 | x | semmle.label | x | @@ -388,12 +388,12 @@ nodes | instance_variables.rb:19:12:19:21 | call to taint | semmle.label | call to taint | | instance_variables.rb:20:10:20:13 | @foo | semmle.label | @foo | | instance_variables.rb:20:10:20:13 | self [@foo] | semmle.label | self [@foo] | -| instance_variables.rb:22:5:25:7 | self in initialize [Return] [@field] | semmle.label | self in initialize [Return] [@field] | +| instance_variables.rb:22:5:25:7 | self in initialize [Reverse] [@field] | semmle.label | self in initialize [Reverse] [@field] | | instance_variables.rb:22:20:22:24 | field | semmle.label | field | | instance_variables.rb:23:9:23:14 | [post] self [@field] | semmle.label | [post] self [@field] | | instance_variables.rb:23:18:23:22 | field | semmle.label | field | | instance_variables.rb:24:9:24:17 | call to taint | semmle.label | call to taint | -| instance_variables.rb:27:5:29:7 | self in call_initialize [Return] [@field] | semmle.label | self in call_initialize [Return] [@field] | +| instance_variables.rb:27:5:29:7 | self in call_initialize [Reverse] [@field] | semmle.label | self in call_initialize [Reverse] [@field] | | instance_variables.rb:27:25:27:29 | field | semmle.label | field | | instance_variables.rb:28:9:28:25 | [post] self [@field] | semmle.label | [post] self [@field] | | instance_variables.rb:28:9:28:25 | call to initialize | semmle.label | call to initialize | @@ -457,7 +457,7 @@ nodes | instance_variables.rb:96:6:96:19 | call to get_field | semmle.label | call to get_field | | instance_variables.rb:97:6:97:10 | foo10 [@field] | semmle.label | foo10 [@field] | | instance_variables.rb:97:6:97:20 | call to get_field | semmle.label | call to get_field | -| instance_variables.rb:99:18:99:18 | x [Return] [@field] | semmle.label | x [Return] [@field] | +| instance_variables.rb:99:18:99:18 | x [Reverse] [@field] | semmle.label | x [Reverse] [@field] | | instance_variables.rb:100:5:100:5 | [post] x [@field] | semmle.label | [post] x [@field] | | instance_variables.rb:100:17:100:25 | call to taint | semmle.label | call to taint | | instance_variables.rb:104:14:104:18 | [post] foo11 [@field] | semmle.label | [post] foo11 [@field] | @@ -485,21 +485,21 @@ nodes subpaths | captured_variables.rb:20:25:20:34 | call to taint | captured_variables.rb:15:28:15:28 | x | captured_variables.rb:16:5:18:5 | -> { ... } [captured x] | captured_variables.rb:20:2:20:34 | call to capture_escape_return1 [captured x] | | captured_variables.rb:27:48:27:57 | call to taint | captured_variables.rb:22:28:22:28 | x | captured_variables.rb:23:5:25:5 | -> { ... } [captured x] | captured_variables.rb:27:25:27:57 | call to capture_escape_return2 [captured x] | -| captured_variables.rb:66:15:66:22 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | captured_variables.rb:66:1:66:3 | [post] foo [@field] | -| captured_variables.rb:66:15:66:22 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | captured_variables.rb:66:1:66:3 | [post] foo [@field] | +| captured_variables.rb:66:15:66:22 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | captured_variables.rb:66:1:66:3 | [post] foo [@field] | +| captured_variables.rb:66:15:66:22 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | captured_variables.rb:66:1:66:3 | [post] foo [@field] | | captured_variables.rb:68:10:68:12 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | captured_variables.rb:68:10:68:22 | call to get_field | | captured_variables.rb:68:10:68:12 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | captured_variables.rb:68:10:68:22 | call to get_field | -| captured_variables.rb:69:19:69:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | captured_variables.rb:69:5:69:7 | [post] foo [@field] | -| captured_variables.rb:69:19:69:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | captured_variables.rb:69:5:69:7 | [post] foo [@field] | +| captured_variables.rb:69:19:69:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | captured_variables.rb:69:5:69:7 | [post] foo [@field] | +| captured_variables.rb:69:19:69:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | captured_variables.rb:69:5:69:7 | [post] foo [@field] | | captured_variables.rb:72:6:72:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | captured_variables.rb:72:6:72:18 | call to get_field | | captured_variables.rb:72:6:72:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | captured_variables.rb:72:6:72:18 | call to get_field | -| captured_variables.rb:79:23:79:30 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | captured_variables.rb:79:9:79:11 | [post] foo [@field] | -| captured_variables.rb:79:23:79:30 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | captured_variables.rb:79:9:79:11 | [post] foo [@field] | +| captured_variables.rb:79:23:79:30 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | captured_variables.rb:79:9:79:11 | [post] foo [@field] | +| captured_variables.rb:79:23:79:30 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | captured_variables.rb:79:9:79:11 | [post] foo [@field] | | captured_variables.rb:83:6:83:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | captured_variables.rb:83:6:83:18 | call to get_field | | captured_variables.rb:83:6:83:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | captured_variables.rb:83:6:83:18 | call to get_field | | captured_variables.rb:98:13:98:20 | call to taint | captured_variables.rb:93:17:93:17 | x | captured_variables.rb:94:5:96:5 | -> { ... } [captured x] | captured_variables.rb:98:1:98:21 | call to capture_arg [captured x] | | captured_variables.rb:226:5:226:7 | fn1 [captured x] | captured_variables.rb:223:13:223:13 | x | captured_variables.rb:223:13:223:13 | x | captured_variables.rb:226:5:226:7 | [post] fn1 [captured y] | -| instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:22:5:25:7 | self in initialize [Return] [@field] | instance_variables.rb:28:9:28:25 | [post] self [@field] | +| instance_variables.rb:28:20:28:24 | field | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:22:5:25:7 | self in initialize [Reverse] [@field] | instance_variables.rb:28:9:28:25 | [post] self [@field] | | instance_variables.rb:33:13:33:13 | x | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:33:9:33:14 | call to new [@field] | | instance_variables.rb:36:10:36:23 | call to new [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:36:10:36:33 | call to get_field | | instance_variables.rb:36:10:36:23 | call to new [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:36:10:36:33 | call to get_field | @@ -507,48 +507,48 @@ subpaths | instance_variables.rb:39:6:39:23 | call to bar [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:39:6:39:33 | call to get_field | | instance_variables.rb:39:6:39:23 | call to bar [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:39:6:39:33 | call to get_field | | instance_variables.rb:39:14:39:22 | call to taint | instance_variables.rb:31:18:31:18 | x | instance_variables.rb:33:9:33:14 | call to new [@field] | instance_variables.rb:39:6:39:23 | call to bar [@field] | -| instance_variables.rb:54:15:54:23 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:54:1:54:3 | [post] foo [@field] | -| instance_variables.rb:54:15:54:23 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:54:1:54:3 | [post] foo [@field] | +| instance_variables.rb:54:15:54:23 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:54:1:54:3 | [post] foo [@field] | +| instance_variables.rb:54:15:54:23 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:54:1:54:3 | [post] foo [@field] | | instance_variables.rb:55:6:55:8 | foo [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:55:6:55:18 | call to get_field | | instance_variables.rb:55:6:55:8 | foo [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:55:6:55:18 | call to get_field | -| instance_variables.rb:58:15:58:22 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:58:1:58:3 | [post] bar [@field] | -| instance_variables.rb:58:15:58:22 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:58:1:58:3 | [post] bar [@field] | +| instance_variables.rb:58:15:58:22 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:58:1:58:3 | [post] bar [@field] | +| instance_variables.rb:58:15:58:22 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:58:1:58:3 | [post] bar [@field] | | instance_variables.rb:59:6:59:8 | bar [@field] | instance_variables.rb:16:5:18:7 | self in inc_field [@field] | instance_variables.rb:16:5:18:7 | self in inc_field [@field] | instance_variables.rb:59:6:59:18 | call to inc_field | | instance_variables.rb:59:6:59:8 | bar [@field] | instance_variables.rb:16:5:18:7 | self in inc_field [@field] | instance_variables.rb:17:9:17:14 | [post] self [@field] | instance_variables.rb:59:6:59:18 | call to inc_field | | instance_variables.rb:67:6:67:9 | foo2 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:67:6:67:19 | call to get_field | | instance_variables.rb:67:6:67:9 | foo2 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:67:6:67:19 | call to get_field | -| instance_variables.rb:70:16:70:24 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | -| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | -| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | -| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | +| instance_variables.rb:70:16:70:24 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | +| instance_variables.rb:70:16:70:24 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:70:1:70:4 | [post] foo3 [@field] | +| instance_variables.rb:78:18:78:26 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | +| instance_variables.rb:78:18:78:26 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:78:2:78:5 | [post] foo5 [@field] | | instance_variables.rb:79:6:79:9 | foo5 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:79:6:79:19 | call to get_field | | instance_variables.rb:79:6:79:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:79:6:79:19 | call to get_field | -| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | -| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | +| instance_variables.rb:82:32:82:40 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | +| instance_variables.rb:82:32:82:40 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:82:15:82:18 | [post] foo6 [@field] | | instance_variables.rb:83:6:83:9 | foo3 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:83:6:83:19 | call to get_field | | instance_variables.rb:83:6:83:9 | foo3 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:83:6:83:19 | call to get_field | | instance_variables.rb:84:6:84:9 | foo5 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:84:6:84:19 | call to get_field | | instance_variables.rb:84:6:84:9 | foo5 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:84:6:84:19 | call to get_field | | instance_variables.rb:85:6:85:9 | foo6 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:85:6:85:19 | call to get_field | | instance_variables.rb:85:6:85:9 | foo6 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:85:6:85:19 | call to get_field | -| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | -| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:89:15:89:18 | [post] foo7 [@field] | +| instance_variables.rb:89:45:89:53 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:89:25:89:28 | [post] foo8 [@field] | | instance_variables.rb:90:6:90:9 | foo7 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:90:6:90:19 | call to get_field | | instance_variables.rb:90:6:90:9 | foo7 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:90:6:90:19 | call to get_field | | instance_variables.rb:91:6:91:9 | foo8 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:91:6:91:19 | call to get_field | | instance_variables.rb:91:6:91:9 | foo8 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:91:6:91:19 | call to get_field | -| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | -| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:95:22:95:25 | [post] foo9 [@field] | +| instance_variables.rb:95:53:95:61 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:95:32:95:36 | [post] foo10 [@field] | | instance_variables.rb:96:6:96:9 | foo9 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:96:6:96:19 | call to get_field | | instance_variables.rb:96:6:96:9 | foo9 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:96:6:96:19 | call to get_field | | instance_variables.rb:97:6:97:10 | foo10 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:97:6:97:20 | call to get_field | | instance_variables.rb:97:6:97:10 | foo10 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:97:6:97:20 | call to get_field | -| instance_variables.rb:100:17:100:25 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Return] [@field] | instance_variables.rb:100:5:100:5 | [post] x [@field] | -| instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Return] [@field] | instance_variables.rb:100:5:100:5 | [post] x [@field] | +| instance_variables.rb:100:17:100:25 | call to taint | captured_variables.rb:57:19:57:19 | x | captured_variables.rb:57:5:59:7 | self in set_field [Reverse] [@field] | instance_variables.rb:100:5:100:5 | [post] x [@field] | +| instance_variables.rb:100:17:100:25 | call to taint | instance_variables.rb:10:19:10:19 | x | instance_variables.rb:10:5:12:7 | self in set_field [Reverse] [@field] | instance_variables.rb:100:5:100:5 | [post] x [@field] | | instance_variables.rb:105:6:105:10 | foo11 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:105:6:105:20 | call to get_field | | instance_variables.rb:105:6:105:10 | foo11 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:105:6:105:20 | call to get_field | | instance_variables.rb:109:6:109:10 | foo12 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:109:6:109:20 | call to get_field | @@ -558,7 +558,7 @@ subpaths | instance_variables.rb:116:17:116:25 | call to taint | instance_variables.rb:22:20:22:24 | field | instance_variables.rb:23:9:23:14 | [post] self [@field] | instance_variables.rb:116:9:116:26 | call to new [@field] | | instance_variables.rb:117:6:117:10 | foo15 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:117:6:117:20 | call to get_field | | instance_variables.rb:117:6:117:10 | foo15 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:117:6:117:20 | call to get_field | -| instance_variables.rb:119:28:119:36 | call to taint | instance_variables.rb:27:25:27:29 | field | instance_variables.rb:27:5:29:7 | self in call_initialize [Return] [@field] | instance_variables.rb:119:6:119:10 | [post] foo16 [@field] | +| instance_variables.rb:119:28:119:36 | call to taint | instance_variables.rb:27:25:27:29 | field | instance_variables.rb:27:5:29:7 | self in call_initialize [Reverse] [@field] | instance_variables.rb:119:6:119:10 | [post] foo16 [@field] | | instance_variables.rb:120:6:120:10 | foo16 [@field] | captured_variables.rb:60:5:62:7 | self in get_field [@field] | captured_variables.rb:61:9:61:21 | return | instance_variables.rb:120:6:120:20 | call to get_field | | instance_variables.rb:120:6:120:10 | foo16 [@field] | instance_variables.rb:13:5:15:7 | self in get_field [@field] | instance_variables.rb:14:9:14:21 | return | instance_variables.rb:120:6:120:20 | call to get_field | testFailures diff --git a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected index f665080a3293..cea97d47a951 100644 --- a/ruby/ql/test/library-tests/dataflow/params/params-flow.expected +++ b/ruby/ql/test/library-tests/dataflow/params/params-flow.expected @@ -159,14 +159,14 @@ edges | params_flow.rb:137:11:137:43 | call to [] [element 1] | params_flow.rb:137:10:137:43 | * ... [element 1] | provenance | | | params_flow.rb:137:23:137:31 | call to taint | params_flow.rb:137:11:137:43 | call to [] [element 1] | provenance | | | params_flow.rb:153:28:153:29 | p2 | params_flow.rb:154:18:154:19 | p2 | provenance | | -| params_flow.rb:154:5:154:6 | [post] p1 [element 0] | params_flow.rb:153:23:153:24 | p1 [Return] [element 0] | provenance | | +| params_flow.rb:154:5:154:6 | [post] p1 [element 0] | params_flow.rb:153:23:153:24 | p1 [Reverse] [element 0] | provenance | | | params_flow.rb:154:18:154:19 | p2 | params_flow.rb:154:5:154:6 | [post] p1 [element 0] | provenance | | | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | params_flow.rb:165:6:165:7 | p1 [element 0] | provenance | | | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | provenance | | | params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | provenance | | | params_flow.rb:165:6:165:7 | p1 [element 0] | params_flow.rb:165:6:165:10 | ...[...] | provenance | | | params_flow.rb:181:28:181:29 | p2 | params_flow.rb:182:18:182:19 | p2 | provenance | | -| params_flow.rb:182:5:182:6 | [post] p1 [element 0] | params_flow.rb:181:24:181:25 | p1 [Return] [element 0] | provenance | | +| params_flow.rb:182:5:182:6 | [post] p1 [element 0] | params_flow.rb:181:24:181:25 | p1 [Reverse] [element 0] | provenance | | | params_flow.rb:182:18:182:19 | p2 | params_flow.rb:182:5:182:6 | [post] p1 [element 0] | provenance | | | params_flow.rb:192:20:192:21 | [post] p1 [element 0] | params_flow.rb:193:6:193:7 | p1 [element 0] | provenance | | | params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | provenance | | @@ -353,7 +353,7 @@ nodes | params_flow.rb:137:10:137:43 | * ... [element 1] | semmle.label | * ... [element 1] | | params_flow.rb:137:11:137:43 | call to [] [element 1] | semmle.label | call to [] [element 1] | | params_flow.rb:137:23:137:31 | call to taint | semmle.label | call to taint | -| params_flow.rb:153:23:153:24 | p1 [Return] [element 0] | semmle.label | p1 [Return] [element 0] | +| params_flow.rb:153:23:153:24 | p1 [Reverse] [element 0] | semmle.label | p1 [Reverse] [element 0] | | params_flow.rb:153:28:153:29 | p2 | semmle.label | p2 | | params_flow.rb:154:5:154:6 | [post] p1 [element 0] | semmle.label | [post] p1 [element 0] | | params_flow.rb:154:18:154:19 | p2 | semmle.label | p2 | @@ -361,7 +361,7 @@ nodes | params_flow.rb:164:31:164:39 | call to taint | semmle.label | call to taint | | params_flow.rb:165:6:165:7 | p1 [element 0] | semmle.label | p1 [element 0] | | params_flow.rb:165:6:165:10 | ...[...] | semmle.label | ...[...] | -| params_flow.rb:181:24:181:25 | p1 [Return] [element 0] | semmle.label | p1 [Return] [element 0] | +| params_flow.rb:181:24:181:25 | p1 [Reverse] [element 0] | semmle.label | p1 [Reverse] [element 0] | | params_flow.rb:181:28:181:29 | p2 | semmle.label | p2 | | params_flow.rb:182:5:182:6 | [post] p1 [element 0] | semmle.label | [post] p1 [element 0] | | params_flow.rb:182:18:182:19 | p2 | semmle.label | p2 | @@ -370,8 +370,8 @@ nodes | params_flow.rb:193:6:193:7 | p1 [element 0] | semmle.label | p1 [element 0] | | params_flow.rb:193:6:193:10 | ...[...] | semmle.label | ...[...] | subpaths -| params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | params_flow.rb:153:23:153:24 | p1 [Return] [element 0] | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | -| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | params_flow.rb:181:24:181:25 | p1 [Return] [element 0] | params_flow.rb:192:20:192:21 | [post] p1 [element 0] | +| params_flow.rb:164:31:164:39 | call to taint | params_flow.rb:153:28:153:29 | p2 | params_flow.rb:153:23:153:24 | p1 [Reverse] [element 0] | params_flow.rb:164:23:164:24 | [post] p1 [element 0] | +| params_flow.rb:192:24:192:32 | call to taint | params_flow.rb:181:28:181:29 | p2 | params_flow.rb:181:24:181:25 | p1 [Reverse] [element 0] | params_flow.rb:192:20:192:21 | [post] p1 [element 0] | testFailures #select | params_flow.rb:10:10:10:11 | p1 | params_flow.rb:14:12:14:19 | call to taint | params_flow.rb:10:10:10:11 | p1 | $@ | params_flow.rb:14:12:14:19 | call to taint | call to taint | diff --git a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected index b207b7299419..6b3bcb2e00bf 100644 --- a/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected +++ b/ruby/ql/test/library-tests/frameworks/action_controller/params-flow.expected @@ -30,8 +30,8 @@ edges | filter_flow.rb:83:3:84:5 | self in b [@foo] | filter_flow.rb:86:3:88:5 | self in c [@foo] | provenance | | | filter_flow.rb:86:3:88:5 | self in c [@foo] | filter_flow.rb:87:11:87:14 | self [@foo] | provenance | | | filter_flow.rb:87:11:87:14 | self [@foo] | filter_flow.rb:87:11:87:14 | @foo | provenance | | -| filter_flow.rb:90:3:92:5 | self in taint_foo [Return] [@foo] | filter_flow.rb:80:5:80:8 | [post] self [@foo] | provenance | | -| filter_flow.rb:91:5:91:8 | [post] self [@foo] | filter_flow.rb:90:3:92:5 | self in taint_foo [Return] [@foo] | provenance | | +| filter_flow.rb:90:3:92:5 | self in taint_foo [Reverse] [@foo] | filter_flow.rb:80:5:80:8 | [post] self [@foo] | provenance | | +| filter_flow.rb:91:5:91:8 | [post] self [@foo] | filter_flow.rb:90:3:92:5 | self in taint_foo [Reverse] [@foo] | provenance | | | filter_flow.rb:91:12:91:17 | call to params | filter_flow.rb:91:12:91:23 | ...[...] | provenance | | | filter_flow.rb:91:12:91:23 | ...[...] | filter_flow.rb:91:5:91:8 | [post] self [@foo] | provenance | | | params_flow.rb:3:10:3:15 | call to params | params_flow.rb:3:10:3:19 | ...[...] | provenance | | @@ -141,7 +141,7 @@ nodes | filter_flow.rb:86:3:88:5 | self in c [@foo] | semmle.label | self in c [@foo] | | filter_flow.rb:87:11:87:14 | @foo | semmle.label | @foo | | filter_flow.rb:87:11:87:14 | self [@foo] | semmle.label | self [@foo] | -| filter_flow.rb:90:3:92:5 | self in taint_foo [Return] [@foo] | semmle.label | self in taint_foo [Return] [@foo] | +| filter_flow.rb:90:3:92:5 | self in taint_foo [Reverse] [@foo] | semmle.label | self in taint_foo [Reverse] [@foo] | | filter_flow.rb:91:5:91:8 | [post] self [@foo] | semmle.label | [post] self [@foo] | | filter_flow.rb:91:12:91:17 | call to params | semmle.label | call to params | | filter_flow.rb:91:12:91:23 | ...[...] | semmle.label | ...[...] | diff --git a/shared/dataflow/codeql/dataflow/DataFlow.qll b/shared/dataflow/codeql/dataflow/DataFlow.qll index 400ed5746ebd..740409a345e0 100644 --- a/shared/dataflow/codeql/dataflow/DataFlow.qll +++ b/shared/dataflow/codeql/dataflow/DataFlow.qll @@ -363,6 +363,13 @@ module Configs Lang> { */ predicate isSink(Node sink); + /** + * INTERNAL: Do not use. + * + * Holds if `sink` is a relevant reverse data flow sink. + */ + default predicate isSinkReverse(Node sink) { none() } + /** * Holds if data flow through `node` is prohibited. This completely removes * `node` from the data flow graph. @@ -465,6 +472,20 @@ module Configs Lang> { */ default predicate isSink(Node sink) { none() } + /** + * INTERNAL: Do not use. + * + * Holds if `sink` is a relevant reverse data flow sink for any state. + */ + default predicate isSinkReverse(Node sink) { none() } + + /** + * INTERNAL: Do not use. + * + * Holds if `sink` is a relevant reverse data flow sink accepting `state`. + */ + default predicate isSinkReverse(Node sink, FlowState state) { none() } + /** * Holds if data flow through `node` is prohibited. This completely removes * `node` from the data flow graph. diff --git a/shared/dataflow/codeql/dataflow/TaintTracking.qll b/shared/dataflow/codeql/dataflow/TaintTracking.qll index 8247255038c0..23de910e6e94 100644 --- a/shared/dataflow/codeql/dataflow/TaintTracking.qll +++ b/shared/dataflow/codeql/dataflow/TaintTracking.qll @@ -179,6 +179,10 @@ module TaintFlowMake< Config::isSink(sink, state.getState()) } + predicate isSinkReverse(DataFlowLang::Node sink, FlowState state) { + Config::isSinkReverse(sink, state.getState()) + } + predicate isBarrier(DataFlowLang::Node node, FlowState state) { Config::isBarrier(node, state.getState()) } diff --git a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll index 1eaa84505419..52bbbd3e1123 100644 --- a/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/ContentDataFlowImpl.qll @@ -46,6 +46,13 @@ module MakeImplContentDataFlow Lang> { */ predicate isSink(Node sink); + /** + * INTERNAL: Do not use. + * + * Holds if `sink` is a relevant reverse data flow sink. + */ + default predicate isSinkReverse(Node sink) { none() } + /** * Holds if data may flow from `node1` to `node2` in addition to the normal data-flow steps. */ @@ -98,6 +105,15 @@ module MakeImplContentDataFlow Lang> { ) } + predicate isSinkReverse(Node sink, FlowState state) { + ContentConfig::isSinkReverse(sink) and + ( + state instanceof InitState or + state instanceof StoreState or + state instanceof ReadState + ) + } + predicate isAdditionalFlowStep(Node node1, FlowState state1, Node node2, FlowState state2) { storeStep(node1, state1, _, node2, state2) or readStep(node1, state1, _, node2, state2) or @@ -202,7 +218,7 @@ module MakeImplContentDataFlow Lang> { Node node1, State state1, ContentSet c, Node node2, StoreState state2 ) { exists(boolean preservesValue, int size | - storeSet(node1, c, node2, _, _) and + storeSet(node1, c, node2) and ContentConfig::isRelevantContent(c) and state2.decode(size + 1, preservesValue) | @@ -359,6 +375,8 @@ module MakeImplContentDataFlow Lang> { or FlowConfig::isSink(node.getNode(), node.getState()) or + FlowConfig::isSinkReverse(node.getNode(), node.getState()) + or excludeStep(node, _) or Flow::PathGraph::subpaths(_, _, node, _) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll index 1373345423f7..99fbe1cb2375 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImpl.qll @@ -40,6 +40,16 @@ module MakeImpl Lang> { */ predicate isSink(Node sink); + /** + * Holds if `sink` is a relevant reverse data flow sink accepting `state`. + */ + predicate isSinkReverse(Node sink, FlowState state); + + /** + * Holds if `sink` is a relevant reverse data flow sink for any state. + */ + predicate isSinkReverse(Node sink); + /** * Holds if data flow through `node` is prohibited. This completely removes * `node` from the data flow graph. @@ -149,6 +159,10 @@ module MakeImpl Lang> { predicate isSink(Node sink, FlowState state) { Config::isSink(sink) and exists(state) } + predicate isSinkReverse(Node sink, FlowState state) { + Config::isSinkReverse(sink) and exists(state) + } + predicate isBarrier(Node node, FlowState state) { none() } predicate isBarrierIn(Node node, FlowState state) { none() } @@ -281,7 +295,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fullBarrier(NodeEx node) { - exists(Node n | node.asNode() = n | + exists(Node n | node.asNodeOrReverse() = n | Config::isBarrier(n) or Config::isBarrierIn(n) and @@ -295,7 +309,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate stateBarrier(NodeEx node, FlowState state) { - exists(Node n | node.asNode() = n | + exists(Node n | node.asNodeOrReverse() = n | Config::isBarrier(n, state) or Config::isBarrierIn(n, state) and @@ -321,6 +335,13 @@ module MakeImpl Lang> { not stateBarrier(node, state) } + pragma[nomagic] + private predicate sinkNodeWithStateReverse(NodeEx node, FlowState state) { + Config::isSinkReverse(node.asNodeReverse(), state) and + not fullBarrier(node) and + not stateBarrier(node, state) + } + /** Provides the relevant barriers for a step from `node1` to `node2`. */ bindingset[node1, node2] private predicate stepFilter(NodeEx node1, NodeEx node2) { @@ -506,8 +527,8 @@ module MakeImpl Lang> { */ bindingset[p, kind] private predicate parameterFlowThroughAllowed(ParamNodeEx p, ReturnKindExt kind) { - exists(ParameterPosition pos | p.isParameterOf(_, pos) | - not kind.(ParamUpdateReturnKind).getPosition() = pos + exists(ParameterPositionEx pos | p.isParameterOf(_, pos) | + not kind.(ParamUpdateReturnKind).getPosition() = pos.asParameterPosition() or allowParameterReturnInSelfEx(p) ) @@ -574,22 +595,24 @@ module MakeImpl Lang> { // inline to reduce the number of iterations pragma[inline] private predicate fwdFlowIn(DataFlowCall call, NodeEx arg, Cc cc, ParamNodeEx p) { - // call context cannot help reduce virtual dispatch - fwdFlow(arg, cc) and - viableParamArgEx(call, p, arg) and - not fullBarrier(p) and - ( - cc = false + exists(DataFlowCall underlyingCall | underlyingCall = call | + // call context cannot help reduce virtual dispatch + fwdFlow(arg, cc) and + viableParamArgEx(call, p, arg) and + not fullBarrier(p) and + ( + cc = false + or + cc = true and + not CachedCallContextSensitivity::reducedViableImplInCallContext(underlyingCall, _, _) + ) or - cc = true and - not CachedCallContextSensitivity::reducedViableImplInCallContext(call, _, _) - ) - or - // call context may help reduce virtual dispatch - exists(DataFlowCallable target | - fwdFlowInReducedViableImplInSomeCallContext(call, arg, p, target) and - target = viableImplInSomeFwdFlowCallContextExt(call) and - cc = true + // call context may help reduce virtual dispatch + exists(DataFlowCallable target | + fwdFlowInReducedViableImplInSomeCallContext(call, arg, p, target) and + target = viableImplInSomeFwdFlowCallContextExt(underlyingCall) and + cc = true + ) ) } @@ -705,6 +728,14 @@ module MakeImpl Lang> { fwdFlow(node) and fwdFlowState(state) and sinkNodeWithState(node, state) + or + fwdFlow(pragma[only_bind_into](node)) and + fwdFlowState(state) and + Config::isSinkReverse(node.asNodeReverse()) + or + fwdFlow(node) and + fwdFlowState(state) and + sinkNodeWithStateReverse(node, state) } /** @@ -1023,7 +1054,7 @@ module MakeImpl Lang> { private predicate sinkModel(NodeEx node, string model) { sinkNode(node, _) and - exists(Node n | n = node.asNodeOrImplicitRead() | + exists(Node n | n = [node.asNodeOrImplicitRead(), node.asNodeReverse()] | knownSinkModel(n, model) or not knownSinkModel(n, _) and model = "" @@ -1139,11 +1170,8 @@ module MakeImpl Lang> { ) { exists(RetNodeEx ret | flowOutOfCallNodeCand1(call, ret, _, out) and - c = ret.getEnclosingCallable() - | + c = ret.getEnclosingCallable() and scope = getSecondLevelScopeEx(ret) - or - ret = TParamReturnNode(_, scope) ) } @@ -1887,7 +1915,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInNoFlowThrough( - ParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, TypOption stored + NormalParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, TypOption stored ) { FwdFlowInNoThrough::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, stored, _) } @@ -1989,9 +2017,13 @@ module MakeImpl Lang> { private module FwdTypeFlowInput implements TypeFlowInput { predicate enableTypeFlow = Param::enableTypeFlow/0; - predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeIn(call, c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(call, c) + } pragma[nomagic] private predicate dataFlowTakenCallEdgeIn0( @@ -2256,7 +2288,7 @@ module MakeImpl Lang> { ) or // flow into a callable - revFlowIn(_, _, node, state, ap) and + revFlowIn(_, _, node.(NormalArgNodeEx), state, ap) and returnCtx = TReturnCtxNone() and returnAp = apNone() or @@ -2267,14 +2299,15 @@ module MakeImpl Lang> { ) or // flow out of a callable - exists(ReturnPosition pos | - revFlowOut(_, node, pos, state, _, _, _, ap) and + exists(DataFlowCall call, ReturnPosition pos | + revFlowOut(call, node, pos, state, _, _, _, ap) and if returnFlowsThrough(node, pos, state, _, _, _, _, _, ap) then ( returnCtx = TReturnCtxMaybeFlowThrough(pos) and returnAp = apSome(ap) ) else ( - returnCtx = TReturnCtxNoFlowThrough() and returnAp = apNone() + returnCtx = TReturnCtxNoFlowThrough() and + returnAp = apNone() ) ) } @@ -2622,8 +2655,9 @@ module MakeImpl Lang> { FlowCheckNode() { revFlow(this, _, _) and ( - flowCheckNode(this) or - Config::neverSkip(this.asNode()) + flowCheckNode(this) + or + Config::neverSkip(this.asNodeOrReverse()) ) } } @@ -2979,8 +3013,16 @@ module MakeImpl Lang> { NodeEx toNormalSinkNodeEx() { exists(Node n | pragma[only_bind_out](node.asNodeOrImplicitRead()) = n and - (isRelevantSink(n) or isRelevantSink(n, _)) and result.asNode() = n + | + isRelevantSink(n) or isRelevantSink(n, _) + ) + or + exists(Node n | + node.asNodeReverse() = n and + result = node + | + Config::isSinkReverse(n) or Config::isSinkReverse(n, _) ) } @@ -3330,7 +3372,7 @@ module MakeImpl Lang> { } module StagePathGraph { - predicate edges(PathNodeImpl a, PathNodeImpl b, string key, string val) { + query predicate edges(PathNodeImpl a, PathNodeImpl b, string key, string val) { a.getASuccessorImpl(val) = b and key = "provenance" } @@ -3476,9 +3518,12 @@ module MakeImpl Lang> { /** Gets the underlying `Node`. */ final Node getNode() { super.getNodeEx().projectToNode() = result } + /** Gets the underlying `Node`, but only when it represents a reverse-flow node. */ + final Node getNodeReverse() { super.getNodeEx().asNodeReverse() = result } + /** Gets the parameter node through which data is returned, if any. */ final ParameterNode asParameterReturnNode() { - result = super.getNodeEx().asParamReturnNode() + result = super.getNodeEx().asNodeReverse() } /** Gets the `FlowState` of this node. */ @@ -3793,9 +3838,13 @@ module MakeImpl Lang> { ApOption apSome(Ap ap) { result = TApproxAccessPathFrontSome(ap) } private module CallContextSensitivityInput implements CallContextSensitivityInputSig { - predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeIn(call, c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(call, c) + } predicate reducedViableImplInCallContextCand = CachedCallContextSensitivity::reducedViableImplInCallContext/3; @@ -4193,9 +4242,13 @@ module MakeImpl Lang> { ApOption apSome(Ap ap) { result = TAccessPathApproxSome(ap) } private module CallContextSensitivityInput implements CallContextSensitivityInputSig { - predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeIn(call, c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(call, c) + } predicate reducedViableImplInCallContextCand = Stage3Param::reducedViableImplInCallContext/3; @@ -4389,9 +4442,13 @@ module MakeImpl Lang> { ApOption apSome(Ap ap) { result = ApOption::some(ap) } private module CallContextSensitivityInput implements CallContextSensitivityInputSig { - predicate relevantCallEdgeIn = PrevStage::relevantCallEdgeIn/2; + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeIn(call, c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(call, c) + } predicate reducedViableImplInCallContextCand = Stage5Param::reducedViableImplInCallContext/3; @@ -4813,7 +4870,9 @@ module MakeImpl Lang> { private predicate interestingCallableSink(DataFlowCallable c) { exists(Node n | c = getNodeEnclosingCallable(n) | isRelevantSink(n, _) or - isRelevantSink(n) + isRelevantSink(n) or + Config::isSinkReverse(n, _) or + Config::isSinkReverse(n) ) or exists(DataFlowCallable mid | interestingCallableSink(mid) and callableStep(c, mid)) @@ -4849,7 +4908,9 @@ module MakeImpl Lang> { ce1 = TCallable(getNodeEnclosingCallable(n)) | isRelevantSink(n, _) or - isRelevantSink(n) + isRelevantSink(n) or + Config::isSinkReverse(n, _) or + Config::isSinkReverse(n) ) } @@ -4917,6 +4978,11 @@ module MakeImpl Lang> { relevantState(state) and not fullBarrier(node) and not stateBarrier(node, state) + or + Config::isSinkReverse(node.asNodeReverse()) and + relevantState(state) and + not fullBarrier(node) and + not stateBarrier(node, state) } private newtype TSummaryCtx1 = @@ -5411,23 +5477,23 @@ module MakeImpl Lang> { pragma[noinline] private predicate partialPathIntoArg( - PartialPathNodeFwd mid, ParameterPosition ppos, FlowState state, CallContext cc, + PartialPathNodeFwd mid, ParameterPositionEx ppos, FlowState state, CallContext cc, DataFlowCall call, DataFlowType t, PartialAccessPath ap ) { - exists(ArgNode arg, ArgumentPosition apos | - arg = mid.getNodeEx().asNode() and + exists(ArgNodeEx arg, ArgumentPositionEx apos | + arg = mid.getNodeEx() and state = mid.getState() and cc = mid.getCallContext() and arg.argumentOf(call, apos) and t = mid.getType() and ap = mid.getAp() and - parameterMatch(ppos, apos) + parameterMatchEx(ppos, apos) ) } pragma[nomagic] private predicate partialPathIntoCallable0( - PartialPathNodeFwd mid, DataFlowCallable callable, ParameterPosition pos, FlowState state, + PartialPathNodeFwd mid, DataFlowCallable callable, ParameterPositionEx pos, FlowState state, CallContext outercc, DataFlowCall call, DataFlowType t, PartialAccessPath ap ) { partialPathIntoArg(mid, pos, state, outercc, call, t, ap) and @@ -5439,7 +5505,7 @@ module MakeImpl Lang> { CallContextCall innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, TSummaryCtx4 sc4, DataFlowCall call, DataFlowType t, PartialAccessPath ap ) { - exists(ParameterPosition pos, DataFlowCallable callable | + exists(ParameterPositionEx pos, DataFlowCallable callable | partialPathIntoCallable0(mid, callable, pos, state, outercc, call, t, ap) and p.isParameterOf(callable, pos) and sc1 = TSummaryCtx1Param(p) and @@ -5674,10 +5740,10 @@ module MakeImpl Lang> { pragma[nomagic] private predicate revPartialPathFlowsThrough( - ArgumentPosition apos, FlowState state, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, + ArgumentPositionEx apos, FlowState state, TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3, PartialAccessPath ap ) { - exists(PartialPathNodeRev mid, ParamNodeEx p, ParameterPosition ppos | + exists(PartialPathNodeRev mid, ParamNodeEx p, ParameterPositionEx ppos | mid.getNodeEx() = p and mid.getState() = state and p.getPosition() = ppos and @@ -5685,13 +5751,13 @@ module MakeImpl Lang> { sc2 = mid.getSummaryCtx2() and sc3 = mid.getSummaryCtx3() and ap = mid.getAp() and - parameterMatch(ppos, apos) + parameterMatchEx(ppos, apos) ) } pragma[nomagic] private predicate revPartialPathThroughCallable0( - DataFlowCall call, PartialPathNodeRev mid, ArgumentPosition pos, FlowState state, + DataFlowCall call, PartialPathNodeRev mid, ArgumentPositionEx pos, FlowState state, PartialAccessPath ap ) { exists(TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3 | @@ -5704,7 +5770,7 @@ module MakeImpl Lang> { private predicate revPartialPathThroughCallable( PartialPathNodeRev mid, ArgNodeEx node, FlowState state, PartialAccessPath ap ) { - exists(DataFlowCall call, ArgumentPosition pos | + exists(DataFlowCall call, ArgumentPositionEx pos | revPartialPathThroughCallable0(call, mid, pos, state, ap) and node.argumentOf(call, pos) ) diff --git a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll index 4016199ccec6..b0dc0bd2093f 100644 --- a/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll +++ b/shared/dataflow/codeql/dataflow/internal/DataFlowImplCommon.qll @@ -1,5 +1,6 @@ private import codeql.dataflow.DataFlow private import codeql.typetracking.TypeTracking as Tt +private import codeql.util.Boolean private import codeql.util.Location private import codeql.util.Option private import codeql.util.Unit @@ -83,62 +84,424 @@ module MakeImplCommon Lang> { private module TypeTrackingInput implements Tt::TypeTrackingInput { final class Node = Lang::Node; - class LocalSourceNode extends Node { - LocalSourceNode() { - storeStep(_, this, _) or - loadStep0(_, this, _) or - jumpStepCached(_, this) or - this instanceof ParamNode or - this instanceof OutNodeExt - } - } - - final private class LangContentSet = Lang::ContentSet; - - class Content extends LangContentSet { - string toString() { result = "Content" } - } - - class ContentFilter extends Unit { - Content getAMatchingContent() { none() } - } + /** Provides predicates for calculating flow-through summaries. */ + additional module FlowThrough { + /** + * The first flow-through approximation: + * + * - Input access paths are abstracted with a Boolean parameter + * that indicates (non-)emptiness. + */ + private module Cand { + /** + * Holds if `p` can flow to `node` in the same callable using only + * value-preserving steps. + * + * `read` indicates whether it is contents of `p` that can flow to `node`. + */ + pragma[nomagic] + private predicate parameterValueFlowCand(ParamNode p, Node node, boolean read) { + ( + p = node and + read = false + or + // local flow + exists(Node mid | + parameterValueFlowCand(p, mid, read) and + simpleLocalFlowStep(mid, node, _) and + validParameterAliasStep(mid, node) + ) + or + // read + exists(Node mid | + parameterValueFlowCand(p, mid, false) and + readSet(mid, _, node) and + read = true + ) + or + // flow through: no prior read + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, false) and + argumentValueFlowsThroughCand(arg, node, read) + ) + or + // flow through: no read inside method + exists(ArgNode arg | + parameterValueFlowArgCand(p, arg, read) and + argumentValueFlowsThroughCand(arg, node, false) + ) + ) and + not expectsContent(node, _) + } - predicate compatibleContents(Content storeContents, Content loadContents) { - storeContents.getAStoreContent() = loadContents.getAReadContent() - } + pragma[nomagic] + private predicate parameterValueFlowArgCand(ParamNode p, ArgNode arg, boolean read) { + parameterValueFlowCand(p, arg, read) + } - predicate simpleLocalSmallStep(Node node1, Node node2) { - simpleLocalFlowStepExt(node1, node2, _) - } + pragma[nomagic] + predicate parameterValueFlowsToPreUpdateCand(ParamNode p, PostUpdateNode n) { + parameterValueFlowCand(p, n.getPreUpdateNode(), false) + } - predicate levelStepNoCall(Node n1, LocalSourceNode n2) { none() } + /** + * Holds if `p` can flow to a return node of kind `kind` in the same + * callable using only value-preserving steps, not taking call contexts + * into account. + * + * `read` indicates whether it is contents of `p` that can flow to the return + * node. + */ + predicate parameterValueFlowReturnCand(ParamNode p, ReturnKind kind, boolean read) { + exists(ReturnNode ret | + parameterValueFlowCand(p, ret, read) and + kind = ret.getKind() + ) + } - predicate levelStepCall(Node n1, LocalSourceNode n2) { - argumentValueFlowsThrough(n1, TReadStepTypesNone(), n2, _) - } + pragma[nomagic] + private predicate argumentValueFlowsThroughCand0( + DataFlowCall call, ArgNode arg, ReturnKind kind, boolean read + ) { + exists(ParamNode param | viableParamArg(call, param, arg) | + parameterValueFlowReturnCand(param, kind, read) + ) + } - // TODO: support setters - predicate storeStep(Node n1, Node n2, Content f) { storeSet(n1, f, n2, _, _) } + /** + * Holds if `arg` flows to `out` through a call using only value-preserving steps, + * not taking call contexts into account. + * + * `read` indicates whether it is contents of `arg` that can flow to `out`. + */ + predicate argumentValueFlowsThroughCand(ArgNode arg, Node out, boolean read) { + exists(DataFlowCall call, ReturnKind kind | + argumentValueFlowsThroughCand0(call, arg, kind, read) and + out = getAnOutNode(call, kind) + ) + } - private predicate loadStep0(Node n1, Node n2, Content f) { - readSet(n1, f, n2) - or - argumentValueFlowsThrough(n1, TReadStepTypesSome(_, f, _), n2, _) - } + predicate cand(ParamNode p, Node n) { + parameterValueFlowCand(p, n, _) and + ( + parameterValueFlowReturnCand(p, _, _) + or + parameterValueFlowsToPreUpdateCand(p, _) + ) + } + } - predicate loadStep(Node n1, LocalSourceNode n2, Content f) { loadStep0(n1, n2, f) } + /** + * The final flow-through calculation: + * + * - Calculated flow is either value-preserving (`read = TReadStepTypesNone()`) + * or summarized as a single read step with before and after types recorded + * in the `ReadStepTypesOption` parameter. + * - Types are checked using the `compatibleTypes()` relation. + * - Call contexts are taken into account. + */ + private module Final { + /** + * Holds if `p` can flow to `node` in the same callable using only + * value-preserving steps and possibly a single read step, not taking + * call contexts into account. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + predicate parameterValueFlow( + ParamNode p, Node node, ReadStepTypesOption read, string model, + CachedCallContextSensitivity::CcNoCall ctx + ) { + parameterValueFlow0(p, node, read, model, ctx) and + Cand::cand(p, node) and + if node instanceof CastingNode + then + // normal flow through + read = TReadStepTypesNone() and + compatibleTypesFilter(getNodeDataFlowType(p), getNodeDataFlowType(node)) + or + // getter + compatibleTypesFilter(read.getContentType(), getNodeDataFlowType(node)) + else any() + } - predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() } + bindingset[model1, model2] + pragma[inline_late] + private string mergeModels(string model1, string model2) { + if model1 = "" then result = model2 else result = model1 + } - predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + pragma[nomagic] + private predicate parameterValueFlow0( + ParamNode p, Node node, ReadStepTypesOption read, string model, + CachedCallContextSensitivity::CcNoCall ctx + ) { + p = node and + Cand::cand(p, _) and + read = TReadStepTypesNone() and + model = "" and + CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx) + or + // local flow + exists(Node mid, string model1, string model2 | + parameterValueFlow(p, mid, read, model1, ctx) and + simpleLocalFlowStep(mid, node, model2) and + validParameterAliasStep(mid, node) and + model = mergeModels(model1, model2) + ) + or + // read + exists(Node mid | + parameterValueFlow(p, mid, TReadStepTypesNone(), model, ctx) and + readStepWithTypes(mid, read.getContainerType(), read.getContent(), node, + read.getContentType()) and + Cand::parameterValueFlowReturnCand(p, _, true) and + compatibleTypesFilter(getNodeDataFlowType(p), read.getContainerType()) + ) + or + parameterValueFlow0_0(TReadStepTypesNone(), p, node, read, model, ctx) + } - predicate withoutContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + bindingset[ctx1, ctx2] + pragma[inline_late] + private CachedCallContextSensitivity::CcNoCall mergeContexts( + CachedCallContextSensitivity::CcNoCall ctx1, CachedCallContextSensitivity::CcNoCall ctx2 + ) { + if CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx1) + then result = ctx2 + else + if CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx2) + then result = ctx1 + else + // check that `ctx1` is compatible with `ctx2` for at least _some_ outer call, + // and then (arbitrarily) continue with `ctx2` + exists(DataFlowCall someOuterCall, DataFlowCallable callable | + someOuterCall = + CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, ctx1) and + someOuterCall = + CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, ctx2) and + result = ctx2 + ) + } - predicate jumpStep(Node n1, LocalSourceNode n2) { jumpStepCached(n1, n2) } + pragma[nomagic] + private predicate parameterValueFlow0_0( + ReadStepTypesOption mustBeNone, ParamNode p, Node node, ReadStepTypesOption read, + string model, CachedCallContextSensitivity::CcNoCall ctx + ) { + exists( + ArgNode arg, string model1, string model2, CachedCallContextSensitivity::CcNoCall ctx1, + CachedCallContextSensitivity::CcNoCall ctx2 + | + model = mergeModels(model1, model2) and + ctx = mergeContexts(ctx1, ctx2) + | + // flow through: no prior read + parameterValueFlowArg(p, arg, mustBeNone, model1, ctx1) and + argumentValueFlowsThrough(arg, read, node, model2, ctx2) + or + // flow through: no read inside method + parameterValueFlowArg(p, arg, read, model1, ctx1) and + argumentValueFlowsThrough(arg, mustBeNone, node, model2, ctx2) + ) + } - predicate callStep(Node n1, LocalSourceNode n2) { viableParamArg(_, n2, n1) } + pragma[nomagic] + private predicate parameterValueFlowArg( + ParamNode p, ArgNode arg, ReadStepTypesOption read, string model, + CachedCallContextSensitivity::CcNoCall ctx + ) { + parameterValueFlow(p, arg, read, model, ctx) and + Cand::argumentValueFlowsThroughCand(arg, _, _) + } - predicate returnStep(Node n1, LocalSourceNode n2) { + pragma[nomagic] + private predicate argumentValueFlowsThrough0( + DataFlowCall call, ArgNode arg, ReturnKind kind, ReadStepTypesOption read, string model, + CachedCallContextSensitivity::CcNoCall outerCtx + ) { + exists( + ParamNode param, DataFlowCallable callable, + CachedCallContextSensitivity::CcNoCall innerCtx + | + viableParamArg(call, param, arg) and + parameterValueFlowReturn(param, kind, read, model, innerCtx) and + callable = nodeGetEnclosingCallable(param) and + outerCtx = CachedCallContextSensitivity::getCallContextReturn(callable, call) + | + CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(innerCtx) + or + call = + CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, innerCtx) + ) + } + + pragma[nomagic] + private predicate argumentValueFlowsThrough( + ArgNode arg, ReadStepTypesOption read, Node out, string model, + CachedCallContextSensitivity::CcNoCall ctx + ) { + exists(DataFlowCall call, ReturnKind kind | + argumentValueFlowsThrough0(call, arg, kind, read, model, ctx) and + out = getAnOutNode(call, kind) + | + // normal flow through + read = TReadStepTypesNone() and + compatibleTypesFilter(getNodeDataFlowType(arg), getNodeDataFlowType(out)) + or + // getter + compatibleTypesFilter(getNodeDataFlowType(arg), read.getContainerType()) and + compatibleTypesFilter(read.getContentType(), getNodeDataFlowType(out)) + ) + } + + /** + * Holds if `arg` flows to `out` through a call using only + * value-preserving steps and possibly a single read step, not taking + * call contexts into account. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + predicate argumentValueFlowsThrough( + ArgNode arg, ReadStepTypesOption read, Node out, string model + ) { + argumentValueFlowsThrough(arg, read, out, model, _) + } + + /** + * Holds if `p` can flow to a return node of kind `kind` in the same + * callable using only value-preserving steps and possibly a single read + * step. + * + * If a read step was taken, then `read` captures the `Content`, the + * container type, and the content type. + */ + private predicate parameterValueFlowReturn( + ParamNode p, ReturnKind kind, ReadStepTypesOption read, string model, + CachedCallContextSensitivity::CcNoCall ctx + ) { + exists(ReturnNode ret | + parameterValueFlow(p, ret, read, model, ctx) and + kind = ret.getKind() + ) + } + } + + import Final + } + + /** + * Holds if `p` can flow to the pre-update node associated with post-update + * node `n`, in the same callable, using only value-preserving steps. + */ + private predicate parameterValueFlowsToPreUpdate(ParamNode p, PostUpdateNode n) { + FlowThrough::parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone(), _, _) + } + + pragma[nomagic] + private predicate paramReturnNode( + PostUpdateNode n, ParamNode p, SndLevelScopeOption scope, ReturnKindExt k + ) { + exists(ParameterPosition pos | + parameterValueFlowsToPreUpdate(p, n) and + p.isParameterOf(_, pos) and + k = TParamUpdate(pos) and + scope = getSecondLevelScope0(n) + ) + } + + pragma[nomagic] + private predicate hasParamReturnKindIn( + PostUpdateNode n, ParamNode p, ReturnKindExt kind, DataFlowCallable c + ) { + c = getNodeEnclosingCallable(n) and + paramReturnNode(n, p, _, kind) + } + + cached + private module Cached { + cached + ReturnPosition getParamReturnPosition(PostUpdateNode n, ParamNode p) { + exists(ReturnKindExt kind, DataFlowCallable c | + hasParamReturnKindIn(n, p, kind, c) and + result = TReturnPosition0(c, kind) + ) + } + + cached + predicate argumentValueFlowsThrough(ArgNode arg, ReadStepTypesOption read, Node out) { + FlowThrough::argumentValueFlowsThrough(arg, read, out, _) + } + } + + private import Cached + + class LocalSourceNode extends Node { + LocalSourceNode() { + storeStep(_, this, _) or + loadStep0(_, this, _) or + jumpStepCached(_, this) or + this instanceof ParamNode or + this instanceof OutNodeExt + } + } + + final private class LangContentSet = Lang::ContentSet; + + class Content extends LangContentSet { + string toString() { result = "Content" } + } + + class ContentFilter extends Unit { + Content getAMatchingContent() { none() } + } + + predicate compatibleContents(Content storeContents, Content loadContents) { + storeContents.getAStoreContent() = loadContents.getAReadContent() + } + + predicate simpleLocalSmallStep(Node node1, Node node2) { + simpleLocalFlowStepCached(node1, node2, _) + } + + predicate levelStepNoCall(Node n1, LocalSourceNode n2) { none() } + + predicate levelStepCall(Node n1, LocalSourceNode n2) { + argumentValueFlowsThrough(n1, TReadStepTypesNone(), n2) + } + + // TODO: support setters + predicate storeStep(Node n1, Node n2, Content f) { + storeSet(n1, f, n2) + or + exists(Node pre1, Node pre2 | + pre1 = n1.(PostUpdateNode).getPreUpdateNode() and + pre2 = n2.(PostUpdateNode).getPreUpdateNode() and + argumentValueFlowsThrough(pre2, TReadStepTypesSome(_, f, _), pre1) + ) + } + + private predicate loadStep0(Node n1, Node n2, Content f) { + readSet(n1, f, n2) + or + argumentValueFlowsThrough(n1, TReadStepTypesSome(_, f, _), n2) + } + + predicate loadStep(Node n1, LocalSourceNode n2, Content f) { loadStep0(n1, n2, f) } + + predicate loadStoreStep(Node nodeFrom, Node nodeTo, Content f1, Content f2) { none() } + + predicate withContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + + predicate withoutContentStep(Node nodeFrom, LocalSourceNode nodeTo, ContentFilter f) { none() } + + predicate jumpStep(Node n1, LocalSourceNode n2) { jumpStepCached(n1, n2) } + + predicate callStep(Node n1, LocalSourceNode n2) { viableParamArg(_, n2, n1) } + + predicate returnStep(Node n1, LocalSourceNode n2) { viableReturnPosOut(_, [getValueReturnPosition(n1), getParamReturnPosition(n1, _)], n2) } @@ -147,6 +510,9 @@ module MakeImplCommon Lang> { private module TypeTracking = Tt::TypeTracking; + predicate argumentValueFlowsThroughExposedForCppOnly = + TypeTrackingInput::FlowThrough::argumentValueFlowsThrough/4; + /** * The cost limits for the `AccessPathFront` to `AccessPathApprox` expansion. * @@ -183,6 +549,18 @@ module MakeImplCommon Lang> { ) } + /** + * Holds if `arg` is an argument of `call` with an argument position that matches + * parameter position `ppos`. + */ + pragma[noinline] + predicate argumentPositionMatchEx(DataFlowCall call, ArgNodeEx arg, ParameterPositionEx ppos) { + exists(ArgumentPositionEx apos | + arg.argumentOf(call, apos) and + parameterMatchEx(ppos, apos) + ) + } + /** * Provides a simple data-flow analysis for resolving lambda calls. The analysis * currently excludes read-steps, store-steps, and flow-through. @@ -760,7 +1138,8 @@ module MakeImplCommon Lang> { CallContextNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call) { result = Input2::getSpecificCallContextReturn(c, call) or - not exists(Input2::getSpecificCallContextReturn(c, call)) and result = TAnyCallContext() + not exists(Input2::getSpecificCallContextReturn(c, call)) and + result = TAnyCallContext() } /** @@ -856,24 +1235,26 @@ module MakeImplCommon Lang> { string toString() { result = this.asNode().toString() or - exists(Node n | this.isImplicitReadNode(n) | result = n.toString() + " [Ext]") + exists(Node n | this.isImplicitReadNode(n) | result = n + " [Ext]") or - result = this.asParamReturnNode().toString() + " [Return]" + result = this.asNodeReverse() + " [Reverse]" } Node asNode() { this = TNodeNormal(result) } + Node asNodeReverse() { this = TNodeReverse(result) } + + Node asNodeOrReverse() { result = [this.asNode(), this.asNodeReverse()] } + /** Gets the corresponding Node if this is a normal node or its post-implicit read node. */ Node asNodeOrImplicitRead() { this = TNodeNormal(result) or this = TNodeImplicitRead(result) } predicate isImplicitReadNode(Node n) { this = TNodeImplicitRead(n) } - ParameterNode asParamReturnNode() { this = TParamReturnNode(result, _) } - Node projectToNode() { this = TNodeNormal(result) or this = TNodeImplicitRead(result) or - this = TParamReturnNode(result, _) + this = TNodeReverse(result) } pragma[nomagic] @@ -888,9 +1269,7 @@ module MakeImplCommon Lang> { pragma[nomagic] private DataFlowType getDataFlowType0() { - nodeDataFlowType(this.asNode(), result) - or - nodeDataFlowType(this.asParamReturnNode(), result) + nodeDataFlowType(this.asNodeOrReverse(), result) or isTopType(result) and this.isImplicitReadNode(_) } @@ -910,29 +1289,63 @@ module MakeImplCommon Lang> { CastingNodeEx() { castingNodeEx(this) } } - final class ArgNodeEx extends NodeEx { + final class ArgumentPositionEx extends TArgumentPositionEx { + ArgumentPosition asArgumentPosition() { this = TNormalArgumentPosition(result) } + + ReturnKindExt asReturnKind() { this = TReverseArgumentPosition(result) } + + string toString() { + result = this.asArgumentPosition().toString() + or + result = this.asReturnKind().toString() + " [Reverse]" + } + } + + final class ParameterPositionEx extends TParameterPositionEx { + ParameterPosition asParameterPosition() { this = TNormalParameterPosition(result) } + + ReturnKindExt asReturnKind() { this = TReverseParameterPosition(result) } + + string toString() { + result = this.asParameterPosition().toString() + or + result = this.asReturnKind().toString() + " [Reverse]" + } + } + + abstract class ArgNodeEx extends NodeEx { + abstract predicate argumentOf(DataFlowCall call, ArgumentPositionEx pos); + + DataFlowCall getCall() { this.argumentOf(result, _) } + } + + final class NormalArgNodeEx extends ArgNodeEx { private DataFlowCall call_; - private ArgumentPosition pos_; + private ArgumentPositionEx pos_; - ArgNodeEx() { this.asNode().(ArgNode).argumentOf(call_, pos_) } + NormalArgNodeEx() { this.asNode().(ArgNode).argumentOf(call_, pos_.asArgumentPosition()) } - predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { + override predicate argumentOf(DataFlowCall call, ArgumentPositionEx pos) { call = call_ and pos = pos_ } + } - DataFlowCall getCall() { result = call_ } + abstract class ParamNodeEx extends NodeEx { + abstract predicate isParameterOf(DataFlowCallable c, ParameterPositionEx pos); + + ParameterPositionEx getPosition() { this.isParameterOf(_, result) } } - final class ParamNodeEx extends NodeEx { + final class NormalParamNodeEx extends ParamNodeEx { private DataFlowCallable c_; - private ParameterPosition pos_; - - ParamNodeEx() { this.asNode().(ParamNode).isParameterOf(c_, pos_) } + private ParameterPositionEx pos_; - predicate isParameterOf(DataFlowCallable c, ParameterPosition pos) { c = c_ and pos = pos_ } + NormalParamNodeEx() { this.asNode().(ParamNode).isParameterOf(c_, pos_.asParameterPosition()) } - ParameterPosition getPosition() { result = pos_ } + override predicate isParameterOf(DataFlowCallable c, ParameterPositionEx pos) { + c = c_ and pos = pos_ + } } /** @@ -950,7 +1363,11 @@ module MakeImplCommon Lang> { } final class OutNodeEx extends NodeEx { - OutNodeEx() { this.asNode() instanceof OutNodeExt } + OutNodeEx() { + this.asNode() instanceof OutNodeExt + or + this.asNodeReverse() instanceof ArgNode + } } pragma[nomagic] @@ -961,41 +1378,223 @@ module MakeImplCommon Lang> { not exists(getSecondLevelScope(n)) } - cached - private module Cached { + /** + * todo + */ + module ReverseFlow { /** - * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to - * force a stage-dependency on the `DataFlowImplCommon.qll` stage and thereby - * collapsing the two stages. + * Holds if `p` can flow to `node` in the same callable using only + * value-preserving or read/store steps. */ - cached - predicate forceCachingInSameStage() { any() } - - cached - SndLevelScopeOption getSecondLevelScopeEx(NodeEx n) { - result = getSecondLevelScope0(n.asNode()) + pragma[nomagic] + predicate parameterValueFlow(ParamNode p, Node node, boolean flowThrough) { + p = node and + flowThrough = false + or + // local flow + exists(Node mid | + parameterValueFlow(p, mid, flowThrough) and + simpleLocalFlowStep(mid, node, _) and + validParameterAliasStep(mid, node) and + flowThrough = false + ) + or + // store + none() and + exists(Node mid | + parameterValueFlow(p, mid, flowThrough) and + Lang::storeStep(mid, _, node) + ) + or + // read + exists(Node mid | + parameterValueFlow(p, mid, flowThrough) and + Lang::readStep(mid, _, node) + ) + or + // flow through + exists(ArgNode arg | + parameterValueFlowArg(p, arg) and + argumentValueFlowsThrough(arg, node) and + flowThrough = true + ) } - cached - predicate nodeEnclosingCallable(Node n, DataFlowCallable c) { c = nodeGetEnclosingCallable(n) } - - cached - predicate callEnclosingCallable(DataFlowCall call, DataFlowCallable c) { - c = call.getEnclosingCallable() + pragma[nomagic] + private predicate parameterValueFlowArg(ParamNode p, ArgNode arg) { + parameterValueFlow(p, arg, _) } - cached - predicate nodeDataFlowType(Node n, DataFlowType t) { t = getNodeType(n) } + pragma[nomagic] + private predicate parameterValueFlowReturn(ParamNode p, ReturnKind kind) { + exists(ReturnNode ret | + parameterValueFlow(p, ret, _) and + kind = ret.getKind() + ) + } - cached - predicate compatibleTypesCached(DataFlowType t1, DataFlowType t2) { compatibleTypes(t1, t2) } + pragma[nomagic] + private predicate argumentValueFlowsThrough0(DataFlowCall call, ArgNode arg, ReturnKind kind) { + exists(ParamNode param | + viableParamArg(call, param, arg) and + parameterValueFlowReturn(param, kind) + ) + } - private predicate relevantType(DataFlowType t) { t = getNodeType(_) } + private predicate argumentValueFlowsThrough(ArgNode arg, Node out) { + exists(DataFlowCall call, ReturnKind kind | + argumentValueFlowsThrough0(call, arg, kind) and + out = getAnOutNode(call, kind) + ) + } - cached - predicate isTopType(DataFlowType t) { - strictcount(DataFlowType t0 | relevantType(t0)) = - strictcount(DataFlowType t0 | relevantType(t0) and compatibleTypesCached(t, t0)) + /** + * Holds if the local step from `arg` to `out` actually models a flow-through + * step. + */ + pragma[nomagic] + private predicate isFlowThroughLocalStep(ArgNode arg, OutNode out, string model) { + exists(DataFlowCall c | + out = getAnOutNode(c, _) and + arg.argumentOf(c, _) and + simpleLocalFlowStep(arg, out, model) + ) + } + + predicate localFlowStep(NodeEx node1, NodeEx node2, string model) { + // as soon as we take a reverse local step, forward out flow must be prohibited + // in order to prevent time travelling + exists(Node n1, Node n2 | + node1.asNodeReverse() = n1 and + node2.asNodeReverse() = n2 and + simpleLocalFlowStep(pragma[only_bind_into](n2), pragma[only_bind_into](n1), model) and + validParameterAliasStep(n2, n1) and + not isFlowThroughLocalStep(n2, n1, model) + ) + or + exists(Node n1, Node n2 | + node1.asNode().(PostUpdateNode).getPreUpdateNode() = n1 and + node2.asNode().(PostUpdateNode).getPreUpdateNode() = n2 and + isFlowThroughLocalStep(n2, n1, model) and + validParameterAliasStep(n2, n1) + ) + or + node1.asNode().(PostUpdateNode).getPreUpdateNode() = node2.asNodeReverse() and + model = "" + } + + predicate storeStep(NodeEx node1, Content c, NodeEx node2) { + exists(ContentSet cs | c = cs.getAStoreContent() | + exists(Node n1, Node n2 | + n1 = pragma[only_bind_into](node1.asNodeReverse()) and + n2 = pragma[only_bind_into](node2.asNodeReverse()) and + Lang::readStep(n2, cs, n1) and + // avoid overlap with `storeSet` + not exists(PostUpdateNode pn1, PostUpdateNode pn2 | + n1 = pn1.getPreUpdateNode() and + n2 = pn2.getPreUpdateNode() + ) + ) + ) + } + + predicate readStep(NodeEx node1, ContentSet c, NodeEx node2) { + none() and + Lang::storeStep(pragma[only_bind_into](node2.asNodeReverse()), c, + pragma[only_bind_into](node1.asNodeReverse())) + } + + final class ReverseArgNodeEx extends ArgNodeEx { + private DataFlowCall call_; + private ArgumentPositionEx pos_; + + ReverseArgNodeEx() { + this.asNode().(PostUpdateNode).getPreUpdateNode() = + getAnOutNode(call_, pos_.asReturnKind().(ValueReturnKind).getKind()) + } + + override predicate argumentOf(DataFlowCall call, ArgumentPositionEx pos) { + call = call_ and + pos = pos_ + } + } + + final class ReverseNodeEx extends NodeEx, TNodeReverse { + ParameterNode getAParameterNode() { parameterValueFlow(result, this.asNodeReverse(), _) } + } + + final class ReverseParamNodeEx extends ParamNodeEx, TNodeReverse { + private DataFlowCallable c_; + private ParameterPositionEx pos_; + + ReverseParamNodeEx() { + exists(ReturnPosition pos | + pos = getValueReturnPosition(this.asNodeReverse()) and + c_ = pos.getCallable() and + pos_.asReturnKind() = pos.getKind() + ) + } + + override predicate isParameterOf(DataFlowCallable c, ParameterPositionEx pos) { + c = c_ and pos = pos_ + } + + ParameterNode getAParameterNode() { parameterValueFlow(result, this.asNodeReverse(), _) } + } + } + + cached + private module Cached { + /** + * If needed, call this predicate from `DataFlowImplSpecific.qll` in order to + * force a stage-dependency on the `DataFlowImplCommon.qll` stage and thereby + * collapsing the two stages. + */ + cached + predicate forceCachingInSameStage() { any() } + + cached + newtype TArgumentPositionEx = + TNormalArgumentPosition(ArgumentPosition pos) or + TReverseArgumentPosition(ReturnKindExt pos) + + cached + newtype TParameterPositionEx = + TNormalParameterPosition(ParameterPosition pos) or + TReverseParameterPosition(ReturnKindExt pos) + + cached + predicate parameterMatchEx(ParameterPositionEx ppos, ArgumentPositionEx apos) { + parameterMatch(ppos.asParameterPosition(), apos.asArgumentPosition()) + or + ppos.asReturnKind() = apos.asReturnKind() + } + + cached + SndLevelScopeOption getSecondLevelScopeEx(RetNodeEx n) { + result = getSecondLevelScope0(n.asNodeOrReverse()) + } + + cached + predicate nodeEnclosingCallable(Node n, DataFlowCallable c) { c = nodeGetEnclosingCallable(n) } + + cached + predicate callEnclosingCallable(DataFlowCall call, DataFlowCallable c) { + c = call.getEnclosingCallable() + } + + cached + predicate nodeDataFlowType(Node n, DataFlowType t) { t = getNodeType(n) } + + cached + predicate compatibleTypesCached(DataFlowType t1, DataFlowType t2) { compatibleTypes(t1, t2) } + + private predicate relevantType(DataFlowType t) { t = getNodeType(_) } + + cached + predicate isTopType(DataFlowType t) { + strictcount(DataFlowType t0 | relevantType(t0)) = + strictcount(DataFlowType t0 | relevantType(t0) and compatibleTypesCached(t, t0)) } cached @@ -1008,10 +1607,7 @@ module MakeImplCommon Lang> { predicate clearsContentSet(NodeEx n, ContentSet c) { clearsContent(n.asNode(), c) } cached - predicate expectsContentCached(Node n, ContentSet c) { expectsContent(n, c) } - - cached - predicate expectsContentSet(NodeEx n, ContentSet c) { expectsContent(n.asNode(), c) } + predicate expectsContentSet(NodeEx n, ContentSet c) { expectsContent(n.asNodeOrReverse(), c) } cached predicate isUnreachableInCallCached(NodeRegion nr, DataFlowCall call) { @@ -1027,41 +1623,57 @@ module MakeImplCommon Lang> { cached predicate hiddenNode(NodeEx n) { - nodeIsHidden([n.asNode(), n.asParamReturnNode()]) + nodeIsHidden(n.asNodeOrReverse()) or n instanceof TNodeImplicitRead } + cached + OutNodeExt getAnOutNodeExt(DataFlowCall call, ReturnKindExt k) { + result = getAnOutNode(call, k.(ValueReturnKind).getKind()) + or + exists(ArgNode arg | + result.(PostUpdateNode).getPreUpdateNode() = arg and + arg.argumentOf(call, k.(ParamUpdateReturnKind).getAMatchingArgumentPosition()) + ) + } + cached OutNodeEx getAnOutNodeEx(DataFlowCall call, ReturnKindExt k) { - result.asNode() = getAnOutNodeExt(call, k) + exists(DataFlowCall c | + c = call.(DataFlowCall) and + result.asNode() = getAnOutNode(c, k.(ValueReturnKind).getKind()) + or + exists(ArgNode arg | + arg.argumentOf(c, k.(ParamUpdateReturnKind).getAMatchingArgumentPosition()) and + c = call.(DataFlowCall) and + result.asNode().(PostUpdateNode).getPreUpdateNode() = arg + ) + ) } pragma[nomagic] - private predicate paramReturnNode( - PostUpdateNode n, ParamNode p, SndLevelScopeOption scope, ReturnKindExt k - ) { + private predicate paramReturnNode(ParamNode p, ReturnKindExt k) { exists(ParameterPosition pos | - parameterValueFlowsToPreUpdate(p, n) and p.isParameterOf(_, pos) and - k = TParamUpdate(pos) and - scope = getSecondLevelScope0(n) + k = TParamUpdate(pos) ) } cached - predicate flowCheckNode(NodeEx n) { - n.asNode() instanceof CastNode or - clearsContentSet(n, _) or - expectsContentSet(n, _) or - neverSkipInPathGraph(n.asNode()) + predicate flowCheckNode(NodeEx node) { + exists(Node n | n = node.asNodeOrReverse() | + n instanceof CastNode or + neverSkipInPathGraph(n) + ) + or + clearsContentSet(node, _) + or + expectsContentSet(node, _) } cached - predicate castingNodeEx(NodeEx n) { - n.asNode() instanceof CastingNode or - exists(n.asParamReturnNode()) - } + predicate castingNodeEx(NodeEx n) { n.asNodeOrReverse() instanceof CastingNode } cached predicate parameterNode(Node p, DataFlowCallable c, ParameterPosition pos) { @@ -1125,482 +1737,182 @@ module MakeImplCommon Lang> { /** * A cached version of the `CallContextSensitivity` module. Only used in * pruning stages 1+2 and flow exploration; all subsequent pruning stages use a - * pruned version, based on the relevant call edges from the previous stage. - */ - cached - module CachedCallContextSensitivity { - private module CallContextSensitivityInput implements CallContextSensitivityInputSig { - predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { - c = viableCallableExt(call) - } - - predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { - c = viableCallableExt(call) - } - } - - private module Impl1 = CallContextSensitivity; - - cached - predicate reducedViableImplInCallContext( - DataFlowCall call, DataFlowCallable c, DataFlowCall ctx - ) { - Impl1::reducedViableImplInCallContext(call, c, ctx) - } - - cached - predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable c) { - Impl1::recordDataFlowCallSiteUnreachable(call, c) - } - - cached - predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { - Impl1::reducedViableImplInReturn(c, call) - } - - cached - CcCall getSpecificCallContextCall(DataFlowCall call, DataFlowCallable c) { - result = Impl1::getSpecificCallContextCall(call, c) - } - - cached - predicate callContextAffectsDispatch(DataFlowCall call, Cc ctx) { - Impl1::callContextAffectsDispatch(call, ctx) - } - - cached - CcNoCall getSpecificCallContextReturn(DataFlowCallable c, DataFlowCall call) { - result = Impl1::getSpecificCallContextReturn(c, call) - } - - private module PrunedViableImplInput implements Impl1::PrunedViableImplInputSig { - predicate reducedViableImplInCallContext = - CachedCallContextSensitivity::reducedViableImplInCallContext/3; - - predicate recordDataFlowCallSiteUnreachable = - CachedCallContextSensitivity::recordDataFlowCallSiteUnreachable/2; - - predicate getSpecificCallContextCall = - CachedCallContextSensitivity::getSpecificCallContextCall/2; - - predicate callContextAffectsDispatch = - CachedCallContextSensitivity::callContextAffectsDispatch/2; - - predicate getSpecificCallContextReturn = - CachedCallContextSensitivity::getSpecificCallContextReturn/2; - } - - private module Impl2 = Impl1::PrunedViableImpl; - - import Impl2 - - cached - predicate instanceofCc(Cc cc) { any() } - - cached - predicate instanceofCcCall(CcCall cc) { any() } - - cached - predicate instanceofCcNoCall(CcNoCall cc) { any() } - - cached - DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { - result = Impl2::viableImplCallContextReduced(call, ctx) - } - - cached - DataFlowCall viableImplCallContextReducedReverse(DataFlowCallable callable, CcNoCall ctx) { - result = Impl2::viableImplCallContextReducedReverse(callable, ctx) - } - } - - /** - * Holds if `p` is the parameter of a viable dispatch target of `call`, - * and `p` has position `ppos`. - */ - pragma[nomagic] - private predicate viableParam(DataFlowCall call, ParameterPosition ppos, ParamNode p) { - p.isParameterOf(viableCallableExt(call), ppos) - } - - /** - * Holds if `arg` is a possible argument to `p` in `call`, taking virtual - * dispatch into account. - */ - cached - predicate viableParamArg(DataFlowCall call, ParamNode p, ArgNode arg) { - exists(ParameterPosition ppos | - viableParam(call, ppos, p) and - argumentPositionMatch(call, arg, ppos) and - compatibleTypesFilter(getNodeDataFlowType(arg), getNodeDataFlowType(p)) and - golangSpecificParamArgFilter(call, p, arg) - ) - } - - /** - * Holds if `arg` is a possible argument to `p` in `call`, taking virtual - * dispatch into account. - */ - cached - predicate viableParamArgEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { - viableParamArg(call, p.asNode(), arg.asNode()) - } - - pragma[nomagic] - private ReturnPosition viableReturnPos(DataFlowCall call, ReturnKindExt kind) { - viableCallableExt(call) = result.getCallable() and - kind = result.getKind() - } - - /** - * Holds if a value at return position `pos` can be returned to `out` via `call`, - * taking virtual dispatch into account. - */ - cached - predicate viableReturnPosOut(DataFlowCall call, ReturnPosition pos, OutNodeExt out) { - exists(ReturnKindExt kind | - pos = viableReturnPos(call, kind) and - out = getAnOutNodeExt(call, kind) - ) - } - - /** - * Holds if a value at return position `pos` can be returned to `out` via `call`, - * taking virtual dispatch into account. - */ - cached - predicate viableReturnPosOutEx(DataFlowCall call, ReturnPosition pos, OutNodeEx out) { - viableReturnPosOut(call, pos, out.asNode()) - } - - /** Provides predicates for calculating flow-through summaries. */ - private module FlowThrough { - /** - * The first flow-through approximation: - * - * - Input access paths are abstracted with a Boolean parameter - * that indicates (non-)emptiness. - */ - private module Cand { - /** - * Holds if `p` can flow to `node` in the same callable using only - * value-preserving steps. - * - * `read` indicates whether it is contents of `p` that can flow to `node`. - */ - pragma[nomagic] - private predicate parameterValueFlowCand(ParamNode p, Node node, boolean read) { - ( - p = node and - read = false - or - // local flow - exists(Node mid | - parameterValueFlowCand(p, mid, read) and - simpleLocalFlowStep(mid, node, _) and - validParameterAliasStep(mid, node) - ) - or - // read - exists(Node mid | - parameterValueFlowCand(p, mid, false) and - readSet(mid, _, node) and - read = true - ) - or - // flow through: no prior read - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, false) and - argumentValueFlowsThroughCand(arg, node, read) - ) - or - // flow through: no read inside method - exists(ArgNode arg | - parameterValueFlowArgCand(p, arg, read) and - argumentValueFlowsThroughCand(arg, node, false) - ) - ) and - not expectsContentCached(node, _) - } - - pragma[nomagic] - private predicate parameterValueFlowArgCand(ParamNode p, ArgNode arg, boolean read) { - parameterValueFlowCand(p, arg, read) - } - - pragma[nomagic] - predicate parameterValueFlowsToPreUpdateCand(ParamNode p, PostUpdateNode n) { - parameterValueFlowCand(p, n.getPreUpdateNode(), false) - } - - /** - * Holds if `p` can flow to a return node of kind `kind` in the same - * callable using only value-preserving steps, not taking call contexts - * into account. - * - * `read` indicates whether it is contents of `p` that can flow to the return - * node. - */ - predicate parameterValueFlowReturnCand(ParamNode p, ReturnKind kind, boolean read) { - exists(ReturnNode ret | - parameterValueFlowCand(p, ret, read) and - kind = ret.getKind() - ) - } - - pragma[nomagic] - private predicate argumentValueFlowsThroughCand0( - DataFlowCall call, ArgNode arg, ReturnKind kind, boolean read - ) { - exists(ParamNode param | viableParamArg(call, param, arg) | - parameterValueFlowReturnCand(param, kind, read) - ) - } - - /** - * Holds if `arg` flows to `out` through a call using only value-preserving steps, - * not taking call contexts into account. - * - * `read` indicates whether it is contents of `arg` that can flow to `out`. - */ - predicate argumentValueFlowsThroughCand(ArgNode arg, Node out, boolean read) { - exists(DataFlowCall call, ReturnKind kind | - argumentValueFlowsThroughCand0(call, arg, kind, read) and - out = getAnOutNode(call, kind) - ) - } - - predicate cand(ParamNode p, Node n) { - parameterValueFlowCand(p, n, _) and - ( - parameterValueFlowReturnCand(p, _, _) - or - parameterValueFlowsToPreUpdateCand(p, _) - ) - } - } - - /** - * The final flow-through calculation: - * - * - Calculated flow is either value-preserving (`read = TReadStepTypesNone()`) - * or summarized as a single read step with before and after types recorded - * in the `ReadStepTypesOption` parameter. - * - Types are checked using the `compatibleTypes()` relation. - * - Call contexts are taken into account. - */ - private module Final { - /** - * Holds if `p` can flow to `node` in the same callable using only - * value-preserving steps and possibly a single read step, not taking - * call contexts into account. - * - * If a read step was taken, then `read` captures the `Content`, the - * container type, and the content type. - */ - predicate parameterValueFlow( - ParamNode p, Node node, ReadStepTypesOption read, string model, - CachedCallContextSensitivity::CcNoCall ctx - ) { - parameterValueFlow0(p, node, read, model, ctx) and - Cand::cand(p, node) and - if node instanceof CastingNode - then - // normal flow through - read = TReadStepTypesNone() and - compatibleTypesFilter(getNodeDataFlowType(p), getNodeDataFlowType(node)) - or - // getter - compatibleTypesFilter(read.getContentType(), getNodeDataFlowType(node)) - else any() - } - - bindingset[model1, model2] - pragma[inline_late] - private string mergeModels(string model1, string model2) { - if model1 = "" then result = model2 else result = model1 - } - - pragma[nomagic] - private predicate parameterValueFlow0( - ParamNode p, Node node, ReadStepTypesOption read, string model, - CachedCallContextSensitivity::CcNoCall ctx - ) { - p = node and - Cand::cand(p, _) and - read = TReadStepTypesNone() and - model = "" and - CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx) - or - // local flow - exists(Node mid, string model1, string model2 | - parameterValueFlow(p, mid, read, model1, ctx) and - simpleLocalFlowStep(mid, node, model2) and - validParameterAliasStep(mid, node) and - model = mergeModels(model1, model2) - ) - or - // read - exists(Node mid | - parameterValueFlow(p, mid, TReadStepTypesNone(), model, ctx) and - readStepWithTypes(mid, read.getContainerType(), read.getContent(), node, - read.getContentType()) and - Cand::parameterValueFlowReturnCand(p, _, true) and - compatibleTypesFilter(getNodeDataFlowType(p), read.getContainerType()) - ) - or - parameterValueFlow0_0(TReadStepTypesNone(), p, node, read, model, ctx) - } - - bindingset[ctx1, ctx2] - pragma[inline_late] - private CachedCallContextSensitivity::CcNoCall mergeContexts( - CachedCallContextSensitivity::CcNoCall ctx1, CachedCallContextSensitivity::CcNoCall ctx2 - ) { - if CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx1) - then result = ctx2 - else - if CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(ctx2) - then result = ctx1 - else - // check that `ctx1` is compatible with `ctx2` for at least _some_ outer call, - // and then (arbitrarily) continue with `ctx2` - exists(DataFlowCall someOuterCall, DataFlowCallable callable | - someOuterCall = - CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, ctx1) and - someOuterCall = - CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, ctx2) and - result = ctx2 - ) - } - - pragma[nomagic] - private predicate parameterValueFlow0_0( - ReadStepTypesOption mustBeNone, ParamNode p, Node node, ReadStepTypesOption read, - string model, CachedCallContextSensitivity::CcNoCall ctx - ) { - exists( - ArgNode arg, string model1, string model2, CachedCallContextSensitivity::CcNoCall ctx1, - CachedCallContextSensitivity::CcNoCall ctx2 - | - model = mergeModels(model1, model2) and - ctx = mergeContexts(ctx1, ctx2) - | - // flow through: no prior read - parameterValueFlowArg(p, arg, mustBeNone, model1, ctx1) and - argumentValueFlowsThrough(arg, read, node, model2, ctx2) - or - // flow through: no read inside method - parameterValueFlowArg(p, arg, read, model1, ctx1) and - argumentValueFlowsThrough(arg, mustBeNone, node, model2, ctx2) - ) + * pruned version, based on the relevant call edges from the previous stage. + */ + cached + module CachedCallContextSensitivity { + private module CallContextSensitivityInput implements CallContextSensitivityInputSig { + predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + c = viableCallableExt(call) } - pragma[nomagic] - private predicate parameterValueFlowArg( - ParamNode p, ArgNode arg, ReadStepTypesOption read, string model, - CachedCallContextSensitivity::CcNoCall ctx - ) { - parameterValueFlow(p, arg, read, model, ctx) and - Cand::argumentValueFlowsThroughCand(arg, _, _) + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + c = viableCallableExt(call) } + } - pragma[nomagic] - private predicate argumentValueFlowsThrough0( - DataFlowCall call, ArgNode arg, ReturnKind kind, ReadStepTypesOption read, string model, - CachedCallContextSensitivity::CcNoCall outerCtx - ) { - exists( - ParamNode param, DataFlowCallable callable, - CachedCallContextSensitivity::CcNoCall innerCtx - | - viableParamArg(call, param, arg) and - parameterValueFlowReturn(param, kind, read, model, innerCtx) and - callable = nodeGetEnclosingCallable(param) and - outerCtx = CachedCallContextSensitivity::getCallContextReturn(callable, call) - | - CachedCallContextSensitivity::viableImplNotCallContextReducedReverse(innerCtx) - or - call = - CachedCallContextSensitivity::viableImplCallContextReducedReverse(callable, innerCtx) - ) - } + private module Impl1 = CallContextSensitivity; - pragma[nomagic] - private predicate argumentValueFlowsThrough( - ArgNode arg, ReadStepTypesOption read, Node out, string model, - CachedCallContextSensitivity::CcNoCall ctx - ) { - exists(DataFlowCall call, ReturnKind kind | - argumentValueFlowsThrough0(call, arg, kind, read, model, ctx) and - out = getAnOutNode(call, kind) - | - // normal flow through - read = TReadStepTypesNone() and - compatibleTypesFilter(getNodeDataFlowType(arg), getNodeDataFlowType(out)) - or - // getter - compatibleTypesFilter(getNodeDataFlowType(arg), read.getContainerType()) and - compatibleTypesFilter(read.getContentType(), getNodeDataFlowType(out)) - ) - } + cached + predicate reducedViableImplInCallContext( + DataFlowCall call, DataFlowCallable c, DataFlowCall ctx + ) { + Impl1::reducedViableImplInCallContext(call, c, ctx) + } - /** - * Holds if `arg` flows to `out` through a call using only - * value-preserving steps and possibly a single read step, not taking - * call contexts into account. - * - * If a read step was taken, then `read` captures the `Content`, the - * container type, and the content type. - */ - cached - predicate argumentValueFlowsThrough( - ArgNode arg, ReadStepTypesOption read, Node out, string model - ) { - argumentValueFlowsThrough(arg, read, out, model, _) - } + cached + predicate recordDataFlowCallSiteUnreachable(DataFlowCall call, DataFlowCallable c) { + Impl1::recordDataFlowCallSiteUnreachable(call, c) + } - /** - * Holds if `arg` flows to `out` through a call using only - * value-preserving steps and a single read step, not taking call - * contexts into account, thus representing a getter-step. - * - * This predicate is exposed for testing only. - */ - predicate getterStep(ArgNode arg, ContentSet c, Node out) { - argumentValueFlowsThrough(arg, TReadStepTypesSome(_, c, _), out, _) - } + cached + predicate reducedViableImplInReturn(DataFlowCallable c, DataFlowCall call) { + Impl1::reducedViableImplInReturn(c, call) + } - /** - * Holds if `p` can flow to a return node of kind `kind` in the same - * callable using only value-preserving steps and possibly a single read - * step. - * - * If a read step was taken, then `read` captures the `Content`, the - * container type, and the content type. - */ - private predicate parameterValueFlowReturn( - ParamNode p, ReturnKind kind, ReadStepTypesOption read, string model, - CachedCallContextSensitivity::CcNoCall ctx - ) { - exists(ReturnNode ret | - parameterValueFlow(p, ret, read, model, ctx) and - kind = ret.getKind() - ) - } + cached + CcCall getSpecificCallContextCall(DataFlowCall call, DataFlowCallable c) { + result = Impl1::getSpecificCallContextCall(call, c) } - import Final + cached + predicate callContextAffectsDispatch(DataFlowCall call, Cc ctx) { + Impl1::callContextAffectsDispatch(call, ctx) + } + + cached + CcNoCall getSpecificCallContextReturn(DataFlowCallable c, DataFlowCall call) { + result = Impl1::getSpecificCallContextReturn(c, call) + } + + private module PrunedViableImplInput implements Impl1::PrunedViableImplInputSig { + predicate reducedViableImplInCallContext = + CachedCallContextSensitivity::reducedViableImplInCallContext/3; + + predicate recordDataFlowCallSiteUnreachable = + CachedCallContextSensitivity::recordDataFlowCallSiteUnreachable/2; + + predicate getSpecificCallContextCall = + CachedCallContextSensitivity::getSpecificCallContextCall/2; + + predicate callContextAffectsDispatch = + CachedCallContextSensitivity::callContextAffectsDispatch/2; + + predicate getSpecificCallContextReturn = + CachedCallContextSensitivity::getSpecificCallContextReturn/2; + } + + private module Impl2 = Impl1::PrunedViableImpl; + + import Impl2 + + cached + predicate instanceofCc(Cc cc) { any() } + + cached + predicate instanceofCcCall(CcCall cc) { any() } + + cached + predicate instanceofCcNoCall(CcNoCall cc) { any() } + + cached + DataFlowCallable viableImplCallContextReduced(DataFlowCall call, CcCall ctx) { + result = Impl2::viableImplCallContextReduced(call, ctx) + } + + cached + DataFlowCall viableImplCallContextReducedReverse(DataFlowCallable callable, CcNoCall ctx) { + result = Impl2::viableImplCallContextReducedReverse(callable, ctx) + } + } + + /** + * Holds if `p` is the parameter of a viable dispatch target of `call`, + * and `p` has position `ppos`. + */ + pragma[nomagic] + private predicate viableParam(DataFlowCall call, ParameterPosition ppos, ParamNode p) { + p.isParameterOf(viableCallableExt(call), ppos) } - import FlowThrough + /** + * Holds if `p` is the parameter of a viable dispatch target of `call`, + * and `p` has position `ppos`. + */ + pragma[nomagic] + private predicate viableParamEx(DataFlowCall call, ParameterPositionEx ppos, ParamNodeEx p) { + p.isParameterOf(viableCallableExt(call), ppos) + } /** - * Holds if `p` can flow to the pre-update node associated with post-update - * node `n`, in the same callable, using only value-preserving steps. + * Holds if `arg` is a possible argument to `p` in `call`, taking virtual + * dispatch into account. */ - private predicate parameterValueFlowsToPreUpdate(ParamNode p, PostUpdateNode n) { - parameterValueFlow(p, n.getPreUpdateNode(), TReadStepTypesNone(), _, _) + cached + predicate viableParamArg(DataFlowCall call, ParamNode p, ArgNode arg) { + exists(ParameterPosition ppos | + viableParam(call, ppos, p) and + argumentPositionMatch(call, arg, ppos) and + compatibleTypesFilter(getNodeDataFlowType(arg), getNodeDataFlowType(p)) and + golangSpecificParamArgFilter(call, p, arg) + ) + } + + bindingset[call, p, arg] + private predicate golangSpecificParamArgFilterEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + golangSpecificParamArgFilter(call, p.asNode(), arg.asNode()) + or + not p.asNode() instanceof ParameterNode + or + not arg.asNode() instanceof ArgumentNode + } + + /** + * Holds if `arg` is a possible argument to `p` in `call`, taking virtual + * dispatch into account. + */ + cached + predicate viableParamArgEx(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + // viableParamArg(call, p.asNode(), arg.asNode()) + // or + exists(ParameterPositionEx ppos, DataFlowCall underlyingCall | + underlyingCall = call and + viableParamEx(underlyingCall, ppos, p) and + argumentPositionMatchEx(call, arg, ppos) and + compatibleTypesFilter(arg.getDataFlowType(), p.getDataFlowType()) and + golangSpecificParamArgFilterEx(underlyingCall, p, arg) + ) + } + + pragma[nomagic] + private ReturnPosition viableReturnPos(DataFlowCall call, ReturnKindExt kind) { + viableCallableExt(call) = result.getCallable() and + kind = result.getKind() + } + + /** + * Holds if a value at return position `pos` can be returned to `out` via `call`, + * taking virtual dispatch into account. + */ + cached + predicate viableReturnPosOut(DataFlowCall call, ReturnPosition pos, OutNodeExt out) { + exists(ReturnKindExt kind | + pos = viableReturnPos(call, kind) and + out = getAnOutNodeExt(call, kind) + ) + } + + /** + * Holds if a value at return position `pos` can be returned to `out` via `call`, + * taking virtual dispatch into account. + */ + cached + predicate viableReturnPosOutEx(DataFlowCall call, ReturnPosition pos, OutNodeEx out) { + exists(ReturnKindExt kind | + pos = viableReturnPos(call, kind) and + out = kind.getAnOutNodeEx(call) //and + // call.toString().matches("%GetBox1%") + ) } cached @@ -1609,25 +1921,18 @@ module MakeImplCommon Lang> { cached predicate readEx(NodeEx node1, ContentSet c, NodeEx node2) { readSet(pragma[only_bind_into](node1.asNode()), c, pragma[only_bind_into](node2.asNode())) + or + ReverseFlow::readStep(node1, c, node2) } cached - predicate storeSet( - Node node1, ContentSet c, Node node2, DataFlowType contentType, DataFlowType containerType - ) { - storeStep(node1, c, node2) and - contentType = getNodeDataFlowType(node1) and - containerType = getNodeDataFlowType(node2) + predicate storeSet(Node node1, ContentSet c, Node node2) { + storeStep(node1, c, node2) or exists(Node n1, Node n2 | n1 = node1.(PostUpdateNode).getPreUpdateNode() and - n2 = node2.(PostUpdateNode).getPreUpdateNode() - | - argumentValueFlowsThrough(n2, TReadStepTypesSome(containerType, c, contentType), n1, _) // TODO - or - readSet(n2, c, n1) and - contentType = getNodeDataFlowType(n1) and - containerType = getNodeDataFlowType(n2) + n2 = node2.(PostUpdateNode).getPreUpdateNode() and + readSet(n2, c, n1) ) } @@ -1644,40 +1949,18 @@ module MakeImplCommon Lang> { ) { exists(ContentSet cs | c = cs.getAStoreContent() and - storeSet(pragma[only_bind_into](node1.asNode()), cs, pragma[only_bind_into](node2.asNode()), - contentType, containerType) - ) - } - - /** - * Holds if data can flow from `fromNode` to `toNode` because they are the post-update - * nodes of some function output and input respectively, where the output and input - * are aliases. A typical example is a function returning `this`, implementing a fluent - * interface. - */ - private predicate reverseStepThroughInputOutputAlias( - PostUpdateNode fromNode, PostUpdateNode toNode, string model - ) { - exists(Node fromPre, Node toPre | - fromPre = fromNode.getPreUpdateNode() and - toPre = toNode.getPreUpdateNode() + contentType = node1.getDataFlowType() and + containerType = node2.getDataFlowType() | - exists(DataFlowCall c | - // Does the language-specific simpleLocalFlowStep already model flow - // from function input to output? - fromPre = getAnOutNode(c, _) and - toPre.(ArgNode).argumentOf(c, _) and - simpleLocalFlowStep(toPre.(ArgNode), fromPre, model) - ) + storeSet(pragma[only_bind_into](node1.asNode()), cs, pragma[only_bind_into](node2.asNode())) or - argumentValueFlowsThrough(toPre, TReadStepTypesNone(), fromPre, model) + ReverseFlow::storeStep(node1, c, node2) ) } cached - predicate simpleLocalFlowStepExt(Node node1, Node node2, string model) { - simpleLocalFlowStep(node1, node2, model) or - reverseStepThroughInputOutputAlias(node1, node2, model) + predicate simpleLocalFlowStepCached(Node node1, Node node2, string model) { + simpleLocalFlowStep(node1, node2, model) } cached @@ -1735,11 +2018,9 @@ module MakeImplCommon Lang> { } pragma[nomagic] - private predicate hasParamReturnKindIn( - PostUpdateNode n, ParamNode p, ReturnKindExt kind, DataFlowCallable c - ) { - c = getNodeEnclosingCallable(n) and - paramReturnNode(n, p, _, kind) + private predicate hasParamReturnKindIn(ParamNode p, ReturnKindExt kind, DataFlowCallable c) { + c = getNodeEnclosingCallable(p) and + paramReturnNode(p, kind) } cached @@ -1747,7 +2028,7 @@ module MakeImplCommon Lang> { TReturnPosition0(DataFlowCallable c, ReturnKindExt kind) { hasValueReturnKindIn(_, kind, c) or - hasParamReturnKindIn(_, _, kind, c) + hasParamReturnKindIn(_, kind, c) } cached @@ -1759,9 +2040,9 @@ module MakeImplCommon Lang> { } cached - ReturnPosition getParamReturnPosition(PostUpdateNode n, ParamNode p) { + ReturnPosition getParamReturnPosition(ParamNode p) { exists(ReturnKindExt kind, DataFlowCallable c | - hasParamReturnKindIn(n, p, kind, c) and + hasParamReturnKindIn(p, kind, c) and result = TReturnPosition0(c, kind) ) } @@ -1816,9 +2097,7 @@ module MakeImplCommon Lang> { newtype TNodeEx = TNodeNormal(Node n) or TNodeImplicitRead(Node n) or // will be restricted to nodes with actual implicit reads in `DataFlowImpl.qll` - TParamReturnNode(ParameterNode p, SndLevelScopeOption scope) { - paramReturnNode(_, p, scope, _) - } + TNodeReverse(Node n) { ReverseFlow::parameterValueFlow(_, n, _) } /** * Holds if data can flow in one local step from `node1` to `node2`. @@ -1828,26 +2107,17 @@ module MakeImplCommon Lang> { exists(Node n1, Node n2 | node1.asNode() = n1 and node2.asNode() = n2 and - simpleLocalFlowStepExt(pragma[only_bind_into](n1), pragma[only_bind_into](n2), model) + simpleLocalFlowStep(pragma[only_bind_into](n1), pragma[only_bind_into](n2), model) ) or - exists(Node n1, Node n2, SndLevelScopeOption scope | - node1.asNode() = n1 and - node2 = TParamReturnNode(n2, scope) and - paramReturnNode(pragma[only_bind_into](n1), pragma[only_bind_into](n2), - pragma[only_bind_into](scope), _) and - model = "" - ) + ReverseFlow::localFlowStep(node1, node2, model) } cached ReturnPosition getReturnPositionEx(NodeEx ret) { result = getValueReturnPosition(ret.asNode()) or - exists(ParamNode p | - ret = TParamReturnNode(p, _) and - result = getParamReturnPosition(_, p) - ) + result = getParamReturnPosition(ret.asNodeReverse()) } } @@ -2371,16 +2641,6 @@ module MakeImplCommon Lang> { OutNodeExt() { outNodeExt(this) } } - pragma[nomagic] - OutNodeExt getAnOutNodeExt(DataFlowCall call, ReturnKindExt k) { - result = getAnOutNode(call, k.(ValueReturnKind).getKind()) - or - exists(ArgNode arg | - result.(PostUpdateNode).getPreUpdateNode() = arg and - arg.argumentOf(call, k.(ParamUpdateReturnKind).getAMatchingArgumentPosition()) - ) - } - /** * An extended return kind. A return kind describes how data can be returned * from a callable. This can either be through a returned value or an updated diff --git a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll index 5b53943ff832..1081c828a67e 100644 --- a/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll +++ b/shared/mad/codeql/mad/modelgenerator/internal/ModelGeneratorImpl.qll @@ -289,8 +289,9 @@ module MakeModelGenerator< private DataFlow::ReturnKindExt kind; ReturnNodeExt() { - kind = DataFlow::getValueReturnPosition(this).getKind() or - kind = DataFlow::getParamReturnPosition(this, _).getKind() + kind = DataFlow::getValueReturnPosition(this).getKind() + or + kind = DataFlow::getParamReturnPosition(this).getKind() } /** @@ -454,11 +455,19 @@ module MakeModelGenerator< state.(TaintRead).getStep() = 0 } - predicate isSink(DataFlow::Node sink, FlowState state) { - sink instanceof ReturnNodeExt and + private DataFlow::ReturnKindExt isReturnSink(ReturnNodeExt sink, FlowState state) { not isOwnInstanceAccessNode(sink) and not exists(captureQualifierFlow(sink.(NodeExtended).getAsExprEnclosingCallable())) and - (state instanceof TaintRead or state instanceof TaintStore) + (state instanceof TaintRead or state instanceof TaintStore) and + result = sink.getKind() + } + + predicate isSink(DataFlow::Node sink, FlowState state) { + isReturnSink(sink, state) instanceof DataFlow::ValueReturnKind + } + + predicate isSinkReverse(DataFlow::Node sink, FlowState state) { + isReturnSink(sink, state) instanceof DataFlow::ParamUpdateReturnKind } predicate isAdditionalFlowStep( @@ -555,8 +564,17 @@ module MakeModelGenerator< source.(NodeExtended).getEnclosingCallable() instanceof DataFlowSummaryTargetApi } + private DataFlow::ReturnKindExt isReturnSink(ReturnNodeExt sink) { + sink.getEnclosingCallable() instanceof DataFlowSummaryTargetApi and + result = sink.getKind() + } + predicate isSink(DataFlow::Node sink) { - sink.(ReturnNodeExt).getEnclosingCallable() instanceof DataFlowSummaryTargetApi + isReturnSink(sink) instanceof DataFlow::ValueReturnKind + } + + predicate isSinkReverse(DataFlow::Node sink) { + isReturnSink(sink) instanceof DataFlow::ParamUpdateReturnKind } predicate isAdditionalFlowStep = isAdditionalContentFlowStep/2; @@ -966,8 +984,17 @@ module MakeModelGenerator< ) } + private DataFlow::ReturnKindExt isReturnSink(ReturnNodeExt sink) { + sink.getEnclosingCallable() instanceof DataFlowSummaryTargetApi and + result = sink.getKind() + } + predicate isSink(DataFlow::Node sink) { - sink.(ReturnNodeExt).getEnclosingCallable() instanceof DataFlowSourceTargetApi + isReturnSink(sink) instanceof DataFlow::ValueReturnKind + } + + predicate isSinkReverse(DataFlow::Node sink) { + isReturnSink(sink) instanceof DataFlow::ParamUpdateReturnKind } DataFlow::FlowFeature getAFeature() { result instanceof DataFlow::FeatureHasSinkCallContext } diff --git a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll index 0898f7b5355e..4b54c8989428 100644 --- a/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll +++ b/swift/ql/lib/codeql/swift/dataflow/internal/FlowSummaryImpl.qll @@ -8,7 +8,6 @@ private import codeql.dataflow.internal.AccessPathSyntax as AccessPath private import DataFlowImplSpecific as DataFlowImplSpecific private import DataFlowImplSpecific::Private private import DataFlowImplSpecific::Public -private import DataFlowImplCommon private import codeql.swift.dataflow.ExternalFlow module Input implements InputSig { diff --git a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected index bf6376bb0a1f..186d9056a1a1 100644 --- a/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected +++ b/swift/ql/test/library-tests/dataflow/dataflow/DataFlow.expected @@ -1,15 +1,17 @@ edges +| file://:0:0:0:0 | .a [Reverse] [x] | file://:0:0:0:0 | self [Reverse] [a, x] | provenance | | | file://:0:0:0:0 | .wrappedValue | test.swift:949:15:949:15 | x | provenance | | | file://:0:0:0:0 | .wrappedValue | test.swift:951:15:951:15 | x | provenance | | | file://:0:0:0:0 | KeyPathComponent [some:0] | test.swift:663:13:663:29 | exit #keyPath(...) [some:0] | provenance | | -| file://:0:0:0:0 | [post] self [v2, some:0] | test.swift:731:9:731:9 | self [Return] [v2, some:0] | provenance | | -| file://:0:0:0:0 | [post] self [v2] | test.swift:731:9:731:9 | self [Return] [v2] | provenance | | -| file://:0:0:0:0 | [post] self [v3] | test.swift:732:9:732:9 | self [Return] [v3] | provenance | | -| file://:0:0:0:0 | [post] self [v] | test.swift:815:7:815:7 | self [Return] [v] | provenance | | +| file://:0:0:0:0 | [post] self [v2, some:0] | test.swift:731:9:731:9 | self [Reverse] [v2, some:0] | provenance | | +| file://:0:0:0:0 | [post] self [v2] | test.swift:731:9:731:9 | self [Reverse] [v2] | provenance | | +| file://:0:0:0:0 | [post] self [v3] | test.swift:732:9:732:9 | self [Reverse] [v3] | provenance | | +| file://:0:0:0:0 | [post] self [v] | test.swift:815:7:815:7 | self [Reverse] [v] | provenance | | | file://:0:0:0:0 | [post] self [wrappedValue] | file://:0:0:0:0 | self [wrappedValue] | provenance | | -| file://:0:0:0:0 | [post] self [x, some:0] | test.swift:559:9:559:9 | self [Return] [x, some:0] | provenance | | -| file://:0:0:0:0 | [post] self [x] | test.swift:163:7:163:7 | self [Return] [x] | provenance | | -| file://:0:0:0:0 | [post] self [x] | test.swift:559:9:559:9 | self [Return] [x] | provenance | | +| file://:0:0:0:0 | [post] self [x, some:0] | test.swift:559:9:559:9 | self [Reverse] [x, some:0] | provenance | | +| file://:0:0:0:0 | [post] self [x] | test.swift:163:7:163:7 | self [Reverse] [x] | provenance | | +| file://:0:0:0:0 | [post] self [x] | test.swift:559:9:559:9 | self [Reverse] [x] | provenance | | +| file://:0:0:0:0 | self [Reverse] [a, x] | test.swift:185:7:185:7 | self [Reverse] [a, x] | provenance | | | file://:0:0:0:0 | self [a, x] | file://:0:0:0:0 | .a [x] | provenance | | | file://:0:0:0:0 | self [s, x] | file://:0:0:0:0 | .s [x] | provenance | | | file://:0:0:0:0 | self [str] | file://:0:0:0:0 | .str | provenance | | @@ -221,7 +223,7 @@ edges | test.swift:163:7:163:7 | value | file://:0:0:0:0 | value | provenance | | | test.swift:169:12:169:22 | value | test.swift:170:9:170:9 | value | provenance | | | test.swift:170:5:170:5 | [post] self [x] | test.swift:169:3:171:3 | self[return] [x] | provenance | | -| test.swift:170:5:170:5 | [post] self [x] | test.swift:169:8:169:8 | self [Return] [x] | provenance | | +| test.swift:170:5:170:5 | [post] self [x] | test.swift:169:8:169:8 | self [Reverse] [x] | provenance | | | test.swift:170:9:170:9 | value | test.swift:163:7:163:7 | value | provenance | | | test.swift:170:9:170:9 | value | test.swift:170:5:170:5 | [post] self [x] | provenance | | | test.swift:173:8:173:8 | self [x] | test.swift:174:12:174:12 | self [x] | provenance | | @@ -234,7 +236,10 @@ edges | test.swift:181:13:181:13 | a [x] | test.swift:181:13:181:15 | .x | provenance | | | test.swift:185:7:185:7 | self [a, x] | file://:0:0:0:0 | self [a, x] | provenance | | | test.swift:194:3:194:3 | [post] b [a, x] | test.swift:195:13:195:13 | b [a, x] | provenance | | +| test.swift:194:3:194:5 | .a [Reverse] [x] | file://:0:0:0:0 | .a [Reverse] [x] | provenance | | +| test.swift:194:3:194:5 | .a [Reverse] [x] | test.swift:194:3:194:3 | [post] b [a, x] | provenance | | | test.swift:194:3:194:5 | [post] getter for .a [x] | test.swift:194:3:194:3 | [post] b [a, x] | provenance | | +| test.swift:194:3:194:5 | [post] getter for .a [x] | test.swift:194:3:194:5 | .a [Reverse] [x] | provenance | | | test.swift:194:11:194:18 | call to source() | test.swift:163:7:163:7 | value | provenance | | | test.swift:194:11:194:18 | call to source() | test.swift:194:3:194:5 | [post] getter for .a [x] | provenance | | | test.swift:195:13:195:13 | b [a, x] | test.swift:185:7:185:7 | self [a, x] | provenance | | @@ -257,7 +262,10 @@ edges | test.swift:213:13:213:13 | a [x] | test.swift:173:8:173:8 | self [x] | provenance | | | test.swift:213:13:213:13 | a [x] | test.swift:213:13:213:19 | call to get() | provenance | | | test.swift:218:3:218:3 | [post] b [a, x] | test.swift:219:13:219:13 | b [a, x] | provenance | | +| test.swift:218:3:218:5 | .a [Reverse] [x] | file://:0:0:0:0 | .a [Reverse] [x] | provenance | | +| test.swift:218:3:218:5 | .a [Reverse] [x] | test.swift:218:3:218:3 | [post] b [a, x] | provenance | | | test.swift:218:3:218:5 | [post] getter for .a [x] | test.swift:218:3:218:3 | [post] b [a, x] | provenance | | +| test.swift:218:3:218:5 | [post] getter for .a [x] | test.swift:218:3:218:5 | .a [Reverse] [x] | provenance | | | test.swift:218:11:218:18 | call to source() | test.swift:169:12:169:22 | value | provenance | | | test.swift:218:11:218:18 | call to source() | test.swift:218:3:218:5 | [post] getter for .a [x] | provenance | | | test.swift:219:13:219:13 | b [a, x] | test.swift:185:7:185:7 | self [a, x] | provenance | | @@ -460,7 +468,7 @@ edges | test.swift:576:14:576:21 | call to source() | test.swift:576:13:576:21 | call to +(_:) | provenance | | | test.swift:585:9:585:9 | self [str] | file://:0:0:0:0 | self [str] | provenance | | | test.swift:586:10:586:13 | s | test.swift:587:13:587:13 | s | provenance | | -| test.swift:587:7:587:7 | [post] self [str] | test.swift:586:5:586:5 | self [Return] [str] | provenance | | +| test.swift:587:7:587:7 | [post] self [str] | test.swift:586:5:586:5 | self [Reverse] [str] | provenance | | | test.swift:587:7:587:7 | [post] self [str] | test.swift:586:5:588:5 | self[return] [str] | provenance | | | test.swift:587:13:587:13 | s | test.swift:587:7:587:7 | [post] self [str] | provenance | | | test.swift:592:17:595:5 | self[return] [str] | test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | provenance | | @@ -707,7 +715,7 @@ edges | test.swift:831:15:831:15 | s2 [v] | test.swift:831:15:831:18 | .v | provenance | | | test.swift:833:15:833:15 | s2 [v] | test.swift:813:8:813:8 | self [v] | provenance | | | test.swift:833:15:833:15 | s2 [v] | test.swift:833:15:833:23 | call to getv() | provenance | | -| test.swift:839:11:839:17 | [post] enter #keyPath(...) [s, x] | test.swift:839:11:839:17 | enter #keyPath(...) [Return] [s, x] | provenance | | +| test.swift:839:11:839:17 | [post] enter #keyPath(...) [s, x] | test.swift:839:11:839:17 | enter #keyPath(...) [Reverse] [s, x] | provenance | | | test.swift:839:11:839:17 | [post] exit #keyPath(...) | test.swift:839:17:839:17 | [post] KeyPathComponent | provenance | | | test.swift:839:15:839:15 | [post] KeyPathComponent [x] | test.swift:839:11:839:17 | [post] enter #keyPath(...) [s, x] | provenance | | | test.swift:839:17:839:17 | [post] KeyPathComponent | test.swift:839:15:839:15 | [post] KeyPathComponent [x] | provenance | | @@ -779,6 +787,7 @@ edges | test.swift:988:34:988:34 | value | file://:0:0:0:0 | value | provenance | | | test.swift:991:10:991:17 | call to source() | test.swift:988:34:988:34 | value | provenance | | nodes +| file://:0:0:0:0 | .a [Reverse] [x] | semmle.label | .a [Reverse] [x] | | file://:0:0:0:0 | .a [x] | semmle.label | .a [x] | | file://:0:0:0:0 | .s [x] | semmle.label | .s [x] | | file://:0:0:0:0 | .str | semmle.label | .str | @@ -800,6 +809,7 @@ nodes | file://:0:0:0:0 | [post] self [x, some:0] | semmle.label | [post] self [x, some:0] | | file://:0:0:0:0 | [post] self [x] | semmle.label | [post] self [x] | | file://:0:0:0:0 | [post] self [x] | semmle.label | [post] self [x] | +| file://:0:0:0:0 | self [Reverse] [a, x] | semmle.label | self [Reverse] [a, x] | | file://:0:0:0:0 | self [a, x] | semmle.label | self [a, x] | | file://:0:0:0:0 | self [s, x] | semmle.label | self [s, x] | | file://:0:0:0:0 | self [str] | semmle.label | self [str] | @@ -1022,11 +1032,11 @@ nodes | test.swift:155:19:155:19 | i | semmle.label | i | | test.swift:157:16:157:23 | call to source() | semmle.label | call to source() | | test.swift:159:16:159:29 | call to ... | semmle.label | call to ... | -| test.swift:163:7:163:7 | self [Return] [x] | semmle.label | self [Return] [x] | +| test.swift:163:7:163:7 | self [Reverse] [x] | semmle.label | self [Reverse] [x] | | test.swift:163:7:163:7 | self [x] | semmle.label | self [x] | | test.swift:163:7:163:7 | value | semmle.label | value | | test.swift:169:3:171:3 | self[return] [x] | semmle.label | self[return] [x] | -| test.swift:169:8:169:8 | self [Return] [x] | semmle.label | self [Return] [x] | +| test.swift:169:8:169:8 | self [Reverse] [x] | semmle.label | self [Reverse] [x] | | test.swift:169:12:169:22 | value | semmle.label | value | | test.swift:170:5:170:5 | [post] self [x] | semmle.label | [post] self [x] | | test.swift:170:9:170:9 | value | semmle.label | value | @@ -1037,8 +1047,10 @@ nodes | test.swift:180:9:180:16 | call to source() | semmle.label | call to source() | | test.swift:181:13:181:13 | a [x] | semmle.label | a [x] | | test.swift:181:13:181:15 | .x | semmle.label | .x | +| test.swift:185:7:185:7 | self [Reverse] [a, x] | semmle.label | self [Reverse] [a, x] | | test.swift:185:7:185:7 | self [a, x] | semmle.label | self [a, x] | | test.swift:194:3:194:3 | [post] b [a, x] | semmle.label | [post] b [a, x] | +| test.swift:194:3:194:5 | .a [Reverse] [x] | semmle.label | .a [Reverse] [x] | | test.swift:194:3:194:5 | [post] getter for .a [x] | semmle.label | [post] getter for .a [x] | | test.swift:194:11:194:18 | call to source() | semmle.label | call to source() | | test.swift:195:13:195:13 | b [a, x] | semmle.label | b [a, x] | @@ -1057,6 +1069,7 @@ nodes | test.swift:213:13:213:13 | a [x] | semmle.label | a [x] | | test.swift:213:13:213:19 | call to get() | semmle.label | call to get() | | test.swift:218:3:218:3 | [post] b [a, x] | semmle.label | [post] b [a, x] | +| test.swift:218:3:218:5 | .a [Reverse] [x] | semmle.label | .a [Reverse] [x] | | test.swift:218:3:218:5 | [post] getter for .a [x] | semmle.label | [post] getter for .a [x] | | test.swift:218:11:218:18 | call to source() | semmle.label | call to source() | | test.swift:219:13:219:13 | b [a, x] | semmle.label | b [a, x] | @@ -1243,8 +1256,8 @@ nodes | test.swift:545:11:545:22 | .some(...) [some:0] | semmle.label | .some(...) [some:0] | | test.swift:545:21:545:21 | a | semmle.label | a | | test.swift:546:19:546:19 | a | semmle.label | a | -| test.swift:559:9:559:9 | self [Return] [x, some:0] | semmle.label | self [Return] [x, some:0] | -| test.swift:559:9:559:9 | self [Return] [x] | semmle.label | self [Return] [x] | +| test.swift:559:9:559:9 | self [Reverse] [x, some:0] | semmle.label | self [Reverse] [x, some:0] | +| test.swift:559:9:559:9 | self [Reverse] [x] | semmle.label | self [Reverse] [x] | | test.swift:559:9:559:9 | self [x, some:0] | semmle.label | self [x, some:0] | | test.swift:559:9:559:9 | self [x] | semmle.label | self [x] | | test.swift:559:9:559:9 | value | semmle.label | value | @@ -1266,7 +1279,7 @@ nodes | test.swift:576:14:576:21 | call to source() | semmle.label | call to source() | | test.swift:577:14:577:21 | call to source() | semmle.label | call to source() | | test.swift:585:9:585:9 | self [str] | semmle.label | self [str] | -| test.swift:586:5:586:5 | self [Return] [str] | semmle.label | self [Return] [str] | +| test.swift:586:5:586:5 | self [Reverse] [str] | semmle.label | self [Reverse] [str] | | test.swift:586:5:588:5 | self[return] [str] | semmle.label | self[return] [str] | | test.swift:586:10:586:13 | s | semmle.label | s | | test.swift:587:7:587:7 | [post] self [str] | semmle.label | [post] self [str] | @@ -1388,13 +1401,13 @@ nodes | test.swift:726:15:726:15 | set2 [Collection element] | semmle.label | set2 [Collection element] | | test.swift:726:15:726:34 | call to randomElement() [some:0] | semmle.label | call to randomElement() [some:0] | | test.swift:726:15:726:35 | ...! | semmle.label | ...! | -| test.swift:731:9:731:9 | self [Return] [v2, some:0] | semmle.label | self [Return] [v2, some:0] | -| test.swift:731:9:731:9 | self [Return] [v2] | semmle.label | self [Return] [v2] | +| test.swift:731:9:731:9 | self [Reverse] [v2, some:0] | semmle.label | self [Reverse] [v2, some:0] | +| test.swift:731:9:731:9 | self [Reverse] [v2] | semmle.label | self [Reverse] [v2] | | test.swift:731:9:731:9 | self [v2, some:0] | semmle.label | self [v2, some:0] | | test.swift:731:9:731:9 | self [v2] | semmle.label | self [v2] | | test.swift:731:9:731:9 | value | semmle.label | value | | test.swift:731:9:731:9 | value [some:0] | semmle.label | value [some:0] | -| test.swift:732:9:732:9 | self [Return] [v3] | semmle.label | self [Return] [v3] | +| test.swift:732:9:732:9 | self [Reverse] [v3] | semmle.label | self [Reverse] [v3] | | test.swift:732:9:732:9 | self [v3] | semmle.label | self [v3] | | test.swift:732:9:732:9 | value | semmle.label | value | | test.swift:742:5:742:5 | v1 [some:0] | semmle.label | v1 [some:0] | @@ -1512,7 +1525,7 @@ nodes | test.swift:813:8:813:8 | self [v] | semmle.label | self [v] | | test.swift:813:31:813:31 | .v | semmle.label | .v | | test.swift:813:31:813:31 | self [v] | semmle.label | self [v] | -| test.swift:815:7:815:7 | self [Return] [v] | semmle.label | self [Return] [v] | +| test.swift:815:7:815:7 | self [Reverse] [v] | semmle.label | self [Reverse] [v] | | test.swift:815:7:815:7 | self [v] | semmle.label | self [v] | | test.swift:815:7:815:7 | value | semmle.label | value | | test.swift:819:14:819:25 | call to S3.init(_:) [v] | semmle.label | call to S3.init(_:) [v] | @@ -1529,7 +1542,7 @@ nodes | test.swift:833:15:833:23 | call to getv() | semmle.label | call to getv() | | test.swift:839:11:839:17 | [post] enter #keyPath(...) [s, x] | semmle.label | [post] enter #keyPath(...) [s, x] | | test.swift:839:11:839:17 | [post] exit #keyPath(...) | semmle.label | [post] exit #keyPath(...) | -| test.swift:839:11:839:17 | enter #keyPath(...) [Return] [s, x] | semmle.label | enter #keyPath(...) [Return] [s, x] | +| test.swift:839:11:839:17 | enter #keyPath(...) [Reverse] [s, x] | semmle.label | enter #keyPath(...) [Reverse] [s, x] | | test.swift:839:15:839:15 | [post] KeyPathComponent [x] | semmle.label | [post] KeyPathComponent [x] | | test.swift:839:17:839:17 | [post] KeyPathComponent | semmle.label | [post] KeyPathComponent | | test.swift:840:3:840:3 | [post] s2 [s, x] | semmle.label | [post] s2 [s, x] | @@ -1619,33 +1632,35 @@ subpaths | test.swift:119:31:119:31 | x | test.swift:113:14:113:19 | arg | test.swift:114:12:114:22 | call to ... | test.swift:119:18:119:44 | call to forward(arg:lambda:) | | test.swift:122:31:122:38 | call to source() | test.swift:113:14:113:19 | arg | test.swift:114:12:114:22 | call to ... | test.swift:122:18:125:6 | call to forward(arg:lambda:) | | test.swift:145:23:145:30 | call to source() | test.swift:142:10:142:13 | i | test.swift:143:16:143:16 | i | test.swift:145:15:145:31 | call to ... | -| test.swift:170:9:170:9 | value | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Return] [x] | test.swift:170:5:170:5 | [post] self [x] | +| test.swift:170:9:170:9 | value | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Reverse] [x] | test.swift:170:5:170:5 | [post] self [x] | | test.swift:174:12:174:12 | self [x] | test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | .x | test.swift:174:12:174:12 | .x | -| test.swift:180:9:180:16 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Return] [x] | test.swift:180:3:180:3 | [post] a [x] | +| test.swift:180:9:180:16 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Reverse] [x] | test.swift:180:3:180:3 | [post] a [x] | | test.swift:181:13:181:13 | a [x] | test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | .x | test.swift:181:13:181:15 | .x | -| test.swift:194:11:194:18 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Return] [x] | test.swift:194:3:194:5 | [post] getter for .a [x] | +| test.swift:194:3:194:5 | .a [Reverse] [x] | file://:0:0:0:0 | .a [Reverse] [x] | test.swift:185:7:185:7 | self [Reverse] [a, x] | test.swift:194:3:194:3 | [post] b [a, x] | +| test.swift:194:11:194:18 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Reverse] [x] | test.swift:194:3:194:5 | [post] getter for .a [x] | | test.swift:195:13:195:13 | b [a, x] | test.swift:185:7:185:7 | self [a, x] | file://:0:0:0:0 | .a [x] | test.swift:195:13:195:15 | .a [x] | | test.swift:195:13:195:15 | .a [x] | test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | .x | test.swift:195:13:195:17 | .x | | test.swift:200:9:200:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:3:171:3 | self[return] [x] | test.swift:200:3:200:3 | [post] a [x] | -| test.swift:200:9:200:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Return] [x] | test.swift:200:3:200:3 | [post] a [x] | +| test.swift:200:9:200:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Reverse] [x] | test.swift:200:3:200:3 | [post] a [x] | | test.swift:201:13:201:13 | a [x] | test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | .x | test.swift:201:13:201:15 | .x | -| test.swift:206:9:206:16 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Return] [x] | test.swift:206:3:206:3 | [post] a [x] | +| test.swift:206:9:206:16 | call to source() | test.swift:163:7:163:7 | value | test.swift:163:7:163:7 | self [Reverse] [x] | test.swift:206:3:206:3 | [post] a [x] | | test.swift:207:13:207:13 | a [x] | test.swift:173:8:173:8 | self [x] | test.swift:174:12:174:12 | .x | test.swift:207:13:207:19 | call to get() | | test.swift:212:9:212:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:3:171:3 | self[return] [x] | test.swift:212:3:212:3 | [post] a [x] | -| test.swift:212:9:212:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Return] [x] | test.swift:212:3:212:3 | [post] a [x] | +| test.swift:212:9:212:16 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Reverse] [x] | test.swift:212:3:212:3 | [post] a [x] | | test.swift:213:13:213:13 | a [x] | test.swift:173:8:173:8 | self [x] | test.swift:174:12:174:12 | .x | test.swift:213:13:213:19 | call to get() | +| test.swift:218:3:218:5 | .a [Reverse] [x] | file://:0:0:0:0 | .a [Reverse] [x] | test.swift:185:7:185:7 | self [Reverse] [a, x] | test.swift:218:3:218:3 | [post] b [a, x] | | test.swift:218:11:218:18 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:3:171:3 | self[return] [x] | test.swift:218:3:218:5 | [post] getter for .a [x] | -| test.swift:218:11:218:18 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Return] [x] | test.swift:218:3:218:5 | [post] getter for .a [x] | +| test.swift:218:11:218:18 | call to source() | test.swift:169:12:169:22 | value | test.swift:169:8:169:8 | self [Reverse] [x] | test.swift:218:3:218:5 | [post] getter for .a [x] | | test.swift:219:13:219:13 | b [a, x] | test.swift:185:7:185:7 | self [a, x] | file://:0:0:0:0 | .a [x] | test.swift:219:13:219:15 | .a [x] | | test.swift:219:13:219:15 | .a [x] | test.swift:163:7:163:7 | self [x] | file://:0:0:0:0 | .x | test.swift:219:13:219:17 | .x | | test.swift:376:30:376:30 | t1 [Tuple element at index 1] | test.swift:368:22:368:36 | t [Tuple element at index 1] | test.swift:369:12:369:19 | (...) [Tuple element at index 0] | test.swift:376:14:376:32 | call to tupleShiftLeft1(_:) [Tuple element at index 0] | | test.swift:509:24:509:31 | call to source() | test.swift:394:16:394:21 | v | test.swift:394:45:394:62 | call to ... [mySingle:0] | test.swift:509:14:509:32 | call to mkMyEnum1(_:) [mySingle:0] | | test.swift:522:26:522:33 | call to source() | test.swift:396:18:396:23 | v | test.swift:396:45:396:60 | call to ... [some:0] | test.swift:522:14:522:34 | call to mkOptional1(_:) [some:0] | -| test.swift:565:12:565:12 | x | test.swift:559:9:559:9 | value | test.swift:559:9:559:9 | self [Return] [x] | test.swift:565:5:565:5 | [post] cx [x] | -| test.swift:565:12:565:12 | x [some:0] | test.swift:559:9:559:9 | value [some:0] | test.swift:559:9:559:9 | self [Return] [x, some:0] | test.swift:565:5:565:5 | [post] cx [x, some:0] | +| test.swift:565:12:565:12 | x | test.swift:559:9:559:9 | value | test.swift:559:9:559:9 | self [Reverse] [x] | test.swift:565:5:565:5 | [post] cx [x] | +| test.swift:565:12:565:12 | x [some:0] | test.swift:559:9:559:9 | value [some:0] | test.swift:559:9:559:9 | self [Reverse] [x, some:0] | test.swift:565:5:565:5 | [post] cx [x, some:0] | | test.swift:569:20:569:20 | cx [x, some:0] | test.swift:559:9:559:9 | self [x, some:0] | file://:0:0:0:0 | .x [some:0] | test.swift:569:20:569:23 | .x [some:0] | | test.swift:569:20:569:20 | cx [x] | test.swift:559:9:559:9 | self [x] | file://:0:0:0:0 | .x | test.swift:569:20:569:23 | .x | -| test.swift:593:20:593:28 | call to source3() | test.swift:586:10:586:13 | s | test.swift:586:5:586:5 | self [Return] [str] | test.swift:593:7:593:7 | [post] self [str] | +| test.swift:593:20:593:28 | call to source3() | test.swift:586:10:586:13 | s | test.swift:586:5:586:5 | self [Reverse] [str] | test.swift:593:7:593:7 | [post] self [str] | | test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | test.swift:585:9:585:9 | self [str] | file://:0:0:0:0 | .str | test.swift:599:13:599:35 | .str | | test.swift:599:24:599:32 | call to source3() | test.swift:586:10:586:13 | s | test.swift:586:5:588:5 | self[return] [str] | test.swift:599:13:599:33 | call to MyClass.init(s:) [str] | | test.swift:600:13:600:41 | call to MyClass.init(contentsOfFile:) [str] | test.swift:585:9:585:9 | self [str] | file://:0:0:0:0 | .str | test.swift:600:13:600:43 | .str | @@ -1659,9 +1674,9 @@ subpaths | test.swift:661:18:661:25 | call to source() | test.swift:617:8:617:11 | x | test.swift:617:3:619:3 | self[return] [x] | test.swift:661:13:661:26 | call to S.init(x:) [x] | | test.swift:662:29:662:29 | s [some:0, x] | test.swift:655:8:655:12 | s [some:0, x] | test.swift:655:3:657:3 | self[return] [s, some:0, x] | test.swift:662:14:662:30 | call to S2_Optional.init(s:) [s, some:0, x] | | test.swift:664:15:664:15 | s2 [s, some:0, x] | test.swift:663:13:663:29 | enter #keyPath(...) [s, some:0, x] | test.swift:663:13:663:29 | exit #keyPath(...) [some:0] | test.swift:664:15:664:28 | \\...[...] [some:0] | -| test.swift:746:14:746:21 | call to source() | test.swift:731:9:731:9 | value | test.swift:731:9:731:9 | self [Return] [v2] | test.swift:746:5:746:5 | [post] mo1 [v2] | -| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:731:9:731:9 | value [some:0] | test.swift:731:9:731:9 | self [Return] [v2, some:0] | test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | -| test.swift:747:14:747:21 | call to source() | test.swift:732:9:732:9 | value | test.swift:732:9:732:9 | self [Return] [v3] | test.swift:747:5:747:5 | [post] mo1 [v3] | +| test.swift:746:14:746:21 | call to source() | test.swift:731:9:731:9 | value | test.swift:731:9:731:9 | self [Reverse] [v2] | test.swift:746:5:746:5 | [post] mo1 [v2] | +| test.swift:746:14:746:21 | call to source() [some:0] | test.swift:731:9:731:9 | value [some:0] | test.swift:731:9:731:9 | self [Reverse] [v2, some:0] | test.swift:746:5:746:5 | [post] mo1 [v2, some:0] | +| test.swift:747:14:747:21 | call to source() | test.swift:732:9:732:9 | value | test.swift:732:9:732:9 | self [Reverse] [v3] | test.swift:747:5:747:5 | [post] mo1 [v3] | | test.swift:756:15:756:15 | mo1 [v2, some:0] | test.swift:731:9:731:9 | self [v2, some:0] | file://:0:0:0:0 | .v2 [some:0] | test.swift:756:15:756:19 | .v2 [some:0] | | test.swift:756:15:756:15 | mo1 [v2] | test.swift:731:9:731:9 | self [v2] | file://:0:0:0:0 | .v2 | test.swift:756:15:756:19 | .v2 | | test.swift:757:15:757:15 | mo1 [v3] | test.swift:732:9:732:9 | self [v3] | file://:0:0:0:0 | .v3 | test.swift:757:15:757:19 | .v3 | @@ -1672,10 +1687,10 @@ subpaths | test.swift:819:17:819:24 | call to source() | test.swift:809:8:809:13 | v | test.swift:809:3:811:3 | self[return] [v] | test.swift:819:14:819:25 | call to S3.init(_:) [v] | | test.swift:822:15:822:15 | s1 [v] | test.swift:815:7:815:7 | self [v] | file://:0:0:0:0 | .v | test.swift:822:15:822:18 | .v | | test.swift:824:15:824:15 | s1 [v] | test.swift:813:8:813:8 | self [v] | test.swift:813:31:813:31 | .v | test.swift:824:15:824:23 | call to getv() | -| test.swift:828:12:828:19 | call to source() | test.swift:815:7:815:7 | value | test.swift:815:7:815:7 | self [Return] [v] | test.swift:828:5:828:5 | [post] s2 [v] | +| test.swift:828:12:828:19 | call to source() | test.swift:815:7:815:7 | value | test.swift:815:7:815:7 | self [Reverse] [v] | test.swift:828:5:828:5 | [post] s2 [v] | | test.swift:831:15:831:15 | s2 [v] | test.swift:815:7:815:7 | self [v] | file://:0:0:0:0 | .v | test.swift:831:15:831:18 | .v | | test.swift:833:15:833:15 | s2 [v] | test.swift:813:8:813:8 | self [v] | test.swift:813:31:813:31 | .v | test.swift:833:15:833:23 | call to getv() | -| test.swift:840:3:840:16 | \\...[...] | test.swift:839:11:839:17 | [post] exit #keyPath(...) | test.swift:839:11:839:17 | enter #keyPath(...) [Return] [s, x] | test.swift:840:3:840:3 | [post] s2 [s, x] | +| test.swift:840:3:840:16 | \\...[...] | test.swift:839:11:839:17 | [post] exit #keyPath(...) | test.swift:839:11:839:17 | enter #keyPath(...) [Reverse] [s, x] | test.swift:840:3:840:3 | [post] s2 [s, x] | | test.swift:841:13:841:13 | s2 [s, x] | test.swift:632:7:632:7 | self [s, x] | file://:0:0:0:0 | .s [x] | test.swift:841:13:841:16 | .s [x] | | test.swift:841:13:841:16 | .s [x] | test.swift:615:7:615:7 | self [x] | file://:0:0:0:0 | .x | test.swift:841:13:841:18 | .x | | test.swift:867:15:867:15 | args [Collection element] | test.swift:866:21:866:29 | enter #keyPath(...) [Collection element] | test.swift:866:21:866:29 | exit #keyPath(...) | test.swift:867:15:867:38 | \\...[...] | diff --git a/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected b/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected index 7563f2173553..25a098bfd3bf 100644 --- a/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected +++ b/swift/ql/test/library-tests/dataflow/taint/core/Taint.expected @@ -168,8 +168,8 @@ edges | conversions.swift:271:35:271:60 | call to MyValue.init(_:) [v] | conversions.swift:271:12:271:61 | call to mkInt(withMyValue:) | provenance | | | conversions.swift:271:43:271:59 | call to sourceInt(_:) | conversions.swift:229:7:229:12 | v | provenance | | | conversions.swift:271:43:271:59 | call to sourceInt(_:) | conversions.swift:271:35:271:60 | call to MyValue.init(_:) [v] | provenance | | -| file://:0:0:0:0 | [post] self [first] | stringinterpolation.swift:6:6:6:6 | self [Return] [first] | provenance | | -| file://:0:0:0:0 | [post] self [second] | stringinterpolation.swift:7:6:7:6 | self [Return] [second] | provenance | | +| file://:0:0:0:0 | [post] self [first] | stringinterpolation.swift:6:6:6:6 | self [Reverse] [first] | provenance | | +| file://:0:0:0:0 | [post] self [second] | stringinterpolation.swift:7:6:7:6 | self [Reverse] [second] | provenance | | | file://:0:0:0:0 | self [first] | file://:0:0:0:0 | .first | provenance | | | file://:0:0:0:0 | self [second] | file://:0:0:0:0 | .second | provenance | | | file://:0:0:0:0 | self [v] | file://:0:0:0:0 | .v | provenance | | @@ -221,7 +221,7 @@ edges | stringinterpolation.swift:13:36:13:36 | pair [first] | stringinterpolation.swift:6:6:6:6 | self [first] | provenance | | | stringinterpolation.swift:13:36:13:36 | pair [first] | stringinterpolation.swift:13:36:13:41 | .first | provenance | | | stringinterpolation.swift:13:36:13:41 | .first | stringinterpolation.swift:11:11:14:2 | self[return] | provenance | | -| stringinterpolation.swift:13:36:13:41 | .first | stringinterpolation.swift:11:16:11:16 | self [Return] | provenance | | +| stringinterpolation.swift:13:36:13:41 | .first | stringinterpolation.swift:11:16:11:16 | self [Reverse] | provenance | | | stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | stringinterpolation.swift:20:2:20:2 | p1 [first] | provenance | | | stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:6:6:6:6 | value | provenance | | | stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | provenance | | @@ -569,14 +569,14 @@ nodes | simple.swift:87:14:87:21 | call to source() | semmle.label | call to source() | | simple.swift:156:12:156:19 | call to source() | semmle.label | call to source() | | simple.swift:157:12:157:19 | call to source() | semmle.label | call to source() | -| stringinterpolation.swift:6:6:6:6 | self [Return] [first] | semmle.label | self [Return] [first] | +| stringinterpolation.swift:6:6:6:6 | self [Reverse] [first] | semmle.label | self [Reverse] [first] | | stringinterpolation.swift:6:6:6:6 | self [first] | semmle.label | self [first] | | stringinterpolation.swift:6:6:6:6 | value | semmle.label | value | -| stringinterpolation.swift:7:6:7:6 | self [Return] [second] | semmle.label | self [Return] [second] | +| stringinterpolation.swift:7:6:7:6 | self [Reverse] [second] | semmle.label | self [Reverse] [second] | | stringinterpolation.swift:7:6:7:6 | self [second] | semmle.label | self [second] | | stringinterpolation.swift:7:6:7:6 | value | semmle.label | value | | stringinterpolation.swift:11:11:14:2 | self[return] | semmle.label | self[return] | -| stringinterpolation.swift:11:16:11:16 | self [Return] | semmle.label | self [Return] | +| stringinterpolation.swift:11:16:11:16 | self [Reverse] | semmle.label | self [Reverse] | | stringinterpolation.swift:11:36:11:44 | pair [first] | semmle.label | pair [first] | | stringinterpolation.swift:13:36:13:36 | pair [first] | semmle.label | pair [first] | | stringinterpolation.swift:13:36:13:41 | .first | semmle.label | .first | @@ -623,11 +623,11 @@ subpaths | conversions.swift:271:35:271:60 | call to MyValue.init(_:) [v] | conversions.swift:254:20:254:33 | withMyValue [v] | conversions.swift:256:10:256:22 | .v | conversions.swift:271:12:271:61 | call to mkInt(withMyValue:) | | conversions.swift:271:43:271:59 | call to sourceInt(_:) | conversions.swift:229:7:229:12 | v | conversions.swift:229:2:231:2 | self[return] [v] | conversions.swift:271:35:271:60 | call to MyValue.init(_:) [v] | | stringinterpolation.swift:13:36:13:36 | pair [first] | stringinterpolation.swift:6:6:6:6 | self [first] | file://:0:0:0:0 | .first | stringinterpolation.swift:13:36:13:41 | .first | -| stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:6:6:6:6 | value | stringinterpolation.swift:6:6:6:6 | self [Return] [first] | stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | +| stringinterpolation.swift:19:13:19:20 | call to source() | stringinterpolation.swift:6:6:6:6 | value | stringinterpolation.swift:6:6:6:6 | self [Reverse] [first] | stringinterpolation.swift:19:2:19:2 | [post] p1 [first] | | stringinterpolation.swift:22:21:22:21 | p1 [first] | stringinterpolation.swift:6:6:6:6 | self [first] | file://:0:0:0:0 | .first | stringinterpolation.swift:22:21:22:24 | .first | | stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:11:36:11:44 | pair [first] | stringinterpolation.swift:11:11:14:2 | self[return] | stringinterpolation.swift:24:20:24:20 | [post] $interpolation | -| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:11:36:11:44 | pair [first] | stringinterpolation.swift:11:16:11:16 | self [Return] | stringinterpolation.swift:24:20:24:20 | [post] $interpolation | -| stringinterpolation.swift:28:14:28:21 | call to source() | stringinterpolation.swift:7:6:7:6 | value | stringinterpolation.swift:7:6:7:6 | self [Return] [second] | stringinterpolation.swift:28:2:28:2 | [post] p2 [second] | +| stringinterpolation.swift:24:21:24:21 | p1 [first] | stringinterpolation.swift:11:36:11:44 | pair [first] | stringinterpolation.swift:11:16:11:16 | self [Reverse] | stringinterpolation.swift:24:20:24:20 | [post] $interpolation | +| stringinterpolation.swift:28:14:28:21 | call to source() | stringinterpolation.swift:7:6:7:6 | value | stringinterpolation.swift:7:6:7:6 | self [Reverse] [second] | stringinterpolation.swift:28:2:28:2 | [post] p2 [second] | | stringinterpolation.swift:31:21:31:21 | p2 [second] | stringinterpolation.swift:7:6:7:6 | self [second] | file://:0:0:0:0 | .second | stringinterpolation.swift:31:21:31:24 | .second | #select | conversions.swift:32:12:32:31 | call to sourceInt(_:) | conversions.swift:32:12:32:31 | call to sourceInt(_:) | conversions.swift:32:12:32:31 | call to sourceInt(_:) | result | diff --git a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected index 204e2486cc2f..9e5c43aaf857 100644 --- a/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected +++ b/swift/ql/test/query-tests/Security/CWE-311/CleartextStorageDatabase.expected @@ -57,14 +57,20 @@ edges | SQLite.swift:197:17:197:49 | [...] [Collection element] | SQLite.swift:197:16:197:50 | [...] [Collection element, Collection element] | provenance | | | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | SQLite.swift:197:17:197:49 | [...] [Collection element] | provenance | | | SQLite.swift:197:32:197:32 | mobilePhoneNumber | SQLite.swift:197:18:197:32 | ... <-(_:_:) ... | provenance | | -| file://:0:0:0:0 | [post] self [data, Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | provenance | | -| file://:0:0:0:0 | [post] self [data] | testRealm2.swift:13:6:13:6 | self [Return] [data] | provenance | | -| file://:0:0:0:0 | [post] self [data] | testRealm.swift:27:6:27:6 | self [Return] [data] | provenance | | -| file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | provenance | | -| file://:0:0:0:0 | [post] self [password] | testRealm.swift:34:6:34:6 | self [Return] [password] | provenance | | -| file://:0:0:0:0 | [post] self [value] | testCoreData2.swift:70:9:70:9 | self [Return] [value] | provenance | | +| file://:0:0:0:0 | [post] self [data, Collection element] | file://:0:0:0:0 | self [Reverse] [data, Collection element] | provenance | | +| file://:0:0:0:0 | [post] self [data] | file://:0:0:0:0 | self [Reverse] [data] | provenance | | +| file://:0:0:0:0 | [post] self [data] | file://:0:0:0:0 | self [Reverse] [data] | provenance | | +| file://:0:0:0:0 | [post] self [notStoredBankAccountNumber] | file://:0:0:0:0 | self [Reverse] [notStoredBankAccountNumber] | provenance | | +| file://:0:0:0:0 | [post] self [password] | file://:0:0:0:0 | self [Reverse] [password] | provenance | | +| file://:0:0:0:0 | [post] self [value] | file://:0:0:0:0 | self [Reverse] [value] | provenance | | | file://:0:0:0:0 | self | file://:0:0:0:0 | .value | provenance | Config | | file://:0:0:0:0 | self | file://:0:0:0:0 | .value2 | provenance | Config | +| file://:0:0:0:0 | self [Reverse] [data, Collection element] | testRealm2.swift:13:6:13:6 | self [Reverse] [data, Collection element] | provenance | | +| file://:0:0:0:0 | self [Reverse] [data] | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | provenance | | +| file://:0:0:0:0 | self [Reverse] [data] | testRealm.swift:27:6:27:6 | self [Reverse] [data] | provenance | | +| file://:0:0:0:0 | self [Reverse] [notStoredBankAccountNumber] | testCoreData2.swift:23:13:23:13 | self [Reverse] [notStoredBankAccountNumber] | provenance | | +| file://:0:0:0:0 | self [Reverse] [password] | testRealm.swift:34:6:34:6 | self [Reverse] [password] | provenance | | +| file://:0:0:0:0 | self [Reverse] [value] | testCoreData2.swift:70:9:70:9 | self [Reverse] [value] | provenance | | | file://:0:0:0:0 | self [value] | file://:0:0:0:0 | .value | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [data] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [data] | provenance | | @@ -337,6 +343,12 @@ nodes | file://:0:0:0:0 | [post] self [value] | semmle.label | [post] self [value] | | file://:0:0:0:0 | self | semmle.label | self | | file://:0:0:0:0 | self | semmle.label | self | +| file://:0:0:0:0 | self [Reverse] [data, Collection element] | semmle.label | self [Reverse] [data, Collection element] | +| file://:0:0:0:0 | self [Reverse] [data] | semmle.label | self [Reverse] [data] | +| file://:0:0:0:0 | self [Reverse] [data] | semmle.label | self [Reverse] [data] | +| file://:0:0:0:0 | self [Reverse] [notStoredBankAccountNumber] | semmle.label | self [Reverse] [notStoredBankAccountNumber] | +| file://:0:0:0:0 | self [Reverse] [password] | semmle.label | self [Reverse] [password] | +| file://:0:0:0:0 | self [Reverse] [value] | semmle.label | self [Reverse] [value] | | file://:0:0:0:0 | self [value] | semmle.label | self [value] | | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | @@ -349,7 +361,7 @@ nodes | sqlite3_c_api.swift:46:27:46:27 | insertQuery | semmle.label | insertQuery | | sqlite3_c_api.swift:47:27:47:27 | updateQuery | semmle.label | updateQuery | | sqlite3_c_api.swift:58:36:58:36 | medicalNotes | semmle.label | medicalNotes | -| testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | semmle.label | self [Return] [notStoredBankAccountNumber] | +| testCoreData2.swift:23:13:23:13 | self [Reverse] [notStoredBankAccountNumber] | semmle.label | self [Reverse] [notStoredBankAccountNumber] | | testCoreData2.swift:23:13:23:13 | value | semmle.label | value | | testCoreData2.swift:37:2:37:2 | [post] obj | semmle.label | [post] obj | | testCoreData2.swift:37:16:37:16 | bankAccountNo | semmle.label | bankAccountNo | @@ -376,7 +388,7 @@ nodes | testCoreData2.swift:65:3:65:3 | [post] obj | semmle.label | [post] obj | | testCoreData2.swift:65:29:65:29 | bankAccountNo | semmle.label | bankAccountNo | | testCoreData2.swift:70:9:70:9 | self | semmle.label | self | -| testCoreData2.swift:70:9:70:9 | self [Return] [value] | semmle.label | self [Return] [value] | +| testCoreData2.swift:70:9:70:9 | self [Reverse] [value] | semmle.label | self [Reverse] [value] | | testCoreData2.swift:70:9:70:9 | self [value] | semmle.label | self [value] | | testCoreData2.swift:70:9:70:9 | value | semmle.label | value | | testCoreData2.swift:71:9:71:9 | self | semmle.label | self | @@ -557,8 +569,8 @@ nodes | testGRDB.swift:210:85:210:85 | password | semmle.label | password | | testGRDB.swift:212:98:212:107 | [...] | semmle.label | [...] | | testGRDB.swift:212:99:212:99 | password | semmle.label | password | -| testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | semmle.label | self [Return] [data, Collection element] | -| testRealm2.swift:13:6:13:6 | self [Return] [data] | semmle.label | self [Return] [data] | +| testRealm2.swift:13:6:13:6 | self [Reverse] [data, Collection element] | semmle.label | self [Reverse] [data, Collection element] | +| testRealm2.swift:13:6:13:6 | self [Reverse] [data] | semmle.label | self [Reverse] [data] | | testRealm2.swift:13:6:13:6 | value | semmle.label | value | | testRealm2.swift:13:6:13:6 | value [Collection element] | semmle.label | value [Collection element] | | testRealm2.swift:18:2:18:2 | [post] o | semmle.label | [post] o | @@ -579,9 +591,9 @@ nodes | testRealm2.swift:34:11:34:25 | call to String.init(_:) | semmle.label | call to String.init(_:) | | testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | semmle.label | call to String.init(_:) [Collection element] | | testRealm2.swift:34:18:34:18 | int_ccn | semmle.label | int_ccn | -| testRealm.swift:27:6:27:6 | self [Return] [data] | semmle.label | self [Return] [data] | +| testRealm.swift:27:6:27:6 | self [Reverse] [data] | semmle.label | self [Reverse] [data] | | testRealm.swift:27:6:27:6 | value | semmle.label | value | -| testRealm.swift:34:6:34:6 | self [Return] [password] | semmle.label | self [Return] [password] | +| testRealm.swift:34:6:34:6 | self [Reverse] [password] | semmle.label | self [Reverse] [password] | | testRealm.swift:34:6:34:6 | value | semmle.label | value | | testRealm.swift:41:2:41:2 | [post] a | semmle.label | [post] a | | testRealm.swift:41:11:41:11 | myPassword | semmle.label | myPassword | @@ -594,8 +606,8 @@ nodes | testRealm.swift:73:2:73:2 | [post] h | semmle.label | [post] h | | testRealm.swift:73:15:73:15 | myPassword | semmle.label | myPassword | subpaths -| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | testCoreData2.swift:43:2:43:2 | [post] obj | -| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | testCoreData2.swift:23:13:23:13 | self [Return] [notStoredBankAccountNumber] | testCoreData2.swift:52:2:52:10 | [post] ...? | +| testCoreData2.swift:43:35:43:35 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | testCoreData2.swift:23:13:23:13 | self [Reverse] [notStoredBankAccountNumber] | testCoreData2.swift:43:2:43:2 | [post] obj | +| testCoreData2.swift:52:41:52:41 | bankAccountNo | testCoreData2.swift:23:13:23:13 | value | testCoreData2.swift:23:13:23:13 | self [Reverse] [notStoredBankAccountNumber] | testCoreData2.swift:52:2:52:10 | [post] ...? | | testCoreData2.swift:82:18:82:18 | bankAccountNo | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:82:18:82:32 | .value | | testCoreData2.swift:83:18:83:18 | bankAccountNo | testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | .value2 | testCoreData2.swift:83:18:83:32 | .value2 | | testCoreData2.swift:84:18:84:18 | ...! | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:84:18:84:33 | .value | @@ -604,24 +616,24 @@ subpaths | testCoreData2.swift:89:22:89:22 | ...! | testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | .value2 | testCoreData2.swift:89:22:89:37 | .value2 | | testCoreData2.swift:92:10:92:10 | a | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:92:10:92:12 | .value | | testCoreData2.swift:97:12:97:12 | c | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:97:12:97:14 | .value | -| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:70:9:70:9 | value | testCoreData2.swift:70:9:70:9 | self [Return] [value] | testCoreData2.swift:97:2:97:2 | [post] d [value] | +| testCoreData2.swift:97:12:97:14 | .value | testCoreData2.swift:70:9:70:9 | value | testCoreData2.swift:70:9:70:9 | self [Reverse] [value] | testCoreData2.swift:97:2:97:2 | [post] d [value] | | testCoreData2.swift:98:18:98:18 | d [value] | testCoreData2.swift:70:9:70:9 | self [value] | file://:0:0:0:0 | .value | testCoreData2.swift:98:18:98:20 | .value | | testCoreData2.swift:104:18:104:18 | e | testCoreData2.swift:70:9:70:9 | self | file://:0:0:0:0 | .value | testCoreData2.swift:104:18:104:20 | .value | | testCoreData2.swift:105:18:105:18 | e | testCoreData2.swift:71:9:71:9 | self | file://:0:0:0:0 | .value2 | testCoreData2.swift:105:18:105:20 | .value2 | -| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:18:2:18:2 | [post] o | -| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:24:2:24:2 | [post] o | -| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:25:2:25:2 | [post] o | -| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:26:2:26:2 | [post] o | -| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o | -| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:32:2:32:2 | [post] o | -| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:33:2:33:2 | [post] o | -| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Return] [data] | testRealm2.swift:34:2:34:2 | [post] o | -| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Return] [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o | -| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:41:2:41:2 | [post] a | -| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:49:2:49:2 | [post] c | -| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:59:2:59:3 | [post] ...! | -| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Return] [data] | testRealm.swift:66:2:66:2 | [post] g | -| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value | testRealm.swift:34:6:34:6 | self [Return] [password] | testRealm.swift:73:2:73:2 | [post] h | +| testRealm2.swift:18:11:18:11 | myPassword | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:18:2:18:2 | [post] o | +| testRealm2.swift:24:11:24:11 | socialSecurityNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:24:2:24:2 | [post] o | +| testRealm2.swift:25:11:25:11 | ssn | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:25:2:25:2 | [post] o | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:26:2:26:2 | [post] o | +| testRealm2.swift:26:11:26:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Reverse] [data, Collection element] | testRealm2.swift:26:2:26:2 | [post] o | +| testRealm2.swift:32:11:32:11 | creditCardNumber | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:32:2:32:2 | [post] o | +| testRealm2.swift:33:11:33:11 | CCN | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:33:2:33:2 | [post] o | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) | testRealm2.swift:13:6:13:6 | value | testRealm2.swift:13:6:13:6 | self [Reverse] [data] | testRealm2.swift:34:2:34:2 | [post] o | +| testRealm2.swift:34:11:34:25 | call to String.init(_:) [Collection element] | testRealm2.swift:13:6:13:6 | value [Collection element] | testRealm2.swift:13:6:13:6 | self [Reverse] [data, Collection element] | testRealm2.swift:34:2:34:2 | [post] o | +| testRealm.swift:41:11:41:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Reverse] [data] | testRealm.swift:41:2:41:2 | [post] a | +| testRealm.swift:49:11:49:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Reverse] [data] | testRealm.swift:49:2:49:2 | [post] c | +| testRealm.swift:59:12:59:12 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Reverse] [data] | testRealm.swift:59:2:59:3 | [post] ...! | +| testRealm.swift:66:11:66:11 | myPassword | testRealm.swift:27:6:27:6 | value | testRealm.swift:27:6:27:6 | self [Reverse] [data] | testRealm.swift:66:2:66:2 | [post] g | +| testRealm.swift:73:15:73:15 | myPassword | testRealm.swift:34:6:34:6 | value | testRealm.swift:34:6:34:6 | self [Reverse] [password] | testRealm.swift:73:2:73:2 | [post] h | #select | SQLite.swift:123:17:123:17 | insertQuery | SQLite.swift:119:70:119:70 | mobilePhoneNumber | SQLite.swift:123:17:123:17 | insertQuery | This operation stores 'insertQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:119:70:119:70 | mobilePhoneNumber | mobilePhoneNumber | | SQLite.swift:124:17:124:17 | updateQuery | SQLite.swift:120:50:120:50 | mobilePhoneNumber | SQLite.swift:124:17:124:17 | updateQuery | This operation stores 'updateQuery' in a database. It may contain unencrypted sensitive data from $@. | SQLite.swift:120:50:120:50 | mobilePhoneNumber | mobilePhoneNumber | diff --git a/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected b/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected index bd2119ac332d..cbb1864cf4c0 100644 --- a/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected +++ b/swift/ql/test/query-tests/Security/CWE-321/HardcodedEncryptionKey.expected @@ -26,7 +26,7 @@ edges | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:155:26:155:26 | keyString | provenance | | | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:164:24:164:24 | keyString | provenance | | | cryptoswift.swift:94:18:94:36 | call to getConstantString() | cryptoswift.swift:166:24:166:24 | keyString | provenance | | -| file://:0:0:0:0 | [post] self [encryptionKey] | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | provenance | | +| file://:0:0:0:0 | [post] self [encryptionKey] | misc.swift:30:7:30:7 | self [Reverse] [encryptionKey] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [encryptionKey] | provenance | | | grdb.swift:21:20:21:20 | abc123 | grdb.swift:27:23:27:23 | constString | provenance | | @@ -118,7 +118,7 @@ nodes | grdb.swift:29:23:29:23 | constData | semmle.label | constData | | grdb.swift:31:26:31:26 | constString | semmle.label | constString | | grdb.swift:33:26:33:26 | constData | semmle.label | constData | -| misc.swift:30:7:30:7 | self [Return] [encryptionKey] | semmle.label | self [Return] [encryptionKey] | +| misc.swift:30:7:30:7 | self [Reverse] [encryptionKey] | semmle.label | self [Reverse] [encryptionKey] | | misc.swift:30:7:30:7 | value | semmle.label | value | | misc.swift:57:19:57:38 | call to Data.init(_:) | semmle.label | call to Data.init(_:) | | misc.swift:57:24:57:24 | abcdef123456 | semmle.label | abcdef123456 | @@ -160,8 +160,8 @@ nodes | sqlite3_c_api.swift:49:36:49:36 | buffer | semmle.label | buffer | | sqlite3_c_api.swift:50:38:50:38 | buffer | semmle.label | buffer | subpaths -| misc.swift:66:25:66:25 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | misc.swift:66:2:66:2 | [post] config | -| misc.swift:70:41:70:41 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Return] [encryptionKey] | misc.swift:70:2:70:18 | [post] getter for .config | +| misc.swift:66:25:66:25 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Reverse] [encryptionKey] | misc.swift:66:2:66:2 | [post] config | +| misc.swift:70:41:70:41 | myConstKey | misc.swift:30:7:30:7 | value | misc.swift:30:7:30:7 | self [Reverse] [encryptionKey] | misc.swift:70:2:70:18 | [post] getter for .config | #select | SQLite.swift:43:13:43:13 | hardcoded_key | SQLite.swift:43:13:43:13 | hardcoded_key | SQLite.swift:43:13:43:13 | hardcoded_key | The key 'hardcoded_key' has been initialized with hard-coded values from $@. | SQLite.swift:43:13:43:13 | hardcoded_key | hardcoded_key | | SQLite.swift:45:23:45:23 | hardcoded_key | SQLite.swift:45:23:45:23 | hardcoded_key | SQLite.swift:45:23:45:23 | hardcoded_key | The key 'hardcoded_key' has been initialized with hard-coded values from $@. | SQLite.swift:45:23:45:23 | hardcoded_key | hardcoded_key | diff --git a/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected b/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected index e48f6c9a9b6d..377ad3810137 100644 --- a/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected +++ b/swift/ql/test/query-tests/Security/CWE-757/InsecureTLS.expected @@ -35,14 +35,19 @@ edges | InsecureTLS.swift:187:42:187:42 | withMinVersion | InsecureTLS.swift:187:5:187:5 | [post] self | provenance | | | InsecureTLS.swift:193:51:193:74 | .TLSv10 | InsecureTLS.swift:185:20:185:36 | withMinVersion | provenance | | | InsecureTLS.swift:196:56:196:63 | value | InsecureTLS.swift:196:1:198:1 | version[return] | provenance | | +| InsecureTLS.swift:202:24:202:31 | .tlsMinimumSupportedProtocolVersion [Reverse] | InsecureTLS.swift:202:24:202:24 | [post] config | provenance | | +| InsecureTLS.swift:202:24:202:31 | .tlsMinimumSupportedProtocolVersion [Reverse] | file://:0:0:0:0 | .tlsMinimumSupportedProtocolVersion [Reverse] | provenance | | | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | InsecureTLS.swift:202:24:202:24 | [post] config | provenance | | +| InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | InsecureTLS.swift:202:24:202:31 | .tlsMinimumSupportedProtocolVersion [Reverse] | provenance | | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:196:56:196:63 | value | provenance | | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | provenance | | -| file://:0:0:0:0 | [post] self [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [Return] [TLSVersion] | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | provenance | | -| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | provenance | | -| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | provenance | | +| file://:0:0:0:0 | .tlsMinimumSupportedProtocolVersion [Reverse] | file://:0:0:0:0 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | provenance | | +| file://:0:0:0:0 | [post] self [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [Reverse] [TLSVersion] | provenance | | +| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:20:7:20:7 | self [Reverse] [tlsMaximumSupportedProtocolVersion] | provenance | | +| file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | InsecureTLS.swift:23:7:23:7 | self [Reverse] [tlsMaximumSupportedProtocol] | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | provenance | | +| file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | InsecureTLS.swift:22:7:22:7 | self [Reverse] [tlsMinimumSupportedProtocol] | provenance | | +| file://:0:0:0:0 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | provenance | | | file://:0:0:0:0 | self [TLSVersion] | file://:0:0:0:0 | .TLSVersion | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self | provenance | | @@ -54,13 +59,14 @@ edges | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | provenance | | | file://:0:0:0:0 | value | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | provenance | | nodes -| InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | semmle.label | self [Return] [tlsMinimumSupportedProtocolVersion] | +| InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | semmle.label | self [Reverse] [tlsMinimumSupportedProtocolVersion] | +| InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | semmle.label | self [Reverse] [tlsMinimumSupportedProtocolVersion] | | InsecureTLS.swift:19:7:19:7 | value | semmle.label | value | -| InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | semmle.label | self [Return] [tlsMaximumSupportedProtocolVersion] | +| InsecureTLS.swift:20:7:20:7 | self [Reverse] [tlsMaximumSupportedProtocolVersion] | semmle.label | self [Reverse] [tlsMaximumSupportedProtocolVersion] | | InsecureTLS.swift:20:7:20:7 | value | semmle.label | value | -| InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | semmle.label | self [Return] [tlsMinimumSupportedProtocol] | +| InsecureTLS.swift:22:7:22:7 | self [Reverse] [tlsMinimumSupportedProtocol] | semmle.label | self [Reverse] [tlsMinimumSupportedProtocol] | | InsecureTLS.swift:22:7:22:7 | value | semmle.label | value | -| InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | semmle.label | self [Return] [tlsMaximumSupportedProtocol] | +| InsecureTLS.swift:23:7:23:7 | self [Reverse] [tlsMaximumSupportedProtocol] | semmle.label | self [Reverse] [tlsMaximumSupportedProtocol] | | InsecureTLS.swift:23:7:23:7 | value | semmle.label | value | | InsecureTLS.swift:40:3:40:3 | [post] config | semmle.label | [post] config | | InsecureTLS.swift:40:47:40:70 | .TLSv10 | semmle.label | .TLSv10 | @@ -79,7 +85,7 @@ nodes | InsecureTLS.swift:122:3:122:3 | [post] config | semmle.label | [post] config | | InsecureTLS.swift:122:47:122:47 | version | semmle.label | version | | InsecureTLS.swift:127:25:127:48 | .TLSv11 | semmle.label | .TLSv11 | -| InsecureTLS.swift:158:7:158:7 | self [Return] [TLSVersion] | semmle.label | self [Return] [TLSVersion] | +| InsecureTLS.swift:158:7:158:7 | self [Reverse] [TLSVersion] | semmle.label | self [Reverse] [TLSVersion] | | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | semmle.label | self [TLSVersion] | | InsecureTLS.swift:158:7:158:7 | value | semmle.label | value | | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | semmle.label | [post] def [TLSVersion] | @@ -96,9 +102,11 @@ nodes | InsecureTLS.swift:196:1:198:1 | version[return] | semmle.label | version[return] | | InsecureTLS.swift:196:56:196:63 | value | semmle.label | value | | InsecureTLS.swift:202:24:202:24 | [post] config | semmle.label | [post] config | +| InsecureTLS.swift:202:24:202:31 | .tlsMinimumSupportedProtocolVersion [Reverse] | semmle.label | .tlsMinimumSupportedProtocolVersion [Reverse] | | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | semmle.label | [post] getter for .tlsMinimumSupportedProtocolVersion | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | semmle.label | .TLSv10 | | file://:0:0:0:0 | .TLSVersion | semmle.label | .TLSVersion | +| file://:0:0:0:0 | .tlsMinimumSupportedProtocolVersion [Reverse] | semmle.label | .tlsMinimumSupportedProtocolVersion [Reverse] | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | | file://:0:0:0:0 | [post] self | semmle.label | [post] self | @@ -108,6 +116,7 @@ nodes | file://:0:0:0:0 | [post] self [tlsMaximumSupportedProtocol] | semmle.label | [post] self [tlsMaximumSupportedProtocol] | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocolVersion] | semmle.label | [post] self [tlsMinimumSupportedProtocolVersion] | | file://:0:0:0:0 | [post] self [tlsMinimumSupportedProtocol] | semmle.label | [post] self [tlsMinimumSupportedProtocol] | +| file://:0:0:0:0 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | semmle.label | self [Reverse] [tlsMinimumSupportedProtocolVersion] | | file://:0:0:0:0 | self [TLSVersion] | semmle.label | self [TLSVersion] | | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | @@ -115,17 +124,18 @@ nodes | file://:0:0:0:0 | value | semmle.label | value | | file://:0:0:0:0 | value | semmle.label | value | subpaths -| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config | -| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config | -| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | InsecureTLS.swift:20:7:20:7 | self [Return] [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config | -| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | InsecureTLS.swift:22:7:22:7 | self [Return] [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config | -| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | InsecureTLS.swift:23:7:23:7 | self [Return] [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config | -| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config | -| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config | -| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:158:7:158:7 | value | InsecureTLS.swift:158:7:158:7 | self [Return] [TLSVersion] | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | +| InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:40:3:40:3 | [post] config | +| InsecureTLS.swift:45:47:45:70 | .TLSv11 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:45:3:45:3 | [post] config | +| InsecureTLS.swift:57:47:57:70 | .TLSv10 | InsecureTLS.swift:20:7:20:7 | value | InsecureTLS.swift:20:7:20:7 | self [Reverse] [tlsMaximumSupportedProtocolVersion] | InsecureTLS.swift:57:3:57:3 | [post] config | +| InsecureTLS.swift:64:40:64:52 | .tlsProtocol10 | InsecureTLS.swift:22:7:22:7 | value | InsecureTLS.swift:22:7:22:7 | self [Reverse] [tlsMinimumSupportedProtocol] | InsecureTLS.swift:64:3:64:3 | [post] config | +| InsecureTLS.swift:76:40:76:52 | .tlsProtocol10 | InsecureTLS.swift:23:7:23:7 | value | InsecureTLS.swift:23:7:23:7 | self [Reverse] [tlsMaximumSupportedProtocol] | InsecureTLS.swift:76:3:76:3 | [post] config | +| InsecureTLS.swift:111:47:111:64 | call to getBadTLSVersion() | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:111:3:111:3 | [post] config | +| InsecureTLS.swift:122:47:122:47 | version | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:122:3:122:3 | [post] config | +| InsecureTLS.swift:163:20:163:43 | .TLSv10 | InsecureTLS.swift:158:7:158:7 | value | InsecureTLS.swift:158:7:158:7 | self [Reverse] [TLSVersion] | InsecureTLS.swift:163:3:163:3 | [post] def [TLSVersion] | | InsecureTLS.swift:165:47:165:47 | def [TLSVersion] | InsecureTLS.swift:158:7:158:7 | self [TLSVersion] | file://:0:0:0:0 | .TLSVersion | InsecureTLS.swift:165:47:165:51 | .TLSVersion | -| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:165:3:165:3 | [post] config | -| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Return] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | +| InsecureTLS.swift:165:47:165:51 | .TLSVersion | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:165:3:165:3 | [post] config | +| InsecureTLS.swift:181:53:181:76 | .TLSv10 | InsecureTLS.swift:19:7:19:7 | value | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:181:3:181:9 | [post] getter for .config | +| InsecureTLS.swift:202:24:202:31 | .tlsMinimumSupportedProtocolVersion [Reverse] | file://:0:0:0:0 | .tlsMinimumSupportedProtocolVersion [Reverse] | InsecureTLS.swift:19:7:19:7 | self [Reverse] [tlsMinimumSupportedProtocolVersion] | InsecureTLS.swift:202:24:202:24 | [post] config | | InsecureTLS.swift:202:74:202:97 | .TLSv10 | InsecureTLS.swift:196:56:196:63 | value | InsecureTLS.swift:196:1:198:1 | version[return] | InsecureTLS.swift:202:24:202:31 | [post] getter for .tlsMinimumSupportedProtocolVersion | #select | InsecureTLS.swift:40:3:40:3 | [post] config | InsecureTLS.swift:40:47:40:70 | .TLSv10 | InsecureTLS.swift:40:3:40:3 | [post] config | This TLS configuration is insecure. | pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy