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 8f0ae53171e3..6306bce7e380 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 @@ -1434,7 +1434,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..8dc3812f88a4 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.expected @@ -0,0 +1,168 @@ +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:9:66:26 | call to method GetNestedNested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | [post] call to method GetNestedNested : A [field Field] : String | ReverseFlow.cs:66:9:66:26 | call to method GetNestedNested [Reverse] : A [field Field] : String | provenance | | +| ReverseFlow.cs:66:9:66:26 | call to method GetNestedNested [Reverse] : 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 | call to method GetNestedNested [Reverse] : 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 | call to method GetNestedNested [Reverse] : 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 | call to method GetNestedNested [Reverse] : 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:9:66:26 | call to method GetNestedNested [Reverse] : A [field Field] : String | semmle.label | call to method GetNestedNested [Reverse] : A [field Field] : String | +| ReverseFlow.cs:66:9:66:26 | call to method GetNestedNested [Reverse] : A [field Field] : String | semmle.label | call to method GetNestedNested [Reverse] : 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 | call to method GetNestedNested [Reverse] : 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 | call to method GetNestedNested [Reverse] : 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..9336e1b28be0 --- /dev/null +++ b/csharp/ql/test/library-tests/dataflow/reverse-flow/ReverseFlow.ql @@ -0,0 +1,12 @@ +/** + * @kind path-problem + */ + +import csharp +import TestUtilities.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..c2428a8bb44a 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,125 @@ 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:20:12:20:15 | this [Reverse] : Test [field] : String | Test.java:19:15:19:34 | parameter this [Reverse] : Test [field] : String | provenance | | +| Test.java:20:12:20:15 | this [Reverse] : Test [field] : String | Test.java:19:15:19:34 | parameter this [Reverse] : Test [field] : String | provenance | | +| Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:15 | 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(...) [Reverse] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:44:5:44:18 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:44:5:44:5 | t [post update] : Test [field] : String | provenance | | +| Test.java:44:5:44:18 | fluentNoop(...) [post update] : Test [field] : String | Test.java:44:5:44:18 | fluentNoop(...) [Reverse] : 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(...) [Reverse] : Test [field] : String | Test.java:29:12:29:12 | t [Reverse] : Test [field] : String | provenance | | +| Test.java:50:5:50:20 | identity(...) [Reverse] : Test [field] : String | Test.java:50:19:50:19 | t [post update] : Test [field] : String | provenance | | +| Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | Test.java:50:5:50:20 | identity(...) [Reverse] : Test [field] : String | provenance | | +| Test.java:50:5:50:33 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:6:12:6:15 | this [Reverse] : Test [field] : String | provenance | | +| Test.java:50:5:50:33 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:50:5:50:20 | identity(...) [post update] : Test [field] : String | provenance | | +| Test.java:50:5:50:33 | fluentNoop(...) [post update] : Test [field] : String | Test.java:50:5:50:33 | fluentNoop(...) [Reverse] : 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:5:56:5 | t [post update] : Test [field] : String | Test.java:57:10:57:10 | t : Test [field] : String | provenance | | +| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | provenance | | +| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:56:5:56:5 | t [post update] : Test [field] : String | provenance | | +| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [post update] : Test [field] : String | Test.java:56:5:56:28 | indirectlyFluentNoop(...) [Reverse] : 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:5:62:5 | t [post update] : Test [field] : String | Test.java:63:10:63:10 | t : Test [field] : String | provenance | | +| Test.java:62:5:62:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | provenance | | +| Test.java:62:5:62:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:62:5:62:5 | t [post update] : Test [field] : String | provenance | | +| Test.java:62:5:62:51 | modelledFluentMethod(...) [post update] : Test [field] : String | Test.java:62:5:62:28 | indirectlyFluentNoop(...) [Reverse] : 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:5:68:28 | modelledIdentity(...) [post update] : Test [field] : String | Test.java:69:10:69:10 | t : Test [field] : String | provenance | ValuePreservingMethod | +| Test.java:68:5:68:51 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | provenance | | +| Test.java:68:5:68:51 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:68:5:68:28 | modelledIdentity(...) [post update] : Test [field] : String | provenance | | +| Test.java:68:5:68:74 | modelledFluentMethod(...) [post update] : Test [field] : String | Test.java:68:5:68:51 | indirectlyFluentNoop(...) [Reverse] : 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:19:15:19:34 | parameter this [Reverse] : Test [field] : String | semmle.label | parameter this [Reverse] : Test [field] : String | +| Test.java:20:12:20:15 | this [Reverse] : Test [field] : String | semmle.label | this [Reverse] : Test [field] : String | +| Test.java:20:12:20:15 | this [Reverse] : Test [field] : String | semmle.label | this [Reverse] : Test [field] : String | +| Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | semmle.label | fluentNoop(...) [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(...) [Reverse] : Test [field] : String | semmle.label | fluentNoop(...) [Reverse] : 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(...) [Reverse] : Test [field] : String | semmle.label | identity(...) [Reverse] : Test [field] : String | +| 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(...) [Reverse] : Test [field] : String | semmle.label | fluentNoop(...) [Reverse] : 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:5 | t [post update] : Test [field] : String | semmle.label | t [post update] : Test [field] : String | +| Test.java:56:5:56:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | semmle.label | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | | 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:5 | t [post update] : Test [field] : String | semmle.label | t [post update] : Test [field] : String | +| Test.java:62:5:62:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | semmle.label | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | | 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:28 | modelledIdentity(...) [post update] : Test [field] : String | semmle.label | modelledIdentity(...) [post update] : Test [field] : String | +| Test.java:68:5:68:51 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | semmle.label | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | | 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:20:12:20:28 | fluentNoop(...) [Reverse] : 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:20:12:20:15 | this [Reverse] : Test [field] : String | +| Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : 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:20:12:20:15 | this [Reverse] : Test [field] : String | +| Test.java:44:5:44:18 | fluentNoop(...) [Reverse] : 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(...) [Reverse] : 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(...) [Reverse] : 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:56:5:56:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:19:15:19:34 | parameter this [Reverse] : Test [field] : String | Test.java:56:5:56:5 | t [post update] : Test [field] : String | +| Test.java:56:40:56:47 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Reverse] : 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:62:5:62:28 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:19:15:19:34 | parameter this [Reverse] : Test [field] : String | Test.java:62:5:62:5 | t [post update] : Test [field] : String | +| Test.java:62:63:62:70 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Reverse] : 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:68:5:68:51 | indirectlyFluentNoop(...) [Reverse] : Test [field] : String | Test.java:20:12:20:28 | fluentNoop(...) [Reverse] : Test [field] : String | Test.java:19:15:19:34 | parameter this [Reverse] : Test [field] : String | Test.java:68:5:68:28 | modelledIdentity(...) [post update] : Test [field] : String | +| Test.java:68:86:68:93 | source(...) : String | Test.java:23:25:23:32 | x : String | Test.java:23:15:23:23 | parameter this [Reverse] : 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 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 7a2f78089778..0c19f346a541 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..f043f86ed2b4 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) ) @@ -561,11 +582,11 @@ module MakeImpl Lang> { cc = true or // flow out of a callable - fwdFlowOut(_, node, false) and + fwdFlowOut(any(NormalDataFlowCall call), node, false) and cc = false or // flow through a callable - exists(DataFlowCall call | + exists(DataFlowCallEx call | fwdFlowOutFromArg(call, node) and fwdFlowIsEntered(call, cc) ) @@ -573,23 +594,25 @@ 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 + private predicate fwdFlowIn(DataFlowCallEx call, NodeEx arg, Cc cc, ParamNodeEx p) { + exists(DataFlowCall underlyingCall | underlyingCall = call.projectCall() | + // 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 + ) ) } @@ -597,15 +620,15 @@ module MakeImpl Lang> { * Holds if an argument to `call` is reached in the flow covered by `fwdFlow`. */ pragma[nomagic] - private predicate fwdFlowIsEntered(DataFlowCall call, Cc cc) { fwdFlowIn(call, _, cc, _) } + private predicate fwdFlowIsEntered(DataFlowCallEx call, Cc cc) { fwdFlowIn(call, _, cc, _) } pragma[nomagic] private predicate fwdFlowInReducedViableImplInSomeCallContext( - DataFlowCall call, NodeEx arg, ParamNodeEx p, DataFlowCallable target + DataFlowCallEx call, NodeEx arg, ParamNodeEx p, DataFlowCallable target ) { fwdFlow(arg, true) and viableParamArgEx(call, p, arg) and - CachedCallContextSensitivity::reducedViableImplInCallContext(call, _, _) and + CachedCallContextSensitivity::reducedViableImplInCallContext(call.projectCall(), _, _) and target = p.getEnclosingCallable() and not fullBarrier(p) } @@ -617,9 +640,9 @@ module MakeImpl Lang> { */ pragma[nomagic] private DataFlowCallable viableImplInSomeFwdFlowCallContextExt(DataFlowCall call) { - exists(DataFlowCall ctx | + exists(DataFlowCallEx ctx | fwdFlowIsEntered(ctx, _) and - result = viableImplInCallContextExt(call, ctx) + result = viableImplInCallContextExt(call, ctx.projectCall()) ) } @@ -666,7 +689,7 @@ module MakeImpl Lang> { // inline to reduce the number of iterations pragma[inline] - private predicate fwdFlowOut(DataFlowCall call, NodeEx out, Cc cc) { + private predicate fwdFlowOut(DataFlowCallEx call, NodeEx out, Cc cc) { exists(ReturnPosition pos | fwdFlowReturnPosition(pos, cc) and viableReturnPosOutEx(call, pos, out) and @@ -675,7 +698,7 @@ module MakeImpl Lang> { } pragma[nomagic] - private predicate fwdFlowOutFromArg(DataFlowCall call, NodeEx out) { + private predicate fwdFlowOutFromArg(DataFlowCallEx call, NodeEx out) { fwdFlowOut(call, out, 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) } /** @@ -750,7 +781,7 @@ module MakeImpl Lang> { ) or // flow into a callable - revFlowIn(_, node, false) and + revFlowIn(any(NormalDataFlowCall call), node, false) and toReturn = false or // flow out of a callable @@ -761,7 +792,7 @@ module MakeImpl Lang> { ) or // flow through a callable - exists(DataFlowCall call | + exists(DataFlowCallEx call | revFlowInToReturn(call, node) and revFlowIsReturned(call, toReturn) ) @@ -801,7 +832,7 @@ module MakeImpl Lang> { pragma[nomagic] additional predicate viableReturnPosOutNodeCandFwd1( - DataFlowCall call, ReturnPosition pos, NodeEx out + DataFlowCallEx call, ReturnPosition pos, NodeEx out ) { fwdFlowReturnPosition(pos, _) and viableReturnPosOutEx(call, pos, out) @@ -817,14 +848,14 @@ module MakeImpl Lang> { pragma[nomagic] additional predicate viableParamArgNodeCandFwd1( - DataFlowCall call, ParamNodeEx p, ArgNodeEx arg + DataFlowCallEx call, ParamNodeEx p, ArgNodeEx arg ) { fwdFlowIn(call, arg, _, p) } // inline to reduce the number of iterations pragma[inline] - private predicate revFlowIn(DataFlowCall call, ArgNodeEx arg, boolean toReturn) { + private predicate revFlowIn(DataFlowCallEx call, ArgNodeEx arg, boolean toReturn) { exists(ParamNodeEx p | revFlow(p, toReturn) and viableParamArgNodeCandFwd1(call, p, arg) @@ -832,7 +863,7 @@ module MakeImpl Lang> { } pragma[nomagic] - private predicate revFlowInToReturn(DataFlowCall call, ArgNodeEx arg) { + private predicate revFlowInToReturn(DataFlowCallEx call, ArgNodeEx arg) { revFlowIn(call, arg, true) } @@ -842,7 +873,7 @@ module MakeImpl Lang> { * reaching an argument of `call`. */ pragma[nomagic] - private predicate revFlowIsReturned(DataFlowCall call, boolean toReturn) { + private predicate revFlowIsReturned(DataFlowCallEx call, boolean toReturn) { exists(NodeEx out | revFlow(out, toReturn) and fwdFlowOutFromArg(call, out) @@ -946,7 +977,7 @@ module MakeImpl Lang> { } pragma[nomagic] - predicate callMayFlowThroughRev(DataFlowCall call) { + predicate callMayFlowThroughRev(DataFlowCallEx call) { exists(ArgNodeEx arg, boolean toReturn | revFlow(arg, toReturn) and revFlowInToReturn(call, arg) and @@ -955,7 +986,7 @@ module MakeImpl Lang> { } predicate callEdgeArgParam( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ) { exists(boolean allowsFieldFlow | flowIntoCallNodeCand1(call, arg, p, allowsFieldFlow) and @@ -969,18 +1000,18 @@ module MakeImpl Lang> { } predicate callEdgeReturn( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow ) { flowOutOfCallNodeCand1(call, ret, kind, out, allowsFieldFlow) and c = ret.getEnclosingCallable() } - predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + predicate relevantCallEdgeIn(DataFlowCallEx call, DataFlowCallable c) { callEdgeArgParam(call, c, _, _, _) } - predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + predicate relevantCallEdgeOut(DataFlowCallEx call, DataFlowCallable c) { callEdgeReturn(call, c, _, _, _, _) } @@ -1002,7 +1033,7 @@ module MakeImpl Lang> { states = count(FlowState state | revFlowState(state)) and tuples = count(NodeEx n, boolean b | revFlow(n, b)) and calledges = - count(DataFlowCall call, DataFlowCallable c | + count(DataFlowCallEx call, DataFlowCallable c | callEdgeArgParam(call, c, _, _, _) or callEdgeReturn(call, c, _, _, _, _) ) @@ -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 = "" @@ -1080,7 +1111,9 @@ module MakeImpl Lang> { } pragma[nomagic] - private predicate viableReturnPosOutNodeCand1(DataFlowCall call, ReturnPosition pos, NodeEx out) { + private predicate viableReturnPosOutNodeCand1( + DataFlowCallEx call, ReturnPosition pos, NodeEx out + ) { Stage1::revFlow(out) and Stage1::viableReturnPosOutNodeCandFwd1(call, pos, out) } @@ -1092,7 +1125,7 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate flowOutOfCallNodeCand1( - DataFlowCall call, RetNodeEx ret, ReturnKindExt kind, NodeEx out + DataFlowCallEx call, RetNodeEx ret, ReturnKindExt kind, NodeEx out ) { exists(ReturnPosition pos | viableReturnPosOutNodeCand1(call, pos, out) and @@ -1105,7 +1138,7 @@ module MakeImpl Lang> { } pragma[nomagic] - private predicate viableParamArgNodeCand1(DataFlowCall call, ParamNodeEx p, ArgNodeEx arg) { + private predicate viableParamArgNodeCand1(DataFlowCallEx call, ParamNodeEx p, ArgNodeEx arg) { Stage1::viableParamArgNodeCandFwd1(call, p, arg) and Stage1::revFlow(arg) } @@ -1115,7 +1148,7 @@ module MakeImpl Lang> { * path from a source to a sink. */ pragma[nomagic] - private predicate flowIntoCallNodeCand1(DataFlowCall call, ArgNodeEx arg, ParamNodeEx p) { + private predicate flowIntoCallNodeCand1(DataFlowCallEx call, ArgNodeEx arg, ParamNodeEx p) { viableParamArgNodeCand1(call, p, arg) and Stage1::revFlow(p) and not outBarrier(arg) and @@ -1135,19 +1168,16 @@ module MakeImpl Lang> { pragma[nomagic] private predicate returnCallEdge1( - DataFlowCallable c, SndLevelScopeOption scope, DataFlowCall call, NodeEx out + DataFlowCallable c, SndLevelScopeOption scope, DataFlowCallEx call, NodeEx out ) { exists(RetNodeEx ret | flowOutOfCallNodeCand1(call, ret, _, out) and - c = ret.getEnclosingCallable() - | + c = ret.getEnclosingCallable() and scope = getSecondLevelScopeEx(ret) - or - ret = TParamReturnNode(_, scope) ) } - private int simpleDispatchFanoutOnReturn(DataFlowCall call, NodeEx out) { + private int simpleDispatchFanoutOnReturn(DataFlowCallEx call, NodeEx out) { result = strictcount(DataFlowCallable c, SndLevelScopeOption scope | returnCallEdge1(c, scope, call, out) @@ -1156,28 +1186,29 @@ module MakeImpl Lang> { pragma[nomagic] private predicate returnCallEdgeInCtx1( - DataFlowCallable c, SndLevelScopeOption scope, DataFlowCall call, NodeEx out, DataFlowCall ctx + DataFlowCallable c, SndLevelScopeOption scope, DataFlowCallEx call, NodeEx out, + DataFlowCall ctx ) { returnCallEdge1(c, scope, call, out) and - c = viableImplInCallContextExt(call, ctx) + c = viableImplInCallContextExt(call.projectCall(), ctx) } - private int ctxDispatchFanoutOnReturn(NodeEx out, DataFlowCall ctx) { - exists(DataFlowCall call, DataFlowCallable c | + private int ctxDispatchFanoutOnReturn(NodeEx out, DataFlowCallEx ctx) { + exists(DataFlowCallEx call, DataFlowCallable c | simpleDispatchFanoutOnReturn(call, out) > 1 and not Stage1::revFlow(out, false) and call.getEnclosingCallable() = c and returnCallEdge1(c, _, ctx, _) and - mayBenefitFromCallContextExt(call, _) and + mayBenefitFromCallContextExt(call.projectCall(), _) and result = count(DataFlowCallable tgt, SndLevelScopeOption scope | - returnCallEdgeInCtx1(tgt, scope, call, out, ctx) + returnCallEdgeInCtx1(tgt, scope, call, out, ctx.projectCall()) ) ) } private int ctxDispatchFanoutOnReturn(NodeEx out) { - result = max(DataFlowCall ctx | | ctxDispatchFanoutOnReturn(out, ctx)) + result = max(DataFlowCallEx ctx | | ctxDispatchFanoutOnReturn(out, ctx)) } private int dispatchFanoutOnReturn(NodeEx out) { @@ -1228,7 +1259,7 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate flowOutOfCallNodeCand1( - DataFlowCall call, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow + DataFlowCallEx call, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow ) { flowOutOfCallNodeCand1(call, ret, kind, out) and exists(int j | @@ -1243,7 +1274,7 @@ module MakeImpl Lang> { } pragma[nomagic] - private predicate allowsFieldFlowThrough(DataFlowCall call, DataFlowCallable c) { + private predicate allowsFieldFlowThrough(DataFlowCallEx call, DataFlowCallable c) { exists(RetNodeEx ret | flowOutOfCallNodeCand1(call, ret, _, _, true) and c = ret.getEnclosingCallable() @@ -1257,7 +1288,7 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate flowIntoCallNodeCand1( - DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow + DataFlowCallEx call, ArgNodeEx arg, ParamNodeEx p, boolean allowsFieldFlow ) { flowIntoCallNodeCand1(call, arg, p) and exists(int b, int j | @@ -1283,7 +1314,7 @@ module MakeImpl Lang> { bindingset[node, state] predicate revFlow(NodeEx node, FlowState state, Ap ap); - predicate callMayFlowThroughRev(DataFlowCall call); + predicate callMayFlowThroughRev(DataFlowCallEx call); predicate parameterMayFlowThrough(ParamNodeEx p, boolean emptyAp); @@ -1296,17 +1327,17 @@ module MakeImpl Lang> { predicate readStepCand(NodeEx n1, Content c, NodeEx n2); predicate callEdgeArgParam( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ); predicate callEdgeReturn( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow ); - predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c); + predicate relevantCallEdgeIn(DataFlowCallEx call, DataFlowCallable c); - predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c); + predicate relevantCallEdgeOut(DataFlowCallEx call, DataFlowCallable c); } private module MkStage { @@ -1383,14 +1414,14 @@ module MakeImpl Lang> { predicate viableImplNotCallContextReduced(DataFlowCall call, Cc ctx); bindingset[call, c] - CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c); + CcCall getCallContextCall(DataFlowCallEx call, DataFlowCallable c); DataFlowCall viableImplCallContextReducedReverse(DataFlowCallable c, CcNoCall ctx); predicate viableImplNotCallContextReducedReverse(CcNoCall ctx); bindingset[call, c] - CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call); + CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCallEx call); bindingset[cc] LocalCc getLocalCc(Cc cc); @@ -1440,7 +1471,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate flowThroughOutOfCall( - DataFlowCall call, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow + DataFlowCallEx call, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow ) { exists(ReturnKindExt kind | PrevStage::callEdgeReturn(call, _, ret, kind, out, allowsFieldFlow) and @@ -1567,7 +1598,7 @@ module MakeImpl Lang> { apa = getApprox(ap) or // flow through a callable - exists(DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow | + exists(DataFlowCallEx call, RetNodeEx ret, boolean allowsFieldFlow | fwdFlowThrough(call, cc, state, summaryCtx, t, ap, stored, ret) and flowThroughOutOfCall(call, ret, node, allowsFieldFlow) and apa = getApprox(ap) and @@ -1742,7 +1773,7 @@ module MakeImpl Lang> { private module FwdFlowIn { pragma[nomagic] private predicate callEdgeArgParamRestricted( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ) { PrevStage::callEdgeArgParam(call, c, arg, p, emptyAp) and if @@ -1759,16 +1790,16 @@ module MakeImpl Lang> { pragma[nomagic] private DataFlowCallable viableImplCallContextReducedRestricted( - DataFlowCall call, CcCall ctx + DataFlowCallEx call, CcCall ctx ) { - result = viableImplCallContextReduced(call, ctx) and + result = viableImplCallContextReduced(call.projectCall(), ctx) and callEdgeArgParamRestricted(call, result, _, _, _) } bindingset[call, ctx] pragma[inline_late] private DataFlowCallable viableImplCallContextReducedInlineLate( - DataFlowCall call, CcCall ctx + DataFlowCallEx call, CcCall ctx ) { result = viableImplCallContextReducedRestricted(call, ctx) } @@ -1776,7 +1807,7 @@ module MakeImpl Lang> { bindingset[arg, ctx] pragma[inline_late] private DataFlowCallable viableImplCallContextReducedInlineLate( - DataFlowCall call, ArgNodeEx arg, CcCall ctx + DataFlowCallEx call, ArgNodeEx arg, CcCall ctx ) { callEdgeArgParamRestricted(call, _, arg, _, _) and instanceofCcCall(ctx) and @@ -1786,7 +1817,7 @@ module MakeImpl Lang> { bindingset[call] pragma[inline_late] private predicate callEdgeArgParamRestrictedInlineLate( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ) { callEdgeArgParamRestricted(call, c, arg, p, emptyAp) } @@ -1801,16 +1832,16 @@ module MakeImpl Lang> { bindingset[arg, outercc] pragma[inline_late] private predicate viableImplArgNotCallContextReduced( - DataFlowCall call, ArgNodeEx arg, Cc outercc + DataFlowCallEx call, ArgNodeEx arg, Cc outercc ) { callEdgeArgParamRestricted(call, _, arg, _, _) and instanceofCc(outercc) and - viableImplNotCallContextReducedInlineLate(call, outercc) + viableImplNotCallContextReducedInlineLate(call.projectCall(), outercc) } pragma[inline] private predicate fwdFlowInCand( - DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, + DataFlowCallEx call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, boolean emptyAp, TypOption stored, boolean cc ) { @@ -1827,7 +1858,7 @@ module MakeImpl Lang> { pragma[inline] private predicate fwdFlowInCandTypeFlowDisabled( - DataFlowCall call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, + DataFlowCallEx call, ArgNodeEx arg, FlowState state, Cc outercc, DataFlowCallable inner, ParamNodeEx p, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, boolean cc ) { not enableTypeFlow() and @@ -1836,7 +1867,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInCandTypeFlowEnabled( - DataFlowCall call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, + DataFlowCallEx call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, boolean emptyAp, boolean cc ) { enableTypeFlow() and @@ -1845,26 +1876,26 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowInValidEdgeTypeFlowDisabled( - DataFlowCall call, DataFlowCallable inner, CcCall innercc, boolean cc + DataFlowCallEx call, DataFlowCallable inner, CcCall innercc, boolean cc ) { not enableTypeFlow() and - FwdTypeFlow::typeFlowValidEdgeIn(call, inner, cc) and + FwdTypeFlow::typeFlowValidEdgeIn(call.projectCall(), inner, cc) and innercc = getCallContextCall(call, inner) } pragma[nomagic] private predicate fwdFlowInValidEdgeTypeFlowEnabled( - DataFlowCall call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, + DataFlowCallEx call, ArgNodeEx arg, Cc outercc, DataFlowCallable inner, ParamNodeEx p, CcCall innercc, boolean emptyAp, boolean cc ) { fwdFlowInCandTypeFlowEnabled(call, arg, outercc, inner, p, emptyAp, cc) and - FwdTypeFlow::typeFlowValidEdgeIn(call, inner, cc) and + FwdTypeFlow::typeFlowValidEdgeIn(call.projectCall(), inner, cc) and innercc = getCallContextCall(call, inner) } pragma[inline] predicate fwdFlowIn( - DataFlowCall call, ArgNodeEx arg, DataFlowCallable inner, ParamNodeEx p, + DataFlowCallEx call, ArgNodeEx arg, DataFlowCallable inner, ParamNodeEx p, FlowState state, Cc outercc, CcCall innercc, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, boolean cc ) { @@ -1889,7 +1920,8 @@ module MakeImpl Lang> { private predicate fwdFlowInNoFlowThrough( ParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, TypOption stored ) { - FwdFlowInNoThrough::fwdFlowIn(_, _, _, p, state, _, innercc, _, t, ap, stored, _) + FwdFlowInNoThrough::fwdFlowIn(any(NormalDataFlowCall call), _, _, p, state, _, innercc, _, + t, ap, stored, _) } private predicate top() { any() } @@ -1904,16 +1936,16 @@ module MakeImpl Lang> { } pragma[nomagic] - private DataFlowCall viableImplCallContextReducedReverseRestricted( + private DataFlowCallEx viableImplCallContextReducedReverseRestricted( DataFlowCallable c, CcNoCall ctx ) { - result = viableImplCallContextReducedReverse(c, ctx) and + result.projectCall() = viableImplCallContextReducedReverse(c, ctx) and PrevStage::callEdgeReturn(result, c, _, _, _, _) } bindingset[c, ctx] pragma[inline_late] - private DataFlowCall viableImplCallContextReducedReverseInlineLate( + private DataFlowCallEx viableImplCallContextReducedReverseInlineLate( DataFlowCallable c, CcNoCall ctx ) { result = viableImplCallContextReducedReverseRestricted(c, ctx) @@ -1922,7 +1954,8 @@ module MakeImpl Lang> { bindingset[call] pragma[inline_late] private predicate flowOutOfCallInlineLate( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, NodeEx out, + boolean allowsFieldFlow ) { PrevStage::callEdgeReturn(call, c, ret, _, out, allowsFieldFlow) } @@ -1931,8 +1964,8 @@ module MakeImpl Lang> { pragma[inline_late] pragma[noopt] private predicate flowOutOfCallNotCallContextReduced( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, NodeEx out, boolean allowsFieldFlow, - CcNoCall innercc + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, NodeEx out, + boolean allowsFieldFlow, CcNoCall innercc ) { viableImplNotCallContextReducedReverse(innercc) and PrevStage::callEdgeReturn(call, c, ret, _, out, allowsFieldFlow) @@ -1950,8 +1983,8 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowOutCand( - DataFlowCall call, RetNodeEx ret, CcNoCall innercc, DataFlowCallable inner, NodeEx out, - boolean allowsFieldFlow + NormalDataFlowCall call, RetNodeEx ret, CcNoCall innercc, DataFlowCallable inner, + NodeEx out, boolean allowsFieldFlow ) { fwdFlowIntoRet(ret, _, innercc, _, _, _, _) and inner = ret.getEnclosingCallable() and @@ -1965,18 +1998,18 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowOutValidEdge( - DataFlowCall call, RetNodeEx ret, CcNoCall innercc, DataFlowCallable inner, NodeEx out, - CcNoCall outercc, boolean allowsFieldFlow + NormalDataFlowCall call, RetNodeEx ret, CcNoCall innercc, DataFlowCallable inner, + NodeEx out, CcNoCall outercc, boolean allowsFieldFlow ) { fwdFlowOutCand(call, ret, innercc, inner, out, allowsFieldFlow) and - FwdTypeFlow::typeFlowValidEdgeOut(call, inner) and + FwdTypeFlow::typeFlowValidEdgeOut(call.projectCall(), inner) and outercc = getCallContextReturn(inner, call) } pragma[inline] private predicate fwdFlowOut( - DataFlowCall call, DataFlowCallable inner, NodeEx out, FlowState state, CcNoCall outercc, - SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored + NormalDataFlowCall call, DataFlowCallable inner, NodeEx out, FlowState state, + CcNoCall outercc, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored ) { exists(RetNodeEx ret, CcNoCall innercc, boolean allowsFieldFlow | fwdFlowIntoRet(ret, state, innercc, summaryCtx, t, ap, stored) and @@ -1989,18 +2022,24 @@ 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(injectCall(call), c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(injectCall(call), c) + } pragma[nomagic] private predicate dataFlowTakenCallEdgeIn0( DataFlowCall call, DataFlowCallable c, ParamNodeEx p, FlowState state, CcCall innercc, Typ t, Ap ap, TypOption stored, boolean cc ) { - FwdFlowInNoThrough::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, stored, cc) + FwdFlowInNoThrough::fwdFlowIn(injectCall(call), _, c, p, state, _, innercc, _, t, ap, + stored, cc) or - FwdFlowInThrough::fwdFlowIn(call, _, c, p, state, _, innercc, _, t, ap, stored, cc) + FwdFlowInThrough::fwdFlowIn(injectCall(call), _, c, p, state, _, innercc, _, t, ap, + stored, cc) } pragma[nomagic] @@ -2024,7 +2063,7 @@ module MakeImpl Lang> { DataFlowCall call, DataFlowCallable c, NodeEx node, FlowState state, Cc cc, Typ t, Ap ap, TypOption stored ) { - fwdFlowOut(call, c, node, state, cc, _, t, ap, stored) + fwdFlowOut(injectCall(call), c, node, state, cc, _, t, ap, stored) } pragma[nomagic] @@ -2062,10 +2101,10 @@ module MakeImpl Lang> { private module FwdTypeFlow = TypeFlow; private predicate flowIntoCallTaken( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ) { PrevStage::callEdgeArgParam(call, c, arg, p, emptyAp) and - FwdTypeFlowInput::dataFlowTakenCallEdgeIn(call, c, _) + FwdTypeFlowInput::dataFlowTakenCallEdgeIn(call.projectCall(), c, _) } pragma[nomagic] @@ -2087,7 +2126,7 @@ module MakeImpl Lang> { pragma[inline] private predicate fwdFlowThrough0( - DataFlowCall call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, + DataFlowCallEx call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, RetNodeEx ret, SummaryCtxSome innerSummaryCtx ) { @@ -2097,7 +2136,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThrough( - DataFlowCall call, Cc cc, FlowState state, SummaryCtx summaryCtx, Typ t, Ap ap, + DataFlowCallEx call, Cc cc, FlowState state, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, RetNodeEx ret ) { fwdFlowThrough0(call, _, cc, state, _, summaryCtx, t, ap, stored, ret, _) @@ -2105,7 +2144,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowIsEntered0( - DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, + DataFlowCallEx call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, ParamNodeEx p, FlowState state, Typ t, Ap ap, TypOption stored ) { FwdFlowInThrough::fwdFlowIn(call, arg, _, p, state, cc, innerCc, summaryCtx, t, ap, @@ -2118,7 +2157,7 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate fwdFlowIsEntered( - DataFlowCall call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, + DataFlowCallEx call, ArgNodeEx arg, Cc cc, CcCall innerCc, SummaryCtx summaryCtx, SummaryCtxSome innerSummaryCtx ) { exists(ParamNodeEx p, FlowState state, Typ t, Ap ap, TypOption stored | @@ -2141,7 +2180,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate returnFlowsThrough0( - DataFlowCall call, FlowState state, CcCall ccc, Ap ap, RetNodeEx ret, + DataFlowCallEx call, FlowState state, CcCall ccc, Ap ap, RetNodeEx ret, SummaryCtxSome innerSummaryCtx ) { fwdFlowThrough0(call, _, _, state, ccc, _, _, ap, _, ret, innerSummaryCtx) @@ -2152,7 +2191,7 @@ module MakeImpl Lang> { RetNodeEx ret, ReturnPosition pos, FlowState state, CcCall ccc, ParamNodeEx p, Typ argT, Ap argAp, TypOption argStored, Ap ap ) { - exists(DataFlowCall call, boolean allowsFieldFlow | + exists(DataFlowCallEx call, boolean allowsFieldFlow | returnFlowsThrough0(call, state, ccc, ap, ret, TSummaryCtxSome(p, _, argT, argAp, argStored)) and flowThroughOutOfCall(call, ret, _, allowsFieldFlow) and @@ -2163,7 +2202,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate flowThroughIntoCall( - DataFlowCall call, ArgNodeEx arg, ParamNodeEx p, Ap argAp, Ap ap + DataFlowCallEx call, ArgNodeEx arg, ParamNodeEx p, Ap argAp, Ap ap ) { exists(Typ argT, TypOption argStored | returnFlowsThrough(_, _, _, _, pragma[only_bind_into](p), pragma[only_bind_into](argT), @@ -2176,7 +2215,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate flowIntoCallAp( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, Ap ap + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, Ap ap ) { flowIntoCallTaken(call, c, arg, p, isNil(ap)) and fwdFlow(arg, _, _, _, _, ap, _) @@ -2184,7 +2223,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate flowOutOfCallAp( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, ReturnPosition pos, NodeEx out, + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, ReturnPosition pos, NodeEx out, Ap ap, boolean allowsFieldFlow ) { PrevStage::callEdgeReturn(call, c, ret, _, out, allowsFieldFlow) and @@ -2193,8 +2232,8 @@ module MakeImpl Lang> { (if allowsFieldFlow = false then ap instanceof ApNil else any()) and ( // both directions are needed for flow-through - FwdTypeFlowInput::dataFlowTakenCallEdgeIn(call, c, _) or - FwdTypeFlowInput::dataFlowTakenCallEdgeOut(call, c) + FwdTypeFlowInput::dataFlowTakenCallEdgeIn(call.projectCall(), c, _) or + FwdTypeFlowInput::dataFlowTakenCallEdgeOut(call.projectCall(), c) ) } @@ -2256,25 +2295,27 @@ module MakeImpl Lang> { ) or // flow into a callable - revFlowIn(_, _, node, state, ap) and + revFlowIn(any(NormalDataFlowCall call), _, node, state, ap) and returnCtx = TReturnCtxNone() and returnAp = apNone() or // flow through a callable - exists(DataFlowCall call, ParamNodeEx p, Ap innerReturnAp | + exists(DataFlowCallEx call, ParamNodeEx p, Ap innerReturnAp | revFlowThrough(call, returnCtx, p, state, _, returnAp, ap, innerReturnAp) and flowThroughIntoCall(call, node, p, ap, innerReturnAp) ) or // flow out of a callable - exists(ReturnPosition pos | - revFlowOut(_, node, pos, state, _, _, _, ap) and + exists(DataFlowCallEx 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() + call instanceof NormalDataFlowCall and + returnCtx = TReturnCtxNoFlowThrough() and + returnAp = apNone() ) ) } @@ -2324,24 +2365,24 @@ module MakeImpl Lang> { predicate enableTypeFlow = Param::enableTypeFlow/0; predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { - flowOutOfCallAp(call, c, _, _, _, _, _) + flowOutOfCallAp(injectCall(call), c, _, _, _, _, _) } predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { - flowIntoCallAp(call, c, _, _, _) + flowIntoCallAp(injectCall(call), c, _, _, _) } pragma[nomagic] predicate dataFlowTakenCallEdgeIn(DataFlowCall call, DataFlowCallable c, boolean cc) { exists(RetNodeEx ret | - revFlowOut(call, ret, _, _, _, cc, _, _) and + revFlowOut(injectCall(call), ret, _, _, _, cc, _, _) and c = ret.getEnclosingCallable() ) } pragma[nomagic] predicate dataFlowTakenCallEdgeOut(DataFlowCall call, DataFlowCallable c) { - revFlowIn(call, c, _, _, _) + revFlowIn(injectCall(call), c, _, _, _) } predicate dataFlowNonCallEntry(DataFlowCallable c, boolean cc) { @@ -2364,24 +2405,24 @@ module MakeImpl Lang> { pragma[nomagic] private predicate flowIntoCallApValid( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, Ap ap + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, Ap ap ) { flowIntoCallAp(call, c, arg, p, ap) and - RevTypeFlow::typeFlowValidEdgeOut(call, c) + RevTypeFlow::typeFlowValidEdgeOut(call.projectCall(), c) } pragma[nomagic] private predicate flowOutOfCallApValid( - DataFlowCall call, RetNodeEx ret, ReturnPosition pos, NodeEx out, Ap ap, boolean cc + DataFlowCallEx call, RetNodeEx ret, ReturnPosition pos, NodeEx out, Ap ap, boolean cc ) { exists(DataFlowCallable c | flowOutOfCallAp(call, c, ret, pos, out, ap, _) and - RevTypeFlow::typeFlowValidEdgeIn(call, c, cc) + RevTypeFlow::typeFlowValidEdgeIn(call.projectCall(), c, cc) ) } private predicate revFlowIn( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, FlowState state, Ap ap + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, FlowState state, Ap ap ) { exists(ParamNodeEx p | revFlow(p, state, TReturnCtxNone(), _, ap) and @@ -2391,7 +2432,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate revFlowOut( - DataFlowCall call, RetNodeEx ret, ReturnPosition pos, FlowState state, + DataFlowCallEx call, RetNodeEx ret, ReturnPosition pos, FlowState state, ReturnCtx returnCtx, boolean cc, ApOption returnAp, Ap ap ) { exists(NodeEx out | @@ -2413,7 +2454,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate revFlowThrough( - DataFlowCall call, ReturnCtx returnCtx, ParamNodeEx p, FlowState state, + DataFlowCallEx call, ReturnCtx returnCtx, ParamNodeEx p, FlowState state, ReturnPosition pos, ApOption returnAp, Ap ap, Ap innerReturnAp ) { revFlowParamToReturn(p, state, pos, innerReturnAp, ap) and @@ -2427,12 +2468,12 @@ module MakeImpl Lang> { */ pragma[nomagic] private predicate revFlowIsReturned( - DataFlowCall call, ReturnCtx returnCtx, ApOption returnAp, ReturnPosition pos, Ap ap + DataFlowCallEx call, ReturnCtx returnCtx, ApOption returnAp, ReturnPosition pos, Ap ap ) { exists(RetNodeEx ret, FlowState state, CcCall ccc | revFlowOut(call, ret, pos, state, returnCtx, _, returnAp, ap) and returnFlowsThrough(ret, pos, state, ccc, _, _, _, _, ap) and - matchesCall(ccc, call) + matchesCall(ccc, call.projectCall()) ) } @@ -2545,8 +2586,8 @@ module MakeImpl Lang> { pragma[nomagic] private predicate revFlowThroughArg( - DataFlowCall call, ArgNodeEx arg, FlowState state, ReturnCtx returnCtx, ApOption returnAp, - Ap ap + DataFlowCallEx call, ArgNodeEx arg, FlowState state, ReturnCtx returnCtx, + ApOption returnAp, Ap ap ) { exists(ParamNodeEx p, Ap innerReturnAp | revFlowThrough(call, returnCtx, p, state, _, returnAp, ap, innerReturnAp) and @@ -2555,7 +2596,7 @@ module MakeImpl Lang> { } pragma[nomagic] - predicate callMayFlowThroughRev(DataFlowCall call) { + predicate callMayFlowThroughRev(DataFlowCallEx call) { exists(ArgNodeEx arg, FlowState state, ReturnCtx returnCtx, ApOption returnAp, Ap ap | revFlow(arg, state, returnCtx, returnAp, ap) and revFlowThroughArg(call, arg, state, returnCtx, returnAp, ap) @@ -2563,7 +2604,7 @@ module MakeImpl Lang> { } predicate callEdgeArgParam( - DataFlowCall call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp + DataFlowCallEx call, DataFlowCallable c, ArgNodeEx arg, ParamNodeEx p, boolean emptyAp ) { exists(FlowState state, Ap ap | flowIntoCallAp(call, c, arg, p, ap) and @@ -2572,13 +2613,13 @@ module MakeImpl Lang> { emptyAp = isNil(ap) | // both directions are needed for flow-through - RevTypeFlowInput::dataFlowTakenCallEdgeIn(call, c, _) or - RevTypeFlowInput::dataFlowTakenCallEdgeOut(call, c) + RevTypeFlowInput::dataFlowTakenCallEdgeIn(call.projectCall(), c, _) or + RevTypeFlowInput::dataFlowTakenCallEdgeOut(call.projectCall(), c) ) } predicate callEdgeReturn( - DataFlowCall call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, + DataFlowCallEx call, DataFlowCallable c, RetNodeEx ret, ReturnKindExt kind, NodeEx out, boolean allowsFieldFlow ) { exists(FlowState state, ReturnPosition pos, Ap ap | @@ -2586,15 +2627,15 @@ module MakeImpl Lang> { revFlow(ret, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and revFlow(out, pragma[only_bind_into](state), pragma[only_bind_into](ap)) and kind = pos.getKind() and - RevTypeFlowInput::dataFlowTakenCallEdgeIn(call, c, _) + RevTypeFlowInput::dataFlowTakenCallEdgeIn(call.projectCall(), c, _) ) } - predicate relevantCallEdgeIn(DataFlowCall call, DataFlowCallable c) { + predicate relevantCallEdgeIn(DataFlowCallEx call, DataFlowCallable c) { callEdgeArgParam(call, c, _, _, _) } - predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + predicate relevantCallEdgeOut(DataFlowCallEx call, DataFlowCallable c) { callEdgeReturn(call, c, _, _, _, _) } @@ -2622,8 +2663,9 @@ module MakeImpl Lang> { FlowCheckNode() { revFlow(this, _, _) and ( - flowCheckNode(this) or - Config::neverSkip(this.asNode()) + flowCheckNode(this) + or + Config::neverSkip(this.asNodeOrReverse()) ) } } @@ -2979,8 +3021,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, _) ) } @@ -3124,7 +3174,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThroughStep0( - DataFlowCall call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, + DataFlowCallEx call, ArgNodeEx arg, Cc cc, FlowState state, CcCall ccc, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, RetNodeEx ret, SummaryCtxSome innerSummaryCtx ) { @@ -3153,7 +3203,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate fwdFlowThroughStep1( - PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, DataFlowCall call, Cc cc, + PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, DataFlowCallEx call, Cc cc, FlowState state, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored, RetNodeEx ret ) { exists( @@ -3176,7 +3226,7 @@ module MakeImpl Lang> { PathNodeImpl pn1, PathNodeImpl pn2, PathNodeImpl pn3, NodeEx node, Cc cc, FlowState state, SummaryCtx summaryCtx, Typ t, Ap ap, TypOption stored ) { - exists(DataFlowCall call, RetNodeEx ret, boolean allowsFieldFlow | + exists(DataFlowCallEx call, RetNodeEx ret, boolean allowsFieldFlow | fwdFlowThroughStep1(pn1, pn2, pn3, call, cc, state, summaryCtx, t, ap, stored, ret) and flowThroughOutOfCall(call, ret, node, allowsFieldFlow) and not inBarrier(node, state) and @@ -3330,7 +3380,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 +3526,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. */ @@ -3663,14 +3716,14 @@ module MakeImpl Lang> { predicate viableImplNotCallContextReduced(DataFlowCall call, Cc ctx) { any() } bindingset[call, c] - CcCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { any() } + CcCall getCallContextCall(DataFlowCallEx call, DataFlowCallable c) { any() } DataFlowCall viableImplCallContextReducedReverse(DataFlowCallable c, CcNoCall ctx) { none() } predicate viableImplNotCallContextReducedReverse(CcNoCall ctx) { any() } bindingset[call, c] - CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call) { any() } + CcNoCall getCallContextReturn(DataFlowCallable c, DataFlowCallEx call) { any() } } private module Stage2Param implements MkStage::StageParam { @@ -3793,9 +3846,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(injectCall(call), c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(injectCall(call), c) + } predicate reducedViableImplInCallContextCand = CachedCallContextSensitivity::reducedViableImplInCallContext/3; @@ -4193,9 +4250,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(injectCall(call), c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(injectCall(call), c) + } predicate reducedViableImplInCallContextCand = Stage3Param::reducedViableImplInCallContext/3; @@ -4389,9 +4450,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(injectCall(call), c) + } - predicate relevantCallEdgeOut = PrevStage::relevantCallEdgeOut/2; + predicate relevantCallEdgeOut(DataFlowCall call, DataFlowCallable c) { + PrevStage::relevantCallEdgeOut(injectCall(call), c) + } predicate reducedViableImplInCallContextCand = Stage5Param::reducedViableImplInCallContext/3; @@ -4813,7 +4878,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 +4916,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 +4986,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 = @@ -5387,14 +5461,14 @@ module MakeImpl Lang> { pragma[nomagic] private predicate partialPathOutOfCallable1( - PartialPathNodeFwd mid, DataFlowCall call, ReturnKindExt kind, FlowState state, + PartialPathNodeFwd mid, DataFlowCallEx call, ReturnKindExt kind, FlowState state, CallContext cc, DataFlowType t, PartialAccessPath ap ) { exists(ReturnPosition pos, DataFlowCallable c, CallContext innercc | partialPathOutOfCallable0(mid, pos, state, innercc, t, ap) and c = pos.getCallable() and kind = pos.getKind() and - CachedCallContextSensitivity::resolveReturn(innercc, c, call) and + CachedCallContextSensitivity::resolveReturn(innercc, c, call.projectCall()) and cc = CachedCallContextSensitivity::getCallContextReturn(c, call) ) } @@ -5403,7 +5477,7 @@ module MakeImpl Lang> { PartialPathNodeFwd mid, NodeEx out, FlowState state, CallContext cc, DataFlowType t, PartialAccessPath ap ) { - exists(ReturnKindExt kind, DataFlowCall call | + exists(ReturnKindExt kind, DataFlowCallEx call | partialPathOutOfCallable1(mid, call, kind, state, cc, t, ap) and out = kind.getAnOutNodeEx(call) ) @@ -5411,35 +5485,35 @@ module MakeImpl Lang> { pragma[noinline] private predicate partialPathIntoArg( - PartialPathNodeFwd mid, ParameterPosition ppos, FlowState state, CallContext cc, - DataFlowCall call, DataFlowType t, PartialAccessPath ap + PartialPathNodeFwd mid, ParameterPositionEx ppos, FlowState state, CallContext cc, + DataFlowCallEx 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, - CallContext outercc, DataFlowCall call, DataFlowType t, PartialAccessPath ap + PartialPathNodeFwd mid, DataFlowCallable callable, ParameterPositionEx pos, FlowState state, + CallContext outercc, DataFlowCallEx call, DataFlowType t, PartialAccessPath ap ) { partialPathIntoArg(mid, pos, state, outercc, call, t, ap) and - callable = CachedCallContextSensitivity::resolveCall(call, outercc) + callable = CachedCallContextSensitivity::resolveCall(call.projectCall(), outercc) } private predicate partialPathIntoCallable( PartialPathNodeFwd mid, ParamNodeEx p, FlowState state, CallContext outercc, CallContextCall innercc, TSummaryCtx1 sc1, TSummaryCtx2 sc2, TSummaryCtx3 sc3, - TSummaryCtx4 sc4, DataFlowCall call, DataFlowType t, PartialAccessPath ap + TSummaryCtx4 sc4, DataFlowCallEx 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 @@ -5472,7 +5546,7 @@ module MakeImpl Lang> { pragma[noinline] private predicate partialPathThroughCallable0( - DataFlowCall call, PartialPathNodeFwd mid, ReturnKindExt kind, FlowState state, + DataFlowCallEx call, PartialPathNodeFwd mid, ReturnKindExt kind, FlowState state, CallContext cc, DataFlowType t, PartialAccessPath ap ) { exists( @@ -5488,7 +5562,7 @@ module MakeImpl Lang> { PartialPathNodeFwd mid, NodeEx out, FlowState state, CallContext cc, DataFlowType t, PartialAccessPath ap ) { - exists(DataFlowCall call, ReturnKindExt kind | + exists(DataFlowCallEx call, ReturnKindExt kind | partialPathThroughCallable0(call, mid, kind, state, cc, t, ap) and out = kind.getAnOutNodeEx(call) ) @@ -5659,7 +5733,7 @@ module MakeImpl Lang> { pragma[nomagic] private predicate revPartialPathIntoReturn( PartialPathNodeRev mid, ReturnPosition pos, FlowState state, TRevSummaryCtx1Some sc1, - TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3, DataFlowCall call, PartialAccessPath ap + TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3, DataFlowCallEx call, PartialAccessPath ap ) { exists(NodeEx out | mid.getNodeEx() = out and @@ -5674,10 +5748,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 +5759,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, + DataFlowCallEx call, PartialPathNodeRev mid, ArgumentPositionEx pos, FlowState state, PartialAccessPath ap ) { exists(TRevSummaryCtx1Some sc1, TRevSummaryCtx2Some sc2, TRevSummaryCtx3Some sc3 | @@ -5704,7 +5778,7 @@ module MakeImpl Lang> { private predicate revPartialPathThroughCallable( PartialPathNodeRev mid, ArgNodeEx node, FlowState state, PartialAccessPath ap ) { - exists(DataFlowCall call, ArgumentPosition pos | + exists(DataFlowCallEx 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..44b96b91f756 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,425 @@ 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, TNormalDataFlowCall(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 +511,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 +550,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(DataFlowCallEx 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. @@ -757,10 +1136,11 @@ module MakeImplCommon Lang> { /** Gets the call context when returning from `c` to `call`. */ bindingset[call, c] - CallContextNoCall getCallContextReturn(DataFlowCallable c, DataFlowCall call) { - result = Input2::getSpecificCallContextReturn(c, call) + CallContextNoCall getCallContextReturn(DataFlowCallable c, DataFlowCallEx call) { + result = Input2::getSpecificCallContextReturn(c, call.projectCall()) or - not exists(Input2::getSpecificCallContextReturn(c, call)) and result = TAnyCallContext() + not exists(Input2::getSpecificCallContextReturn(c, call.projectCall())) and + result = TAnyCallContext() } /** @@ -787,9 +1167,9 @@ module MakeImplCommon Lang> { LocalCc getLocalCc(CallContext cc) { any() } bindingset[call, c] - CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { - if recordDataFlowCallSiteDispatch(call, c) - then result = Input2::getSpecificCallContextCall(call, c) + CallContextCall getCallContextCall(DataFlowCallEx call, DataFlowCallable c) { + if recordDataFlowCallSiteDispatch(call.projectCall(), c) + then result = Input2::getSpecificCallContextCall(call.projectCall(), c) else result = TSomeCall() } } @@ -815,9 +1195,9 @@ module MakeImplCommon Lang> { LocalCc getLocalCc(CallContext cc) { result = getLocalCallContext(cc) } bindingset[call, c] - CallContextCall getCallContextCall(DataFlowCall call, DataFlowCallable c) { - if recordDataFlowCallSite(call, c) - then result = Input2::getSpecificCallContextCall(call, c) + CallContextCall getCallContextCall(DataFlowCallEx call, DataFlowCallable c) { + if recordDataFlowCallSite(call.projectCall(), c) + then result = Input2::getSpecificCallContextCall(call.projectCall(), c) else result = TSomeCall() } } @@ -856,24 +1236,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(boolean allowFwdFlowOut) { this = TNodeReverse(result, allowFwdFlowOut) } + + 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 +1270,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 +1290,87 @@ module MakeImplCommon Lang> { CastingNodeEx() { castingNodeEx(this) } } - final class ArgNodeEx extends NodeEx { - private DataFlowCall call_; - private ArgumentPosition pos_; + abstract class DataFlowCallEx extends TDataFlowCallEx { + abstract DataFlowCall projectCall(); + + DataFlowCallable getEnclosingCallable() { result = this.projectCall().getEnclosingCallable() } + + abstract string toString(); + + Location getLocation() { result = this.projectCall().getLocation() } + } + + DataFlowCallEx injectCall(DataFlowCall c) { result.projectCall() = c } + + final class NormalDataFlowCall extends DataFlowCallEx, TNormalDataFlowCall { + private DataFlowCall call; + + NormalDataFlowCall() { this = TNormalDataFlowCall(call) } + + override DataFlowCall projectCall() { result = call } + + override string toString() { result = call.toString() } + } + + 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(DataFlowCallEx call, ArgumentPositionEx pos); + + DataFlowCallEx getCall() { this.argumentOf(result, _) } + } + + final class NormalArgNodeEx extends ArgNodeEx { + private NormalDataFlowCall call_; + private ArgumentPositionEx pos_; - ArgNodeEx() { this.asNode().(ArgNode).argumentOf(call_, pos_) } + NormalArgNodeEx() { + this.asNode().(ArgNode).argumentOf(call_.projectCall(), pos_.asArgumentPosition()) + } - predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { + override predicate argumentOf(DataFlowCallEx 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 +1388,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,36 +1403,248 @@ module MakeImplCommon Lang> { not exists(getSecondLevelScope(n)) } - cached - private module Cached { + /** + * todo + */ + private 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) { + p = node + or + // local flow + exists(Node mid | + parameterValueFlow(p, mid) and + simpleLocalFlowStep(mid, node, _) and + validParameterAliasStep(mid, node) + ) + or + // store + none() and + exists(Node mid | + parameterValueFlow(p, mid) and + Lang::storeStep(mid, _, node) + ) + or + // read + exists(Node mid | + parameterValueFlow(p, mid) and + Lang::readStep(mid, _, node) + ) + or + // flow through + exists(ArgNode arg | + parameterValueFlowArg(p, arg) and + argumentValueFlowsThrough(arg, node) + ) } - cached - predicate nodeEnclosingCallable(Node n, DataFlowCallable c) { c = nodeGetEnclosingCallable(n) } + pragma[nomagic] + private predicate parameterValueFlowArg(ParamNode p, ArgNode arg) { parameterValueFlow(p, arg) } - cached - predicate callEnclosingCallable(DataFlowCall call, DataFlowCallable c) { - c = call.getEnclosingCallable() + pragma[nomagic] + private predicate parameterValueFlowReturn(ParamNode p, ReturnKind kind) { + exists(ReturnNode ret | + parameterValueFlow(p, ret) and + kind = ret.getKind() + ) } - cached - predicate nodeDataFlowType(Node n, DataFlowType t) { t = getNodeType(n) } - - 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) + ) + } + + // predicate cand(ParamNode p, Node n) { + // parameterValueFlowCand(p, n) and + // ( + // parameterValueFlowReturnCand(p, _) + // or + // parameterValueFlowsToPreUpdateCand(p, _) + // ) + // } + /** + * 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(false) = 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, boolean allowFwdFlowOut | + node1.asNodeReverse(pragma[only_bind_into](allowFwdFlowOut)) = n1 and + isFlowThroughLocalStep(n2, n1, model) and + validParameterAliasStep(n2, n1) + | + allowFwdFlowOut = false and + node2.asNodeReverse(pragma[only_bind_into](allowFwdFlowOut)) = n2 + or + allowFwdFlowOut = true and + node2.asNode().(PostUpdateNode).getPreUpdateNode() = n2 + ) + or + node1.asNode().(PostUpdateNode).getPreUpdateNode() = node2.asNodeReverse(true) and + model = "" + } + + predicate storeStep(NodeEx node1, Content c, NodeEx node2) { + exists(ContentSet cs | c = cs.getAStoreContent() | + exists(Node n1, Node n2, boolean allowFwdFlowOut | + n1 = pragma[only_bind_into](node1.asNodeReverse(allowFwdFlowOut)) and + n2 = pragma[only_bind_into](node2.asNodeReverse(allowFwdFlowOut)) 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 + exists(boolean allowFwdFlowOut | + Lang::storeStep(pragma[only_bind_into](node2.asNodeReverse(allowFwdFlowOut)), c, + pragma[only_bind_into](node1.asNodeReverse(allowFwdFlowOut))) + ) + } + + final class ReverseDataFlowCall extends DataFlowCallEx, TReverseDataFlowCall { + private DataFlowCall call; + private boolean allowFwdFlowOut; + + ReverseDataFlowCall() { this = TReverseDataFlowCall(call, allowFwdFlowOut) } + + override DataFlowCall projectCall() { result = call } + + override string toString() { + exists(string s | + s = call.toString() and + if allowFwdFlowOut = true + then result = s + " [Reverse]" + else result = s + " [Reverse, no out flow]" + ) + } + } + + final class ReverseArgNodeEx extends ArgNodeEx { + private ReverseFlow::ReverseDataFlowCall call_; + private ArgumentPositionEx pos_; + + ReverseArgNodeEx() { + exists(DataFlowCall c, boolean allowFwdFlowOut | + call_ = TReverseDataFlowCall(c, allowFwdFlowOut) and + pragma[only_bind_into](this.asNodeReverse(allowFwdFlowOut)) = + getAnOutNode(c, pos_.asReturnKind().(ValueReturnKind).getKind()) + ) + } + + override predicate argumentOf(DataFlowCallEx call, ArgumentPositionEx pos) { + call = call_ and + pos = pos_ + } + } + + final class ReverseParamNodeEx extends ParamNodeEx, TNodeReverse { + private DataFlowCallable c_; + private ParameterPositionEx pos_; + + ReverseParamNodeEx() { + exists(ReturnPosition pos | + pos = getValueReturnPosition(this.asNodeReverse(false)) and + c_ = pos.getCallable() and + pos_.asReturnKind() = pos.getKind() + ) + } + + override predicate isParameterOf(DataFlowCallable c, ParameterPositionEx pos) { + c = c_ and pos = pos_ + } + } + } + + 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 TDataFlowCallEx = + TNormalDataFlowCall(DataFlowCall call) or + TReverseDataFlowCall(DataFlowCall call, Boolean allowFwdFlowOut) + + 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) { @@ -1008,10 +1662,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 +1678,64 @@ module MakeImplCommon Lang> { cached predicate hiddenNode(NodeEx n) { - nodeIsHidden([n.asNode(), n.asParamReturnNode()]) + nodeIsHidden(n.asNodeOrReverse()) or n instanceof TNodeImplicitRead } cached - OutNodeEx getAnOutNodeEx(DataFlowCall call, ReturnKindExt k) { - result.asNode() = getAnOutNodeExt(call, k) + 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(DataFlowCallEx call, ReturnKindExt k) { + exists(DataFlowCall c | + c = call.(NormalDataFlowCall).projectCall() and + result.asNode() = getAnOutNode(c, k.(ValueReturnKind).getKind()) + or + exists(ArgNode arg | + arg.argumentOf(c, k.(ParamUpdateReturnKind).getAMatchingArgumentPosition()) + | + call = TReverseDataFlowCall(c, false) and + result.asNodeReverse(_) = arg + or + ( + call = TReverseDataFlowCall(c, true) or + c = call.(NormalDataFlowCall).projectCall() + ) 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) { @@ -1124,483 +1798,183 @@ 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) - ) + * 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) } - 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(DataFlowCallEx call, ParamNodeEx p, ArgNodeEx arg) { + // viableParamArg(call, p.asNode(), arg.asNode()) + // or + exists(ParameterPositionEx ppos, DataFlowCall underlyingCall | + underlyingCall = call.projectCall() 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(DataFlowCallEx call, ReturnPosition pos, OutNodeEx out) { + exists(ReturnKindExt kind | + pos = viableReturnPos(call.projectCall(), kind) and + out = kind.getAnOutNodeEx(call) //and + // call.toString().matches("%GetBox1%") + ) } cached @@ -1609,25 +1983,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,44 +2011,24 @@ 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 - predicate allowParameterReturnInSelfEx(ParamNodeEx p) { allowParameterReturnInSelf(p.asNode()) } + predicate allowParameterReturnInSelfEx(ParamNodeEx p) { + allowParameterReturnInSelf(p.asNodeOrReverse()) + } cached predicate paramMustFlow(ParamNode p, ArgNode arg) { localMustFlowStep+(p, arg) } @@ -1735,11 +2082,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 +2092,7 @@ module MakeImplCommon Lang> { TReturnPosition0(DataFlowCallable c, ReturnKindExt kind) { hasValueReturnKindIn(_, kind, c) or - hasParamReturnKindIn(_, _, kind, c) + hasParamReturnKindIn(_, kind, c) } cached @@ -1759,9 +2104,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,8 +2161,14 @@ 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, Boolean allowFwdFlowOut) { + ( + allowFwdFlowOut = false and + ReverseFlow::parameterValueFlow(_, n) + or + allowFwdFlowOut = true and + n = any(PostUpdateNode p).getPreUpdateNode() + ) } /** @@ -1828,26 +2179,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 +2713,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 @@ -2391,7 +2723,7 @@ module MakeImplCommon Lang> { abstract string toString(); /** Gets a node corresponding to data flow out of `call`. */ - final OutNodeEx getAnOutNodeEx(DataFlowCall call) { result = getAnOutNodeEx(call, this) } + final OutNodeEx getAnOutNodeEx(DataFlowCallEx call) { result = getAnOutNodeEx(call, this) } } class ValueReturnKind extends ReturnKindExt, TValueReturn { 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. |